🔓 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

Indeed + Google Sheets: fresh leads with outreach notes

Lisa Granqvist Partner Workflow Automation Expert

You find a “perfect” company hiring on Indeed, open five tabs, copy the link, paste it somewhere, then lose the thread before you ever send a message. It’s messy. And it quietly kills outreach consistency.

Sales and BD folks feel it when pipeline is thin. A recruiter feels it when roles change weekly. And a marketing consultant doing outbound for clients gets stuck in spreadsheet busywork. This Indeed lead automation pulls fresh job-post leads into Google Sheets, enriches them, and drafts LinkedIn notes you can actually use.

Below you’ll see what the workflow does, the results you can expect, and what you need to run it on a schedule so leads arrive like clockwork.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Indeed + Google Sheets: fresh leads with outreach notes

The Problem: Lead sourcing turns into tab chaos

Job posts are an underrated outbound signal. A company hiring a “Head of Engineering” is usually buying tools, agencies, contractors, or services right now. But turning that signal into a clean lead list is painfully manual. You scrape Indeed, you try to confirm the company’s real website, you hunt LinkedIn, then you guess who to contact. By the time you’ve found a decision-maker, you’ve already spent the energy you needed to write a good message. Do that 20 times and you’ve burned half a day on setup instead of outreach.

It adds up fast. Here’s where it breaks down in real life:

  • You end up copying job links and company names into a sheet, then fixing duplicates later because “Acme” and “Acme Inc.” look different.
  • Decision-maker research gets skipped when you’re busy, so messages go to generic inboxes or the wrong titles.
  • Personalization becomes “Hi {FirstName}” because you don’t have enough context handy when you’re writing.
  • Outreach happens in bursts, not daily, because sourcing takes too long to repeat every week.

The Solution: Indeed → enrichment → Google Sheets + LinkedIn notes

This workflow runs in n8n and does the tedious parts for you: it pulls job listings from Indeed through Scrape.do (which helps avoid bot blocks), extracts the job and company details, then enriches each company in Apollo.io to find the best matching organization profile. After that, it searches Apollo again for relevant decision-makers (titles like CTO, VP Engineering, CEO, Founder), builds a clean lead record, and asks OpenAI to draft a short LinkedIn connection note under 300 characters. Finally, it stores everything in Google Sheets so you have one place to review, edit, and send outreach without re-researching every lead.

The workflow starts on a weekly schedule (every Monday at 00:00 UTC), or you can run it manually when you want leads now. It scrapes and parses about 25 unique companies per run, enriches them, generates 1–3 contacts per company, and outputs a ready-to-use outreach row in your “Leads” sheet.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you want 25 new companies every week from Indeed. Manually, you might spend about 5 minutes per company to copy the job link, confirm the site/LinkedIn, and find one decent contact. That’s roughly 2 hours, and you still haven’t written a message. With this workflow, you spend about 10 minutes updating the Indeed search URL (if you want to tweak it), then let the run finish in about 5 minutes. Your sheet is filled with enriched leads and draft LinkedIn notes, ready to edit and send.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Google Sheets for your Companies + Leads database
  • Scrape.do to reliably scrape Indeed results
  • Apollo.io to enrich companies and find decision-makers
  • OpenAI API key (get it from platform.openai.com)

Skill level: Intermediate. You’ll connect a few accounts, paste API keys, and test one run while watching node outputs.

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

How It Works

A schedule (or manual run) kicks things off. The workflow is set to run weekly, but there’s also a manual trigger for testing and quick one-off pulls. If you use the optional form intake, you can submit search inputs without touching the workflow.

Indeed listings get scraped and turned into clean fields. Scrape.do fetches the search page with rendering turned on, then a code step parses the markdown and extracts job title, company name, location, salary, and the job URL. It also filters out junk and deduplicates by company name.

Apollo.io enrichment finds the “real” company and the right people. For each company, the workflow searches Apollo for the best organization match, pulls details like industry, size, LinkedIn URL, and location, then runs a people search for a short list of decision-makers (up to 3 per company in this setup).

OpenAI drafts your LinkedIn note, then Google Sheets stores everything. The AI message references the person’s role, the company, and the hiring context from the job post. The final row lands in your “Leads” sheet, while job/company discoveries can also be logged to “Add New Company” for tracking.

You can easily modify the title filters and the Indeed search URL 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 workflow entry points so you can run it manually or via a form submission.

  1. Open Optional Form Intake and set Form Title to Indeed Job Search Configuration.
  2. In Optional Form Intake, confirm the form fields: Job Title / Keywords, Location, and Days Posted (1-30).
  3. Keep Manual Start Trigger enabled for on-demand testing; it also routes into Configure Search Inputs.
  4. Confirm the execution flow: Optional Form IntakeConfigure Search Inputs and Manual Start TriggerConfigure Search Inputs.
Use the manual trigger to validate the workflow before distributing the form link.

Step 2: Connect Google Sheets

Prepare the Google Sheets destinations used for company staging and final lead storage.

  1. Open Append Company Row and set Document ID to [YOUR_ID].
  2. In Append Company Row, set Sheet Name to gid=0.
  3. Open Store Leads in Sheet and set Document ID to [YOUR_ID].
  4. In Store Leads in Sheet, set Sheet Name to 1070709009.
Credential Required: Connect your Google Sheets credentials in both Append Company Row and Store Leads in Sheet (these nodes need credentials but none are configured).

Step 3: Set Up Search Inputs and Job Scraping

Build the Indeed search URL and fetch raw listings data.

  1. In Configure Search Inputs, add the following assignments:
  2. Set jobTitle to ={{ $json['Job Title / Keywords'] || 'web scraping' }}.
  3. Set location to ={{ $json['Location'] || 'United States' }}.
  4. Set daysPosted to ={{ $json['Days Posted (1-30)'] || 14 }}.
  5. Set indeedUrl to =https://www.indeed.com/jobs?q={{ encodeURIComponent($json['Job Title / Keywords'] || 'web scraping') }}&l={{ encodeURIComponent($json['Location'] || 'United States') }}&fromage={{ $json['Days Posted (1-30)'] || 14 }}.
  6. In Scrape.do Job Fetch, set URL to https://api.scrape.do and enable Send Query.
  7. Configure query parameters in Scrape.do Job Fetch: url={{ $json.indeedUrl }}, supertrue, geoCodeus, rendertrue, blockResourcestrue, devicemobile, outputmarkdown.
Credential Required: Connect your httpQueryAuth credentials in Scrape.do Job Fetch.

Step 4: Configure Parsing and Organization Enrichment

Extract companies from scraped job listings and enrich them using Apollo.

  1. In Parse Job Listings, keep the provided JavaScript to transform the markdown response into unique company records.
  2. In Append Company Row, confirm Operation is append and the column mappings are set to expressions such as ={{ $json.companyName }} and ={{ $json.jobUrl }}.
  3. In Apollo Org Lookup, set URL to https://api.apollo.io/v1/organizations/search and Method to POST.
  4. Set JSON Body in Apollo Org Lookup to ={ "q_organization_name": "{{ $json.companyName }}", "page": 1, "per_page": 1 }.
  5. In Map Org Enrichment, keep the JavaScript that merges Apollo organization data with the original company row.
Credential Required: Connect your httpHeaderAuth credentials in Apollo Org Lookup.

Step 5: Set Up People Lookup and Lead Assembly

Fetch decision-makers from Apollo and build the lead dataset.

  1. In Apollo People Lookup, set URL to https://api.apollo.io/v1/mixed_people/search and Method to POST.
  2. Set JSON Body to ={ "organization_ids": ["{{ $json.organizationId }}"], "person_titles": ["CTO", "Chief Technology Officer", "VP Engineering", "Head of Engineering", "Engineering Manager", "Technical Director", "CEO", "Founder"], "page": 1, "per_page": 3 }.
  3. In Assemble Lead Records, keep the JavaScript that combines people data with the mapped organization fields.
Credential Required: Connect your httpHeaderAuth credentials in Apollo People Lookup (this node needs credentials but none are configured).

Step 6: Set Up AI Personalization

Generate LinkedIn connection messages and merge them with lead data.

  1. In Draft LinkedIn Note, keep Resource set to chat.
  2. Confirm the prompt includes variables such as {{ $json.fullName }}, {{ $json.title }}, {{ $json.companyName }}, {{ $json.industry }}, and {{ $json.jobTitle }}.
  3. Set Max Tokens to 150 and Temperature to 0.7.
  4. In Combine Lead Message, keep the JavaScript that reads the OpenAI response and merges it with lead fields from Assemble Lead Records.
Credential Required: Connect your openAiApi credentials in Draft LinkedIn Note.

Step 7: Configure Output Action Nodes

Write the enriched leads and generated messages to your final spreadsheet.

  1. In Store Leads in Sheet, confirm Operation is append.
  2. Verify the column mappings use expressions such as ={{ $json.firstName }}, ={{ $json.lastName }}, and ={{ $json.personalizedMessage }}.
  3. Ensure the execution path flows from Combine Lead MessageStore Leads in Sheet.
⚠️ Common Pitfall: If your sheet headers don’t match the mapped column names (e.g., First Name, Personalized Message), the append will fail or write blank values.

Step 8: Test and Activate Your Workflow

Validate the end-to-end flow before using it in production.

  1. Click Execute Workflow on Manual Start Trigger to run a test.
  2. Confirm that Scrape.do Job Fetch returns markdown, Parse Job Listings outputs company records, and Apollo requests return enrichment data.
  3. Verify that Draft LinkedIn Note produces a short connection message and Store Leads in Sheet appends new rows.
  4. Once validated, activate the workflow and use the Optional Form Intake URL for ongoing lead sourcing.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Apollo.io credentials can expire or have missing permissions. If enrichment suddenly returns empty results, check your Apollo API key in n8n Credentials and confirm it still works in Apollo’s API settings.
  • 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

How long does it take to set up this Indeed lead automation automation?

Plan on about 45 minutes if you already have the API keys.

Do I need coding skills to automate Indeed lead automation?

No. You’ll mostly connect accounts and paste API keys. The code nodes are already built; you’re just testing and tweaking inputs.

Is n8n free to use for this Indeed lead 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 OpenAI API costs (usually a few cents per run) plus your Scrape.do and Apollo.io plan limits.

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 Indeed lead automation workflow for a different job search or different decision-maker titles?

Yes, and you should. Swap the Indeed search URL in the “Scrape.do Job Fetch” node to change keywords, location, or date range, then adjust the title list in the “Apollo People Lookup” node to match your buyer (for example, add “RevOps” or “Head of Marketing”). If you want longer emails instead of LinkedIn notes, change the prompt in “Draft LinkedIn Note” and increase the character limit.

Why is my Apollo.io connection failing in this workflow?

Usually it’s an invalid or expired API key saved in your n8n credential. Update the x-api-key header credential, then re-run one company through the Apollo nodes to confirm you’re getting an organization back. If you’re seeing 429 errors, you’re hitting Apollo’s daily request limit, so add a short wait between company lookups and between people searches. Also check that the company name coming out of “Parse Job Listings” isn’t empty, because Apollo will return nothing for blank queries.

How many leads can this Indeed lead automation automation handle?

Roughly 25 companies per run in the default setup, which usually becomes 25–75 contact rows depending on how many titles match.

Is this Indeed lead automation automation better than using Zapier or Make?

For this exact use case, n8n is often the better fit because scraping + parsing + multi-step enrichment is where simple “trigger → action” tools get awkward fast. You can loop through job results, merge data, handle deduping, and branch when Apollo returns nothing, all in one workflow. It’s also easier to control rate limits with waits and batch sizes, which matters with Apollo. Zapier or Make can still work if you simplify the scope (for example, no scraping and no AI). If you want help choosing, Talk to an automation expert.

This is the kind of workflow you set up once and then rely on every week. Leads show up organized, enriched, and halfway written, so you can spend your time sending messages instead of building lists.

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