Alfalfa

Track new LinkedIn jobs in Google Sheets every day

A saved search is useful until you need a shared table. This workflow runs a public LinkedIn jobs search each morning, reads the results through Apify and updates a Google Sheet. One job ID gets one row even if the job appears on several days.

Updated September 2026. No LinkedIn account is used. The workflow does not send email or apply for jobs.

Download the n8n workflow Open the scraper

What goes into the sheet

Every row has the job ID, title, company, location, posting date, application type, applicant count when shown, salary when published, job URL, company URL and the last time the job was seen. The workflow leaves out recruiter names and full descriptions; the complete records remain in your Apify dataset.

Set it up

  1. Import the downloaded JSON into n8n. Add your Apify credential to both Apify nodes. The workflow already points to alfalfa/linkedin-jobs-scraper.
  2. Create a Google Sheet. Put the exact headers below in its first row. In Upsert jobs by ID, connect Google Sheets, paste your Sheet URL and select the tab.
  3. In Search settings, replace data engineer and Berlin with the role and place you want. Set the posting window and the maximum jobs per run.
  4. Run the workflow once manually, inspect the Sheet, then activate the daily schedule. Its default is 07:00 in your n8n workflow timezone.
id,title,company,location,postedAt,applyType,applicants,salary,jobUrl,companyUrl,lastSeenAt

The default postedWithinHours is 36. A daily run therefore overlaps the previous one by 12 hours. That helps catch jobs posted near the run time; the Sheet matches by id so they update existing rows. It does not stop Apify from charging again for a job returned on a later run.

What it costs

The LinkedIn Jobs Scraper costs $0.30 per 1,000 jobs on Apify Free, including job details, platform usage and proxies, with no start fee. If each of 30 daily runs returns 100 jobs, the Actor charge is about $0.90 for the month, including repeated jobs. Your n8n and Google Sheets accounts have their own terms. Set a maximum run charge in Apify if you want a hard spending cap.

Make the search useful

The Actor accepts postedWithinHours, plain companyNames, title words to include or exclude, Easy Apply and under-10-applicant filters. Add these to the Scrape public jobs node's JSON input when you need a narrower feed. Filters on title are applied before a row is saved, so filtered jobs are not charged. A broad LinkedIn search stops at about 1,000 results; split it by place, company or time to cover more.

For a one-time CSV or a direct API call, use the LinkedIn jobs scraper guide. You do not need n8n for a single export.

Public data, honest limits. Salary appears only when the employer publishes it. LinkedIn often hides the external apply URL from signed-out visitors, so use the job URL in the sheet. Some classic search filters are no longer honoured for public results.