A company posting jobs has budget and is changing. A company posting jobs and missing the kind of tool you sell is a better account still. This page shows how to turn both into one 0–100 score you can sort a list by: by hand in a spreadsheet, and for a whole account list in one run.
“Is hiring” is too blunt to rank on. Two numbers from a company’s job board do most of the work:
All three come from public sources you can check yourself: the company’s job board and its homepage. What this is not: third-party intent data. Nothing here tracks which topics a company’s employees read around the web. It scores what a company publishes about itself.
Find the company’s job board. Open its careers page, click into any job and read the address bar: jobs.ashbyhq.com/slug, boards.greenhouse.io/slug or jobs.lever.co/slug give you both the ATS and the board name. (Find which ATS a company uses covers the tricky cases.) Those three ATSs publish a free JSON feed of every open job with its posting date:
# Open roles on Notion's Ashby board
curl -s https://api.ashbyhq.com/posting-api/job-board/notion | jq '.jobs | length'
# How many were published in the last 30 days
# (GNU date; on macOS use: date -u -v-30d +%FT%TZ)
curl -s https://api.ashbyhq.com/posting-api/job-board/notion \
| jq --arg d "$(date -u -d '30 days ago' +%FT%TZ)" \
'[.jobs[] | select(.publishedAt >= $d)] | length'
On Greenhouse the feed is boards-api.greenhouse.io/v1/boards/slug/jobs and the date field is first_published; on Lever it’s api.lever.co/v0/postings/slug?mode=json with createdAt in milliseconds. If you don’t use a terminal, count the roles on the board page and eyeball the dates.
Put open roles in column B and roles posted in the last 30 days in column C. This is the formula we use, and you can paste it as is:
=ROUND(100*(0.6*MIN(1,LOG10(B2+1)/LOG10(301)) + 0.4*IF(B2=0,0,C2/B2)))
Volume is 60% of the score and log-scaled, so going from 3 to 30 roles matters far more than going from 300 to 600 (it tops out at 300). Pace is the other 40%: the share of open roles that are less than 30 days old. A company with 128 open roles, 26 of them new, scores 59. One with 3 roles, 1 new, scores 28.
One correction worth making by hand: if most of a board’s roles share the same posting date, the company probably migrated or re-imported its board, and those dates don’t mean the roles are new. Don’t count them as recent.
Open the homepage, view the source (Ctrl+U, or Cmd+Option+U on a Mac) and search for the script your category leaves behind. For support tools, that’s widget.intercom.io (Intercom), static.zdassets.com (Zendesk), js.driftt.com (Drift) or client.crisp.chat (Crisp). For CRM it’s js.hsforms.net (HubSpot forms) or a force.com script (Salesforce). Check which technologies a list of websites uses has a longer list.
If nothing from your category shows up, raise that account’s score. We multiply it by 1.5, capped at 100. If you couldn’t load the homepage at all, leave the score alone: an unknown isn’t an absence.
That’s three to five minutes per account. Fine for a shortlist of ten; slow for a 300-account territory.
Buyer Intent Signals does the three steps above for every company in your list and returns one row each. Put domains into Companies on the Apify Store page, pick the category you sell from Target technology category, or send JSON through the API:
{
"companies": ["ramp.com", "vercel.com", "airtable.com",
"notion.so", "apple.com"],
"targetCategory": "Support"
}
It finds each company’s job board on Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Breezy HR or Personio (Workday only when you pass the board explicitly), computes hiringScore with the formula above, checks the homepage against 84 technology fingerprints, and combines the two into buyerIntentScore.
| Input | openJobs | postedLast30d | hiringScore | Support tool on homepage | buyerIntentScore | Charged |
| ramp.com | 158 | 60 | 68 | none | 100 | $0.06 |
|---|---|---|---|---|---|---|
| vercel.com | 88 | 20 | 56 | none | 84 | $0.06 |
| notion.so | 128 | 26 | 59 | Zendesk | 59 | $0.06 |
| airtable.com | 3 | 1 | 28 | Qualified | 28 | $0.06 |
| apple.com | 0 | 0 | 0 | none | 0 | free |
The run cost $0.24: four company reports at $0.06, Apple free. One row, trimmed:
{
"company": "vercel.com",
"domain": "vercel.com",
"hiringFound": true,
"hiringScore": 56,
"openJobs": 88,
"postedLast30d": 20,
"ats": "greenhouse",
"boardUrl": "https://boards.greenhouse.io/vercel",
"matchConfidence": "high",
"techFound": true,
"technologiesByCategory": {
"CMS": ["Contentful"],
"Frontend": ["Next.js", "Tailwind CSS"],
"Hosting": ["Vercel"],
"Fonts": ["Google Fonts"],
"Marketing": ["Clearbit"]
},
"hasTargetCategory": false,
"buyerIntentScore": 84
}
What to take from it:
techFound: true, no tools from the 84 detected).| No target category set | buyerIntentScore = hiringScore |
|---|---|
| Category set and found on the homepage | buyerIntentScore = hiringScore |
| Category set, homepage checked, category not found | round(hiringScore × 1.5), capped at 100 |
| Category set, homepage couldn’t be checked | buyerIntentScore = hiringScore |
| No job board with open jobs | 0 |
hiringScore is the spreadsheet formula from step 2. On a board flagged bulkRepublish (20+ roles, more than half published within one 24-hour window) those roles still count toward volume but not toward pace. Categories you can target: Analytics, CMS, Frontend, Hosting, Marketing, Support, CRM, Ecommerce, Recruiting, Payments, Video, Fonts and A/B Testing. Coverage is uneven: Support covers Intercom, Drift, Zendesk, Crisp, Tawk.to, Freshchat and Qualified; CRM covers only Salesforce, HubSpot CRM, Pipedrive, Zoho SalesIQ and Freshsales, and only when the homepage references their script.
Pass domains, not names. For a bare name like Ramp the website is guessed as ramp.com (flagged domainGuessed: true); a guess that redirects to a different company’s site isn’t used. An explicit board like greenhouse:stripe has no domain at all, so it gets a hiring score but no tech check.
If you want to find new accounts rather than rank a list you already have, the job-data providers index postings and technographics across many companies. You then build your own score on top:
| Tool | What it is | Price (official pricing page) |
| TheirStack | Searchable database of job postings and technographics, with an API | Free plan with 50 company credits and 200 API credits a month; API plans from $49/month for 1,500 credits. 1 credit per job returned; 3 per company, or per company’s full technology list. |
|---|---|---|
| PredictLeads | Company datasets by API, job openings and technology detections included | 100 free API credits a month; then $0.04 per credit with a $40 minimum monthly charge, falling with volume. One request for a company’s job openings (up to 1,000) is 1 credit; technology detections the same. |
| Buyer Intent Signals | Live check and score of a list you supply | $0.06 per company with an open job board; companies without one aren’t charged; no subscription |
Neither provider gives you a ready-made “hiring and missing my category” score; you’d pull both datasets and combine them. They do cover far more technologies than our 84 and can answer “who is hiring” across companies you haven’t listed. We only check the companies you give us, at run time.
Prices are from their public pricing pages, checked 27 September 2026: TheirStack pricing (credit usage from TheirStack’s credits docs), PredictLeads pricing.
| Company report | $0.06 ($60 per 1,000), no subscription |
|---|
A company is charged when a public job board with at least one open job is found for it. The tech check alone never triggers a charge. These come back as free rows:
matchConfidence: "low"); the row shows the board so you can pass it explicitly if it is the right onestripe.com, Stripe and greenhouse:stripe resolve to one board, reported and charged once; the others get a row with duplicateOfSet a maximum total charge for the run and you’re never charged past it. Once it’s reached, every input left over still gets a row with skipped: true, uncharged.
At most $30. Only accounts with an open job board count, so a list with many large enterprises or companies that don’t publish jobs costs less. In our five-company example, one of five was free.
Yes, if it has an open job board. You pay for the report, and hasTargetCategory: true is part of the answer: it tells you to deprioritise that account or pitch a switch.
No. The price is the same with or without one; the category only changes how the score is calculated.
No. Those products infer research activity from content consumption across the web. This reads a company’s own public job board and homepage. It tells you who is growing and what their site runs, not what they are reading.
Yes: through Apify’s integrations (Clay, Make, Zapier) or the API. Using our tools in Clay has the steps.