Turn job postings into hiring signals: one API for recruiters and sales
Last updated
A hiring signals API takes a list of company names and returns, for each one, whether it is hiring right now and how hard. Datapika's version checks Indeed and ZipRecruiter in a single run and returns a has_active_postings flag, employer-verified posting counts per board, the company's live ZipRecruiter job total, a firmographic profile, and its newest postings with hour-precise ZipRecruiter timestamps and repost detection. It costs $0.0005 per company record on Apify as of August 2026, so 1,000 companies come to $0.50 and 10,000 to $5, and the same call works over REST or MCP.
What does a hiring signals API return?
Each company you submit comes back as one record with the signal, the volume behind it, and the context you need to act. The signal is a boolean, has_active_postings, backed by active_jobs_by_site, which counts employer-verified postings on Indeed and ZipRecruiter from this run. The volume is active_jobs_total_by_site.zip_recruiter, the company's real open-posting total read from its ZipRecruiter employer page rather than a page-limited sample.
The context is a profile block: industry, employee band, revenue band, headquarters, founding year, employee rating, website and socials. A sample record for a human resources company in the actor README shows 17 Indeed postings, 21 ZipRecruiter postings, a live ZipRecruiter total of 593 and a 7.27 employee rating.
Nested under each record are the latest jobs, each with a posted_at timestamp (hour-precise on ZipRecruiter, day-precise on Indeed) and a separate reposted_at field where the employer bumped an old ad. Runs default to a 48-hour window and 50 jobs per company per board.
- has_active_postings: the yes/no hiring signal per company
- active_jobs_by_site: employer-verified posting counts for Indeed and ZipRecruiter
- active_jobs_total_by_site.zip_recruiter: the full live ZipRecruiter total, a hiring-volume number
- posted_last_48h_count: postings inside your recency window, default 48 hours
- latest_jobs: title, salary range, location, remote flag, posted_at, reposted_at and application URL
How do recruiters use hiring signals to find clients who are hiring?
Staffing and agency recruiters run their client and prospect list through companies mode each morning after the boards refresh. Any account whose posted_last_48h_count moves above zero enters the outreach queue with the job titles, salary ranges and locations attached, so the first line of the email names the role the hiring manager opened yesterday.
Repost detection matters more here than anywhere else. When an employer keeps bumping the same ad, the record keeps the original posting date and puts the bump in reposted_at, a reliable sign of a hard-to-fill role and a stronger staffing pitch than a new opening. The profile block handles qualification in the same pass.
At $0.0005 per record, a daily scan of 2,000 client companies costs $1 and returns the fresh roles alongside the signal, so there is no second enrichment step.
- Schedule companies mode daily and act on rows where posted_last_48h_count went positive
- Add the website after the name (Kelly Services | kellyservices.com) so common names match the right employer
- Use reposted_at to spot relisted roles, often the hardest to fill
- Qualify with industry, employee band, revenue band, HQ and rating from the same record
- Feed the flat job rows into a candidate-matching pipeline while the posting is hours old
How do sales teams turn hiring intent data into account scores?
Hiring is spend that has already been approved, which makes it one of the earliest buying signals visible from outside a company. A team opening five engineering roles is about to buy laptops, cloud capacity, licenses and services for them, and a rep who knows that this week is ahead of any announcement. The company scan turns a target account list into per-account intent built from live numbers.
The practical pattern is to map two fields into the CRM: the live ZipRecruiter total as a size-of-expansion field, and posted_last_48h_count as a velocity field. Sort by velocity for this week's outreach and by total for territory planning. Industry and revenue segmentation come from the same record.
Rescanning is cheap enough to do weekly. A 5,000-account list costs $2.50 per pass, so 13 weekly scans over a quarter come to $32.50.
- Score accounts by live ZipRecruiter total (size) and posted_last_48h_count (velocity)
- Route accounts whose count jumped week over week into a fresh sequence, not the generic cadence
- Use role titles as the hook: a first sales hire in a new region, or a cluster of platform roles
- Export CSV or call the dataset API and write both counts into custom intent fields
How do analysts build a companies-hiring dataset for competitive intel?
Analysts want a time series, not a snapshot. Schedule the same company list on Apify every week and each run writes a dated dataset with posting counts, live totals and the newest titles per competitor, so the week-over-week diff becomes the report. The guide to tracking competitor hiring covers the scheduling and diffing pattern in detail.
Keywords mode covers the market view. Up to 10 search terms per run return fresh postings across both boards with salary_min, salary_max, interval and currency, plus a per-term summary of totals by board and how many fell inside the window. That gives posting volume and pay ranges per role and region without a company list.
Profiles mode is the lightweight enrichment path: names in, industry, size, revenue, HQ, founding year and rating out, with no job feed attached.
- Companies mode on a weekly schedule produces a dated hiring time series per competitor
- Keywords mode: up to 10 terms per run, salary normalized to min, max, interval and currency
- Profiles mode: firmographics only, for fast enrichment of large lists
- Indeed supports country selection; ZipRecruiter covers the US and Canada
- Export JSON, CSV or Excel, or push each run to Make, Zapier or Google Sheets via webhooks
| Signal field | What it means | Recruiter use | Sales use |
|---|---|---|---|
| has_active_postings | True when the company has at least one verified open posting on either board | Gate for the outreach queue | Gate for the intent segment |
| active_jobs_by_site | Employer-verified posting counts for Indeed and ZipRecruiter this run | Which board the client invests in | Breadth of hiring across channels |
| active_jobs_total_by_site.zip_recruiter | Full live open-posting total on ZipRecruiter | Size of the staffing opportunity | Size-of-expansion score |
| posted_last_48h_count | Postings inside the recency window, default 48 hours | Trigger when it moves above zero | Velocity score for this week |
| latest_jobs[].posted_at | Exact UTC timestamp where the board exposes one, hour-precise on ZipRecruiter | Pitch roles opened in the last day first | Time the call to the week budget opened |
| latest_jobs[].reposted_at | Present when the employer bumped an older ad | Hard-to-fill role, strongest pitch | Ongoing need, not a one-off hire |
| latest_jobs[].salary_min / salary_max | Structured pay range with interval and currency | Benchmark your candidate's ask | Budget band for the hiring team |
| profile.company_num_employees / company_revenue | Employee band and revenue band from employer pages | Qualify the account for your desk | Segment by ICP without a second vendor |
How to do it
- 1.Open https://apify.com/openclawai/indeed-ziprecruiter-scraper, leave scanMode on companies, and paste your company list, adding the website after a pipe for exact matching.
- 2.Set hoursOld (default 48) and maxJobsPerCompany (default 50), keep residential proxy on, and run. One record per company lands in the dataset with the signal, counts, profile and latest jobs.
- 3.Export the dataset as CSV or JSON, or pull it through the Apify API, and route rows with has_active_postings true into your outreach or scoring pipeline.
- 4.For agents, connect the MCP endpoint at https://mcp.apify.com/?tools=fetch-actor-details,openclawai/indeed-ziprecruiter-scraper and call the actor with the same input from Claude, Cursor or your own agent.
Questions, answered
Does Indeed or ZipRecruiter have an official hiring signals API?
Not one you can sign up for and start calling today. Both boards run developer programs built for employers, applicant tracking systems and job publishers rather than for reading which companies are hiring. Datapika reads the public job and employer pages instead, merges both boards into one dataset, and exposes the result through the Apify REST API and an MCP endpoint, billed per company record.
How much does hiring intent data cost with Datapika?
Company records cost $0.0005 each on Apify as of August 2026. That is $0.50 for 1,000 companies, $5 for 10,000, and $2.50 for a weekly pass over a 5,000-account book. You pay per result with no subscription, and the price covers the hiring signal, per-board counts, live ZipRecruiter total, company profile and latest postings for every company on the list.
How fresh is the hiring signal, and how does repost detection work?
ZipRecruiter rows carry hour-precise UTC posted_at timestamps read from the page itself, while Indeed rows are day-precise. When an employer bumps an old ad, the record keeps the original date and reports the bump separately in reposted_at, so a 24-hour list contains only genuinely new roles. One caveat: ZipRecruiter ingests postings in daily batches, so its newest jobs are usually 12 to 48 hours old; use a 48-hour window for full two-board coverage.
How accurate is company matching for common names?
Jobs are matched to the target company by website domain first, then by normalized name as a fallback. If you supply the website after a pipe, for example Kelly Services | kellyservices.com, generic names such as Kelly or Volt will not pull in unrelated employers. The active_jobs_by_site counts are employer-verified for this reason, and the same match drives the live ZipRecruiter total.
Can an AI agent call the hiring signals API directly?
Yes. The actor is exposed through the Apify MCP server with the fetch-actor-details tool, so an agent can read the input schema, run a company scan and read the dataset without a human in the loop. Billing stays per result at $0.0005 per company record, which suits agent workflows that check a handful of accounts on demand rather than bulk exports.
Keep reading
Use cases
Competitor hiring tracker: weekly scans of named companies
Use cases
Web scraping API for AI agents (pay per result)
Scrape guides
How to scrape Indeed jobs at scale without an API key
Scrape guides
How to scrape ZipRecruiter jobs in the US and Canada
Use cases
Scrape salary data from job postings for market research