Apify + Google Sheets: scored LinkedIn leads fast
Copying LinkedIn profiles into a spreadsheet looks harmless. Then you do it 40 times. Names get misspelled, company fields drift, and you lose the one detail that would have made the outreach personal.
Sales reps feel this every week. A recruiter chasing candidates does too. And if you run an agency, lead scoring automation is the difference between “we’ll follow up later” and having a clean pipeline you can act on.
This workflow takes a simple list of LinkedIn URLs, enriches each profile through Apify, calculates a lead score, then logs everything into Google Sheets so you can move faster without lowering your standards.
How This Automation Works
Here’s the complete workflow you’ll be setting up:
n8n Workflow Template: Apify + Google Sheets: scored LinkedIn leads fast
flowchart LR
subgraph sg0["Manual Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "Manual Trigger", pos: "b", h: 48 }
n1@{ icon: "mdi:play-circle", form: "rounded", label: "Check New Entries", 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/webhook.dark.svg' width='40' height='40' /></div><br/>Webhook Input"]
n3@{ icon: "mdi:database", form: "rounded", label: "Read LinkedIn URLs", pos: "b", h: 48 }
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/>Process All Input Sources"]
n5@{ icon: "mdi:swap-vertical", form: "rounded", label: "Format Input Data", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Check Batch Processing", pos: "b", h: 48 }
n7["<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/>Split Batch URLs"]
n8["<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/>Scrape LinkedIn Profile"]
n9["<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 Profile Data"]
n10@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Route to Google Sheets", pos: "b", h: 48 }
n11@{ icon: "mdi:database", form: "rounded", label: "Add to Google Sheets CRM", pos: "b", h: 48 }
n12["<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/webhook.dark.svg' width='40' height='40' /></div><br/>Respond Success"]
n2 --> n4
n0 --> n4
n7 --> n8
n1 --> n3
n5 --> n6
n3 --> n4
n9 --> n10
n6 --> n7
n6 --> n8
n10 --> n11
n8 --> n9
n11 --> n12
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 n0,n1 trigger
class n6,n10 decision
class n3,n11 database
class n2,n8,n12 api
class n4,n7,n9 code
classDef customIcon fill:none,stroke:none
class n2,n4,n7,n8,n9,n12 customIcon
Why This Matters: LinkedIn Research Gets Messy Fast
LinkedIn prospecting has a hidden tax: context switching. You jump from a profile to a spreadsheet, back to a browser tab, then into another tool to guess an email format. After a while you’re not “researching,” you’re doing data entry with a sales title. And the worst part is how unreliable it becomes. Two people can research the same lead and log different titles, different company names, and different notes because the process is informal and rushed.
It adds up fast. Here’s where the friction compounds.
- You spend about 5 minutes per profile just copying fields, which turns 50 leads into roughly 4 hours of grunt work.
- Email guesses end up inconsistent, so outreach bounces or never gets sent at all.
- Manual “lead quality” labeling drifts over time because everyone scores differently on different days.
- Batch research is painful, which makes it hard to scale lists for campaigns or clients.
What You’ll Build: LinkedIn Enrichment + Lead Scoring to Sheets
This n8n workflow gives you a single place to drop LinkedIn URLs and get back CRM-ready lead rows. You can feed it new URLs from a Google Sheet, fire it manually when you want, or push them in via a webhook from another tool. Once a URL arrives, the workflow normalizes the input, optionally splits items into batches, and sends each profile to Apify through an HTTP request. The response gets transformed into clean fields like name, company, role, and other profile signals. Then it generates email pattern variations and calculates a lead score so you can prioritize outreach without “gut feel” scoring.
It starts with your URL list. Apify handles the heavy lift of profile extraction. Google Sheets becomes the living CRM table your team can filter, sort, and hand off to outreach.
What You’re Building
| What Gets Automated | What You’ll Achieve |
|---|---|
|
|
Expected Results
Say you’re enriching 30 LinkedIn profiles for a weekly outreach push. Manually, even a quick process is about 5 minutes per profile between copying fields and making an email guess, so that’s roughly 2.5 hours. With this workflow, you paste the 30 URLs into the input sheet (maybe 10 minutes), then let Apify + n8n process the batch while you do something else. When it’s done, you have a scored, standardized sheet ready to filter by “high quality” and start messaging.
Before You Start
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Apify for LinkedIn profile scraping and enrichment.
- Google Sheets to store and review your scored leads.
- Apify API token (get it from your Apify account settings).
Skill level: Intermediate. You’ll connect accounts, paste a few IDs/tokens, and test with sample LinkedIn URLs.
Want someone to build this for you? Talk to an automation expert (free 15-minute consultation).
Step by Step
A new LinkedIn URL shows up. That can happen because your Google Sheet is checked every 5 minutes, because you trigger it manually, or because another system calls the webhook with URLs.
Inputs get standardized. The workflow aggregates the different sources, then normalizes everything into one consistent format so the next steps don’t care where the URL came from.
Apify enriches the profile. n8n sends each LinkedIn URL via an HTTP request to Apify’s scraper, then transforms the response into neat columns like name, job title, company, and whatever signals your scoring uses.
Scored leads land in Google Sheets. If the route conditions are met, the workflow appends a new row to your CRM sheet and (for webhook calls) returns a success response so your sending system knows it worked.
You can easily modify the scoring rules to match your ICP, or change the input method from Google Sheets to webhook-only based on your needs. See the full implementation guide below for customization options.
Step-by-Step Implementation Guide
Step 1: Configure the Trigger Types
Set up the three entry points so the workflow can accept manual runs, scheduled checks, and webhook submissions.
- Open Manual Launch Trigger and keep it available for on-demand testing.
- Open Scheduled Entry Check and define the schedule that should read new LinkedIn URLs from your sheet.
- Open Incoming Webhook Trigger and copy the webhook URL for external submissions.
Step 2: Connect Google Sheets
Both data retrieval and CRM updates rely on Google Sheets connections.
- Open Retrieve LinkedIn Links and connect your sheet that contains profile URLs.
- Open Append Sheets CRM and connect the sheet where normalized lead data should be appended.
Step 3: Set Up Input Aggregation and Normalization
This step consolidates incoming data and standardizes it before deciding how to process it.
- Open Aggregate Input Sources and confirm it merges data from Incoming Webhook Trigger, Manual Launch Trigger, and Retrieve LinkedIn Links.
- Open Normalize Input Data to ensure the output fields align with your expected LinkedIn URL schema.
- Open Batch Mode Check and define the condition that determines whether data should be processed as a batch or a single URL.
Step 4: Configure LinkedIn Enrichment and Transformation
These nodes retrieve LinkedIn data and reshape it for your CRM sheet.
- Open Split URL Batch to ensure batched URLs are split into individual items.
- Open LinkedIn Profile Request and set the request details (URL, headers, and parameters) required by your LinkedIn data source or API.
- Open Transform Profile Data and map the response fields into the structure required by your CRM sheet.
Step 5: Configure Output Routing and Response
Route valid data to your CRM sheet and return a webhook response.
- Open Route to Sheets and define the condition that decides if data should be appended to CRM.
- Open Append Sheets CRM and confirm the append settings match your target sheet columns.
- Open Return Success Response to configure the response payload for webhook-based submissions.
Step 6: Test and Activate Your Workflow
Verify each trigger and ensure the full flow completes successfully before activating it.
- Click Execute Workflow from Manual Launch Trigger to test the full pipeline.
- Send a sample payload to Incoming Webhook Trigger and confirm it reaches Return Success Response.
- Check that Append Sheets CRM adds a new row with transformed LinkedIn data.
- Once validated, toggle the workflow to Active to enable scheduled and webhook processing in production.
Troubleshooting Tips
- Apify credentials can expire or the token may not have access to the right actor. If things break, check your Apify API token and actor settings 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.
- Google Sheets append failures are usually permissions or a wrong spreadsheet ID. Confirm the n8n Google Sheets credential has access to the exact file and tab you referenced.
Quick Answers
About 30 minutes if your Apify token and Google Sheet are ready.
No. You’ll mostly connect accounts and paste in the Apify token and Google Sheets IDs.
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 Apify usage costs based on how many profiles 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 you should. The easiest place to adjust behavior is in the “Transform Profile Data” and “Aggregate Input Sources” code steps, where fields are mapped and the score is calculated. Common tweaks include changing what counts as a senior title, weighting connection count differently, and adding location or industry rules. You can also swap the input method: keep Google Sheets for a simple team workflow, or go webhook-first if you’re feeding URLs from a form, CRM, or enrichment queue.
Usually it’s an invalid or expired API token, so regenerate it in Apify and update the HTTP Request node in n8n. It can also be the wrong Apify actor/scraper configuration, or Apify throttling when you push a big batch at once. If only some URLs fail, check that they are full LinkedIn profile URLs and not shortened links.
If you self-host n8n, there’s no execution cap (it mainly depends on your server and Apify limits), and most teams run batches of a few dozen to a few hundred profiles without drama.
Often, yes. This workflow has multiple triggers (sheet schedule, manual, webhook), branching logic, batching, and custom transformation logic, which is exactly where Zapier-style “two-step zaps” start getting awkward or expensive. n8n also gives you the self-hosting option, which is a big deal if you plan to process lots of leads every month. That said, if your process is simply “URL in, row out” and you’ll never change scoring, a simpler tool can be fine. If you want a second opinion on what fits your stack, Talk to an automation expert.
Once this is running, your “research” time stops being data entry and starts being decision-making. The workflow handles the repetitive parts so you can focus on outreach that actually converts.
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.