Apify to Google Sheets, LinkedIn jobs neatly tracked
Job hunting (or competitor hiring research) gets messy fast. You run the same LinkedIn search again, scroll “new” results you already saw, and then lose the best roles because you didn’t save them anywhere.
This Apify job tracking automation hits job seekers first, honestly. But recruiters and agency owners doing client research feel it too. The outcome is simple: fresh LinkedIn job listings land in a Google Sheet and a clean Gmail digest shows up daily, without you babysitting searches.
You’ll see exactly how this workflow pulls listings, formats them, stores them, and emails you a daily summary you can act on.
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Apify to Google Sheets, LinkedIn jobs neatly tracked
flowchart LR
subgraph sg0["Every day at noon... Flow"]
direction LR
n0@{ icon: "mdi:message-outline", form: "rounded", label: "Send a message", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Get LinkedIn jobs", pos: "b", h: 48 }
n2["<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/>Set job data & HTML"]
n3@{ icon: "mdi:cog", form: "rounded", label: "Combine items into one list", pos: "b", h: 48 }
n4@{ icon: "mdi:play-circle", form: "rounded", label: "Every day at noon...", pos: "b", h: 48 }
n5@{ icon: "mdi:database", form: "rounded", label: "Add jobs to Google Sheet", pos: "b", h: 48 }
n1 --> n2
n1 --> n5
n2 --> n3
n4 --> n1
n3 --> n0
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 n4 trigger
class n1 decision
class n5 database
class n2 code
classDef customIcon fill:none,stroke:none
class n2 customIcon
Why This Matters: Keeping Job Searches Consistent
LinkedIn job searches are easy to start and weirdly hard to maintain. Day one you’re motivated, day four you’re busy, and by week two you’re asking yourself which filters you used last time and why the results look different. Then comes the real tax: opening 20 tabs, copying links into a doc, trying to remember which ones you already applied to, and losing track of timing because “posted 3 days ago” becomes “posted 10 days ago” in a blink. The mental overhead is worse than the clicking. You can’t improve a process you don’t track.
It adds up fast. Here’s where it breaks down in real life.
- Repeating the same search daily burns about 20 minutes, and you still miss listings that show up at odd hours.
- Manual saving creates inconsistent notes, so filtering later becomes guesswork instead of a clean shortlist.
- If you don’t log results somewhere central, you can’t tell which keywords and locations are actually working.
- Emailing yourself links helps for a day, but it turns into an unsearchable inbox pile by the end of the month.
What You’ll Build: Daily LinkedIn Jobs → Sheet + Email Digest
This workflow runs on a schedule every day at noon. It starts by asking Apify to run a LinkedIn Jobs scraper (the workflow is set up for “LinkedIn Jobs Scraper – No Cookies”), using your keywords, location, and a job limit you control. Once the listings come back, n8n formats the data into two useful outputs at the same time: structured rows for a Google Sheet, and a readable HTML block for an email digest. It also handles common “missing info” cases, like salary not being listed or the role not clearly marked as remote versus on-site, so your email doesn’t look broken. Finally, everything is compiled into one list and sent via Gmail with the current date in the subject line, which makes it easy to search later.
The workflow begins with the noon scheduler. Apify pulls fresh job listings based on your saved search rules, then the workflow formats those listings for humans and for spreadsheets. Google Sheets becomes your system of record, and Gmail becomes your daily “what’s new” alert.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Let’s say you check LinkedIn jobs once per day with a set of filters and you usually review around 30 listings. Manually, that’s about 30 minutes between searching, opening roles, and saving the ones that look promising. With this workflow, you spend maybe 2 minutes scanning the Gmail digest, then another 5 minutes filtering or tagging inside Google Sheets. So you get roughly 20 minutes back per day, and the big win is that you don’t “lose” roles because you forgot to log them.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Apify for running the LinkedIn Jobs scraper actor.
- Google Sheets to store and filter job listings.
- Gmail API credentials (get them from Google Cloud Console).
Skill level: Intermediate. You’ll connect accounts, paste a JSON input, and adjust a few fields like keywords, location, and sheet headers.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
The workflow triggers every day at noon. That consistent timing matters because you stop relying on motivation to “remember to check.” n8n runs it automatically on the schedule trigger.
Apify retrieves LinkedIn job listings based on your search input. You control the keywords (including AND/NOT operators), the location, and the limit, while keeping “date_posted” and sorting set to favor the newest roles.
The job data gets formatted for two destinations. A code step prepares clean HTML for the email and handles missing fields like salary or work arrangement, so the digest still reads well. In parallel, the Google Sheets step appends each listing to your sheet, which becomes your history.
A Gmail digest lands in your inbox. The workflow aggregates the formatted items, then Gmail sends a single email with a date-stamped subject line so you can search “Jobs Digest” later and instantly pull up past days.
You can easily modify the Apify search JSON to track different roles or locations based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Schedule Trigger
Set the workflow to run automatically at noon every day using the scheduling trigger.
- Add and open Daily Noon Scheduler.
- Set the schedule rule to trigger at hour
12(noon) as shown in the node configuration. - Connect Daily Noon Scheduler to Retrieve LinkedIn Listings.
Step 2: Connect Apify for Job Retrieval
Configure the Apify actor to pull LinkedIn job listings based on your criteria.
- Open Retrieve LinkedIn Listings and set Operation to
Run actor and get dataset. - Set Actor to your LinkedIn jobs scraper actor ID (replace
[YOUR_ID]with your actor). - Paste the Custom Body exactly as:
{ "date_posted": "day", "keywords": "SEO manager", "limit": 10, "location": "United States", "sort": "recent" }. - Credential Required: Connect your apifyApi credentials.
Retrieve LinkedIn Listings outputs to both Format Job HTML and Append Jobs to Sheet in parallel.
Step 3: Set Up Job Formatting and Aggregation
Transform each job into HTML and compile a single list for the email report.
- Open Format Job HTML and set Mode to
runOnceForEachItem. - Paste the provided JavaScript into Code (it builds the HTML block and handles missing salary/work type).
- Connect Format Job HTML to Compile Job List.
- In Compile Job List, set Aggregate to
aggregateAllItemData.
company, job_title, job_url, location, work_type, and salary so the HTML template renders correctly.Step 4: Configure Output Destinations (Google Sheets and Gmail)
Store each job in Google Sheets and send a daily summary email.
- Open Append Jobs to Sheet and set Operation to
append. - Select your spreadsheet in Document and set Sheet Name to the Jobs tab (e.g.,
gid=0). - Map the columns exactly to these expressions:
Date ={{ $json.posted_at.toDateTime().format('dd MMM yyyy') }}
salary ={{ $json.salary ? $json.salary : "Not specified" }}
company ={{ $json.company }}
job url ={{ $json.job_url }}
location ={{ $json.location ? $json.location : "Not specified" }}
job title ={{ $json.job_title }}
remote or on-site ={{ $json.work_type ? $json.work_type : "Not specified" }} - Credential Required: Connect your googleSheetsOAuth2Api credentials.
- Open Dispatch Summary Email and set Subject to
Job summary for {{ $now.format('dd MMMM yyyy')}}. - Set Message to
<h2> Job summary for {{ $now.format('dd MMMM yyyy') }}</h2> {{ $json.data.map(item => item.html).join('<br/>') }}. - Credential Required: Connect your gmailOAuth2 credentials.
job title vs job_title), the append will fail or write blanks.Step 5: Test and Activate Your Workflow
Verify the data flows correctly through both parallel branches and then enable the schedule.
- Click Execute Workflow to run a manual test from Daily Noon Scheduler.
- Confirm that Retrieve LinkedIn Listings sends data to both Format Job HTML and Append Jobs to Sheet in parallel.
- Check Append Jobs to Sheet for new rows and verify the formatted values.
- Check your inbox to confirm Dispatch Summary Email includes the HTML list from Compile Job List.
- Toggle the workflow Active to enable daily runs at noon.
Troubleshooting Tips
- Google Sheets credentials can expire or lack file access. If rows stop appending, check the Google Sheets node credentials and confirm the target spreadsheet is shared with the connected Google account.
- If you’re using Wait nodes or external rendering, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Apify actors can return different fields over time, especially across scraper versions. If your email formatting looks off, inspect the Apify output first and update the “Format Job HTML” code to match the current field names.
Quick Answers
About 30 minutes if your Apify, Google Sheets, and Gmail credentials are ready.
No. You will mainly connect accounts and edit the Apify search JSON. The formatting step is code-based, but you can use it as-is.
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 Apify usage, which depends on the actor and how many jobs you scrape per day.
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 the whole point. You can change the keywords, location, and limit inside the “Retrieve LinkedIn Listings” Apify node, then adjust columns in the “Append Jobs to Sheet” Google Sheets node to match your headers. Common customizations include adding the full job description (if your actor returns it), storing an “Applied?” column, or changing the email HTML layout in “Format Job HTML” to match your preferred skim style.
Usually it’s expired OAuth consent or the wrong Google account connected. Reconnect Gmail in n8n and confirm the Gmail node is allowed to send email from the address you entered. Also check that the Gmail API is enabled in Google Cloud for the same project tied to your credentials.
Plenty for daily tracking. Most people scrape 20–100 jobs per run, append them to Google Sheets, and send one digest email. The real limit is your Apify actor usage and your n8n plan or server resources, not the workflow structure.
For this use case, n8n is usually a better fit because you can run scheduled scraping, do heavier formatting, and keep the logic in one place without paying extra for multi-step branching. Zapier and Make can work, but you’ll often end up juggling separate steps for scraping, formatting, and deduping, which gets expensive as volume grows. n8n also gives you a self-hosting option, so you’re not boxed in by task limits. The only real downside is setup: you’ll spend a little more time connecting credentials up front. Talk to an automation expert if you’re not sure which fits.
Once this is running, your job search stops depending on daily discipline. The workflow collects, logs, and emails the opportunities so you can focus on picking the right ones and applying well.
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.