LinkedIn to Google Sheets, verified leads in one list
You find a great LinkedIn group, click into members, and then it starts. Tabs everywhere. Copy-pasting names. Losing track of who’s worth messaging. That “quick list build” quietly becomes a whole afternoon.
This LinkedIn Sheets automation hits sales reps first, honestly. But recruiters and growth marketers feel it too, because list quality drives everything that comes next. The outcome is simple: one clean Google Sheet with only Premium or Verified profiles, ready for outreach.
Below you’ll see how the workflow pulls LinkedIn group members through ConnectSafely.ai, filters the noise out, and keeps your spreadsheet deduped even when you run it again next week.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: LinkedIn to Google Sheets, verified leads in one list
flowchart LR
subgraph sg0["Flow 1"]
direction LR
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/code.svg' width='40' height='40' /></div><br/>Process & Filter Members"]
n4["<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/code.svg' width='40' height='40' /></div><br/>Continue Pagination"]
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/code.svg' width='40' height='40' /></div><br/>Prepare for Sheets"]
n6@{ icon: "mdi:database", form: "rounded", label: "Append to Google Sheets", pos: "b", h: 48 }
n7@{ icon: "mdi:cog", form: "rounded", label: "✅ Workflow Complete", pos: "b", h: 48 }
n8@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", pos: "b", h: 48 }
n8 --> n5
n8 --> n4
n5 --> n6
n6 --> n7
n3 --> n8
end
subgraph sg1["Start Workflow Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Start Workflow", 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/code.svg' width='40' height='40' /></div><br/>Initialize Pagination"]
n0 --> n1
end
subgraph sg2["Flow 3"]
direction LR
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/>Fetch Group Members"]
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 n8 decision
class n6 database
class n2 api
class n3,n4,n5,n1 code
classDef customIcon fill:none,stroke:none
class n3,n4,n5,n1,n2 customIcon
The Problem: LinkedIn group scraping turns into busywork
LinkedIn groups are full of potential buyers, candidates, and partners, but pulling a usable list out of them is painfully manual. You open profiles one-by-one, try to spot “serious” accounts, then paste details into a sheet that slowly turns messy. Miss one field, you have to revisit the profile. Add one extra column later (follower count, connection degree), and you’re back in the tabs again. Worse, duplicates creep in whenever you do a second pass or someone changes their headline, which makes outreach tracking unreliable.
It adds up fast. Here’s where the friction usually shows up.
- Manually reviewing 500 members to find “good targets” can burn a few hours, and you still end up second-guessing your picks.
- Copy-paste workflows create small mistakes (wrong URL, swapped first/last name) that mess up follow-ups later.
- Running the same group again creates duplicates unless you have a matching key and a consistent update method.
- Basic “export” tools grab everyone, so your outreach list fills with low-signal profiles that never reply.
The Solution: Extract, filter, and dedupe members into Sheets automatically
This workflow runs in n8n and uses ConnectSafely.ai’s API to pull LinkedIn group members in batches, then keeps only the people you actually want to contact. It starts by setting your target group ID and paging rules, then fetches up to 50 members per request (the API max). Each batch is filtered so you keep Premium or Verified profiles only, and the workflow maps the fields you care about like name, headline, follower count, relationship status, and profile URL. Finally, it writes everything into Google Sheets using an “Append or Update” approach that matches on Profile ID, which means reruns won’t inflate your list with duplicates.
The workflow starts with a manual launch in n8n. It loops through pages until there are no more members to fetch, then formats each person as a clean row for your spreadsheet. When it finishes, your sheet becomes a living prospect list you can refresh any time.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you’re targeting a 5,000-member LinkedIn group and you want only Premium or Verified profiles. Manually skimming and recording just 300 decent candidates at about 30 seconds each is roughly 2.5 hours, and that’s before you clean duplicates. With this workflow, you kick it off once, it pulls members in batches of 50, filters automatically, then writes rows to Google Sheets. You’ll spend your time reviewing a finished list, not building one.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- ConnectSafely.ai for LinkedIn group member extraction API
- Google Sheets to store and maintain your lead list
- ConnectSafely.ai API key (from Dashboard → Settings → API Keys)
Skill level: Beginner. You will connect two accounts, paste a group ID, and confirm your sheet columns match.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
Manual launch from n8n. You click run when you’re ready to refresh a group, usually after you’ve joined the group and confirmed you can access members through the API.
Paging state gets initialized. The workflow sets your LinkedIn group ID and the “how many members per request” value, then tracks offsets so it can keep fetching until the group is fully processed.
Members are retrieved, then filtered and mapped. n8n calls the ConnectSafely.ai endpoint via HTTP Request, then a code step keeps only Premium or Verified members and extracts fields like profile ID, headline, follower count, and profile URL.
Google Sheets stays clean. Rows are formatted and sent to the Google Sheets node using “Append or Update,” matching on Profile ID, so the same person doesn’t appear twice if you run the workflow again.
You can easily modify the filtering rules to include follower thresholds, creator badges, or “Verified only” targeting 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 manually so you can test pagination and sheet updates on demand.
- Add the Manual Launch Trigger node as the starting point.
- Leave default settings (no parameters are required).
- Connect Manual Launch Trigger to Setup Paging State.
Step 2: Connect Google Sheets
This workflow writes filtered group members into a Google Sheet.
- Open Update Spreadsheet Rows and set Operation to
appendOrUpdate. - Set Spreadsheet to
[YOUR_ID]and Sheet to[YOUR_ID]. - Map columns exactly as configured, for example Headline to
{{ $json.headline }}and Profile ID to{{ $json.profileId }}. - Credential Required: Connect your googleSheetsOAuth2Api credentials.
Step 3: Set Up Pagination and Member Processing
These nodes initialize pagination, retrieve members, and filter them to premium or verified profiles.
- In Setup Paging State, set JavaScript Code to the provided snippet and replace
[YOUR_ID]ingroupIdwith your group identifier. - Configure Retrieve Group Members with your target API endpoint and request settings (no credentials are configured in the workflow).
- Keep Filter and Map Members code as-is so it references Setup Paging State and builds
allMembersfrom the API response. - Confirm the node uses the loop flag
continueLoopto indicate when to paginate further.
Step 4: Configure Loop Control and Output Formatting
This branch decides whether to continue pagination or format the final results for the sheet.
- In Branch on Loop Flag, set the condition Boolean with Left Value to
{{ $json.continueLoop }}and the operator to false. - Connect the false output to Format Rows for Sheets and the true output to Advance Pagination Loop.
- Keep Format Rows for Sheets code as-is so it splits
allMembersinto individual items. - Use Advance Pagination Loop to pass updated pagination state back into your request sequence.
Step 5: Configure Output and Completion
After formatting, rows are appended or updated in the sheet and the workflow finishes cleanly.
- Connect Format Rows for Sheets to Update Spreadsheet Rows.
- Ensure Update Spreadsheet Rows maps columns like Full Name to
{{ $json.fullName }}and Public Identifier to{{ $json.publicIdentifier }}. - Connect Update Spreadsheet Rows to ✅ Process Finished to mark completion.
Step 6: Test and Activate Your Workflow
Run a manual test to confirm pagination and Google Sheets updates work as expected.
- Click Execute Workflow starting at Manual Launch Trigger.
- Verify that Filter and Map Members outputs only premium or verified members and that Branch on Loop Flag routes correctly based on
{{ $json.continueLoop }}. - Confirm new or updated rows appear in your Google Sheet with matching Profile ID values.
- When successful, switch the workflow to Active for production use (and replace
[YOUR_ID]values if still present).
Common Gotchas
- ConnectSafely.ai credentials can expire or be pasted with the wrong auth type. If things break, check your n8n Credentials entry for the Bearer/Header token 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 early or you’ll be editing outputs forever.
Frequently Asked Questions
About 30 minutes if your accounts are ready.
No. You’ll paste a group ID, connect credentials, and map columns once.
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 ConnectSafely.ai API usage costs from your dashboard plan.
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 a quick tweak. In the “Filter and Map Members” code step, remove the isPremium condition and keep only the isVerified check. Common customizations include adding a minimum follower count, keeping only certain relationship statuses (like 2nd connections), or extracting extra fields like badges and fetchedAt.
Usually it’s an invalid or expired API key in your n8n credentials. Regenerate the key in your ConnectSafely.ai dashboard and update the Bearer/Header auth value in n8n. Also confirm you’re a member of the target LinkedIn group, because the API typically can’t access groups you haven’t joined. If you’re running big groups back-to-back, rate limits can also cause intermittent failures.
It’s built for large groups, including tens of thousands of members, because it paginates automatically in batches of 50.
Often, yes, because this use case needs looping, filtering logic, and safe deduping. n8n handles pagination and branching cleanly without turning every “page” into a paid task spike, which is where Zapier-style pricing can get annoying. Self-hosting also gives you more control if you’re refreshing multiple groups. That said, if your process is just “new row in Sheet → send a notification,” Zapier or Make can be faster to set up. Talk to an automation expert if you want a recommendation based on volume.
Once this is running, your spreadsheet becomes the asset, not the project. Refresh the group, keep the good profiles, and spend the saved hours on conversations that actually convert.
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.