🔓 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

Google Sheets + LinkedIn, clean lead lists on demand

Lisa Granqvist Partner Workflow Automation Expert

Lead sourcing sounds simple until you’re ten tabs deep, copying names into a sheet, and realizing half the profiles are duplicates or not even the right role.

This LinkedIn leads automation hits sales leads and recruiters first, but founders doing their own outreach feel it too. You end up spending your best hours doing the most mechanical work.

This workflow turns three inputs (position, industry, region) into a clean, deduped Google Sheet of LinkedIn profiles, complete with context so you know why each person showed up.

How This Automation Works

The full n8n workflow, from trigger to final output:

n8n Workflow Template: Google Sheets + LinkedIn, clean lead lists on demand

The Problem: LinkedIn research turns into copy-paste chaos

If you’ve ever tried building a targeted list of LinkedIn profiles manually, you know the real cost isn’t “finding people.” It’s everything around it. You search, open profiles, copy a name, paste it into Sheets, grab a title, then realize the formatting is inconsistent. “Head of Growth” becomes “Head, Growth | B2B SaaS” and now your filtering is broken. Add two people on your team doing the same research and you get duplicates, missing links, and a sheet that nobody trusts.

The friction compounds. Here’s where it usually breaks down.

  • Manual list-building often eats about 2–3 hours per week, and that’s for a small campaign.
  • People paste different columns in different orders, so your “master sheet” becomes a junk drawer.
  • Duplicates slip in fast, which means outreach gets sloppy and sometimes embarrassing.
  • You lose the search context, so later you can’t remember which role/region query produced each lead.

The Solution: Google-powered LinkedIn profile lists that land cleanly in Sheets

This workflow starts with a simple web form. You enter a target position, industry, and region, then submit. n8n takes those inputs and runs a Google Custom Search query that’s restricted to LinkedIn profile URLs, so you’re not wading through random results. Each search page is processed to extract usable fields like the person’s name, a cleaned job title, the LinkedIn link, a short description snippet, and an image URL. Then the workflow appends or updates rows in your Google Sheet, keeping columns consistent and removing duplicates as it goes. If there are more results available, it automatically paginates and repeats until it hits the limit.

The workflow begins when you submit the form. It queries Google, parses the results into structured lead rows, waits briefly between requests, then writes everything into Google Sheets while tracking pagination state. When there’s nothing left to fetch, it stops on its own.

What You Get: Automation vs. Results

Example: What This Looks Like

Say you need 80 LinkedIn profiles for “VP Marketing” in “B2B SaaS” in “New York.” Manually, it’s easy to spend about 2 minutes per lead to open, sanity-check, and paste fields, plus another 30 minutes cleaning duplicates and columns, so you’re around 3 hours. With this workflow, you spend maybe 2 minutes submitting the form, then wait roughly 5–10 minutes for Google results to process and land in Sheets. The list is ready to use, with the original search context included.

What You’ll Need

  • n8n instance (try n8n Cloud free)
  • Self-hosting option if you prefer (Hostinger works well)
  • Google Sheets to store and dedupe lead rows.
  • Google Custom Search to find LinkedIn profiles via Google.
  • Google Custom Search API key (get it from Google Cloud Console)

Skill level: Intermediate. You’ll paste an API key, connect Google Sheets OAuth2, and confirm your sheet columns match what the workflow writes.

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

How It Works

You submit a short form. The trigger is an n8n web form where you enter position, industry, and region. That keeps list-building consistent across your team, because everyone starts from the same three inputs.

Paging is initialized upfront. The workflow sets starting values for pagination, so it can fetch more than one page of results without you babysitting it.

Google Custom Search is queried for LinkedIn profiles. An HTTP request sends your search to Google with a restriction to LinkedIn profile URLs. A processing step then extracts the fields you actually care about, and cleans job titles with custom logic so your sheet stays filterable.

Results land in Google Sheets, then the workflow decides if it should continue. After a short wait (helpful for rate limits), each profile is appended or updated in your sheet. Pagination fields are mapped and evaluated; if more results exist, the workflow loops and fetches the next batch.

You can easily modify the search query structure to target niche roles, or swap the output to another destination (like a CRM) 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 initiates the workflow and collects the search inputs used in the external query.

  1. Add the Form Submission Trigger node and open its settings.
  2. Set Form Title to form.
  3. Set Form Description to add details like position, industry, place.
  4. Add three required fields with labels postion, industry, and region, and placeholders position, industry, and region respectively.
  5. Confirm the trigger connects to Initialize Paging Values as the next node in the flow.
Tip: Keep the field label spelling exactly as postion because it is referenced in expressions later in the workflow.

Step 2: Connect Google Sheets

Configure the spreadsheet destination for the processed profile data.

  1. Add the Update Spreadsheet Records node.
  2. Credential Required: Connect your googleSheetsOAuth2Api credentials.
  3. Set Operation to appendOrUpdate.
  4. Select the document with Document set to [YOUR_ID] and the sheet Sheet Name set to Sheet1 (gid=0).
  5. Map columns using the existing expressions: name{{ $json.name }}, img link{{ $json.image }}, position{{ $json.title }}, description{{ $json.snippet }}, profile links{{ $json.link }}, searched region{{ $('Form Submission Trigger').item.json.region }}, searched industry{{ $('Form Submission Trigger').item.json.industry }}, searched position{{ $('Form Submission Trigger').item.json.postion }}.
⚠️ Common Pitfall: Replace [YOUR_ID] with your actual Google Sheet ID before testing, or the append/update action will fail.

Step 3: Set Up the External Search Request

Build the Google Custom Search request using the form inputs and initial pagination values.

  1. Open Initialize Paging Values and add two assignments: currentStartIndex as 1 and maxPages as 10.
  2. Open External Search Request and set URL to https://www.googleapis.com/customsearch/v1.
  3. Credential Required: Connect your httpBasicAuth credentials.
  4. Enable Send Query and set the query parameters: cx to [YOUR_ID], q to {{ $('Form Submission Trigger').item.json.postion }} {{ $('Form Submission Trigger').item.json.industry }} {{ $('Form Submission Trigger').item.json.region }} site:linkedin.com/in, and start to {{ $runIndex == 0 ? $json.currentStartIndex : $node["Pagination Continuation Check"].json.startIndex }}.
⚠️ Common Pitfall: The cx parameter must be your Google Custom Search Engine ID, not your API key.

Step 4: Set Up Processing, Delay, and Pagination Loop

Process search results, throttle requests, write to the sheet, and loop through additional pages if available.

  1. Verify Search Result Processor contains the provided JavaScript to extract name, title, link, snippet, image, and pagination flags.
  2. Set Pause Interval to wait Amount 3 to avoid API throttling between requests.
  3. In Map Pagination Fields, enable Include Other Fields and map startIndex to {{ $('Search Result Processor').item.json.startIndex }} and hasMoreResults to {{ $('Search Result Processor').item.json.hasMoreResults }}.
  4. Confirm Pagination State Builder contains the provided JavaScript that outputs continueLoop and startIndex.
  5. In Pagination Continuation Check, set the boolean condition to {{ $json.continueLoop }} equals true to loop back to External Search Request when more results exist.
Tip: The execution order follows a loop: External Search RequestSearch Result ProcessorPause IntervalUpdate Spreadsheet RecordsMap Pagination FieldsPagination State BuilderPagination Continuation Check → back to External Search Request.

Step 5: Test and Activate Your Workflow

Run a manual test to verify data flow and then activate the automation for ongoing use.

  1. Click Execute Workflow and submit the form with sample values for postion, industry, and region.
  2. Confirm External Search Request returns results and Search Result Processor outputs structured fields.
  3. Verify that rows are appended/updated in the target sheet by Update Spreadsheet Records.
  4. Check the loop behavior by verifying Pagination Continuation Check continues until hasMoreResults becomes false.
  5. When successful, switch the workflow to Active to enable production use.
🔒

Unlock Full Step-by-Step Guide

Get the complete implementation guide + downloadable template

Common Gotchas

  • Google Sheets credentials can expire or need specific permissions. If things break, check the Google connection in n8n’s Credentials section first, then confirm the sheet is shared with the same Google account.
  • If you’re using Wait nodes or external requests, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses, especially when Google returns results slowly.
  • Google Custom Search can return odd snippets, and title cleanup rules might not match your niche. If the “cleaned job title” looks off, tweak the logic in the Search Result Processor step so you’re not fixing titles by hand later.

Frequently Asked Questions

How long does it take to set up this LinkedIn leads automation?

About 30 minutes once your Google API key and sheet are ready.

Do I need coding skills to automate LinkedIn lead list building?

No. You’ll connect accounts, paste your API key, and point the workflow at the right Google Sheet.

Is n8n free to use for this LinkedIn leads 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 Google Custom Search API usage costs, which are usually a few dollars as volume grows.

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 LinkedIn leads automation workflow for niche searches?

Yes, and you should, honestly. You can tweak the query inside the External Search Request node to include extra keywords (like “fintech” or “Series B”) or exclude terms that attract irrelevant profiles. Many teams also add a simple filter after Search Result Processor to drop results that don’t match the region or role phrasing they expect. If you want enrichment, route each profile link to tools like Hunter.io, Clearbit, or People Data before writing the final row.

Why is my Google Sheets connection failing in this workflow?

Usually it’s expired OAuth or the sheet permissions changed. Reconnect Google Sheets in n8n, then confirm the spreadsheet and target tab still exist and the “Append or update row” step points to the right one. If the sheet columns were renamed, the workflow can fail silently or write to the wrong fields, so double-check headers match the required columns (name, title, profile link, description, image link, searched position, searched industry, searched region).

How many leads can this LinkedIn leads automation handle?

On n8n Cloud, the practical limit is your monthly executions and how many pages you let it fetch per run; most small teams comfortably pull a few hundred leads per week. If you self-host, there’s no execution cap, so it mostly comes down to your server and Google Custom Search quota.

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

Sometimes. Zapier and Make are great for simple “new row → send email” flows, but this workflow needs looping, pagination state, and conditional checks, and that tends to get expensive or awkward on simpler builders. n8n handles branching and code-based cleanup in one place, which is why the output sheet stays consistent. The tradeoff is a little more setup responsibility. If you want someone to sanity-check your version, Talk to an automation expert.

Once this is running, lead research stops being a weekly cleanup project. Your sheet stays tidy, your outreach moves faster, and you can finally trust the list you’re working from.

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