Automating LinkedIn Sales Navigator Lead Collection with n8n, Apify, and Airtable

Lead generation can become very repetitive when you are manually searching LinkedIn Sales Navigator, copying profile details, checking whether the scraper has finished, and then adding every lead into a CRM or database.

To solve this, I built a simple n8n workflow that connects LinkedIn Sales Navigator, Apify, and Airtable to automate the lead collection process.

The goal of this workflow is simple:

Capture leads from LinkedIn Sales Navigator, wait until the Apify dataset is ready, and then automatically add those leads into Airtable or a CRM.

Workflow Overview

The workflow starts with a manual trigger for testing. Once triggered, it sends a request to an Apify LinkedIn Sales Navigator scraper using the Sales Navigator input URL.

After the scraper starts, n8n retrieves the dataset and checks whether the data is available. This step is important because Apify scraping jobs do not always return results instantly. Sometimes the dataset takes a little time to become available.

If the dataset is ready, n8n sends the scraped lead data into Airtable and creates new CRM records. If the dataset is not ready yet, the workflow waits and checks again.

Main Workflow Steps

The workflow follows this structure:

Manual Trigger

Starts the workflow for testing.

LinkedIn Sales Navigator Scraper

Sends the Sales Navigator search input to Apify.

Merge Node

Combines the input data and scraper response so the workflow can continue with the right context.

Retrieve Dataset

Fetches the dataset generated by Apify.

Verify Dataset Availability

Checks whether the dataset contains lead data.

IF Node

Routes the workflow based on whether the dataset is ready.

Add Leads to CRM

If the dataset is available, the leads are added to Airtable or another CRM.

Wait Node

If the dataset is not ready, the workflow waits and retries.

Why This Workflow Is Useful

This setup is useful for sales teams, agencies, recruiters, and B2B companies that collect leads from LinkedIn Sales Navigator and want to reduce manual work.

Instead of copying leads manually, the workflow can automatically collect, verify, and store lead data in a structured system.

It also makes the process more reliable because the workflow does not assume the dataset is ready immediately. It checks availability first, waits if needed, and only moves forward when the data is ready.

Possible Improvements

This workflow can be extended further by adding:

Duplicate checking before adding leads to Airtable

Lead enrichment using email finder or company data APIs

Slack notifications when new leads are added

Filters based on job title, location, company size, or industry

Automatic assignment of leads to sales reps

CRM integrations with HubSpot, GoHighLevel, Pipedrive, or Salesforce

AI-based lead scoring before storing the record

Important Note

When using scraping tools, always make sure you are following the platform’s terms of service and only processing data you are allowed to access and use.

Final Thoughts

This workflow shows how n8n can be used as the logic layer between different tools. Apify handles the scraping, n8n manages the workflow logic, and Airtable or the CRM stores the final lead data.

It is a simple but powerful example of how automation can turn a manual lead generation process into a repeatable and scalable system.

3 Likes

Nice workflow. The main thing I’d keep an eye on here is less the n8n logic and more the compliance side, especially LinkedIn terms, how the scraped data is stored and used, and making sure duplicates or partial datasets don’t quietly pollute the CRM. The retry pattern is solid though.

Do also take a look at this nice LinkedIn Automation node with all sorts of actions defined: SourceGeek for LinkedIn integrations | Workflow automation with n8n

Since you mentioned expanding this with company data APIs, you can easily pull verified German registration numbers and legal statuses using my German Handelsregister Lookup actor on Apify directly inside your workflow

The polling loop for Apify dataset readiness is a smart pattern - most people just add a fixed Wait node and get surprised when large scrapes run over. One extension worth considering: add a deduplication step before writing to Airtable, checking whether the LinkedIn URL already exists, so re-runs from the same Search URL don’t create duplicate leads.

1 Like

One practical note on wiring this in: after the Sales Navigator scrape gives you company names, you can add an HTTP Request node that passes each name to the Handelsregister actor and get back the registration number, court, legal form, and active/dissolved status as JSON. That last field is the useful one for lead qualification — it lets you auto-drop dissolved or shell entities before they ever hit Airtable, so your CRM only fills with verifiable active German companies. Happy to share the node config if anyone wants it. (Full disclosure: I built the actor.)

That’s actually a really useful addition.

For German B2B leads, adding the Handelsregister lookup inside the same n8n flow would make the data much stronger, not just scraped leads, but verified company records with registration number and legal status.

I can see this fitting nicely after the Sales Navigator/Apify step, where the workflow extracts the company name or domain, sends it to your Handelsregister actor, and then updates Airtable or the CRM with the verified company details.

Nice use case. I’ll check out your actor this could be a solid enrichment layer for Germany-focused lead generation workflows.

Exactly, that’s a good point.

A fixed Wait node works for small tests, but it can become unreliable when the scrape size changes or Apify takes longer than expected. That’s why I prefer checking the dataset status instead of assuming the timing.

And yes, deduplication before Airtable is definitely the next logical step. The LinkedIn profile URL would be the best unique key here, so before creating a new record, the workflow can search Airtable for the same URL and either skip it or update the existing record.

That would make the workflow much safer for re-runs, especially when using the same Sales Navigator search multiple times.

That makes a lot of sense, and I like the idea of using the active/dissolved status before the Airtable step.

For Germany-focused lead lists, that would turn the workflow from simple lead scraping into actual company qualification. Instead of pushing every scraped company into the CRM, the workflow could verify the business first, enrich it with registration number, court, and legal form, then only keep active companies.

The clean flow would be:

Sales Navigator scrape → extract company name → Handelsregister actor via HTTP Request → check legal status → skip dissolved/inactive entities → write verified companies to Airtable/CRM.

Thanks for sharing the practical wiring detail. The node config would definitely be useful for anyone trying to build this enrichment layer properly.

Glad it’s useful! Here’s the basic wiring for the HTTP Request node:

Method: POST to the Apify run-sync endpoint for the actor (…/acts/pat1987~german-handelsregister-lookup/run-sync-get-dataset-items?token=YOUR_TOKEN)

Body (JSON): { “companyName”: “{{ $json.company_name }}”, “maxResults”: 1 }

The response comes back as a JSON array of company records — registrationNumber, registrationCourt, legalForm, and status (active/dissolved).

Then an IF node on status — route active companies through to Airtable, drop the rest.

One tip: the register matches legal names, not brands, so passing the cleaned company name from the scrape works best. Happy to help if you hit any snags wiring it up.