LinkedIn to Google Sheets, jobs tracked and summarized
Job hunting on LinkedIn gets messy fast. You open ten tabs, save a few posts “for later,” copy details into a spreadsheet, then realize you forgot where you saw the best one.
Recruiters feel it when they’re monitoring roles for a client. Marketing leads notice it when they’re quietly testing the market. And founders doing their own hiring research run into the same problem. This LinkedIn job tracking automation gives you one clean Google Sheet that stays updated, with AI summaries you can actually scan.
This workflow pulls LinkedIn job posts from an RSS search, grabs the full description, summarizes the key points with Gemini, and writes everything into Google Sheets. You’ll see what it does, what you need, and how to adapt it to your process.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: LinkedIn to Google Sheets, jobs tracked and summarized
flowchart LR
subgraph sg0["When clicking ‘Execute workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Execute workf..", pos: "b", h: 48 }
n1@{ icon: "mdi:robot", form: "rounded", label: "AI Agent", pos: "b", h: 48 }
n2@{ icon: "mdi:brain", form: "rounded", label: "Google Gemini Chat Model", pos: "b", h: 48 }
n3@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop for Job Posts", pos: "b", h: 48 }
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/html.dark.svg' width='40' height='40' /></div><br/>Extract HTML"]
n6["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Pre-clean Before AI"]
n7@{ icon: "mdi:cog", form: "rounded", label: "Read RSS Feed.", pos: "b", h: 48 }
n8["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Scrape Job HTML."]
n9["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/code.svg' width='40' height='40' /></div><br/>Parse Job Details."]
n10@{ icon: "mdi:database", form: "rounded", label: "Update Google Sheet.", pos: "b", h: 48 }
n1 --> n10
n5 --> n9
n7 --> n4
n8 --> n5
n4 --> n8
n9 --> n6
n6 --> n1
n2 -.-> n1
n3 -.-> n1
n0 --> n7
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n1,n3 ai
class n2 aiModel
class n10 database
class n8 api
class n6,n9 code
classDef customIcon fill:none,stroke:none
class n5,n6,n8,n9 customIcon
The Problem: LinkedIn Job Tracking Turns Into Tab Chaos
LinkedIn is great at showing you opportunities, and terrible at helping you manage them. A “quick search” turns into a half-hour rabbit hole, and by the end you’ve got a mental blur of titles, companies, and roles that all sound the same. Then there’s the real time sink: opening each job, scrolling to find the responsibilities, copying the link, noting the location, and trying to remember why it looked promising in the first place. Do this every day for a week and you’re not “job searching,” you’re doing admin work.
It adds up fast. Here’s where it breaks down.
- You end up re-reading the same long job descriptions because you didn’t capture the key points the first time.
- Manual copy-paste into a sheet is slow, and small mistakes (wrong link, wrong company) ruin your follow-up later.
- There’s no consistent way to compare roles, so you waste time deciding what to apply to next.
- New posts slip by because “checking LinkedIn” is not a reliable system.
The Solution: LinkedIn RSS → AI Summary → Google Sheets
This workflow turns your LinkedIn job search into a living pipeline. You start with a LinkedIn search that exposes an RSS feed (for example, a keyword plus location). When you run the workflow in n8n, it reads the newest items from that feed, then processes each job post one at a time so nothing gets skipped. For each entry, it fetches the full job page, pulls out the useful text, and cleans it up so the AI isn’t working with junk. Then Gemini (through an AI extraction agent) generates a structured summary that highlights responsibilities and benefits in plain language. Finally, n8n writes a new row to Google Sheets or updates an existing one, which means your tracker stays current instead of duplicating everything.
The workflow begins with a manual trigger so you can run it on demand (or schedule it later). In the middle, it fetches the job page HTML, extracts the description, normalizes the text, and asks Gemini for a clean summary. It ends by updating your Google Sheet with job details plus the AI output, ready for filtering and next steps.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you review about 20 new roles a week from one LinkedIn search. Manually, you might spend roughly 5 minutes per post opening it, copying the basics, and skimming for the “real” requirements, which is about 2 hours weekly (and it’s easy to lose track). With this workflow, you run the trigger once, wait a few minutes while it fetches pages and generates summaries, and your Google Sheet is updated. You still choose what to apply to, but the collection and summarizing work is basically gone.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for the job tracker database.
- LinkedIn RSS feed URL to supply job posts automatically.
- Google Gemini API access (get it from Google AI Studio / Google Cloud console).
Skill level: Intermediate. You’ll connect accounts, paste an RSS URL, and may tweak a prompt or two for better summaries.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
You run it when you want. The workflow starts with a manual trigger, which is perfect when you’re testing your search or only want to pull jobs once a day.
LinkedIn job posts are collected from RSS. n8n reads the RSS feed for your LinkedIn search and loads the newest job entries. Then it loops through them in batches so each one gets processed cleanly.
The full job page is fetched and cleaned up. Using HTTP Request, it opens the job posting page, pulls an HTML snippet, and decodes the payload to get usable text. A normalization step trims noise so the AI sees the important bits.
Gemini produces a structured summary, then Google Sheets is updated. The AI extraction agent creates a concise summary of responsibilities and benefits, and n8n writes a new row or updates an existing one in your Sheet.
You can easily modify the RSS search and the AI prompt to fit your niche, your location, or the fields you care about most. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
Set up the workflow to start manually so you can control when RSS items are pulled and processed.
- Add the Manual Start Trigger node as the starting point of the workflow.
- Connect Manual Start Trigger to Retrieve RSS Items to begin the extraction flow.
- Optionally keep Flowpast Branding as a reference note in the canvas (no configuration required).
Step 2: Connect Google Sheets
Prepare the Google Sheets connection used to store extracted job data.
- Select the Update Sheet Records node.
- Credential Required: Connect your googleSheetsOAuth2Api credentials.
- Set Operation to
appendOrUpdate. - Set Sheet Name to
{{ $json.sheetName }}. - Set Document ID to
{{ $json.googleSheetsId }}. - Set Matching Columns to
Job Description Linkso rows update by link.
Step 3: Set Up RSS Intake and Job Page Fetching
Pull job entries from the RSS feed and fetch each job page’s structured data.
- In Retrieve RSS Items, set URL to
{{ $json.rssFeedUrl }}. - Connect Retrieve RSS Items to Iterate Job Entries to process items one by one.
- Connect Iterate Job Entries to Fetch Job Page (this node runs on the next batch output).
- In Fetch Job Page, set URL to
={{ $json.link }}. - Connect Fetch Job Page to Pull HTML Snippet.
- In Pull HTML Snippet, set Operation to
extractHtmlContent, and set the extraction CSS Selector toscript[type="application/ld+json"]with the keybody.
rssFeedUrl and each RSS item includes link, otherwise the feed read and page fetch steps will return empty data.Step 4: Configure Data Decoding and Normalization
Decode the structured JSON payload from the job page and normalize the description text.
- Connect Pull HTML Snippet to Decode Job Payload.
- In Decode Job Payload, set JavaScript Code to
return items.map(item => { const raw = item.json.body; const jobData = JSON.parse(raw); return { json: { title: jobData.title, company: jobData.hiringOrganization?.name, description: jobData.description, location: jobData.jobLocation?.address?.addressLocality, country: jobData.jobLocation?.address?.addressCountry, employmentType: jobData.employmentType, validThrough: jobData.validThrough } }; });. - Connect Decode Job Payload to Normalize Text Data.
- In Normalize Text Data, set JavaScript Code to
return items.map(item => { let desc = item.json.description || ""; desc = desc.replace(/<[^>]+>/g, ' '); desc = desc.replace(/\s+/g, ' ').trim(); return { json: { title: item.json.title, company: item.json.hiringOrganization?.name, location: item.json.jobLocation?.address?.addressLocality, country: item.json.jobLocation?.address?.addressCountry, description: desc, employmentType: item.json.employmentType, validThrough: item.json.validThrough } }; });.
script[type="application/ld+json"], Decode Job Payload will fail to parse the payload.Step 5: Set Up the AI Extraction Agent
Use the LLM to extract structured job details like benefits and a summarized description.
- Connect Normalize Text Data to AI Extraction Agent.
- In AI Extraction Agent, set Prompt Type to
defineand set Text to=You're an intelligent bot capable of pulling out data from a job listing site. Here is the job Description : {{ $json.description }} output the data in JSON format, using the following structure: { "benefits": "", //separate by commas "location_remote": "", "job_description": "" //make it 200 characters or less } simplify the output output content as json. - Ensure Has Output Parser is enabled in AI Extraction Agent.
- Connect Gemini Chat Model to AI Extraction Agent as the language model.
- Connect Structured Result Parser to AI Extraction Agent as the output parser, and set JSON Schema Example to
{ "benefits": "", "location_state": "", "location_remote": "", "job_description": "" }.
Step 6: Configure the Output Mapping
Map the extracted and normalized fields into your Google Sheet.
- Connect AI Extraction Agent to Update Sheet Records.
- In Update Sheet Records → Columns, map fields exactly as follows:
- Set Date to
={{ $('Retrieve RSS Items').item.json.pubDate }}. - Set Title to
={{ $('Normalize Text Data').item.json.title }}. - Set Benefits to
={{ $json.output.benefits }}. - Set Company Name to
={{ $('Decode Job Payload').item.json.company }}. - Set Job Description to
={{ $json.output.job_description }}. - Set Job Description Link to
={{ $('Retrieve RSS Items').item.json.link }}.
Step 7: Test and Activate Your Workflow
Run a test execution to validate that RSS items are parsed, AI output is generated, and rows are appended or updated in Google Sheets.
- Click Execute Workflow on Manual Start Trigger to run a manual test.
- Confirm that Retrieve RSS Items returns items and that Pull HTML Snippet extracts the JSON-LD payload.
- Verify that AI Extraction Agent outputs structured fields matching the schema and that Update Sheet Records writes rows to your sheet.
- When results look correct, toggle the workflow to Active for production use.
Common Gotchas
- Google Sheets credentials can expire or need specific permissions. If things break, check the n8n credential connection status and the target spreadsheet sharing settings first.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
About 30 minutes if you already have your RSS feed and Google access ready.
No. You’ll mostly connect accounts and paste in your LinkedIn RSS feed URL. The only “technical” part is minor prompt tweaking if you want cleaner summaries.
Yes. n8n has a free self-hosted option and a free trial on n8n Cloud. Cloud plans start at $20/month for higher volume. You’ll also need to factor in Google Gemini API usage, which is usually small for a weekly job scan.
Two options: n8n Cloud (managed, easiest setup) or self-hosting on a VPS. For self-hosting, Hostinger VPS is affordable and handles n8n well. Self-hosting gives you unlimited executions but requires basic server management.
Yes, and it’s one of the best parts. You can change what gets written to Google Sheets by editing the fields mapped in the “Update Sheet Records” step, then adjust the AI extraction prompt to return exactly those fields (like salary mentions, required tools, seniority, or remote policy). If you’d rather store everything in Notion or a CRM, swap the Google Sheets write step for that destination and keep the same extraction logic. Common tweaks include adding a “fit score,” tagging roles by keyword, and pulling only jobs posted in the last day.
Usually it’s expired Google authorization in n8n, or the account you connected doesn’t have access to the target spreadsheet. Reconnect the Google Sheets credential, confirm the spreadsheet is shared with that Google account, and double-check you’re writing to the correct sheet tab. If it fails only sometimes, you may also be hitting Google API limits during larger batch runs.
Plenty for a normal job search. On n8n Cloud, your monthly execution limit depends on your plan, but most people can process dozens of job posts per run without issues. If you self-host, there’s no execution cap, and your practical limit is your server plus how long LinkedIn pages take to fetch.
Often, yes, because this isn’t just “RSS in, row out.” You’re fetching full pages, cleaning text, looping through items, and producing structured AI output, which is the kind of multi-step logic that gets expensive or awkward in simpler tools. n8n also lets you self-host, so you can run it as often as you want without paying per tiny action. That said, if you only want a basic RSS-to-Sheets append with no scraping and no summarization, Zapier or Make can be quicker to set up. If you’re unsure, Talk to an automation expert and we’ll point you to the simplest option.
Once this is running, your job search stops living in browser tabs and starts living in a system. The workflow handles the repetitive stuff, so you can focus on decisions and outreach.
Need Help Setting This Up?
Our automation experts can build and customize this workflow for your specific needs. Free 15-minute consultation—no commitment required.