Identify companies actively hiring, extract buying signals, and enrich with contact data—website, phone, email, and employee count—all automatically.
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.
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 TriggerThe 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 ScraperThe 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 NodeFor 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.
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 NodeConnect 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 OptionsENTER_API_KEY in "Apify - Start Job Scraper" node URL
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.
{
"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"}
}
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.
Find companies with active hiring needs and reach out to offer recruitment services. Get their contact info instantly instead of hunting through LinkedIn manually.
Track companies in growth mode by monitoring hiring patterns. Companies hiring aggressively are often funded and expanding—prime investment signals.
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."
Identify companies expanding into new areas where a partnership could accelerate growth. Hiring signals indicate budget and commitment to new initiatives.
Analyze hiring trends by industry, location, or role type. Build datasets of companies entering specific markets or scaling specific functions.
Use specific job titles like "Senior Account Executive" rather than generic terms like "Sales". You'll get higher-quality, more relevant companies.
Test with smaller batches first to verify data quality and API responses before running larger jobs that consume more credits.
Narrow by city or state to get locally-relevant leads. "San Francisco" will give better results than "United States" for targeted outreach.
Set up a recurring trigger to capture new job postings weekly. Fresh hiring signals mean companies are actively building—strike while it's hot.
Stack this workflow with other signals like funding news, leadership changes, or technology adoption for multi-signal prospecting.
Use the employee count data to focus on your ideal company size. Remove enterprises if you target SMBs, or vice versa.
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.
Get started with LinkFinder AI and turn hiring signals into qualified leads automatically.
Start Free Trial