Skip to content

CrawlForge TeamEngineering Team

4 min read

Job Postings API for Due Diligence: The Hiring History

In due diligence the current job board is the least useful view of a target's hiring. It shows what is open today. The questions that matter are about change: did sales hiring stop two months before the process started, which roles have been reposted three times, and did the new region in the deck ever get a single requisition?

A job postings api for due diligence has to answer those questions, and you are given weeks, not a year of snapshots. Reading a target's live board as JSON is covered in the job postings post for consultants. This post covers the part that post says it cannot do: the history from before your first snapshot.

Where does a target's hiring history live?

Often in the Wayback Machine, which has frequently been capturing the board for years. Its CDX index lists every capture of a URL, and collapse=timestamp:6 keeps one per month:

Bash
curl -X POST https://crawlforge.dev/api/v1/tools/fetch_url \
  -H "X-API-Key: cf_live_your_key_here" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://web.archive.org/cdx/search/cdx?url=job-boards.greenhouse.io/target-co&output=json&fl=timestamp,statuscode&filter=statuscode:200&collapse=timestamp:6&from=2025"
  }'

That call costs 1 credit and returns rows like ["20250320221034","200"], one per month. For one Greenhouse board we checked, the HTML page had a capture in each of the last 20 months, while its JSON endpoint had three successful captures all year. Archive coverage differs by URL, so run the index on each address the board has had and use whichever is densest.

How do you read an archived board?

Add id_ after the timestamp. The archive then returns the original body without its replay toolbar:

Json
{
  "url": "https://web.archive.org/web/20250320221034id_/https://job-boards.greenhouse.io/target-co",
  "max_inline_chars": 1000000
}

Each capture costs 1 credit through fetch_url. An archived API capture is the board's JSON as it was served that day. An archived Greenhouse HTML page embeds its roles as data too, each with published_at, updated_at and requisition_id. Raise max_inline_chars, because the HTML capture we checked was about 550 KB, far over the 40,000-character default.

What should the diff tell you?

Key every capture on requisition_id rather than job id, where the company fills it in. One requisition is often posted in several cities, each with its own job id, so counting postings overstates hiring. Then line the months up:

Pattern across capturesQuestion for management
Sales or engineering requisitions fall away in the months before the processWas there a hiring freeze, and why?
The same requisition reposted under new job idsHas the role been hard to fill, or filled more than once?
A role open since the first captureIs the role still funded, or left open as an evergreen listing?
The expansion region in the deck has no requisitionsWhen does the expansion get headcount?
A leadership role appears, disappears and reappearsWho left, and who is covering the job?

Comparing the current count of sales roles with the deck is a different check, covered in the commercial diligence post.

What does it cost?

One CDX call, twelve monthly captures and the live board come to 14 credits a target. Adding five comparables makes it 84 credits, about 25 cents at $3 per thousand. A new account's one-time allowance stretches to roughly 70 targets.

Where does a job postings API for due diligence fall short?

  • Gaps are the archive's, not yours to fill. A board nobody captured has no history, and a month with no capture is a blank, not a zero.
  • Postings are not headcount. A requisition says a role was budgeted, not that anyone was hired or that the role was real.
  • The HTML may hold one page. The capture we checked embedded 50 roles; a larger board may need its API capture instead.
  • Public captures only. Nothing here reaches the CIM or management accounts. The archive's own robots.txt is honoured like any site's, and a refused fetch is not charged.

Create a free account and pull the last year of your current target's board before the management meeting. Every parameter is in the fetch_url reference.

Try this yourself — no signup needed

Explore all 31 CrawlForge scraping and extraction tools in the playground, then start free with 1,000 credits.

1,000 free credits • One-time • No credit card required

Tags

  • due diligence
  • job postings
  • fetch_url
  • hiring signals
  • private equity
  • b2b

About the Author

CrawlForge Team

Engineering Team

Building the most comprehensive web scraping MCP server. We create tools that help developers extract, analyze, and transform web data for AI applications.

Newsletter

Stay updated with the latest insights

Get tutorials, product updates, and web scraping tips delivered to your inbox.

No spam. Unsubscribe anytime.

FAQ

Frequently asked questions

01What if the archive has few captures of the board?

Check the board's older addresses before giving up. Greenhouse boards moved from boards.greenhouse.io to job-boards.greenhouse.io, and the archive files captures under the exact URL, so a board with sparse recent captures can have older ones under the legacy host. If no address was captured, there is no history to read: start your own snapshots from today and ask management for the past.

02How far back can I see a target's job postings?

As far back as the Wayback Machine captured the board. Query its CDX index with fetch_url for 1 credit to list every capture by date before you spend anything on the captures themselves. Busy boards are often captured monthly; small companies may have only a handful of captures, or none.

03Why key on requisition_id instead of job id?

Because one requisition is often posted under several job ids, one per city or language. Counting job ids makes a target look like it is hiring more people than it budgeted for. Grouping by requisition_id gets closer to the number of roles the company actually approved.

04What does a year of hiring history cost?

About 14 credits a target: 1 for the CDX index, 1 for each of twelve monthly captures and 1 for the live board. At $3 per thousand credits that is about 4 cents, so the cost of a year of history is the time spent reading it, not the calls.

Keep reading

Related Articles