Job Postings Are a Leading Indicator: An HR-Tech Team’s Guide to Scraping APIs for Labor Data
Labor-market intelligence moved from quarterly PDFs to always-on products, and the teams building those products all hit the same wall: job postings are voluminous, scattered, adversarially protected, and structurally messy. A job postings scraper API turns that wall into a subscription. This guide covers the pipeline design, the deduplication discipline that makes trend lines honest, and the economics that let a two-person team serve labor-market products.
Why Postings, Why Now
Every workforce question with a leading edge — hiring slowdowns, skill-demand shifts, remote-work retreats, regional boom signals — shows up in job postings before it shows up anywhere else. The product surface has followed: talent-intelligence dashboards, layoff-trackers’ inverses, investor-desk hiring monitors. What those products have in common is a data dependency the founders consistently underestimate: postings are the most defended structured data on the public web after search results themselves.
The Pipeline, Layer by Layer
Layer one — the major job platforms. Standard targets with maintained scrapers: Thordata’s Web Scraper API covers major job platforms among its 120+ maintained targets, delivering structured records (title, company, location, posting date, salary band where present) at about $0.50–$1.00 per 1,000 delivered results — with parser maintenance upstream, so platform redesigns are the vendor’s outage rather than your sprint.
Layer two — the long tail. Company career pages and niche boards: thousands of sites, individually small, collectively decisive for coverage honesty. Raw residential collection on the published slider ($2.00/GB at 1 GB down to $0.65/GB at volume), with country/city/ASN targeting where the board is regional.
Layer three — the deduplication stage. The step that decides whether the product is honest. Postings get reposted, syndicated, and re-hosted; naive pipelines count one job three times and call it growth:
def dedupe_postings(raw_records):
seen = {}
for r in raw_records:
key = (normalize_company(r["company"]),
normalize_title(r["title"]),
normalize_location(r["location"]),
content_hash(r["description"]))
if key in seen:
seen[key]["last_seen"] = r["seen_at"] # repost = liveness, not growth
seen[key]["repost_count"] += 1
else:
seen[key] = {**r, "repost_count": 0,
"first_seen": r["seen_at"]}
return list(seen.values())
# Trend lines draw on first_seen; "hard-to-fill" signals draw on repost_count
The comment carries the product insight: reposts aren’t noise to discard, they’re a *signal* — roles that repost are roles that aren’t filling. The dedup key preserves both readings.
The Coverage Question That Decides Product Quality
Labor data’s coverage honesty problem: platforms skew by segment (tech boards over-represent tech roles; general boards under-annotate salary), and no collection covers everything. Products that publish coverage annotations — “these metros, these platforms, these skews” — survive their first enterprise customer’s audit. Products that claim comprehensiveness don’t. The layer mix above is the honest answer: major platforms maintained, long tail collected, coverage documented per segment, gaps visible as gaps.
The Economics of a Two-Person Team
A labor-market product serving, say, 20 metros × 3 verticals:
| Line | Scale | Monthly at published rates |
|---|---|---|
| Major-platform postings | ~200K postings/day via scraper API | ~$300–600 at volume per-result rates |
| Long-tail career pages | ~150 GB/month residential | ~$150 |
| Dedup + trend computation | the team’s actual product work | engineering, not data spend |
| Demand-side signals | SERP feed on skill/role queries | ~$100–200 |
Total data spend in the low four figures, serving products whose enterprise subscriptions run five. That ratio — data spend to product revenue — is the entire reason a two-person team can compete in labor intelligence at all.
FAQ
What about the legal posture of scraping job boards?
Postings are public employment ads collected at polite frequency — the same material every job aggregator has always assembled — but terms vary by platform and jurisdiction, and salary/contact fields deserve minimization (store the posting, not the applicant data boards sometimes embed). The maintained-scraper route also carries the vendor’s collection discipline, which is worth more in a diligence conversation than any homegrown equivalent.
How fresh do postings need to be?
For trend products, daily; for “who’s hiring right now” monitoring, hourly on tracked companies. Both are cadence questions — the per-result pricing model absorbs either without a tier conversation, which is precisely why labor products built on per-result APIs refresh more often than the ones built on plans.
Can postings data feed AI products too?
Cleanly: posting text is fine-tuning gold for skill-extraction and matching models, and the structured records (title, salary band, seniority fields) are labels riding along for free. The license schedule covers analytics and training as separate lines — name the second when scoping.
Where does the search layer fit?
The demand side: what job-seekers and employers are *searching* — skill queries, role queries, comp queries — is the other half of any labor narrative, and per-response SERP collection prices it at roughly $0.70–$1.20 per 1,000. For the agent-native version of the same intelligence, Thordata’s MCP server gives agents the search tool plus their own request history and usage stats — and its 500 free calls make the pilot free. The strongest labor products join both halves: postings (what employers want) and queries (what the market asks), one warehouse, one backend supplying the search side.
The one-line guide?
Job postings are the leading indicator, the scraper API is the subscription that tames them, and the dedup key is where product honesty lives — postings counted once for growth, counted again for reposts, and never smoothed into a trend line the underlying collection can’t defend.