LinkedIn to Google Sheets, scored company leads
You find a good company on LinkedIn, open three tabs, copy details into a sheet, then realize you already added them last month. That’s not “lead gen.” That’s busywork.
Sales ops gets stuck cleaning lists. A founder trying to build pipeline feels it at night. And a demand gen marketer ends up arguing about “lead quality” instead of shipping campaigns. This LinkedIn lead scoring automation turns LinkedIn company searches into a deduped Google Sheet with an AI fit score, so you can prioritize outreach with more confidence.
Below you’ll see how the workflow runs, what it changes day-to-day, and what you need to get it live in n8n without turning it into a weeks-long project.
How This Automation Works
See how this solves the problem:
n8n Workflow Template: LinkedIn to Google Sheets, scored company leads
flowchart LR
subgraph sg0["Manual Launch Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Manual Launch Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Configure Search Inputs", pos: "b", h: 48 }
n2["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Lookup Target Firms"]
n3@{ icon: "mdi:swap-vertical", form: "rounded", label: "Unpack Company List", pos: "b", h: 48 }
n4@{ icon: "mdi:swap-vertical", form: "rounded", label: "Batch Through Companies", pos: "b", h: 48 }
n5["<div style='background:#f5f5f5;padding:10px;border-radius:8px;display:inline-block;border:1px solid #e0e0e0'><img src='https://flowpast.com/wp-content/uploads/n8n-workflow-icons/httprequest.dark.svg' width='40' height='40' /></div><br/>Retrieve Firm Details"]
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Validate Firm Criteria", pos: "b", h: 48 }
n7@{ icon: "mdi:database", form: "rounded", label: "Check CRM Dupes", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Confirm New Record", pos: "b", h: 48 }
n9@{ icon: "mdi:robot", form: "rounded", label: "AI Fit Scoring", pos: "b", h: 48 }
n10@{ icon: "mdi:cog", form: "rounded", label: "Pause 2 Seconds", pos: "b", h: 48 }
n11@{ icon: "mdi:database", form: "rounded", label: "Append Firm to CRM", pos: "b", h: 48 }
n0 --> n1
n10 --> n11
n1 --> n2
n8 --> n9
n8 --> n4
n5 --> n6
n2 --> n3
n9 --> n10
n11 --> n4
n3 --> n4
n4 --> n5
n6 --> n7
n6 --> n4
n7 --> n8
end
%% Styling
classDef trigger fill:#e8f5e9,stroke:#388e3c,stroke-width:2px
classDef ai fill:#e3f2fd,stroke:#1976d2,stroke-width:2px
classDef aiModel fill:#e8eaf6,stroke:#3f51b5,stroke-width:2px
classDef decision fill:#fff8e1,stroke:#f9a825,stroke-width:2px
classDef database fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef api fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef code fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef disabled stroke-dasharray: 5 5,opacity: 0.5
class n0 trigger
class n9 ai
class n6,n8 decision
class n7,n11 database
class n2,n5 api
classDef customIcon fill:none,stroke:none
class n2,n5 customIcon
The Challenge: Turning LinkedIn research into a clean CRM list
LinkedIn company research is deceptively expensive. You start with a clear target (industry, headcount, region), then the work gets messy fast: opening profiles, sanity-checking size, scanning descriptions for signals, and trying to remember if your team already reached out. Meanwhile your “CRM” is often a Google Sheet that’s half up-to-date and full of duplicates. Honestly, the worst part isn’t the time. It’s how inconsistent it becomes when different people judge “fit” differently, day to day.
It adds up fast. Here’s where it breaks down once you try to scale beyond a handful of companies.
- Copying company data from LinkedIn into Google Sheets turns into an hour-long task when you need 50+ rows.
- Duplicate checking is usually manual, so the same account shows up two or three times under slightly different names.
- “Quality” is subjective without a scoring rubric, which means outreach order becomes a debate instead of a decision.
- Reps cherry-pick the obvious logos and ignore the quieter, high-fit companies that would actually convert.
The Fix: LinkedIn company search → AI scoring → Google Sheets CRM
This workflow gives you a repeatable way to go from “I need a list of target companies” to “here’s a prioritized, deduped sheet ready for outreach.” You launch it in n8n, set the search criteria once (the kind of companies you want), and it pulls back LinkedIn company results via API. Then it loops through each company, retrieves deeper details, and filters out the ones that don’t match your basics (for example, your minimum follower threshold or other quality indicators you define). Before anything is written to your CRM sheet, it checks for duplicates. New companies only. Finally, OpenAI scores each company against your ideal customer profile so your team can start with the best-fit accounts instead of whoever looks familiar.
The workflow starts with your input variables and a LinkedIn company lookup. Next, it enriches each company with firm details and validates them with an If filter. After a Google Sheets dupe check, an AI agent assigns a fit score, waits briefly to avoid rate issues, then appends the new row to your Google Sheet CRM.
What Changes: Before vs. After
| What This Eliminates | Impact You’ll See |
|---|---|
|
|
Real-World Impact
Say you want a list of 60 target companies each week. Manually, you might spend about 5 minutes per company to open results, skim details, paste into Google Sheets, and check for duplicates, which is roughly 5 hours. With this workflow, you set your criteria once, launch it, and let it process in the background; even if it takes about 20–30 minutes to run end-to-end, your hands-on time is closer to 10 minutes. That’s basically an afternoon saved, every week.
Requirements
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for your lightweight CRM list.
- Ghost Genius API to search LinkedIn companies by criteria.
- OpenAI API key (get it from your OpenAI dashboard).
Skill level: Intermediate. You’ll connect accounts, paste API keys, and tweak a few variables for your ICP.
Need help implementing this? Talk to an automation expert (free 15-minute consultation).
The Workflow Flow
You kick it off manually (or on a schedule later). The workflow uses a Manual Trigger today, which is perfect while you’re testing and refining your search criteria.
Your target criteria get defined up front. In the “Configure Search Inputs” step, you set variables like the types of companies you want, plus the scoring criteria you care about (industry fit, size, region, or whatever matters for your offer).
LinkedIn results are pulled, unpacked, and processed in batches. n8n calls the LinkedIn search via HTTP Request (using your Ghost Genius API key), then splits the company list into manageable batches so you don’t overload APIs.
Each company is enriched, validated, deduped, then scored. The workflow retrieves firm details, runs an If check against your qualification rules, checks Google Sheets to confirm it’s not already in your CRM, then uses the OpenAI chat model to produce a fit score before appending a new row.
You can easily modify your search variables to target a new niche based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Manual Trigger
Set up the entry point so you can run the workflow on demand while testing.
- Add the Manual Launch Trigger node as the workflow trigger.
- Connect Manual Launch Trigger to Configure Search Inputs.
Step 2: Connect GhostGenius and Google Sheets
Authenticate the external services used to search companies and update your CRM.
- In Lookup Target Firms, set the URL to
https://api.ghostgenius.fr/v2/search/companiesand enable authentication. - Credential Required: Connect your httpHeaderAuth credentials in Lookup Target Firms.
- In Retrieve Firm Details, set the URL to
https://api.ghostgenius.fr/v2/companyand enable authentication. - Credential Required: Connect your httpHeaderAuth credentials in Retrieve Firm Details.
- In Check CRM Dupes and Append Firm to CRM, select the same Google Sheets file and the
Companiessheet. - Credential Required: Connect your googleSheetsOAuth2Api credentials in Check CRM Dupes and Append Firm to CRM.
⚠️ Common Pitfall: Make sure your Google Sheet has the columns used in Append Firm to CRM (ID, Name, Score, State, Summary, Website, LinkedIn) before running the workflow.
Step 3: Configure the Search and Company List Pipeline
Define the search criteria and split results into individual company records.
- In Configure Search Inputs, set the fields exactly as defined: Target Segment to
Growth Marketing Agency, Company Size Range toC, Location ID to[YOUR_ID], Offering toour CRM implementation services, Positive Indicators and Negative Indicators to the provided multiline values. - In Lookup Target Firms, configure query parameters using expressions: keywords =
{{ $json['Target Segment'] }}, locations ={{ $json['Location ID'] }}, company_size ={{ $json['Company Size Range'] }}. - Keep pagination settings in Lookup Target Firms with page =
{{ $pageCount + 1 }}and completion when{{ $response.body.data.isEmpty() }}is true. - In Unpack Company List, set Field To Split Out to
data. - Connect Unpack Company List to Batch Through Companies to iterate over each company.
Tip: Replace [YOUR_ID] in Configure Search Inputs with your actual location ID to avoid empty search results.
Step 4: Validate Companies and Filter Duplicates
Retrieve details, validate criteria, and check your CRM for existing records.
- In Retrieve Firm Details, set the query parameter url to
{{ $json.url }}and keep batching at batchSize1with batchInterval2000. - In Validate Firm Criteria, confirm the conditions: website is
{{ $json.website }}with notEmpty and followers_count is{{ $json.followers_count }}greater than200. - In Check CRM Dupes, set lookupValue to
{{ $json.id }}with lookupColumnIDto prevent duplicate entries. - In Confirm New Record, keep the condition
{{ $('Check CRM Dupes').all().first().json }}is empty to route only new companies forward.
Tip: Validate Firm Criteria sends invalid companies back to Batch Through Companies, keeping the pipeline moving even when records are filtered out.
Step 5: Set Up the AI Fit Scoring
Use GPT to score the company fit and return structured JSON.
- In AI Fit Scoring, choose modelId
gpt-4.1and set temperature to0.2. - Keep jsonOutput enabled to ensure the response includes
{"score": ...}. - Verify the system prompt uses expressions like
{{ $('Configure Search Inputs').item.json['Offering'] }}and indicators from Configure Search Inputs. - Confirm the user message references company data from Validate Firm Criteria using expressions such as
{{ $('Validate Firm Criteria').item.json.name }}and{{ $('Validate Firm Criteria').item.json.description }}. - Credential Required: Connect your openAiApi credentials in AI Fit Scoring.
⚠️ Common Pitfall: The AI output must be valid JSON with a score field, otherwise Append Firm to CRM will not map the score correctly.
Step 6: Append Qualified Firms and Pace Requests
Store qualified companies in the CRM and throttle requests to avoid rate limits.
- In Pause 2 Seconds, keep amount set to
2and connect it after AI Fit Scoring. - In Append Firm to CRM, keep operation set to
appendand map columns using expressions such as{{ $('Retrieve Firm Details').item.json.id }},{{ $json.message.content.score }}, and{{ $('Retrieve Firm Details').item.json.website }}. - Ensure Append Firm to CRM routes back into Batch Through Companies to continue processing the list.
Step 7: Test and Activate Your Workflow
Run an end-to-end test, confirm data outputs, and then activate for production.
- Click Execute Workflow and start from Manual Launch Trigger to run a manual test.
- Verify that Check CRM Dupes returns empty records for new companies and that Confirm New Record routes to AI Fit Scoring.
- Confirm Append Firm to CRM creates a new row with Score populated from
{{ $json.message.content.score }}. - Once results are correct, toggle the workflow to Active for production use.
Watch Out For
- Ghost Genius API credentials can expire or need specific permissions. If things break, check your Ghost Genius account dashboard and the n8n credential used by the HTTP Request nodes 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.
- Default prompts in AI nodes are generic. Add your brand voice and ICP “must-haves” inside the AI Fit Scoring prompt early or you’ll be editing outputs forever.
Common Questions
About an hour if your accounts and keys are ready.
Yes. You won’t write code, but you will connect Google Sheets and paste API keys into n8n.
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 (often a few dollars a month at small volumes) and any Ghost Genius API plan you choose.
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.
Start in the “Configure Search Inputs” (Set Variables) part of the workflow and make it match your ICP in plain language. Then adjust the “Validate Firm Criteria” If check to enforce your non-negotiables, like minimum follower count or location. The biggest lever is the “AI Fit Scoring” node: you can change the rubric to score for agency-fit, SaaS-fit, local service-fit, or even “likely to buy in 90 days.” If you want alerts, add a notification after scoring so high-fit companies ping you in Telegram.
Most of the time it’s the Google account permission scope or an expired OAuth connection. Reconnect Google Sheets in n8n, then confirm the spreadsheet is shared with the same account you authenticated. Also check that the sheet tabs and column headers still match what the “Check CRM Dupes” and “Append Firm to CRM” steps expect, because renamed tabs can look like “missing file” errors.
On n8n Cloud Starter, you can run a few thousand workflow executions per month, which is plenty for most small prospecting cycles. If you self-host, there’s no execution cap, but throughput depends on your server and your API limits. Practically, this workflow is gated by LinkedIn search/enrichment limits and your chosen batch size, so plan on running it in chunks (for example, 50–200 companies at a time) instead of trying to pull thousands in one go.
Often, yes, if you care about control and repeatability. This workflow uses batching, conditional logic, dedupe checks, and an AI scoring step, and those pieces get pricey or awkward in a lot of “two-step” automation tools. n8n also gives you the self-hosting route, which is a big deal when you start running lead gen automations every day. The flip side is that Zapier or Make can feel simpler for quick prototypes. If you’re torn, Talk to an automation expert and describe your volume and process.
A cleaner prospect list changes the whole week. You spend less time sorting rows and more time starting real conversations.
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.