Staffing and recruitment
Everyone sells “they are hiring”. The signal is that they failed to
A role has been reposted, which means the last attempt did not work
What we were looking for
"This company is hiring" is the most heavily sold signal in B2B and it is worth very little, because everyone who buys hiring data gets the same list on the same morning.
The interesting version is a role that has stayed open too long. That is not a company hiring, it is a company failing to hire, which is the moment a recruiter becomes useful rather than annoying.
Our working threshold was sixty days. It is wrong, and the data that shows it is wrong is published by the people who run the labour market.
Why sixty days is the wrong number
The German federal employment agency publishes a monthly report on vacancies. Its June 2026 edition puts the average time to fill a completed vacancy at 157 days, and says 48% of listings removed had been open for more than three months.
At that baseline, sixty days is not an outlier. It is comfortably inside normal.
Our own sample said the same. Of 100 Munich developer postings, 39 were older than sixty days. Those 39 came from only 21 companies, and a single company held ten of them. Filtering on age alone gives you a list dominated by one employer with a permanently open pipeline, which is the opposite of a company that just failed to hire.
The signal that survives
Not age. Republication.
The employment agency's job API returns the date a posting first appeared and the start of its current publication period as two separate fields. When they differ, the role has been taken down and put back up. That is a lookup, not an inference: 23 of 100 live records carried a republication.
A repost is a much better claim than an old post. An old post can mean an evergreen pipeline, a lazy employer or a hard market. A repost means somebody decided the last attempt was over, and started again.
The lovely detail is that the public website will not show you this. It collapses everything old into “posted 30+ days ago”, so a reader of the site cannot tell a five-week-old role from one we found that had been running for eleven months. The field exists in the API and is hidden in the interface.
What the commercial data does not do
We spent credits probing a commercial job-data API, because it is already paid for here and it advertises exactly these fields. Three findings, each of which would have cost a day.
Reposting is an output, not a filter. The response carries repost and closure fields, but you cannot query on them. You can only pull records and inspect. That changes the cost model completely.
The posted date is the source's claim, not a first-seen date. We saw records dated late February that the system itself first observed five months later. Age computed from that field is fiction.
"Open“ means ”no closure detected". Asking for open German postings from January and February returned 789,230 of them. That is not a set of live vacancies, it is a set of postings nobody watched close.
One of its filters is genuinely useful: restrict to direct employers, which removes the agencies already working the role. If a staffing firm is advertising it, the buyer has bought.
The filter that does the work
Stack the exclusions, in this order, because each one removes a different kind of false positive.
Exclude agency-posted roles: the need is already served. Exclude employers holding many simultaneous openings for the same title: that is a pipeline, not a gap. Require a republication rather than an age. Then, and only then, look at how long it has been running.
The threshold is the least important part, which is the opposite of how this signal is usually sold.
Honest limits, including two legal ones
The employment agency endpoint we used is an application backend, reached with a key that is documented by a community project rather than by the agency. It works and it is free. It is not a published, supported public API, and building on it carries the risk that comes with that.
Separately, one large professional network's terms forbid using its job data for this, including by way of aggregators. That is worth stating because it is the source everyone reaches for first.
The benchmark figures circulating for time-to-fill in other markets, in the region of forty to sixty days, we could not source. Every route led to a content-marketing article citing an organisation that does not publish the number. We are not repeating them. The 157-day figure is used here because we downloaded the report and read it.
Coverage is Germany. The mechanism should generalise anywhere a public job board exposes both dates, but we tested one.
Sources
- Bundesagentur fuer Arbeit Jobsuche API · Free, community-documented app backend rather than a supported public API
- Bundesagentur fuer Arbeit, monthly labour market report · Free PDF. Source of the 157-day time-to-fill figure
Who buys this signal
Staffing agencies, executive search, recruitment process outsourcing, technical contracting.
This is a working note, not a product claim. It describes research we ran on the date above and what it did and did not produce. Sources move and registers change their access terms; check before you build on one.
