Hiring Signal Lead Scraper - Job Boards + Email Enrichment avatar

Hiring Signal Lead Scraper - Job Boards + Email Enrichment

Pricing

from $3.00 / 1,000 lead founds

Go to Apify Store
Hiring Signal Lead Scraper - Job Boards + Email Enrichment

Hiring Signal Lead Scraper - Job Boards + Email Enrichment

Scrapes job boards to find companies actively hiring in target roles — the top B2B buying signal. Returns leads with verified emails via Hunter.io. Covers Indeed, LinkedIn, Greenhouse, Lever, and Workable. Built for cold email agencies, SDR teams, and n8n/Make workflows.

Pricing

from $3.00 / 1,000 lead founds

Rating

0.0

(0)

Developer

joseph fadero

joseph fadero

Maintained by Community

Actor stats

1

Bookmarked

3

Total users

0

Monthly active users

17 days ago

Last modified

Share

Hiring Signal Lead Scraper

Turn job postings into your highest-intent B2B leads.

When a company posts a "VP of Sales" or "Head of Marketing" role, they have budget, they're growing, and they're making buying decisions. That's the best time to reach them. This actor automates finding those signals — across Indeed, LinkedIn Jobs, Greenhouse, Lever, and Workable — and delivers enriched leads with verified emails ready for outreach.

What does Hiring Signal Lead Scraper do?

It searches five major job boards simultaneously for any job title keywords you specify and returns structured company data for every match. Optionally, it enriches each result with up to 3 verified contact emails per company via the Hunter.io API, giving you a complete outbound-ready lead record in a single run.

All results are stored in an Apify Dataset that you can download as JSON, CSV, Excel, or HTML, or stream directly into your outreach stack via the Apify API.

Two modes, one dataset, two very different buyers

The same underlying job-posting collection engine now powers two output modes — pick the one that matches who you are:

ModeOutputBuyer
lead_generation (default)Individual company hiring events — "this company is hiring, here's a contact"Cold email agencies, SDR teams, sales-intent buyers
market_intelligenceAggregated by location: hiring velocity, skills trends, salary trends, remote-vs-onsite ratio, plain-English summaryRecruiters, investors, HR/People teams, labour-market analysts

If you want a list of companies to email, use lead_generation. If you want to know "is engineering hiring accelerating in London, and what skills are in demand right now," use market_intelligence — you don't get individual leads back, you get a trend read on the market itself.

Why use Hiring Signal Lead Scraper?

  • Intent-based leads without the enterprise price tag — 6sense costs $40K+/year. This actor gives you the same hiring signal data for cents per run.
  • Five sources, one run — Indeed, LinkedIn Jobs, Greenhouse, Lever, and Workable scraped simultaneously.
  • Email enrichment built in — Connect your Hunter.io API key and get verified contact emails without leaving the workflow.
  • n8n / Make / Zapier ready — Output flows directly into automation platforms. No custom glue code needed.
  • Deduplication & date filtering — No duplicate companies, no stale postings cluttering your list.

How to use Hiring Signal Lead Scraper

  1. Click Try for free on this Actor page
  2. Enter your target job title keywords (e.g. VP Sales, CTO, Head of Product)
  3. Set your target locations (e.g. United Kingdom, London, Remote)
  4. Choose which job boards to scrape (default: Indeed + LinkedIn Jobs)
  5. Optionally toggle Enrich with Verified Emails and paste your Hunter.io API key
  6. Click Start — get structured lead results in minutes

Input

Configure the actor via the Input tab in Apify Console, or pass a JSON payload via the API.

FieldTypeDefaultDescription
modestring"lead_generation"lead_generation or market_intelligence — see above
keywordsstring[]Job title keywords to search (required, both modes)
locationsstring[]["United Kingdom", "Remote"]Locations to search (lead_generation only)
sourcesstring[]["indeed", "linkedin"]Job boards to scrape (lead_generation only)
maxResultsPerSourceinteger25Max results per source per keyword (lead_generation only)
enrichEmailsbooleanfalseEnable Hunter.io email enrichment (lead_generation only)
hunterApiKeystringHunter.io API key (required if enrichEmails = true)
filterPostedWithinDaysinteger30Only return postings newer than N days (lead_generation only)
deduplicateByCompanybooleantrueOne result per company per keyword (lead_generation only)
intelligenceFiltersobjectmarket_intelligence only — see below

Example input (lead_generation):

{
"keywords": ["VP Sales", "Head of Marketing"],
"locations": ["United Kingdom", "Remote"],
"sources": ["indeed", "greenhouse", "lever"],
"maxResultsPerSource": 50,
"enrichEmails": true,
"hunterApiKey": "your_hunter_api_key_here",
"filterPostedWithinDays": 14,
"deduplicateByCompany": true
}

Example input (market_intelligence):

{
"mode": "market_intelligence",
"keywords": ["Engineer"],
"intelligenceFilters": {
"locations": ["San Francisco", "New York", "London"],
"trackSalaryData": true,
"trackRemoteVsOnsite": true
}
}

intelligenceFilters fields: locations (string[], narrows aggregation to matching locations), industries (string[], see honesty note below), skillCategories (currently informational — skill extraction always runs across the full taxonomy), trackSalaryData (boolean, off by default — see the salary honesty note below), trackRemoteVsOnsite (boolean, off by default).

Output

Each item in the Dataset represents one hiring signal lead. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Example output record:

{
"keyword": "VP Sales",
"jobTitle": "VP of Sales - EMEA",
"jobUrl": "https://uk.indeed.com/viewjob?jk=abc123",
"postedAt": "2026-05-08T00:00:00.000Z",
"source": "indeed",
"location": "London, United Kingdom",
"companyName": "Acme SaaS Ltd",
"companyDomain": "acmesaas.com",
"companyLinkedinUrl": null,
"contacts": [
{
"email": "james.smith@acmesaas.com",
"firstName": "James",
"lastName": "Smith",
"title": "CEO",
"confidence": 92
}
],
"scrapedAt": "2026-05-12T06:00:00.000Z",
"enriched": true
}

Data fields

FieldDescription
keywordThe keyword that triggered this result
jobTitleExact job title from the posting
jobUrlDirect link to the job posting
postedAtISO date the job was posted
sourceWhich job board it came from
locationJob location as listed
companyNameCompany name
companyDomainCompany website domain
companyLinkedinUrlLinkedIn company page URL (LinkedIn source only)
contactsArray of verified email contacts (if enriched)
contacts[].emailVerified email address
contacts[].firstNameContact first name
contacts[].lastNameContact last name
contacts[].titleContact job title
contacts[].confidenceHunter.io confidence score (0–100)
scrapedAtTimestamp of when this record was scraped
enrichedWhether email enrichment was successful

Market intelligence output

Example output record (market_intelligence mode):

{
"location": "San Francisco",
"industry": "All industries",
"hiringVelocityChangePercent": 0,
"topSkillsInDemand": ["Go", "Python", "AWS", "Figma", "TypeScript"],
"emergingSkillCategories": [],
"salaryTrendDirection": "flat",
"remoteVsOnsiteRatio": 0.02,
"plainEnglishSummary": "San Francisco has 126 matching vacancies, unchanged from the previous period. Top skills in demand: Go, Python, AWS, Figma, TypeScript. Salary data (where disclosed) is holding roughly flat. 2% of these roles are remote or hybrid."
}

Confirmed live during this addendum's build: hiringVelocityChangePercent and emergingSkillCategories are 0/[] on a real first run (no baseline exists yet to compare against — the summary says "baseline run" explicitly rather than implying a false 0% change), then compute real values from the second run onward. Re-running against real Stripe/Datadog/Cloudflare postings a few minutes apart correctly showed 0% change (genuinely unchanged real job counts) and a flat salary trend backed by a real 5-point salary sample from Stripe's own San Francisco engineering postings.

Three honesty notes on real data limitations

Industry is not independently derived. None of the 3 real sources (Greenhouse, Lever, Workable) expose a reliable per-job industry field. industry in the output is either the industries filter value you supplied, or the literal string "All industries" — not a real classification inferred from the posting. Documented here rather than fabricating a false taxonomy from data that doesn't support one.

Salary data is genuinely sparse, not "increasingly common." Regex-extracting real salary ranges from job description text found real matches in roughly 2 of every 100 postings sampled during this build (mostly US postings under state salary-transparency laws). It's real when present, and salaryTrendDirection only computes a trend once at least 3 real salary points exist in a period — otherwise it honestly reports insufficient_data rather than a trend built on 1 data point. trackSalaryData defaults to false for this reason.

market_intelligence mode currently draws from Greenhouse, Lever, and Workable only — the 3 sources that return real structured job description text and (for Lever/Workable) a real remote-work field in the same request lead_generation mode already makes. Indeed's real data would need a separate detail-page visit per job for description text (not present on its search-result cards) and LinkedIn goes through a paid third-party Actor call — both would add real per-run cost beyond what this addendum asked for, so they're in scope for lead_generation mode only for now.

Pricing

This actor uses Pay Per Event billing — you only pay for what you get.

EventPrice
Run started$0.10 (flat, per run)
Lead returned (no email)$0.003 per lead
Lead returned (with email)$0.008 per lead
Market intelligence record (market_intelligence mode)$0.003 per location/industry record

Cost examples:

  • 3 keywords × 2 locations × 2 sources, 150 unenriched leads: $0.10 + (150 × $0.003) = $0.55
  • Same run with email enrichment on 150 leads: $0.10 + (150 × $0.008) = $1.30
  • Daily run with 500 leads (no enrichment): $0.10 + (500 × $0.003) = $1.60/day

Integration examples

n8n workflow

Use the Apify node in n8n, select this actor, and map the output fields to your CRM or outreach tool (Instantly, Lemlist, Smartlead, HubSpot, etc.).

Direct API call

curl -X POST \
"https://api.apify.com/v2/acts/YOUR_USERNAME~hiring-signal-lead-scraper/runs" \
-H "Authorization: Bearer YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"keywords": ["VP Sales"], "locations": ["UK"], "enrichEmails": false}'

Zapier / Make

Use the Apify integration in Zapier or Make to trigger runs on a schedule and pipe results into any downstream app.

Tips

  • Start with Greenhouse + Lever — These use public APIs (no browser needed), making runs faster and cheaper. Add Indeed for broader coverage.
  • Use filterPostedWithinDays: 7 for the freshest signals — companies that posted this week are in active hiring mode right now.
  • Set deduplicateByCompany: true (default) to avoid spamming the same company across multiple keywords.
  • Hunter.io free tier gives 25 searches/month — enough for testing. Paid plans from $49/month for production volumes.
  • LinkedIn scraping uses a sub-actor (bebity/linkedin-jobs-scraper) which has its own billing on top of this actor's PPE cost.

FAQ

Is this legal? This actor only scrapes publicly available job posting pages. Scraping publicly accessible data is generally permissible under fair use principles. You are responsible for complying with the terms of service of each job board and applicable data protection laws in your jurisdiction.

Why didn't LinkedIn return results? LinkedIn aggressively rate-limits scrapers. The actor delegates LinkedIn scraping to a proven sub-actor (bebity/linkedin-jobs-scraper). If it fails, the actor logs a warning and continues with other sources rather than crashing.

The Indeed results look different from what I expected. Indeed changes its DOM structure periodically. If selectors break, open an issue on this actor's page and we'll push an update.

Can I add more companies to the Greenhouse/Lever/Workable boards list? Yes — fork this actor and extend the getGreenhouseBoards(), getLeverBoards(), and getWorkableBoards() functions in the scrapers. The longer those lists, the more leads you'll get. Worth knowing: these lists were live-audited (real HTTP checks, not assumed) during the market_intelligence addendum build, and board slugs drift as companies switch ATS providers — Lever's original 30-company list had collapsed to 3 real live boards (most had migrated off Lever entirely), so Greenhouse is now the dominant real source of the two. Workable was fixed separately: its scraper was calling a dead API path (/api/v3/..., now 404 on every board) instead of the real current one (/api/v1/widget/...) — a genuine bug, not company churn, now fixed. Re-audit periodically rather than assuming any board list stays accurate indefinitely.

I need a custom integration or a higher-volume solution. Open an issue or contact us via the Apify Console — we offer custom actor development and managed scraping pipelines.