Google Sheets + PhantomBuster: LinkedIn invites sent
Your LinkedIn outreach probably isn’t failing because you don’t have leads. It’s failing because the “last mile” is a mess: copying rows, rewriting first lines, second-guessing tone, and then forgetting who you already contacted. LinkedIn invite automation fixes that choke point.
SDRs feel it when their day becomes admin work. A recruiter sees it when outreach quality drops after message #30. And a small agency owner definitely notices when “we’ll send invites twice a day” turns into “we did it once this week.”
This n8n workflow turns a Google Sheet of raw LinkedIn profiles into personalized connection requests sent via PhantomBuster, twice daily, with tracking and email confirmation. You’ll see exactly what it automates, what results to expect, and what you need to run it reliably.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets + PhantomBuster: LinkedIn invites sent
flowchart LR
subgraph sg0["Scheduled Run Morning Flow"]
direction LR
n0["<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/>Launch Phantom Agent"]
n1@{ icon: "mdi:database", form: "rounded", label: "Append to Output Sheet", pos: "b", h: 48 }
n2@{ icon: "mdi:robot", form: "rounded", label: "Generate Icebreaker Text", pos: "b", h: 48 }
n3@{ icon: "mdi:cog", form: "rounded", label: "Combine Lead Data", pos: "b", h: 48 }
n4@{ icon: "mdi:database", form: "rounded", label: "Retrieve Sheet Records", pos: "b", h: 48 }
n5@{ icon: "mdi:cog", form: "rounded", label: "Cap Items to Ten", pos: "b", h: 48 }
n6@{ icon: "mdi:database", form: "rounded", label: "Clear Output Sheet Rows", pos: "b", h: 48 }
n7@{ icon: "mdi:database", form: "rounded", label: "Purge Input Sheet Rows", pos: "b", h: 48 }
n8@{ icon: "mdi:message-outline", form: "rounded", label: "Dispatch Completion Email", pos: "b", h: 48 }
n9@{ icon: "mdi:play-circle", form: "rounded", label: "Scheduled Run Morning", pos: "b", h: 48 }
n10@{ icon: "mdi:play-circle", form: "rounded", label: "Scheduled Run Evening", pos: "b", h: 48 }
n5 --> n2
n3 --> n0
n9 --> n7
n10 --> n7
n1 --> n3
n4 --> n5
n2 --> n1
n0 --> n6
n6 --> n8
n7 --> n4
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 n9,n10 trigger
class n2 ai
class n1,n4,n6,n7 database
class n0 api
classDef customIcon fill:none,stroke:none
class n0 customIcon
The Problem: Personalized LinkedIn Invites Don’t Scale Manually
You start with good intentions. “We’ll send 20 thoughtful LinkedIn invites a day.” Then reality hits. Someone exports leads, someone else rewrites a first line, and the whole thing dies in a half-finished spreadsheet tab. Worse, you end up sending generic messages because you’re tired, which means acceptance rates dip and you assume LinkedIn “doesn’t work.” The hidden cost is the mental load: remembering who was contacted, what you said, and what batch is safe to send without tripping limits.
It adds up fast. Here’s where it usually breaks down.
- Copying lead fields from Google Sheets into a sender tool turns into about an hour of fiddly work each week.
- Personalization gets inconsistent, so some invites sound great and others feel like spam.
- Duplicates sneak in when multiple people touch the same list, which can burn goodwill with prospects.
- You do not have a clean audit trail, so review and optimization become guesswork.
The Solution: Google Sheets → AI Icebreakers → PhantomBuster Sends
This workflow creates a reliable pipeline from “lead captured” to “invite sent” without losing the human touch. Twice a day (morning and evening), n8n pulls fresh LinkedIn leads from your source Google Sheet, limits the batch to 10, and generates a custom icebreaker for each profile using GPT-4O. Those enriched rows get written into a separate tracking sheet so you can review what’s being sent. Then n8n triggers your PhantomBuster LinkedIn connection agent via an HTTP request, using the AI-generated text as the message. After the send, the workflow cleans up processed rows and emails you a confirmation so you know it ran.
The workflow starts on a schedule (10 AM and 5 PM USA time). It cleans up old work, fetches new rows, and generates “sounds-like-a-human” first lines by paraphrasing profile details instead of copying them. Finally, PhantomBuster handles the actual invite sending and n8n logs and notifies you.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you want to send 20 invites per day. Manually, you might spend about 3 minutes per lead to skim the profile, write a first line, and paste it into your sending tool. That’s roughly an hour every day, plus context switching. With this workflow, you review your sheet once, then n8n runs twice daily: it processes 10 leads at a time, generates the icebreakers, triggers PhantomBuster, and emails you when it’s done. Your “work” becomes a quick spot-check, maybe 10 minutes.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for lead input and tracking output.
- PhantomBuster to send LinkedIn connection requests.
- Gmail for completion notifications.
- OpenAI API key (get it from the OpenAI API dashboard)
- PhantomBuster API key (get it from your PhantomBuster account settings)
Skill level: Intermediate. You’ll connect accounts, set Sheet IDs, and paste API keys into the right credential fields.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
Twice-daily trigger (morning and evening). The schedule fires at set times, so outreach stays consistent without someone pushing buttons.
Lead cleanup and retrieval in Google Sheets. The workflow purges previously processed rows, then fetches fresh LinkedIn lead records from your source sheet. This matters more than most people think because duplicates kill campaigns quietly.
AI icebreakers generated in batches. n8n caps the run to 10 items, then sends each profile’s details into a GPT-4O prompt designed to paraphrase what’s on LinkedIn. That keeps the message personal without looking copied.
Tracking, sending, and confirmation. Enriched rows are appended into a destination sheet, aggregated, and then sent to PhantomBuster via HTTP request to launch your LinkedIn connection agent. After that, n8n clears processed output rows and emails you a completion notice through Gmail.
You can easily modify the schedule times to match your timezone and audience, or change the template style to match your brand voice. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Schedule Trigger
Set up the two scheduled triggers that start the workflow and feed into the same input-cleaning step.
- Open Scheduled Run Morning and set the schedule rule to run at
triggerAtHour: 2. - Open Scheduled Run Evening and set the schedule rule to run at
triggerAtHour: 19. - Ensure both Scheduled Run Morning and Scheduled Run Evening connect to Purge Input Sheet Rows as shown in the flow.
Step 2: Connect Google Sheets
Configure the input and output spreadsheet operations that power the lead pipeline.
- Open Purge Input Sheet Rows and set Operation to
deleteand Number to Delete to10. Credential Required: Connect your googleSheetsOAuth2Api credentials. - In Retrieve Sheet Records, select the correct Document ID and keep Sheet Name set to
gid=0. Credential Required: Connect your googleSheetsOAuth2Api credentials. - Open Append to Output Sheet and keep Operation set to
appendwith Use Append enabled. Confirm the column mappings, includingidset to{{ $('Cap Items to Ten').item.json.vmid }}andicebreakerset to{{ $json.message.content.icebreaker }}. Credential Required: Connect your googleSheetsOAuth2Api credentials. - Open Clear Output Sheet Rows and set Operation to
deleteand Number to Delete to10, with Sheet Name set togid=0. Credential Required: Connect your googleSheetsOAuth2Api credentials.
Step 3: Set Up Generate Icebreaker Text
Configure the AI node that produces the personalized icebreaker using LinkedIn profile data.
- Open Generate Icebreaker Text and verify Model is set to
gpt-4oand JSON Output is enabled. - Confirm the final user message uses the expression
={"linkedInFields":"{{ $json.firstName }} {{ $json.lastName }} , {{ $json.location }}, {{ $json.title }} at {{ $json.companyName }}, current experience: {{ $json.titleDescription }} at {{ $json.companyName }}"}so the prompt pulls from sheet data. - Credential Required: Connect your openAiApi credentials.
Step 4: Configure Processing and Launch Actions
Apply the item limit, aggregate data, and trigger the PhantomBuster agent.
- Open Cap Items to Ten and set Max Items to
10to limit daily outreach. - Ensure Combine Lead Data uses Aggregate set to
aggregateAllItemDatato bundle the processed rows. - Open Launch Phantom Agent and set URL to
https://api.phantombuster.com/api/v2/agents/launch, Method toPOST, and include the headerX-Phantombuster-Keywith the value{{ $credentials.phantombusterApi.apiKey }}. - Replace the request body parameter
idvalue[YOUR_ID]with your PhantomBuster agent ID. - Credential Required: Connect your phantombusterApi credentials in Launch Phantom Agent.
Step 5: Configure Output Notifications
Send a completion email after the PhantomBuster launch and output cleanup finish.
- Open Dispatch Completion Email and set Subject to
Connection Request Sentand Message toLinkedIn connection request campaign completed successfully. - Fill in the Send To field with the notification recipient.
- Credential Required: Connect your gmailOAuth2 credentials.
Step 6: Test and Activate Your Workflow
Validate the full execution and then turn on scheduled runs.
- Manually execute the workflow from the editor and check that Retrieve Sheet Records pulls data and Cap Items to Ten limits to 10 items.
- Confirm Generate Icebreaker Text outputs JSON with an
icebreakervalue and Append to Output Sheet writes rows to your output sheet. - Verify Launch Phantom Agent returns a successful response, then ensure Clear Output Sheet Rows deletes 10 rows and Dispatch Completion Email sends the notification.
- Once testing passes, toggle the workflow to Active to enable scheduled runs via Scheduled Run Morning and Scheduled Run Evening.
Common Gotchas
- Google Sheets OAuth permissions are the usual culprit when reads or writes fail. If the workflow suddenly can’t find a spreadsheet, check the Google credential in n8n and confirm it still has access to the exact Sheet ID.
- If PhantomBuster runs but invites do not send, it’s often the agent configuration or a depleted credit balance. Check your PhantomBuster dashboard for agent status, execution logs, and any LinkedIn warnings.
- GPT prompts that are too generic will produce bland openers, and you will end up “fixing” them by hand. Bake your tone rules into the prompt early (length, formality, what to avoid) so the output is usable as-is.
Frequently Asked Questions
About 4-6 hours if you already have PhantomBuster and your Google Sheets ready.
No. You’ll mostly be connecting accounts and pasting API keys into credentials. The “hard part” is usually getting the right Sheet columns and PhantomBuster agent ID aligned.
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 dollars a month at this volume) and PhantomBuster subscription/credits.
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 you should. Most people adjust the scheduled triggers (morning/evening timing), then tweak the “Generate Icebreaker Text” OpenAI node prompt to match their tone. Common customizations include adding a hard character limit, inserting a compliance-safe fallback when profile details are thin, and changing the batch size limit from 10 to something lower while you test. You can also swap Gmail notifications for Slack or Microsoft Teams if that’s where you actually pay attention.
Usually it’s an invalid API key or the wrong agent ID in the HTTP Request node. It can also be account-side: PhantomBuster credits are empty, the agent is paused, or LinkedIn has flagged the session and the agent can’t act until you re-authenticate.
In its current configuration, it processes 10 leads per run, twice daily, so about 20 leads per day.
Often, yes, because this isn’t just “move data from A to B.” You’re batching, generating AI text, writing to a tracking sheet, launching a PhantomBuster job, and cleaning up rows, which is real workflow logic. n8n handles that kind of branching and aggregation without turning into a giant chain of paid steps. Zapier or Make can still work if you simplify the process, but you’ll likely end up compromising on tracking or cleanup. Also, self-hosting n8n means you’re not paying per tiny action, which matters once you run this twice daily. If you want help choosing the simplest option that still gets results, Talk to an automation expert.
Once this is running, your outreach stops depending on willpower. The workflow handles the repetitive parts, and you get to focus on replies, conversations, and deals.
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.