Find leads & grow your network

LinkedIn Job Scraper to Sales Intelligence

Identify companies actively hiring, extract buying signals, and enrich with contact data—website, phone, email, and employee count—all automatically.

LinkedIn Apify LinkFinder AI Google Sheets n8n

About This Playbook

Companies that are hiring are companies that are growing—and growing companies buy. This workflow transforms LinkedIn job postings into a goldmine of sales intelligence. Instead of manually searching for prospects, you'll automatically identify companies with active hiring needs (a powerful buying signal) and enrich them with complete contact information.

The workflow scrapes LinkedIn for job postings matching your target keywords (like "SDR", "Account Executive", or "DevOps Engineer"), extracts the hiring companies, removes duplicates, and then enriches each company with their website, phone number, email address, and employee count using LinkFinder AI's data enrichment APIs.

Perfect for sales teams building targeted outreach lists, recruiters identifying companies with hiring budgets, agencies finding clients who need help scaling, and founders looking for companies in growth mode. Process 50-100+ companies per run in just 4-6 minutes.

50-100+
Companies per run
4-6 min
Processing time
4
Data points enriched
100%
Automated
Google Sheets
Trigger
Apify Job
Scraper
Dedupe
Companies
Loop Each
Company
LinkFinder AI
Enrichment
Aggregate
Results

Step-by-Step Guide

1

Configure Google Sheets Trigger

Set up your Google Sheets as the workflow trigger. Create a spreadsheet with columns for "keywords (job title)", "location", and "max records". Each new row added will trigger a job search. For example: "Sales Development Representative", "New York", "50".

Google Sheets Trigger
2

Scrape LinkedIn Job Postings

The workflow calls Apify's LinkedIn Job Scraper to find companies posting jobs matching your keywords. Configure the date range (default: 1 week), location, and maximum records. The scraper extracts company name, job title, location, posting date, and LinkedIn URL for each job.

Apify LinkedIn Job Scraper
3

Deduplicate Companies

The Dedupe Companies node processes each job posting and extracts the company information. This removes duplicates when multiple jobs are posted by the same company, ensuring you only enrich each company once—saving API credits and processing time.

JavaScript Code Node
4

Enrich with LinkFinder AI

For each unique company, the workflow makes 4 sequential API calls to LinkFinder AI: company_name_to_website, company_name_to_phone, company_name_to_employee_count, and company_name_to_email. Each call enriches the company record with verified contact data.

LinkFinder AI API
5

Merge & Aggregate Results

The Merge Company Data node combines all enrichment results with the original job data. You get a complete record including: company name, website, phone, email, employee count, job titles they're hiring for, locations, LinkedIn URL, and a "hiring signal" note.

JavaScript Code Node
6

Export Your Sales List

Connect the Aggregate Results node to your preferred destination—Google Sheets for easy sharing, your CRM via API, or a Slack notification. The aggregated data is formatted and ready for immediate sales outreach.

Export Options

Configuration & Setup

Required API Keys

  • Apify API Key — Get from console.apify.com (free $5/month)
  • LinkFinder AI API Key — Get from linkfinderai.com account settings
  • Google OAuth — Connect your Google account for Sheets trigger

Configuration Steps

  • Replace ENTER_API_KEY in "Apify - Start Job Scraper" node URL
  • Add LinkFinder AI key to Authorization headers in all 4 enrichment nodes
  • Connect Google Sheets OAuth and link your spreadsheet
  • Add output node (Sheets, CRM, Slack) after Aggregate Results

Input Sheet Format

  • Column A: keywords (job title) — e.g., "Account Executive"
  • Column B: location — e.g., "San Francisco" or "United States"
  • Column C: max records — e.g., "50" or "100"

Common Pitfalls

  • Rate limits: Apify free tier has monthly limits—monitor usage
  • Timeout: Large batches may timeout—keep max records under 100
  • Credits: Each enrichment uses 1 LinkFinder AI credit per call
Pro Tip: Optimize Your Credits

This workflow makes 4 API calls per company. For 50 companies, that's 200 credits. Consider which enrichment data you actually need—you can remove unused enrichment nodes to reduce credit consumption.

Download & Implementation

Quick Import Instructions

  1. Download the workflow JSON file using the button above
  2. Open n8n and go to Workflows → Import from File
  3. Select the downloaded JSON file
  4. Replace the API keys in the specified nodes (see Configuration section)
  5. Connect your Google Sheets OAuth credentials
  6. Test with a small batch (10-20 records) first
  7. Add your output destination (Sheets, CRM, Slack, etc.)
View Full Workflow JSON
linkedin-job-scraper-sales-intelligence.json
{
  "name": "LinkedIn Job Scraper → Sales Intelligence",
  "nodes": [
    {
      "parameters": {
        "content": "## 🔍 LinkedIn Job Scraper → Sales Intelligence Workflow\n\n**What it does:** Scrapes LinkedIn for companies posting specific jobs, identifies buying signals, enriches MULTIPLE companies with contact data\n\n**Input:** Job title keywords (processes 50-100+ companies per run)\n\n**Output:** Enriched company list with website, phone, email, employee count for ALL companies\n\n**Scalability:** Processes 40-50 companies in batches, ~4-6 minutes total\n\n**Setup:**\n1. Get Apify API key from https://console.apify.com/account/integrations\n2. Get LinkFinder AI key from https://linkfinderai.com\n3. Replace YOUR_APIFY_API_KEY in Node 3\n4. Replace YOUR_LINKFINDER_API_KEY in Nodes 7-10\n5. Configure Google Sheets connection\n6. Edit job search parameters in Node 2\n7. Test the workflow\n\n**Services used:** Apify LinkedIn Job Scraper, company_name_to_website, company_name_to_phone, company_name_to_employee_count, company_name_to_email\n\n**Perfect for:** Sales teams identifying companies actively hiring (buying signal), building targeted outreach lists at scale",
        "height": 420,
        "width": 380,
        "color": 4
      },
      "type": "n8n-nodes-base.stickyNote",
      "typeVersion": 1,
      "position": [0, 0],
      "name": "📖 Documentation",
      "id": "3e3ba859-7d2f-4589-b79b-9b72c7a74c8e"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.apify.com/v2/acts/ivanvs~linkedin-job-scraper/run-sync-get-dataset-items?token=ENTER_API_KEY",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {"name": "Content-Type", "value": "application/json"}
          ]
        },
        "sendBody": true,
        "specifyBody": "json",
        "jsonBody": "={\n    \"datePosted\": \"1 week\",\n    \"extractCompanyData\": false,\n    \"keywords\": \"{{ $json['keywords (job title)'] }}\",\n    \"location\": \"{{ $json.location }}\",\n    \"maxRecords\": {{ $json['max records'] }}\n}",
        "options": {}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [1328, 224],
      "name": "Apify - Start Job Scraper",
      "id": "7c2ee858-0257-44d4-a106-b12c1a92f361"
    },
    {
      "parameters": {
        "mode": "runOnceForEachItem",
        "jsCode": "const job = $input.item.json;\nconst companyName = job.company?.name || '';\n\nreturn {\n  company_name: companyName,\n  company_url: job.company?.url || '',\n  job_title: job.title || '',\n  location: job.location?.city && job.location?.region \n    ? `${job.location.city}, ${job.location.region}` \n    : '',\n  posted_date: job.datePosted || '',\n  job_url: job.url || '',\n  employment_type: job.employmentType || '',\n  applicants: job.applicants || 0\n};"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [1536, 224],
      "name": "Dedupe Companies",
      "id": "46c6bd1e-9974-4786-890b-6cf73e7816b5"
    },
    {
      "parameters": {"options": {}},
      "type": "n8n-nodes-base.splitInBatches",
      "typeVersion": 3,
      "position": [1760, 224],
      "name": "Loop Each Company",
      "id": "76e29500-0cd9-4bca-ad37-0782152c69ba"
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.linkfinderai.com",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {"name": "Content-Type", "value": "application/json"},
            {"name": "Authorization", "value": "Bearer ENTER_API_KEY"}
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {"name": "type", "value": "company_name_to_website"},
            {"name": "input_data", "value": "={{ $json.company_name }}"}
          ]
        },
        "options": {"timeout": 30000}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [2144, 224],
      "name": "LinkFinder AI - Get Website",
      "id": "bb718f2f-55d0-4ce9-9395-2212ab53bbd7",
      "continueOnFail": true
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.linkfinderai.com",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {"name": "Content-Type", "value": "application/json"},
            {"name": "Authorization", "value": "Bearer ENTER_API_KEY"}
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {"name": "type", "value": "company_name_to_phone"},
            {"name": "input_data", "value": "={{ $('Loop Each Company').item.json.company_name }}"}
          ]
        },
        "options": {"timeout": 30000}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [2400, 224],
      "name": "LinkFinder AI - Get Phone",
      "id": "79293270-57fd-4dd7-b3aa-4755251cd021",
      "continueOnFail": true
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.linkfinderai.com",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {"name": "Content-Type", "value": "application/json"},
            {"name": "Authorization", "value": "Bearer ENTER_API_KEY"}
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {"name": "type", "value": "company_name_to_employee_count"},
            {"name": "input_data", "value": "={{ $('Loop Each Company').item.json.company_name }}"}
          ]
        },
        "options": {"timeout": 30000}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [2624, 224],
      "name": "LinkFinder AI - Get Employee Count",
      "id": "8a0c171f-0108-45c9-88f4-18442c8c07f8",
      "continueOnFail": true
    },
    {
      "parameters": {
        "method": "POST",
        "url": "https://api.linkfinderai.com",
        "sendHeaders": true,
        "headerParameters": {
          "parameters": [
            {"name": "Content-Type", "value": "application/json"},
            {"name": "Authorization", "value": "Bearer ENTER_API_KEY"}
          ]
        },
        "sendBody": true,
        "bodyParameters": {
          "parameters": [
            {"name": "type", "value": "company_name_to_email"},
            {"name": "input_data", "value": "={{ $('Loop Each Company').item.json.company_name }}"}
          ]
        },
        "options": {"timeout": 30000}
      },
      "type": "n8n-nodes-base.httpRequest",
      "typeVersion": 4.2,
      "position": [2848, 224],
      "name": "LinkFinder AI - Get Email",
      "id": "8691ee0d-c0f9-4970-8ed5-7f7d03e7dcac",
      "continueOnFail": true
    },
    {
      "parameters": {
        "jsCode": "const companyData = $('Loop Each Company').item.json;\nconst websiteResponse = $('LinkFinder AI - Get Website').item.json;\nconst phoneResponse = $('LinkFinder AI - Get Phone').item.json;\nconst employeeCountResponse = $('LinkFinder AI - Get Employee Count').item.json;\nconst emailResponse = $('LinkFinder AI - Get Email').item.json;\n\nconst website = websiteResponse?.result || '';\nconst phone = phoneResponse?.result || '';\nconst employeeCount = employeeCountResponse?.result || '';\nconst email = emailResponse?.result || '';\n\nreturn {\n  json: {\n    company_name: companyData.company_name,\n    company_website: website,\n    company_phone: phone,\n    company_email: email,\n    employee_count: employeeCount,\n    total_jobs: companyData.total_jobs,\n    job_titles: companyData.job_titles,\n    locations: companyData.locations,\n    linkedin_url: companyData.company_linkedin_url,\n    found_date: new Date().toISOString().split('T')[0],\n    hiring_signal: `Hiring ${companyData.total_jobs} positions`\n  }\n};"
      },
      "type": "n8n-nodes-base.code",
      "typeVersion": 2,
      "position": [3056, 224],
      "name": "Merge Company Data",
      "id": "9b9a5902-dcb8-44a1-94f6-5dc3ddc811bc"
    },
    {
      "parameters": {"aggregate": "aggregateAllItemData", "options": {}},
      "type": "n8n-nodes-base.aggregate",
      "typeVersion": 1,
      "position": [2608, -128],
      "name": "Aggregate Results",
      "id": "0031a0af-193e-415d-92cf-21ae5a7e937a"
    },
    {
      "parameters": {
        "pollTimes": {"item": [{"mode": "everyMinute"}]},
        "documentId": {"__rl": true, "value": "YOUR_SHEET_ID", "mode": "list"},
        "sheetName": {"__rl": true, "value": "gid=0", "mode": "list"},
        "event": "rowAdded",
        "options": {}
      },
      "type": "n8n-nodes-base.googleSheetsTrigger",
      "typeVersion": 1,
      "position": [1104, 224],
      "name": "Google Sheets Trigger",
      "id": "e0dac88c-2e02-4baa-a12e-8b00dc52d7fb"
    }
  ],
  "connections": {
    "Apify - Start Job Scraper": {"main": [[{"node": "Dedupe Companies", "type": "main", "index": 0}]]},
    "Dedupe Companies": {"main": [[{"node": "Loop Each Company", "type": "main", "index": 0}]]},
    "Loop Each Company": {"main": [[{"node": "Aggregate Results", "type": "main", "index": 0}], [{"node": "LinkFinder AI - Get Website", "type": "main", "index": 0}]]},
    "LinkFinder AI - Get Website": {"main": [[{"node": "LinkFinder AI - Get Phone", "type": "main", "index": 0}]]},
    "LinkFinder AI - Get Phone": {"main": [[{"node": "LinkFinder AI - Get Employee Count", "type": "main", "index": 0}]]},
    "LinkFinder AI - Get Employee Count": {"main": [[{"node": "LinkFinder AI - Get Email", "type": "main", "index": 0}]]},
    "LinkFinder AI - Get Email": {"main": [[{"node": "Merge Company Data", "type": "main", "index": 0}]]},
    "Merge Company Data": {"main": [[{"node": "Loop Each Company", "type": "main", "index": 0}]]},
    "Google Sheets Trigger": {"main": [[{"node": "Apify - Start Job Scraper", "type": "main", "index": 0}]]}
  },
  "active": false,
  "settings": {"executionOrder": "v1"}
}

Use Cases & Examples

Sales Prospecting

Identify companies hiring for roles that indicate they need your product. Search for "DevOps Engineer" to find companies scaling infrastructure who might need your cloud tools.

Recruitment Agencies

Find companies with active hiring needs and reach out to offer recruitment services. Get their contact info instantly instead of hunting through LinkedIn manually.

Investor Research

Track companies in growth mode by monitoring hiring patterns. Companies hiring aggressively are often funded and expanding—prime investment signals.

Agency New Business

Marketing and dev agencies can find companies hiring in-house for roles they could staff with agency services. "Looking for a Marketing Manager? Let us handle it."

Partnership Development

Identify companies expanding into new areas where a partnership could accelerate growth. Hiring signals indicate budget and commitment to new initiatives.

Market Research

Analyze hiring trends by industry, location, or role type. Build datasets of companies entering specific markets or scaling specific functions.

Tips & Best Practices

Start with Specific Keywords

Use specific job titles like "Senior Account Executive" rather than generic terms like "Sales". You'll get higher-quality, more relevant companies.

Limit Initial Runs to 20-30 Records

Test with smaller batches first to verify data quality and API responses before running larger jobs that consume more credits.

Add Location Filters

Narrow by city or state to get locally-relevant leads. "San Francisco" will give better results than "United States" for targeted outreach.

Schedule Weekly Runs

Set up a recurring trigger to capture new job postings weekly. Fresh hiring signals mean companies are actively building—strike while it's hot.

Combine with Buying Intent Data

Stack this workflow with other signals like funding news, leadership changes, or technology adoption for multi-signal prospecting.

Filter by Company Size

Use the employee count data to focus on your ideal company size. Remove enterprises if you target SMBs, or vice versa.

Frequently Asked Questions

This workflow uses 4 LinkFinder AI credits per company (one for each enrichment type: website, phone, email, employee count). For 50 companies, that's 200 credits per run. You can reduce this by removing enrichment nodes you don't need—for example, if you only need website and email, that's 2 credits per company.

Apify offers $5 free monthly credits which is enough for approximately 1,000-2,000 job scraping requests depending on complexity. The LinkedIn Job Scraper actor costs about $0.25-0.50 per 100 results. For higher volume, you'll need a paid Apify plan starting at $49/month.

Absolutely! The workflow is modular. Simply delete or disconnect the enrichment nodes you don't need. For example, if you only want company websites, remove the phone, email, and employee count nodes. You can also add other LinkFinder AI enrichment types like social profiles or technology stack.

Not all company names can be matched to verified data. Small startups, companies with common names, or recently renamed companies may return empty results. The workflow has "continueOnFail" enabled so it won't break—it simply moves to the next company. Typically, you'll get 70-85% match rates.

After the "Aggregate Results" node, add your CRM node (HubSpot, Salesforce, Pipedrive, etc.). n8n has native integrations for most CRMs. Map the enriched fields (company_name, company_email, company_phone, etc.) to your CRM's contact or company fields. You can also add conditional logic to only sync companies meeting certain criteria.

Ready to automate your sales prospecting?

Get started with LinkFinder AI and turn hiring signals into qualified leads automatically.

Start Free Trial