find-customer

Hiring signals for B2B prospecting: how to actually read a careers page

"Company is hiring" is not a signal. Three ops coordinators posted this quarter, with a job description that says "spreadsheets and phone calls", is. Here's how we pull that out of careers pages and public ATS boards, and the rules that stop it lying to you.

Aman Jha··5 min read

I used to think hiring signals were a nice-to-have in B2B prospecting. A timing bonus you add on top of a good list.

Then I watched what happened to the fit rate when we started from careers pages instead of ending with them. For tool- and role-defined ICPs, the share of crawled companies that actually passed qualification went from single digits to somewhere between 40 and 60 percent. Not because hiring proves anything on its own, but because a company that's hiring for the exact function you sell into has already told you three things: the function exists, it's growing, and somebody has budget for it.

So this post is about reading careers pages properly. Where the data actually lives, what counts as a signal versus noise, and the four rules we had to add after the naive version produced garbage.

A hiring signal is an open role, with a title, a location and a posting date, that maps to the function you sell into or the problem you solve. To use it for prospecting: pull roles from public ATS boards, keep only relevant titles, only count postings inside a recency window, and treat the job description text as evidence you can quote.

Where hiring signal data actually lives

Everyone says "monitor job boards." Fine. But the cleanest source isn't LinkedIn or Indeed, it's the applicant tracking system behind the company's own careers page, and three of the big ones publish their boards as plain JSON with no auth.

ATS Public endpoint What you get
Greenhouse boards-api.greenhouse.io/v1/boards/{token}/jobs title, location, updated_at, absolute_url
Lever api.lever.co/v0/postings/{company} title, categories (team, location), createdAt, hostedUrl
Ashby api.ashbyhq.com/posting-api/job-board/{name} title, location, department, publishedAt, jobUrl

When I first probed these, Greenhouse returned 632 open roles for one large fintech, every one with a location, a date and a URL. Ashby gave 71 for a mid-size company. Lever works the same way. That's structured, dated, quotable evidence for free, and it's published for programmatic use, so you're not in a grey area.

Two gotchas that cost me an afternoon:

  1. Lever slugs are not company names. The slug in the URL is whatever they picked when they set up Lever, which is sometimes an old name or an abbreviation. You have to discover the board token from the link on the actual careers page, not guess it.
  2. Job APIs give you a company name, not a domain. Resolving "Northwind Freight" to northwindfreight.com sounds trivial and isn't. Name collisions, holding companies, regional subsidiaries. Budget for it.

For companies not on those three, aggregator APIs exist (JobsPipe has a free tier of a thousand jobs, TheirStack and Fantastic.jobs are around $59 to $95 a month and cover non-tech career sites). The ATS boards skew toward tech and SaaS. If your ICP is dental clinics in Germany, you'll need the aggregators.

What counts as a hiring signal (and the rule everyone breaks)

Three rules for counting a job posting as a hiring signal: the role must be relevant to the function you sell into, the posting must be inside 180 days, and the job description must contain a quotable line with a URL

Here's the mistake the first version of our pipeline made: it counted any hiring as a timing pass.

A logistics company hiring twenty warehouse associates is not a signal for someone selling dispatch automation. It's a signal that they run warehouses. So the first rule:

Hiring counts only for relevant roles. Relevant means one of two things: the buyer's function (you sell to ops leaders, they're hiring ops leaders) or the function your product replaces or supports (you automate support, they're hiring support agents). Everything else is filtered before it touches the score.

The second rule is about what you read in the posting, because the title is the least interesting part.

Job descriptions are the most honest text a company publishes. Marketing pages describe the future. Job descriptions describe Tuesday. When a posting for an Operations Coordinator says "you'll track shipments across carriers and update customers by phone and email, working from our dispatch spreadsheet," that's a problem statement. We quote it, attach the URL, and it becomes verified evidence for problem_evidence, which is the check that carries the most weight in our whole scoring model.

The tells I look for in description text:

  • Named tools ("experience with Zendesk / NetSuite / a TMS")
  • Named absence of tools ("spreadsheets," "manual," "phone calls," "email chains")
  • Volume language ("high volume," "hundreds of tickets a day")
  • Scope creep language ("wear many hats," "build the process from scratch")

Named tools go into tech_adoption, and here's a subtlety we had to make explicit: if the named tool is a competitor of yours, the signal's polarity depends on whether you displace competitors. For most SaaS, yes, that's a great signal. For some agencies, it means the problem's handled. We made it a field on the ICP rather than guessing.

The recency rule for job posting signals

Stale postings are the second way hiring signals lie.

Companies leave roles up for months. Some ATS boards have "evergreen" postings that never close. If you count a role posted in January as a reason to reach out in September, your "reason to reach out now" is fiction.

Our rule: timing checks only count inside a window, default 180 days. Every piece of evidence carries an observed_at when a date is available (job posted, press release dated), and anything older than the window flips to unknown. Not fail. Unknown. It's neither proof nor disproof, it's just old.

If you're doing this in a spreadsheet: add a "posted" column and sort by it. You'll be surprised how much of what looked like momentum is a year old.

From hiring signal to first sentence

The point of all this is one line in an email.

Compare:

We help logistics companies automate operations.

with:

I saw you've got three Operations Coordinator roles open this quarter, and the posting mentions tracking shipments from a dispatch spreadsheet. That's the exact workflow we built for [a similar client].

Same company. The second one gets replies because it proves you read something. And it only works if the three roles are real, recent, and relevant, which is the whole reason the rules above exist. A reason to reach out that turns out to be wrong is worse than no reason at all.

Where hiring signals fit among the other buying signals

Hiring is one of about a dozen buying signals we check, and it's the one with the best ratio of "free to get" to "hard to fake." Funding, tech adoption and stated goals are the others I'd rank near it. If you want to see how they combine, the pipeline for going from your own website to a ranked list is in how to build a target account list from your website, and the scoring weights are in our ICP scoring formula.

Or skip the endpoints and let find-customer pull the careers pages for you. Either way, keep the rules: relevant roles only, inside the window, quote the description, attach the URL.

Keep reading