🔓 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 + Google Sheets: outreach leads, ready to send

Lisa Granqvist Partner Workflow Automation Expert

LinkedIn is full of buying signals, but turning “they’re hiring” into “we should email this person” is a grind. You jump between tabs, copy company details, hunt for emails, then still stare at a blank page trying to write something that doesn’t sound templated.

SDRs feel it in their activity targets. Recruiters deal with it when they’re trying to break into new accounts fast. And founders running sales themselves hit the wall even harder. This LinkedIn lead automation takes job posts and turns them into a Google Sheets list with verified contacts and outreach drafts you can actually send.

Below, you’ll see what the workflow does, what changes after you implement it, and the few setup details that matter so you don’t spend your afternoon debugging.

How This Automation Works

See how this solves the problem:

n8n Workflow Template: LinkedIn + Google Sheets: outreach leads, ready to send

The Challenge: Turning Hiring Signals Into Outreach Leads

Job postings are one of the cleanest “intent” signals you can get on LinkedIn. The problem is everything that comes after. You find a promising role, then you still need the company details, a domain you can trust, the right decision-maker (not the intern managing the page), and an email address that won’t bounce. Then comes the writing. If you’re doing this manually, it’s easy to end up with a messy sheet, duplicate companies, and emails that sound generic because you’re rushing.

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

  • You waste about 10 minutes per company just collecting basics that should be automatic.
  • Duplicate accounts slip in, so you end up emailing the same company twice and looking careless.
  • Contact data is inconsistent, which means more bounces and more time spent “fixing the list.”
  • Personalization gets skipped because you’re trying to hit volume, so replies don’t match the effort.

The Fix: Job Posts In, Qualified Leads Out (With Draft Emails)

This workflow runs on demand in n8n and turns LinkedIn job search results into a ready-to-send outreach sheet. It begins by scraping LinkedIn job postings (via Apify) for the roles you care about, then filters companies based on your rules like company size and industry. From there, it enriches each qualified company by finding the right people through Apollo and pulling verified email addresses. Once the lead profile is assembled, the workflow writes everything into Google Sheets, then uses an AI email composer (Gemini chat model in the template) to draft a subject line and email body that references the hiring signal you discovered. Finally, it saves those drafts back to the same sheet, so your list and your messaging stay connected.

The workflow starts when you run it in n8n. Apify collects the job-post data, Apollo fills in decision-maker contacts and emails, and Gemini generates outreach drafts based on the enriched lead context. Google Sheets becomes the single place you review, approve, and send.

What Changes: Before vs. After

Real-World Impact

Say you target 30 companies a week hiring for a specific role. Manually, you might spend about 10 minutes per company to capture the job info and company basics, plus another 10 minutes finding a decision-maker and an email, which is roughly 10 hours weekly. With this workflow, you kick off one run, let it scrape and enrich in the background, then spend about 30 minutes reviewing the sheet and tweaking the best drafts. That’s most of a day back, every week.

Requirements

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Apify to scrape LinkedIn job posting results.
  • Apollo.io to find people and verify emails.
  • Google Gemini API key (get it from Google AI Studio / Gemini API in your Google Cloud console).

Skill level: Intermediate. You’ll connect accounts, paste a LinkedIn Jobs search URL into the scraper, and map a few Google Sheets fields.

Need help implementing this? Talk to an automation expert (free 15-minute consultation).

The Workflow Flow

You trigger a run when you’re ready. The workflow is built around a manual start, so you can run it daily, weekly, or whenever your pipeline needs fresh accounts.

LinkedIn job data gets collected and cleaned. Apify pulls job-post records from your LinkedIn Jobs search query, then n8n filters by company size, removes duplicates, and excludes industries you don’t want (like HR-heavy segments if that’s not your ICP).

Contacts are enriched and validated. Using HTTP requests to Apollo, the workflow searches for targeted personnel, looks up verified emails, and merges the person + company data into a single lead profile that’s consistent enough to use at scale.

Google Sheets becomes your output hub. Leads are appended to a sheet, then the workflow reads them back, checks that required fields exist, and only then asks Gemini to write a personalized subject line and email body. Those drafts are written back into the same row so review is simple.

You can easily modify the filtering rules (company size, industries, titles) to match your ICP based on your needs. See the full implementation guide below for customization options.

Step-by-Step Implementation Guide

Step 1: Configure the Manual Trigger

This workflow starts on demand so you can control when the LinkedIn scraping and outreach sequence begins.

  1. Add and open Manual Start Trigger.
  2. Leave default settings as-is to run the workflow manually.

Step 2: Connect Apify and Configure Scraping Inputs

These nodes launch the LinkedIn job scraper and read the dataset results for processing.

  1. Open Launch LinkedIn Scraper and set customBody to the JSON input provided, including the LinkedIn Jobs URL and "count": 100.
  2. In Retrieve Dataset Records, set resource to Datasets, limit to 110, and datasetId to ={{ $json.defaultDatasetId }}.
  3. Credential Required: Connect your Apify credentials in Launch LinkedIn Scraper and Retrieve Dataset Records.

Step 3: Filter and Normalize Company Records

This section filters to small companies, removes duplicates, excludes HR-related industries, and cleans company domains.

  1. In Check Company Size, confirm the condition uses ={{ $json.companyEmployeesCount }} with operation lt and rightValue 250.
  2. In Deduplicate Companies, set compare to selectedFields and fieldsToCompare to companyName.
  3. In Exclude HR Industries, confirm the two notContains checks for Human Resources and Staffing and Recruiting use ={{ $json.industries }}.
  4. Keep Finalize Company Info code as provided to extract the domain and wrap data under company.
  5. In Verify Domain Presence, verify the exists check uses ={{ $json.company.domain }}.
  6. Set Limit Company Batch to maxItems 5 to control the number of companies processed per run.

Limit Company Batch outputs to both Combine Data Streams and Apollo People Search in parallel.

Step 4: Fetch People and Email Data from Apollo

These nodes pull decision-makers and email addresses from Apollo, then prepare the data for merging.

  1. In Apollo People Search, set url to https://api.apollo.io/api/v1/people/search and keep the jsonBody with {{ $json.company.domain }} inside q_organization_domains_list.
  2. Credential Required: Connect your httpHeaderAuth credentials in Apollo People Search.
  3. Keep the provided JavaScript in Clean Person Records to flatten and dedupe people while wrapping data under person.
  4. In Apollo Email Lookup, set url to https://api.apollo.io/v1/people/match and jsonBody to ={"id":"{{ $json.person.personId }}"} .
  5. Credential Required: Connect your httpHeaderAuth credentials in Apollo Email Lookup.
  6. Keep the JavaScript in Clean Email Payload to wrap results under email.

Clean Person Records outputs to both Apollo Email Lookup and Combine Data Streams in parallel.

Step 5: Merge Company, Person, and Email Data

This stage merges three streams into a single lead profile for sheet insertion.

  1. In Combine Data Streams, set numberInputs to 3 to merge company, person, and email data.
  2. Keep the JavaScript in Assemble Lead Profile to map person.personId to email.id and append company fields.

Step 6: Connect Google Sheets and Append Leads

Lead profiles are added to your Google Sheet and then reloaded for email generation.

  1. In Append Leads to Sheet, set operation to append, documentId to your sheet ID, and sheetName to gid=0.
  2. Verify the column mappings use expressions like ={{ $json.email }}, ={{ $json.companyName }}, and ={{ $json.personLinkedInUrl }}.
  3. Credential Required: Connect your Google Sheets credentials in Append Leads to Sheet.
  4. In Retrieve Leads Sheet, select the same documentId and sheetName to read back the latest rows.
  5. Credential Required: Connect your Google Sheets credentials in Retrieve Leads Sheet.

Append Leads to Sheet outputs to Retrieve Leads Sheet to begin the email enrichment flow.

Step 7: Validate Rows and Prepare Batches for AI

These checks ensure only valid leads without existing emails get processed and limit batch size.

  1. In Validate Email & Content, confirm the conditions: ={{ $json.Subject }} is empty, ={{ $json["Email Body"] }} is empty, and ={{ $json.Email }} contains @.
  2. In Batching Filter, keep the condition ={{ $json.row_number }} gt 83 to control processing batches.

⚠️ Common Pitfall: If your sheet does not include the Subject and Email Body columns, Validate Email & Content will block all rows from reaching the AI step.

Step 8: Configure AI Email Generation

The AI chain creates the subject and body using Gemini and enforces a structured response.

  1. In AI Email Composer, keep the prompt text and variables such as {{ $json.Company }}, {{ $json['Job Title'] }}, and {{ $json.Occupation }}.
  2. Open Gemini Chat Engine and connect it to AI Email Composer as the language model.
  3. Open Structured Output Extractor and keep the jsonSchemaExample defining subject and email_body.
  4. Credential Required: Connect your Google Gemini credentials in Gemini Chat Engine.

Structured Output Extractor is connected as the output parser for AI Email Composer—ensure credentials are added to Gemini Chat Engine, not the parser.

Step 9: Write Generated Emails Back to Google Sheets

The generated subject and email body are written back to the sheet using Email as the matching key.

  1. In Write Email Back to Sheet, set operation to update and use matchingColumns Email.
  2. Map columns using expressions: ={{ $('Batching Filter').item.json.Email }}, ={{ $json.output.subject }}, and ={{ $json.output.email_body }}.
  3. Credential Required: Connect your Google Sheets credentials in Write Email Back to Sheet.

Step 10: Test and Activate Your Workflow

Run a full test to confirm scraping, enrichment, AI generation, and sheet updates work end-to-end.

  1. Click Execute Workflow on Manual Start Trigger to run a live test.
  2. Verify that Append Leads to Sheet adds new rows and Write Email Back to Sheet updates Subject and Email Body.
  3. Check that Limit Company Batch processes only 5 companies and that parallel branches populate both Combine Data Streams and Apollo People Search.
  4. When results look correct, toggle the workflow to Active for production use.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Watch Out For

  • Apollo.io credentials can expire or need specific permissions. If things break, check your Apollo API key and plan limits first, then update the header auth in the HTTP Request nodes.
  • 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.

Common Questions

How quickly can I implement this LinkedIn lead automation automation?

Usually about an hour if you already have the accounts and API keys.

Can non-technical teams implement this lead enrichment and outreach drafting?

Yes, but you’ll want someone comfortable with connecting APIs and testing a few runs. No traditional coding, just configuration and careful field mapping.

Is n8n free to use for this LinkedIn 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 Apify, Apollo, and Gemini API usage costs.

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.

How do I adapt this LinkedIn lead automation solution to my specific challenges?

Start by changing the LinkedIn Jobs search URL you paste into the Apify scraper node so the workflow targets your niche roles. Then adjust the company filters (the “Check Company Size” and “Exclude HR Industries” logic) to match your ICP. If you prefer another enrichment provider, you can replace the Apollo HTTP Request nodes with Clay or Hunter calls and keep the same “Assemble Lead Profile” step so the sheet columns don’t change. Finally, edit the AI Email Composer prompt to reflect your offer, your tone, and any compliance rules you follow.

Why is my Google Sheets connection failing in this workflow?

Most of the time it’s a mismatched Document ID or Sheet Name, not the workflow itself. Confirm the spreadsheet exists, the tab name matches exactly, and the connected Google account has edit access. If it worked once and then stopped, re-authenticate Google Sheets in n8n because tokens can expire.

What’s the capacity of this LinkedIn lead automation solution?

On a typical n8n Cloud plan you can run thousands of executions a month, and self-hosting removes the execution cap. In practice, capacity is usually limited by Apify scraping volume and Apollo API limits, so most teams batch a few hundred leads per run to keep it stable.

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

Often, yes. This workflow mixes scraping, branching filters, enrichment, deduplication, and AI generation, and that kind of multi-stage logic gets clunky (and expensive) in simpler automation tools. n8n also gives you a self-hosting path, which is useful when you want higher volume without paying per tiny step. Zapier or Make can still be fine if you only need “job post → add row to sheet” and nothing else. Talk to an automation expert if you want a quick recommendation based on your volumes and tech stack.

Once this is running, your sheet stops being a graveyard of half-finished research and turns into a repeatable outreach engine. Set it up, run it when you need pipeline, and spend your time on conversations instead of copy-paste.

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