🔓 Unlock all 10,000+ workflows & prompts free Join Newsletter →
✅ Full access unlocked — explore all 10,000 AI workflow and prompt templates Browse Templates →
Home n8n Workflow
January 22, 2026

LinkedIn + Indeed to Google Sheets, jobs compared

Lisa Granqvist Partner Workflow Automation Expert

Keeping tabs on roles across LinkedIn and Indeed sounds simple until you do it daily. Tabs multiply, job titles blur together, and you still end up copying the same details into a spreadsheet by hand.

This job scraping automation hits recruiters first, honestly, but job seekers tracking 20+ openings and ops folks doing market research feel the same drag. The outcome is straightforward: both platforms land in one Google Sheet, already formatted, so you can compare roles in minutes.

Below you’ll see exactly how the workflow pulls listings with Bright Data, waits for results, merges them, and appends a clean comparison row into your “Compare” tab.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: LinkedIn + Indeed to Google Sheets, jobs compared

The Problem: Comparing jobs across LinkedIn and Indeed is messy

Most people don’t “search once.” You search, refine, re-run, then repeat tomorrow because new postings show up overnight. Doing that across LinkedIn and Indeed turns into a weird part-time job: you open each listing, copy the company, paste the title, hunt for salary info, then try to remember which role came from which site. And even when you’re careful, you still miss postings because you got interrupted mid-copy or forgot to check one platform that day. The work is repetitive, but the consequences aren’t.

It adds up fast. Here’s where it usually breaks down.

  • Pulling the same search in two places doubles the time, so a “quick check” becomes about an hour a day.
  • Small differences in fields (location format, job type labels, salary text) make side-by-side comparison annoying.
  • Copy/paste mistakes creep in, especially for apply links, which is the one field you really can’t afford to botch.
  • If you want a history of what you saw last week, you’re relying on memory or screenshots, not actual data.

The Solution: Scrape both sites, merge, and append to one Sheet

This workflow starts with a simple form where you enter the role, city, country, and (optionally) job type. n8n formats that input so Bright Data can run two scrapes in parallel: one dataset for Indeed and one for LinkedIn. Instead of guessing when scraping is done, the workflow checks progress, waits a minute, then checks again until results are ready. Once each platform returns listings, n8n validates that records actually came back, downloads the snapshots, and merges the two streams into one unified dataset. Finally, it appends clean rows into a Google Sheet tab called “Compare,” so your comparison view stays consistent across every search.

The workflow begins when you submit the job search form. Bright Data triggers both LinkedIn and Indeed collection, then n8n polls status until each snapshot is ready. When the data is retrieved, it’s merged and pushed into Google Sheets in a standardized column layout.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you run one search every morning for “Marketing Manager” in Toronto and you collect 2 listings from LinkedIn plus 2 from Indeed (this workflow’s current limit per run). Manually, even a “fast” process is maybe 10 minutes per listing to open, skim, copy details, paste into a sheet, and grab the right apply link, so you’re at about 40 minutes per day. With this workflow: 2 minutes to submit the form, a few minutes of background scraping and waiting, then the four rows appear in your “Compare” tab automatically. You still review the roles, but the admin work mostly disappears.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Bright Data to scrape LinkedIn and Indeed datasets
  • Google Sheets to store and compare listings
  • Bright Data API key (get it from your Bright Data dashboard)

Skill level: Intermediate. You’ll connect accounts, paste an API key, and confirm the Sheet/tab mapping in n8n.

Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).

How It Works

A form submission kicks everything off. You enter the job title, city, and country, plus an optional job type like Remote or Contract. That gives the workflow a consistent “search request” every time.

Your inputs are formatted for Bright Data. n8n standardizes location and job title text, then prepares separate payloads for the Indeed dataset and the LinkedIn dataset so both can run without manual tweaking.

Two scrapes run in parallel, then n8n waits intelligently. Bright Data returns a snapshot ID for each scrape. The workflow checks progress, pauses for a minute, and repeats until the status is “ready,” which prevents hammering the API and reduces failed fetches.

Listings are downloaded, merged, and appended to Google Sheets. n8n pulls each snapshot as JSON, merges the streams into one combined set, then appends rows into your “Compare” tab with fields like job title, company, location, salary, job type, and apply link.

You can easily modify the form fields to capture extra filters (like seniority) based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Form Trigger

Set up the form that captures job search inputs and starts the workflow.

  1. Add the Job Search Form Trigger node and set Form Title to Job Finder.
  2. Define form fields with required inputs for City, Job Title, and Country.
  3. Add the optional dropdown field Job_type (Optional) with options like Full-Time, Part-Time, Remote, Contract, and Internship.
  4. Connect the trigger so that Job Search Form Trigger outputs to both Prepare Indeed API Payload and Start Indeed Scrape Request in parallel.
Tip: Ensure field labels match exactly (including spacing and capitalization), since downstream expressions reference labels like Job_type (Optional).

Step 2: Connect Google Sheets

Prepare the destination sheet to receive the merged job listings.

  1. Add the Append to Job Spreadsheet node.
  2. Credential Required: Connect your googleSheetsOAuth2Api credentials.
  3. Set Operation to append.
  4. Select the target spreadsheet in Document and the worksheet in Sheet Name (both currently set to [YOUR_ID] placeholders).
  5. Map the column values, such as Salary to {{ $json.salary_formatted }}, Location to {{ $json.discovery_input.location }}, and Job Title to {{ $json.job_title }}.
⚠️ Common Pitfall: The sheet has columns like Salary and Job-Type with trailing spaces. Ensure your Google Sheet column headers match exactly to avoid mapping errors.

Step 3: Set Up the Indeed and LinkedIn Payload Generation

Prepare structured payloads for Bright Data scraping and route them into the LinkedIn trigger.

  1. Configure Prepare Indeed API Payload with the provided JavaScript so it builds input and custom_output_fields based on form fields.
  2. Ensure the Start LinkedIn Scrape node uses the JSON body expression {{ $json["input"] ? JSON.stringify($json["input"]) : "[]" }} and {{ $json["custom_output_fields"] ? JSON.stringify($json["custom_output_fields"]) : "{}" }}.
  3. Confirm the flow: Prepare Indeed API PayloadStart LinkedIn Scrape.

Step 4: Configure the Bright Data Scrape Requests and Polling

Set up the HTTP requests and polling loops for both Indeed and LinkedIn sources.

  1. In Start Indeed Scrape Request, set URL to https://api.brightdata.com/datasets/v3/trigger and Method to POST.
  2. Set the JSON body using the provided expressions, such as {{$node["Job Search Form Trigger"].json["City"] ? $node["Job Search Form Trigger"].json["City"].trim() : ""}} and {{$node["Job Search Form Trigger"].json["Job Title"] ? $node["Job Search Form Trigger"].json["Job Title"].trim() : ""}}.
  3. In each Bright Data request node, set Header ParametersAuthorization to Bearer [CONFIGURE_YOUR_TOKEN] and replace placeholders like [YOUR_ID] in query parameters.
  4. Configure Check Indeed Scrape Status with URL https://api.brightdata.com/datasets/v3/progress/{{ $json.snapshot_id }} and route the “not ready” path through Delay One Minute back to Check Indeed Scrape Status.
  5. Configure Check LinkedIn Status with the same progress URL pattern and route the “not ready” path through Pause Before LinkedIn Check back to Check LinkedIn Status.
Tip: There are multiple httpRequest nodes (6 total). Keep the Bright Data dataset IDs and authorization tokens consistent across all of them.

Step 5: Validate, Retrieve, and Merge Job Streams

Validate the scrape readiness and record count, then retrieve snapshots and merge results.

  1. In Indeed Ready Branch, confirm the condition uses {{ $json.status }} equals ready, then route to Validate Indeed Records.
  2. In Validate Indeed Records, check {{ $json.records }} is not equal to {{ 0 }}, then route to Retrieve Indeed Snapshot.
  3. In LinkedIn Ready Branch, confirm the condition uses {{ $json.status }} equals ready, then route to Validate LinkedIn Records.
  4. In Validate LinkedIn Records, check {{ $json.records }} is not equal to {{ 0 }}, then route to Retrieve LinkedIn Snapshot.
  5. Connect Retrieve Indeed Snapshot and Retrieve LinkedIn Snapshot into Merge Job Streams, then output to Append to Job Spreadsheet.

Execution Note: Job Search Form Trigger outputs to both Prepare Indeed API Payload and Start Indeed Scrape Request in parallel, so the LinkedIn request starts while the Indeed scrape runs.

Step 6: Test and Activate Your Workflow

Verify the workflow end-to-end before enabling it in production.

  1. Click Execute Workflow and submit the form from Job Search Form Trigger with a sample city, job title, and country.
  2. Confirm that both polling loops run: Check Indeed Scrape Status and Check LinkedIn Status should eventually return ready.
  3. Verify that Merge Job Streams outputs combined results and Append to Job Spreadsheet appends rows to your sheet.
  4. When successful, toggle the workflow to Active to enable live form submissions.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Bright Data credentials can expire or need specific permissions. If things break, check your Bright Data API key status and dataset access in the Bright Data dashboard 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.
  • Google Sheets permissions are easy to overlook when you switch accounts. If rows aren’t appending, confirm the OAuth connection can edit the exact spreadsheet and that the “Compare” tab name matches.

Frequently Asked Questions

How long does it take to set up this job scraping automation?

About 30 minutes if your Bright Data and Google Sheets accounts are ready.

Do I need coding skills to automate job scraping automation?

No. You’ll mostly paste credentials and map a few fields. The only “code” here is already inside the workflow and can be left as-is.

Is n8n free to use for this job scraping automation workflow?

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 Bright Data dataset usage costs based on how often you scrape.

Where can I host n8n to run this automation?

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.

Can I customize this job scraping automation workflow for remote-only roles?

Yes, but you’ll get the cleanest results by adjusting the form field for Job Type (Remote/WFH) and passing that through the “Prepare Indeed API Payload” formatting step. You can also change the custom output fields to add extra columns like seniority keywords or benefits. If you want stronger standardization, update the “Merge Job Streams” mapping so both sources output the same “Job Type” values.

Why is my Bright Data connection failing in this workflow?

Most of the time it’s an invalid or expired API key, so regenerate the key and update the HTTP Request headers in n8n. Also confirm the dataset IDs are correct for your Bright Data account and that your plan allows dataset runs. If it fails only on busy days, it can be rate limiting, which means increasing the wait/poll interval usually stabilizes it.

How many job listings can this job scraping automation handle?

Per run, this specific workflow is currently set to pull 2 Indeed listings and 2 LinkedIn listings for the input (so 4 total). You can raise that “limit per input” value in the Bright Data trigger requests if your account supports it, then n8n will append more rows. On n8n Cloud, capacity depends on your plan’s execution limits; if you self-host, it mostly comes down to your server and Bright Data usage.

Is this job scraping automation better than using Zapier or Make?

Usually, yes, if you care about control and reliability. This workflow needs polling, branching, and merging streams, and n8n handles that without turning every extra step into an extra billable “task.” You also get the self-host option, which matters once you start running daily searches for multiple roles or multiple cities. Zapier or Make can be fine for simple “new row triggers a message” type flows, but scraping orchestration is where they get awkward. If you’re on the fence, Talk to an automation expert and you’ll get a straight recommendation.

Once this is live, your “Compare” sheet becomes the system of record, not your browser history. The workflow handles the repetitive collection so you can focus on deciding, reaching out, or applying.

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.

Lisa Granqvist

Workflow Automation Expert

Expert in workflow automation and no-code tools.

×

Use template

Get instant access to this n8n workflow Json file

💬
Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Get a free quote today!
Get a free quote today!

Tell us what you need and we'll get back to you within one working day.

Launch login modal Launch register modal