Apify + Google Sheets, LinkedIn leads logged clean
Doing LinkedIn outreach “properly” usually means five tabs open, a messy copy-paste routine, and a lead list that’s outdated the moment you finish it.
Marketing managers feel it when campaigns stall because targeting takes forever. SDRs feel it when they’re asked for volume and personalization at the same time. And if you run an agency, this LinkedIn leads automation is the difference between “we’ll get to it” and “it’s already done.”
This workflow turns a simple audience brief into scraped leads, adds GPT-4o icebreakers, and logs everything into Google Sheets (with an optional switch to launch outreach automatically). You’ll see exactly how it works, what you need, and how to customize it for your own offer.
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Apify + Google Sheets, LinkedIn leads logged clean
flowchart LR
subgraph sg0["Description of the audience you want to scrap Flow"]
direction LR
n0@{ icon: "mdi:cog", form: "rounded", label: "Aggregate", pos: "b", h: 48 }
n1["<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/form.svg' width='40' height='40' /></div><br/>Description of the audience .."]
n2@{ icon: "mdi:robot", form: "rounded", label: "Genrating appolo Url for api..", pos: "b", h: 48 }
n3["<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/>Run apify actor to scrap the.."]
n4@{ icon: "mdi:robot", form: "rounded", label: "Genrate ice breaker by scrap..", pos: "b", h: 48 }
n5@{ icon: "mdi:database", form: "rounded", label: "Adding ice breaker to google..", pos: "b", h: 48 }
n6["<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/>trigger phantom buster to se.."]
n0 --> n6
n5 --> n0
n3 --> n4
n2 --> n3
n1 --> n2
n4 --> n5
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 n1 trigger
class n2,n4 ai
class n5 database
class n3,n6 api
classDef customIcon fill:none,stroke:none
class n1,n3,n6 customIcon
Why This Matters: Clean LinkedIn Leads Without the Busywork
LinkedIn lead gen breaks down in the handoff between “I know who I want” and “I have a list I can actually work.” You start with a target: maybe founders at funded SaaS companies, or HR leads hiring for a specific role. Then you lose an hour tweaking filters, copying profiles, grabbing company URLs, and trying to write a first line that doesn’t scream template. The worst part is the mental load. You’re doing research, data entry, and copywriting in the same sitting, which guarantees you’ll rush at least one of them.
It adds up fast. Here’s where it usually breaks.
- Audience criteria lives in someone’s head or a Slack message, so targeting changes mid-sprint and your list becomes unreliable.
- Scraping and enrichment is done by hand, which means you get inconsistent fields and a spreadsheet full of blanks.
- Personalization takes so long that you either skip it or you send fewer requests than your pipeline needs.
- Follow-ups get chaotic because the “source of truth” is scattered between LinkedIn, notes, and half-updated rows.
What You’ll Build: A LinkedIn Lead-Gen Flywheel
This automation starts with a simple form where you describe the audience you want to reach in plain English. GPT-4o turns that description into a laser-targeted Apollo search URL, so you’re not manually guessing filters. Next, an Apify scraper runs against that search and returns structured lead data as clean JSON. For each lead, GPT-4o then creates a short, human-sounding icebreaker based on what’s actually visible about the person or company. Finally, the workflow writes the lead details and the icebreaker into Google Sheets so your list stays tidy, shareable, and ready for follow-up. If you want to go further, you can optionally trigger Phantombuster to launch connection requests at scale.
The workflow begins when someone submits an audience brief. From there, Apify handles lead collection while GPT-4o handles both targeting (the Apollo URL) and messaging (icebreakers). Google Sheets becomes your tracking hub, and Phantombuster can act as the “send engine” if you enable it.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Let’s say you build a list of 100 leads for a weekly outreach push. Manually, you might spend about 2 minutes per lead collecting basics (name, URL, company site) and another 2 minutes writing an opener, which is roughly 6–7 hours total. With this workflow, the human part is the audience brief (about 10 minutes) and a quick review pass in Google Sheets. The scraping + icebreaker generation runs in the background, so what used to take most of a workday becomes something you can finish before lunch.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Apify for scraping leads from the search.
- Google Sheets to store leads and icebreakers.
- OpenAI API key (get it from the OpenAI API dashboard)
Skill level: Beginner. You will connect accounts, paste a couple of IDs/keys, and map fields into your sheet.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
An audience brief triggers everything. You publish the n8n Form Trigger and use it to capture the ideal customer profile in plain language (industry, role, size, funding, geography, whatever matters).
GPT-4o turns intent into targeting. The workflow sends your brief to GPT-4o, which generates an Apollo search URL. This is the key “translation” step, because you get a repeatable filter set without rebuilding searches by hand.
Apify scrapes and returns structured leads. n8n calls an Apify actor via HTTP Request, passing the search URL and your APIFY token. The response comes back as clean JSON, which n8n can loop over safely.
Icebreakers are generated and logged. For each lead, GPT-4o creates a short opener, then Google Sheets appends (or updates) a row with fields like name, LinkedIn URL, company site, summary, and the icebreaker.
You can easily modify the audience prompt to narrow roles, change industries, or enforce specific “must-have” filters based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Form Trigger
This workflow starts when a user submits the intake form that describes the target audience.
- Add and open Audience Intake Form.
- Set Form Title to
Audience. - Set Form Description to
describe your audinece in plain text. - In Form Fields, add the field label
descritpion of the companyand mark it required with placeholdercompany location,size,industry etc. - Confirm Audience Intake Form outputs to Build Apollo Search Link.
Step 2: Set Up the AI Search Link Builder
The workflow uses AI to convert the form submission into an Apollo search URL.
- Open Build Apollo Search Link.
- Credential Required: Connect your openAiApi credentials.
- Set Model to
chatgpt-4o-latest. - Ensure the third message content uses the expression
{{$json['descritpion of the company ']}}. - Enable JSON Output with
true. - Confirm the connection: Build Apollo Search Link → Invoke Apify Scraper.
descritpion of the company . Keep it exactly the same in the expression or the AI node will receive empty input.Step 3: Scrape Profiles and Generate the Icebreaker
The search URL is sent to Apify, and the resulting profile data is summarized into a LinkedIn icebreaker.
- Open Invoke Apify Scraper and set URL to
https://api.apify.com/v2/acts/jljBwyyQakqrL1wae/run-sync-get-dataset-items. - Set Method to
POSTand Send Body totrue. - Set Body Parameters to
{ "cleanOutput": true, "url": "{{ $json.message.content.SearchUrl }}" }. - In Headers, set Accept to
application/jsonand Authorization to[CONFIGURE_YOUR_TOKEN]. - Open Create LinkedIn Icebreaker.
- Credential Required: Connect your openAiApi credentials.
- Set Model to
chatgpt-4o-latestand keep the prompt structure as defined in the node to ensure{"Icebreaker":"..."}output. - Confirm the flow: Invoke Apify Scraper → Create LinkedIn Icebreaker → Update Sheet with Icebreaker.
Step 4: Configure Output Actions
Finally, the workflow updates your spreadsheet and launches the outbound automation.
- Open Update Sheet with Icebreaker and set Operation to
appendOrUpdate. - Select a Document and Sheet for Document ID and Sheet Name.
- Credential Required: Connect your Google Sheets credentials (no credentials are currently configured on Update Sheet with Icebreaker).
- Open Combine Item Details and keep Aggregate set to
aggregateAllItemData. - Open Launch Phantom Outreach and set URL to
https://api.phantombuster.com/api/v2/[YOUR_ID]/launch. - Set Method to
POSTand add header X-Phantombuster-Key with value[CONFIGURE_YOUR_API_KEY]. - Confirm the execution order: Update Sheet with Icebreaker → Combine Item Details → Launch Phantom Outreach.
[CONFIGURE_YOUR_TOKEN] or [CONFIGURE_YOUR_API_KEY], the HTTP requests will fail even though the workflow runs.Step 5: Test and Activate Your Workflow
Run a full test to verify outputs, then activate for live use.
- Click Execute Workflow and submit a test entry via Audience Intake Form.
- Verify Build Apollo Search Link returns a valid
SearchUrlin JSON. - Check Create LinkedIn Icebreaker outputs an
Icebreakerstring and that Update Sheet with Icebreaker writes to your sheet. - Confirm Launch Phantom Outreach returns a successful API response from Phantombuster.
- Turn on the workflow using the Active toggle to enable production runs.
Troubleshooting Tips
- Google Sheets credentials can expire or need specific permissions. If things break, check the sheet share settings (service account email access) and n8n’s Google Sheets credential first.
- If you’re using Wait nodes or external scraping, 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.
Quick Answers
About 30 minutes if you already have your API keys.
No. You’ll paste credentials, map a few fields, and test one run.
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 cents per batch) plus Apify usage depending on how many leads you scrape.
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.
Yes, and it’s the main reason this workflow stays useful over time. You’ll usually edit the “Build Apollo Search Link (GPT-4o)” prompt to change targeting rules (job titles, locations, funding stage), then tweak the “Create LinkedIn Icebreaker (GPT-4o)” prompt to match your voice. If you want different columns, adjust the mapping in “Update Sheet with Icebreaker.” You can also disable “Launch Phantom Outreach” if you only want lead capture and personalized copy.
Usually it’s an invalid or expired APIFY token, or the actor you’re calling isn’t accessible to your account. Double-check the token in n8n Credentials and confirm the actor ID/config in the “Invoke Apify Scraper” HTTP Request node. If the request works in Apify but fails in n8n, look for rate limits or a payload mismatch (the Apollo URL format can be picky).
If you self-host, there’s no hard execution limit, so volume mostly depends on your server and the time Apify takes to scrape. On n8n Cloud, the cap depends on your plan’s monthly executions. Practically, most teams start with batches of 50–200 leads, then scale once they’re happy with the targeting and Sheet format.
Often, yes, because this flow isn’t just “send data from A to B.” You’re generating an Apollo search URL, calling Apify over HTTP, looping through lead items, and writing structured rows with AI-generated copy, which is the kind of multi-step logic that gets expensive or awkward in simpler tools. n8n also gives you the option to self-host, which matters when you run this daily at scale. Zapier or Make can still be fine if you only want a lightweight two-step sheet update. If you’re unsure, Talk to an automation expert and we’ll sanity-check your use case.
Once this is running, your lead list stops being a fragile spreadsheet and becomes a repeatable system. Set it up, refine the prompts once, and let the workflow do the grinding.
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.