Google Sheets + Apify: LinkedIn URLs, matched fast
You’ve got a list of company names. What you need is the right LinkedIn company URL for each one. And somehow that turns into tabs everywhere, mismatched pages, and a spreadsheet you don’t fully trust.
This LinkedIn URL finder automation hits sales ops first, honestly. But recruiters and growth marketers run into the same mess when they’re prepping outreach lists or cleaning CRM data. The outcome is simple: verified company LinkedIn URLs, generated in bulk, straight from Google Sheets.
Below, you’ll see how the workflow runs, what you get out of it, and what to watch for so you don’t waste an afternoon on small setup mistakes.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: Google Sheets + Apify: LinkedIn URLs, matched fast
flowchart LR
subgraph sg0["When clicking ‘Execute workflow’ Flow"]
direction LR
n0@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Execute workf..", pos: "b", h: 48 }
n1@{ icon: "mdi:database", form: "rounded", label: "Get URLs from first sheet", pos: "b", h: 48 }
n2@{ icon: "mdi:swap-vertical", form: "rounded", label: "Set google sheet URL & origi..", 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/merge.svg' width='40' height='40' /></div><br/>wait for previous nodes to f.."]
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/>format data for Apify INPUT .."]
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Run Actor on Apify", pos: "b", h: 48 }
n6@{ icon: "mdi:swap-horizontal", form: "rounded", label: "Get Results from Apify", pos: "b", h: 48 }
n7@{ icon: "mdi:database", form: "rounded", label: "Create new sheet for founded..", pos: "b", h: 48 }
n8@{ icon: "mdi:database", form: "rounded", label: "Add company urls into the ne..", pos: "b", h: 48 }
n5 --> n6
n6 --> n8
n1 --> n3
n4 --> n5
n3 --> n4
n0 --> n2
n7 --> n3
n2 --> n7
n2 --> n1
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 n5,n6 decision
class n1,n7,n8 database
class n4 code
classDef customIcon fill:none,stroke:none
class n3,n4 customIcon
The Problem: Company names don’t map cleanly to LinkedIn
“Find the LinkedIn URL” sounds like a quick task until you do it 50 times. You search, you click, you discover three companies with the same name, and you pick the one that “looks right.” Later, outreach bounces because you scraped the wrong page. Or your CRM ends up with a mix of /company/ URLs, personal profiles, and dead links. The worst part is the mental load: you’re constantly second-guessing, and you still don’t have a consistent list you can build on.
It adds up fast. Here’s where it breaks down in real teams.
- Manual lookups steal about 5 minutes per company, and lists rarely stay small.
- Two people can “verify” the same company and still pick different LinkedIn pages.
- One wrong URL in a sequence can derail personalization and make outreach feel sloppy.
- When the sheet isn’t consistent, every downstream tool (CRM, enrichment, ads) becomes harder to trust.
The Solution: Match LinkedIn company URLs from Google Sheets
This workflow turns a plain Google Sheet of company names into a fresh sheet populated with matched LinkedIn company URLs, using Apify’s LinkedIn Company URL Finder actor. You start with a tab called “companies” (one company name per row). When you run the workflow, n8n pulls those rows, prepares the payload Apify expects, and sends the names to Apify for resolution. Apify returns the best match for each company name, and n8n writes the results into a new output sheet. No tab-hopping. No copy-paste. And you get a clean, reusable source for outreach, CRM cleanup, or account research.
The workflow starts with a manual run, so you control when it executes. In the middle, it merges the “source sheet” and “output sheet” branches, then launches Apify and retrieves results. Finally, it appends the matched LinkedIn URLs back into Google Sheets so your list stays centralized.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say you’re prepping an outbound list of 120 target accounts for a campaign. Manually, even a “quick” LinkedIn lookup takes about 5 minutes per company once you factor in ambiguity and checking you grabbed the official page, which is roughly 10 hours of tedious work. With this workflow, you paste those 120 names into the “companies” tab, run the automation, and let Apify resolve them while n8n writes results to a new sheet. Your hands-on time is closer to 15 minutes, plus whatever time you spend spot-checking a few edge cases.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Google Sheets for your input list and output results.
- Apify to resolve company names to LinkedIn URLs.
- Apify API token (get it from Apify Console → Settings → Integrations).
Skill level: Beginner. You’ll connect two accounts, paste a Google Sheet URL, and run the workflow.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
You trigger the run. It starts with a manual click in n8n, which makes it great for list cleanups you do weekly or before a campaign.
Your sheet is read and an output sheet is prepared. n8n uses the Google Sheets nodes to pull your “companies” tab, then generates a separate sheet for clean output so you keep an untouched source list.
Company names are packaged and sent to Apify. A small code step prepares the payload, then Apify runs the LinkedIn Company URL Finder actor and returns the best match it can find for each row.
Results are written back to Google Sheets. n8n retrieves the actor results and appends the LinkedIn company URLs into the output sheet, ready for outreach, enrichment, or CRM updates.
You can easily modify the input columns to include extra context (like country or website) 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 on demand, so you’ll use the manual trigger to run it when ready.
- Add or open Manual Start Trigger as the entry point.
- Leave default settings as-is for manual execution.
Step 2: Connect Google Sheets and Set Source Inputs
Define the source spreadsheet and ensure all Google Sheets nodes can access it.
- Open Assign Sheet Source and set google_sheet_url to your spreadsheet URL (replace
xxxxxxxxxxxxwith the actual link). - In Assign Sheet Source, set google_sheet_name to
companies(or change to your sheet tab name). - Open Fetch Source Records and confirm Sheet Name uses
{{ $json.google_sheet_name }}and Document ID uses{{ $json.google_sheet_url }}. - Credential Required: Connect your googleSheetsOAuth2Api credentials in Fetch Source Records.
- Open Generate Output Sheet and set Operation to
createand Title to=company-urls-{{new Date().format('dd/mm-HH:mm')}}. - Credential Required: Connect your googleSheetsOAuth2Api credentials in Generate Output Sheet.
Assign Sheet Source outputs to both Generate Output Sheet and Fetch Source Records in parallel, so both the output sheet and source records are prepared at the same time.
Step 3: Set Up the Payload and Branch Synchronization
The workflow merges the sheet creation and data fetch paths, then prepares a query list for Apify.
- Ensure Synchronize Branches is connected to both Generate Output Sheet and Fetch Source Records.
- Open Prepare Apify Payload and keep the JavaScript code that builds
queriesfrom Fetch Source Records:
let listOfCompanies = ''
for (const item of $('Fetch Source Records').all()) {
listOfCompanies += `\n${item.json.name}`
}
return {
json: {
queries : listOfCompanies
}
}
name column, since Prepare Apify Payload reads item.json.name.Step 4: Configure Apify Execution and Results Retrieval
Apify runs the LinkedIn company URL lookup and returns dataset results for storage.
- Open Launch Apify Actor and confirm Actor Source is
storewith actor ID9X6Pju8NeHNTvzRxF. - Set Custom Body to
{{ $json }}in Launch Apify Actor to pass the queries. - Credential Required: Connect your apifyApi credentials in Launch Apify Actor.
- Open Retrieve Apify Results and set Resource to
Datasetsand Dataset ID to{{ $json.defaultDatasetId }}. - Credential Required: Connect your apifyApi credentials in Retrieve Apify Results.
Step 5: Configure Output Writing to Google Sheets
Results are appended to the newly created output sheet in your Google Sheets file.
- Open Append Results to Sheet and set Operation to
append. - Set Sheet Name (by ID) to
{{ $('Generate Output Sheet').first().json.sheetId }}. - Set Document ID to
{{ $('Assign Sheet Source').first().json.google_sheet_url }}. - Credential Required: Connect your googleSheetsOAuth2Api credentials in Append Results to Sheet.
Step 6: Test and Activate Your Workflow
Run a manual test to confirm the data flows from Google Sheets to Apify and back to the output sheet.
- Click Execute Workflow on Manual Start Trigger to run the workflow.
- Verify Generate Output Sheet creates a new tab with a name like
company-urls-{{new Date().format('dd/mm-HH:mm')}}. - Check that Append Results to Sheet writes Apify results into the new output sheet.
- Once confirmed, toggle the workflow to Active for production use.
Common Gotchas
- Google Sheets credentials can expire or lack write permissions. If rows aren’t being created, check the connected Google account and the spreadsheet sharing 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.
- Apify runs can return unexpected matches when company names are too generic. Add a qualifier in your sheet (like “Inc” vs “Ltd” or a website column) and tweak the payload so the actor has better context.
Frequently Asked Questions
About 20 minutes if your Google Sheets and Apify accounts are ready.
No. You’ll mainly connect accounts and paste in your Google Sheet URL. The workflow already includes the logic that formats the Apify request.
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 companies you process.
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, but you’ll need to use what Apify returns (or add your own rule). Common tweaks include updating the “Prepare Apify Payload” code step to send extra context (like website or country), adding an If check to flag blank or suspicious results, and writing a “needs review” column alongside the URL in the Append Results to Sheet step.
Most of the time it’s permissions: the connected Google account can read the sheet but can’t create a new sheet or append rows. Reconnect Google Sheets credentials in n8n, then verify the spreadsheet is shared correctly and the workflow is pointing at the right tab name (the template expects “companies” unless you changed it). If it still fails, check if the sheet URL in the “Set google sheet URL & original sheet name” step is an old link from another workspace.
Hundreds at a time is realistic for most teams, then it depends on your n8n plan, your server (if self-hosted), and Apify run limits.
Often, yes, because this is more than a simple “A to B” zap. n8n makes it easier to create an output sheet, merge branches, and handle looping without paying extra for every conditional path. Self-hosting is another big deal if you’re doing this frequently and don’t want to think about task limits. Zapier or Make can still be fine for tiny lists, especially if you prefer a very guided UI. If you’re on the fence, Talk to an automation expert and you’ll get a straight answer based on your volume.
Once this is running, your spreadsheet becomes a reliable source instead of a “maybe” list. Set it up, run it when you need it, and spend your time on outreach that actually moves 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.