LinkedIn to Airtable, qualified leads from reactions
You post on LinkedIn, people react, and then… nothing. Not because the interest isn’t real, but because turning reactions into outreach means endless profile clicking, messy notes, and “I’ll do it later” that never happens.
This LinkedIn Airtable leads automation hits marketing managers first (you’re the one expected to prove pipeline), but founders and agency leads feel it too. The outcome is simple: reactions become qualified prospects in Airtable, already deduped and labeled so you can reach out with confidence.
Below you’ll see how the workflow moves from a LinkedIn post URL to an Airtable table of “best-fit” people, plus what you need to run it safely without tripping LinkedIn’s anti-scraping alarms.
How This Automation Works
The full n8n workflow, from trigger to final output:
n8n Workflow Template: LinkedIn to Airtable, qualified leads from reactions
flowchart LR
subgraph sg0["When clicking ‘Test workflow’ Flow"]
direction LR
n0@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If3", pos: "b", h: 48 }
n1@{ icon: "mdi:swap-vertical", form: "rounded", label: "Edit Fields1", pos: "b", h: 48 }
n2@{ icon: "mdi:robot", form: "rounded", label: "Structured Output Parser1", pos: "b", h: 48 }
n3@{ icon: "mdi:play-circle", form: "rounded", label: "When clicking ‘Test workflow’", pos: "b", h: 48 }
n4@{ icon: "mdi:cog", form: "rounded", label: "Aggregate", pos: "b", h: 48 }
n5@{ icon: "mdi:swap-horizontal", form: "rounded", label: "If", pos: "b", h: 48 }
n6@{ icon: "mdi:cog", form: "rounded", label: "No Operation, do nothing", 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/airtable.svg' width='40' height='40' /></div><br/>Check Duplication"]
n8@{ icon: "mdi:swap-vertical", form: "rounded", label: "Clean Data", pos: "b", h: 48 }
n9@{ icon: "mdi:swap-vertical", form: "rounded", label: "Loop Over Items", pos: "b", h: 48 }
n10@{ icon: "mdi:cog", form: "rounded", label: "Wait Rate Limit", pos: "b", h: 48 }
n11["<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/airtable.svg' width='40' height='40' /></div><br/>Create New Record"]
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/code.svg' width='40' height='40' /></div><br/>Random Delay"]
n13@{ icon: "mdi:cog", form: "rounded", label: "Random Delay Wait", pos: "b", h: 48 }
n14["<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/>Random Delay Generator"]
n15@{ icon: "mdi:cog", form: "rounded", label: "Random Delay Wait Node", pos: "b", h: 48 }
n16["<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/airtable.svg' width='40' height='40' /></div><br/>Update Record"]
n17@{ icon: "mdi:robot", form: "rounded", label: "AI ICP Classification", pos: "b", h: 48 }
n18["<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 Post Reactions"]
n19["<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/>Enrich LinkedIn Profile"]
n5 --> n6
n5 --> n11
n0 --> n1
n4 --> n14
n8 --> n7
n1 --> n17
n12 --> n13
n16 --> n9
n9 --> n8
n10 --> n9
n7 --> n5
n11 --> n12
n13 --> n19
n17 --> n16
n18 --> n10
n14 --> n15
n15 --> n0
n19 --> n4
n6 --> n9
n2 -.-> n17
n3 --> n18
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 n3 trigger
class n2,n17 ai
class n0,n5 decision
class n7,n11,n16 database
class n18,n19 api
class n12,n14 code
classDef customIcon fill:none,stroke:none
class n7,n11,n12,n14,n16,n18,n19 customIcon
The Problem: LinkedIn Engagement Doesn’t Turn Into Leads
If you’ve ever tried to “work the reactions” on a LinkedIn post, you know the trap. You open the reaction list, click into a profile, skim a headline, maybe glance at the company, then try to remember what you just saw while you jump back to the post. Do that 50 times and your brain melts. You still don’t have a clean list, you missed a few good prospects, and now you’re second-guessing your own notes. Worse, you’ll accidentally chase the same people again next week because there’s no reliable record.
It adds up fast. Here’s where it usually breaks down.
- You spend about 2–5 minutes per profile just to decide “maybe,” which turns a single post into a couple hours of research.
- Duplicates sneak in because names repeat, job titles change, and your “list” lives in DMs, spreadsheets, and random tabs.
- Manual qualification is inconsistent, so outreach quality depends on your mood and how tired you are that day.
- You avoid doing it regularly because the workflow is annoying, which means you miss the compounding effect of daily prospecting.
The Solution: Automatically Qualify Reactors and Save Them to Airtable
This workflow takes a LinkedIn post (the one that’s already getting reactions) and turns that engagement into a structured prospect pipeline inside Airtable. It starts by fetching a page of reactions through an Apify actor designed for LinkedIn scraping without cookies (important for account safety). The workflow cleans and normalizes the data, checks Airtable to see if each person already exists, and only processes new profiles so you don’t waste time or scraping credits. Next, it enriches each profile with deeper LinkedIn data like company and experience, then bundles everything into a readable summary. Finally, an AI agent evaluates each person against your Ideal Customer Profile criteria and updates Airtable with a qualification result and reasoning you can actually trust.
It kicks off when you run the workflow with a LinkedIn post URL. Then it scrapes reactors, enriches profiles, and uses AI to label the best-fit prospects. Airtable becomes the single source of truth, and optional Slack notifications can keep your team in the loop.
What You Get: Automation vs. Results
| What This Workflow Automates | Results You’ll Get |
|---|---|
|
|
Example: What This Looks Like
Say your post gets 80 reactions and you try to qualify them manually. At a very normal 3 minutes per profile (click, scan, decide, note), that’s about 4 hours. With this workflow, you paste the post URL once, let it process one page of reactions (roughly 50–100 profiles), and wait for enrichment and AI scoring to finish. You’ll still review the “qualified” list, but that review is minutes, not hours, because Airtable already has the details and a clear ICP decision.
What You’ll Need
- n8n instance (try n8n Cloud free)
- Self-hosting option if you prefer (Hostinger works well)
- Airtable for storing prospects and qualification results.
- Apify to scrape reactions and enrich LinkedIn profiles.
- OpenAI API key (get it from the OpenAI API dashboard).
Skill level: Intermediate. You’ll connect accounts, paste a LinkedIn post URL, and adjust the ICP prompt so the AI evaluates the right people.
Don’t want to set this up yourself? Talk to an automation expert (free 15-minute consultation).
How It Works
You start with a LinkedIn post URL. The workflow is designed to run on demand (or on a safe daily schedule) so you process one page of reactions at a time.
Reactions get collected and cleaned. Apify pulls the reaction list, n8n maps the scraper output into normalized fields (name, title, profile URL), then it checks Airtable to see if the person already exists.
Only new profiles get enriched and scored. For fresh records, the workflow waits between requests (including a random delay) and enriches each profile with deeper details like company and experience before sending a structured summary to the AI agent.
Airtable becomes the handoff point. The AI writes back an ICP decision plus reasoning, and your table is ready for outreach, assignment, or a Slack alert depending on how you want to operationalize it.
You can easily modify the ICP criteria to match your market, then route “Qualified” leads to Slack or a CRM 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 and then pulls LinkedIn post reactions before processing each profile.
- Add the Manual Start Trigger node as the entry point.
- Connect Manual Start Trigger to Fetch Post Reactions as shown in the execution flow.
- Confirm the workflow canvas includes Flowpast Branding as a reference-only sticky note (no configuration needed).
Step 2: Connect Airtable
The workflow searches, creates, and updates Airtable records for each LinkedIn profile.
- Open Lookup Existing Record and select your Airtable Base and Table.
- Set Operation to
searchand keep Filter By Formula as=({Name} = "{{ $json.profile_name }}"). - Open Create Airtable Entry and select the same Base and Table.
- Confirm the column mappings use expressions such as
{{ $('Normalize Profile Data').item.json.profile_name }}for Name and{{ $('Normalize Profile Data').item.json.profile_linkedin_url }}for Profile URL. - Open Update Airtable Entry and select the same Base and Table, then confirm id is set to
{{ $('Create Airtable Entry').item.json.id }}.
Credential Required: Connect your airtableOAuth2Api credentials to Lookup Existing Record, Create Airtable Entry, and Update Airtable Entry.
Step 3: Configure LinkedIn Data Fetching and Throttling
This section pulls reactions from Apify and throttles requests before iterating through profiles.
- Open Fetch Post Reactions and set URL to
https://api.apify.com/v2/acts/apimaestro~linkedin-post-reactions/run-sync-get-dataset-items?token=[CONFIGURE_YOUR_TOKEN]. - Set Method to
POST, enable Send Body, and set JSON Body to{ "post_url": "[YOUR_ID]", "page_number": 1 }. - Keep the connection from Fetch Post Reactions to Rate Limit Pause to avoid API throttling.
- Ensure Rate Limit Pause feeds into Iterate Records so each reaction is processed in batches.
Step 4: Normalize and Enrich Profile Data
This step formats reaction data, checks for existing records, and enriches profile details.
- In Normalize Profile Data, confirm each field uses the correct expressions, such as
{{ $json.reactor.name }}for profile_name. - Connect Normalize Profile Data to Lookup Existing Record, then to Presence Check for record existence logic.
- In Enrich Profile Data, set the URL to
https://api.apify.com/v2/acts/dev_fusion~linkedin-profile-scraper/run-sync-get-dataset-items?token=[CONFIGURE_YOUR_TOKEN]. - Set JSON Body to
{ "profileUrls": ["{{ $('Normalize Profile Data').item.json.profile_linkedin_url }}"] }to enrich each profile. - Keep the route from No-Op Placeholder to Iterate Records as it acts as a passthrough for existing records.
Step 5: Build the Profile Aggregation and Delay Gates
These nodes consolidate profile fields and insert random delays to respect external API limits.
- In Combine Profile Fields, keep all Fields to Aggregate such as
fullName,jobTitle, andexperiences[0].title. - In Generate Delay Value, keep the JavaScript code as provided to return a random delay in seconds.
- Set Pause for Delay Value Amount to
{{ $('Generate Delay Value').item.json.seconds }}. - Ensure Validity Gate 2 checks for non-empty JSON using
{{ $json && Object.keys($json).length > 0 }}before data is mapped.
Step 6: Configure the AI Qualification and Mapping
Here, the workflow composes scraper output, evaluates ICP fit, and prepares structured results.
- In Map Scraper Output, set linkedin_scraper_out to the multi-line expression that joins fields from Combine Profile Fields, starting with
{{ $('Combine Profile Fields').item.json.fullName[0] }}. - Open AI ICP Evaluation and keep the Text prompt as defined; it references
{{ $('Map Scraper Output').item.json.linkedin_scraper_out }}for input. - Attach Structured Result Parser as the output parser for AI ICP Evaluation and keep the JSON schema example.
Credential Required: Connect your LLM credentials in AI ICP Evaluation (the model is configured on the parent node, not on Structured Result Parser).
icp and reasoning.Step 7: Configure Creation and Updates After AI Scoring
New profiles are created in Airtable, delayed, enriched, scored by AI, and then updated.
- From Create Airtable Entry, keep the flow to Generate Random Delay to add randomized wait time after a new record.
- In Delay by Random Time, set Amount to
{{ $('Generate Random Delay').item.json.seconds }}. - Confirm Update Airtable Entry sets MSP? to
{{ $('AI ICP Evaluation').item.json.output.msp }}and Reason to{{ $('AI ICP Evaluation').item.json.output.reasoning }}. - Keep the update of Email Address to
{{ $('Enrich Profile Data').first().json.email }}.
Step 8: Test and Activate Your Workflow
Run a manual test to verify the API calls, Airtable operations, and AI evaluation results.
- Click Execute Workflow starting from Manual Start Trigger.
- Confirm Fetch Post Reactions returns a list of reactors and that Iterate Records processes them.
- Verify new entries appear in Airtable from Create Airtable Entry and that Update Airtable Entry fills MSP?, Reason, and Email Address.
- Once successful, toggle the workflow to Active for production use.
Common Gotchas
- Airtable credentials can expire or need specific permissions. If things break, check your n8n Airtable connection settings and base access first.
- If you’re using Wait nodes or external enrichment, processing times vary. Bump up the wait duration if downstream nodes fail on empty responses.
- Default prompts in AI nodes are generic. Add your ICP definition and brand voice early or you’ll be editing outputs forever.
Frequently Asked Questions
About 45 minutes if your Airtable, Apify, and OpenAI accounts are ready.
No. You’ll mostly connect accounts and edit the ICP prompt to match your target customer.
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 costs (often around $0.01-0.05 per profile) and OpenAI API usage.
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. Update the ICP criteria inside the AI ICP Evaluation node so it reflects your real “must-have” signals (titles, industries, company size, regions), then filter on the AI output and send only “Qualified” records to Slack. Many teams also tweak the Map Scraper Output step to store extra fields in Airtable, like seniority or a short outreach angle.
Usually it’s an expired OAuth token or the base/table permissions changed. Reconnect Airtable in n8n and confirm the table still matches the fields the workflow is trying to write. If it fails only sometimes, it can also be Airtable rate limiting when you process a bigger batch.
Safest is one page per day, which is typically about 50–100 profiles.
For LinkedIn scraping and enrichment, n8n is usually the more practical choice because you can add branching logic, batching, and deliberate delays without fighting plan limits. It also gives you the option to self-host, which matters if you run this daily and don’t want to count every task. Zapier and Make can still work for simpler “new row → send message” flows, but they’re not as comfortable when you need loops, dedupe checks, and careful throttling. Frankly, the rate-limiting part is where these builds succeed or fail. If you want a second opinion on your setup, Talk to an automation expert.
Once this is running, your LinkedIn engagement stops being a feel-good metric and starts becoming a daily lead source. Set it up, keep the limits conservative, and let Airtable do the remembering for you.
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.