Reading a Competitor's Roadmap From Its Open Roles
You can turn one quarter of a named competitor's public postings and org changes into two to three product or market bets, each with a confidence level.
Key takeaways
- The signal is the cluster's tightness, not its size: five same-function reqs in two weeks encode urgency that eight scattered over a year do not.
- Between 18% and 27% of active postings are likely ghost jobs, so an analyst who skips the ATS cross-check over-reads roughly one in four signals as strategy.
- Rarer functions shout louder per req: Refolk's index holds 16,492 US Enterprise Account Executives against 5,491 ML Engineers, so an equal count of net-new ML reqs is a larger relative bet.
- The average US posting fills in about 41 days, which makes age itself a usable discard filter for auto-renewed evergreen listings.
- A backfill inherits an existing seat and vendor relationships; only net-new headcount, confirmed against a departure scan and a first-time-role test, carries a real expansion signal.
- In-person roles posted outside HQ are the cleanest bet to read because they cannot be faked remotely and tie directly to local budget.
This guide walks one named example all the way from raw job data to a ranked set of a competitor's likely next moves. It is for strategy analysts, talent-intelligence researchers, and operators who need to know what a rival is about to build and where it is expanding, using nothing but public postings and org changes. By the end you can reconstruct two to three of a competitor's next product or market bets from a single quarter of its public listings, and attach a defensible confidence level to each.
Most pages on this topic stop at "watch their job postings." That is advice, not a method. Watching does nothing until you can tell a cluster from a coincidence, a net-new hire from a backfill, and a real req from a ghost. This is the worked example, with the queries, the counts, and the two wrong turns that trip up nearly everyone.
What a competitor's open roles actually tell you
A company's open roles are a pre-committed budget decision made months ahead of any announcement, so a tight cluster of related postings reveals a direction before the product ships. Headcount is expensive and slow to approve. When a rival opens five machine learning engineer roles in one quarter, someone has already signed off on the salaries, the tooling, and a team lead. That commitment surfaces in postings long before it surfaces in a press release.
The direction is well attested even if the exact lead time is not. One documented case saw a competitor post five net-new data-engineering roles in a single week, one of them an "ML Infrastructure Lead," and launch a data product in a new market roughly four months later. Another proxy: across 528 verified cases, the median gap from a Product Hunt launch to a Series A announcement was 265 days, with 70.6% of raises inside twelve months. Neither number is a hiring-to-launch law, so treat a quarter as your read window and track month over month to catch acceleration.
Headcount is a pre-committed budget decision, which is why postings reveal direction months before an announcement does.
The read fails in one predictable way: people treat a single posting as a trend. A lone senior req is usually routine. Intelligence starts at the cluster, defined across a department, a region, a capability, or a seniority band. Everything below is built to find real clusters and throw out the fakes.
The worked example: one competitor, one quarter
The rest of this guide follows a single fictional target so you can run the same steps against your own. Call it Northwind, a mid-stage B2B software company whose home market is the United States and whose ATS is Greenhouse. The window is one quarter. The goal is two to three bets with confidence levels attached.
Here is what a raw pull returned before any cleaning, normalized to one row per job with title, department, location, and posted date. Straight off the careers page it looked like a hiring spree. It was not. Roughly a quarter of it was noise, and one cluster that looked like growth turned out to be a backfill. Those two corrections are the whole value of the method.
From raw postings to ranked bets
- ScopeFix one competitor and one quarter, find the ATS slug
- PullGet structured postings from the ATS API, not the careers page
- De-noiseDrop ghosts, evergreens, and postings past the 41-day fill benchmark
- ClusterCount by function, seniority, region, and product keyword, per month
- ClassifyTag each cluster expansion, backfill, or restructuring
- Map and rateTranslate expansion clusters into bets and assign confidence
Where to pull postings and how fresh each source is
Pull from the applicant-tracking-system public API, treat aggregators as corroboration only, and read WARN filings for the departure side. The ATS endpoint is the company's own live record; everything else lags, caches, or duplicates it.
Greenhouse's public Boards API returns structured job data over plain HTTP with no auth, and the same holds for Lever, Ashby, SmartRecruiters, and Workday. That gives you title, department, location, posted date, and full description in one clean pull. LinkedIn, Indeed, Glassdoor, and niche boards like Dice are primary in the sense that a company might post on one and not another, but they are noisy and laggy. For the departure and downsizing side, WARN filings are public: one aggregator pulls official notices from 49 states, updated daily, with more than 42,741 notices tracked, and another holds more than 82,000 notices covering 8.87 million workers.
| Source | What it gives you | Currency |
|---|---|---|
| ATS public API | Structured live listings, full JD | Live, daily |
| Aggregator boards | Broad reach, corroboration | Noisy, laggy |
| WARN filings | Departures, restructuring | Daily to twice-monthly |
WARN filings carry a quiet advantage. The federal WARN Act requires employers with 100 or more staff to give 60 days' notice of a mass layoff, and states like New York and New Jersey require 90 days and cover employers with 50 or more. Those advance-notice dates can sit in the future, which means a filing lets you spot a restructuring before the layoff actually happens. That built-in lead time sharpens the net-new-versus-backfill call later.
De-noising: why one in four postings is not a real signal
Before counting anything, throw out the fakes, because between 18% and 27% of active postings are likely ghost jobs and will otherwise inflate every cluster you build. De-noising is not optional cleanup. It is the step that decides whether your read is intelligence or fiction.
A Greenhouse internal review found 18% to 22% of posts were ghost listings, and nearly 70% of companies on the platform posted at least one ghost job in a single quarter. A separate LinkedIn-data analysis put the share of active US postings that are likely ghosts at about 27.4%. The mechanics are simple: ATS platforms auto-renew listings every 30 to 90 days, sometimes across multiple boards, even when hiring is paused or the role was quietly filled. That manufactures fake freshness. On top of that, a survey found 68% of managers had postings live longer than 30 days and one in ten kept them open past six months.
Two thresholds do most of the work. First, the average US posting fills in about 41 days, so treat that as a freshness cutoff: anything older warrants source verification and is disproportionately an auto-renewed evergreen. Second, if a job appears on LinkedIn or Indeed but is absent from the company's own ATS portal, it is likely stale, filled, or cached by an aggregator that never got the removal signal. Drop it.
| Benchmark | Value | What it sets |
|---|---|---|
| Ghost-job share (Greenhouse) | 18-22% | Why de-noising is mandatory |
| Ghost-job share (LinkedIn data) | ~27.4% | Upper bound on noise |
| Avg US time-to-fill | ~41 days | Freshness cutoff |
| ATS auto-renew window | 30-90 days | Source of fake freshness |
For Northwind, de-noising cut the raw pull by about a fifth. Two "always-on" support reqs, an auto-renewed senior sales role two quarters old, and a duplicate posting reposted by three staffing agencies all came out. What remained was the live-and-real subset worth clustering.
Clustering: functions, seniority, region, and keyword
Group the surviving postings into clusters by function, seniority, region, and product keyword, then count each cluster per month; the tightness of the cluster, not its raw size, is the signal. Five same-function roles posted within two weeks reads as compressed urgency and real headcount commitment. Eight scattered across a year do not.
The month-over-month ramp is the stronger version of this. Three AI/ML roles in the first month, five in the second, eight in the third, all senior, is a clear acceleration signal. Flat counts are not. Break each function down by seniority too, because a cluster weighted toward senior and lead titles signals a team being stood up rather than a line being backfilled.
There is a weighting nuance that most analysts miss: rarer functions shout louder per req. In Refolk's index there are three times as many Enterprise Account Executives as ML Engineers in the US market, so an equal count of net-new ML reqs represents a larger relative bet and deserves higher confidence.
| Function (current US professionals) | Count | Share of the two |
|---|---|---|
| Enterprise Account Executive | 16,492 | 75% |
| Machine Learning Engineer (ML skill) | 5,491 | 25% |
Read that table as a calibration tool. Four net-new AE reqs against a base of 16,492 is a smaller relative move than four net-new ML reqs against a base of 5,491. Same headcount, different loudness.
Geography deserves its own cluster because it is the cleanest bet to read. When a company begins posting in-person roles in countries outside its HQ, that typically indicates market entry or regional expansion. An onsite role cannot be faked remotely; it ties to local budget, a local lease, and local vendor evaluation. Refolk's index shows how thin some markets are, which affects how you weight the signal.
| Title (current professionals) | United States | Germany | US:DE ratio |
|---|---|---|---|
| Machine Learning Engineer (ML skill) | 5,491 | 507 | ~10.8x |
If Northwind posted two onsite ML roles in Germany, a market with roughly a tenth the ML talent of the US, that is a louder market-entry signal than the raw count suggests, because filling those seats locally is genuinely hard.
For Northwind, clustering surfaced three candidates: a ramp of senior ML and data-pipeline roles (3 then 5 then 6 across the quarter), a small cluster of enterprise account executives and solutions engineers based in a new European city, and a first-ever "RevOps Manager" title.
Pulling and cleaning postings by hand is the slow part of this whole method. Refolk collapses the scope, pull, and de-dupe steps into one plain-English query, so you can spend your time on the classification and mapping that actually require judgement.
The step-by-step procedure
Run these seven steps in order against your own target. Steps one through five are analyst work; steps six and seven bring in a strategy lead. The whole pass is roughly two days for one competitor and one quarter.
Reconstructing a competitor's bets from one quarter
- Scope the target and windowPick one named competitor and one quarter, then find its ATS slug. Done when you have a defined date range and a confirmed ATS endpoint.
- Pull raw postings from the ATSHit the Greenhouse, Lever, or Ashby public API for title, department, location, posted date, and description. Done when you have a normalized one-row-per-job table.
- De-noise the listDrop evergreen and high-turnover roles, flag anything older than ~41 days, and cross-check aggregators against the ATS to catch ghosts. Done when you have a live-and-real subset.
- Cluster by function, seniority, region, and keywordCount roles per cluster and per month across the quarter. Done when you have a table showing a ramp or a flat line.
- Separate net-new from backfillFor each cluster run a departure and new-hire scan and a first-time-role test, then net against WARN filings and headcount trend. Done when each cluster is tagged expansion, backfill, or restructuring.
- Map surviving clusters to betsApply the role-to-bet lookup to translate each expansion cluster into a product or market move. Done when you have two to three candidate bets with supporting roles listed.
- Assign confidenceRate each bet high for a multi-department cluster plus an exec hire plus explicit JD language, low for a single posting. Done when every bet carries a confidence level and discarded false readings are documented.
Net-new versus backfill: the check that changes the answer
A backfill replaces someone who left and inherits their seat and vendor relationships; an expansion hire is net-new headcount and carries a far stronger signal. Confusing the two is the most expensive error in this whole method, because a backfill cluster looks exactly like a growth cluster until you check.
Three data pulls settle it. Run a departure and new-hire scan on a professional network: did the predecessor leave in the same title around the same time? A matching exit means the req is probably a replacement. Run a first-time-role test: has this exact title ever existed at the company before? A first-ever RevOps Manager or first SDR means a function is being built from zero, and research suggests a first-time role in a new function shows two to three times higher purchase intent than a backfill. Finally, net the cluster against total-headcount trend and WARN filings, because one team can grow while the company cuts elsewhere.
Classifying a cluster
For Northwind, the check reversed one reading. The European AE cluster passed: the titles were first-ever in that region, no matching departures showed up, and headcount was trending up. Real market entry. The RevOps Manager passed too, as a first-ever function build. But the ML ramp partly failed. Two of the six ML roles matched senior departures from the same team in the prior quarter, visible as exits on a professional network. Those two were backfill. The remaining four were still net-new and still a real cluster, but the bet is smaller than the raw count of six implied.
Mapping roles to bets, and rating confidence
Translate each surviving expansion cluster into a candidate bet with a documented role-to-bet lookup, then rate confidence by how many independent signals point the same way. A bet backed by one posting is a guess; a bet backed by a multi-department cluster, an executive hire, and explicit job-description language is a call you can defend in a leadership review.
The lookup is direct. ML engineers or data scientists map to AI/ML feature investment or data-pipeline build-out. A new CRO means the sales playbook changes, a new CMO means marketing shifts, a new CTO means the tech stack is under review. In-person roles outside HQ map to market entry. A first-ever RevOps or SDR means a go-to-market function is being built from zero. Compliance and security engineers whose job descriptions cite SOC 2, ISO 27001, FedRAMP, or HIPAA and phrases like "enterprise prospects" map to an enterprise or regulated-tier push.
title: Confidence rubric for a competitor bet
note: Score each bet, then require corroboration for any product or market claim. A lone C-level hire may flag direction on its own but still needs one more signal for a bet.
HIGH = multi-department cluster + exec hire + explicit JD keyword language
MEDIUM = single-department cluster (3+ net-new roles) OR month-over-month ramp
LOW = one or two postings, no ramp, no corroborating exec or JD language
DISCARD = failed de-noise, backfill, compliance-only, or agency-repost
Questions practitioners ask
How many job postings does it take before I call something a real signal?
Require a cluster, not a posting. Practitioners converge on roughly five same-function roles inside a two-week window, or a month-over-month ramp such as three roles then five then eight. One senior req is normal backfill until proven otherwise. The only exception is a lone C-level hire, which can flag a direction change on its own but still needs corroboration before you attach a product or market bet to it.
How do I tell a backfill apart from net-new expansion hiring?
Run three checks per cluster. First, scan a professional network for a same-title departure in the same period; a matching exit means the req is likely a replacement. Second, apply a first-time-role test: has this exact title ever existed at the company before? A first-ever RevOps or SDR hire builds a function from zero. Third, net the whole thing against total-headcount trend and WARN filings so a growing team inside a shrinking company is not read as company-wide growth.
Why pull from the ATS API instead of the company careers page or LinkedIn?
The applicant-tracking-system public endpoint carries the live, structured record with posted dates and full descriptions, and it is the single source of truth the company controls. Greenhouse, Lever, Ashby, SmartRecruiters, and Workday all expose this over plain HTTP with no auth. Aggregators like LinkedIn and Indeed lag, cache, and duplicate, which is exactly why a role present on an aggregator but absent from the ATS is a prime ghost-job suspect.
What is the lead time between a competitor's hiring and its product launch?
No rigorous public study isolates that gap, so treat any precise number with suspicion. The available proxies point at a matter of months: one worked case saw five net-new data-engineering roles precede a market-entering launch by about four months, and the median Product Hunt launch to Series A interval is 265 days. Use one quarter as your window and track month over month to catch acceleration rather than betting on a single lead-time figure.
How big a problem are ghost and stale job postings?
Large enough that de-noising is mandatory. A Greenhouse internal review found 18% to 22% of posts were ghost listings, and a LinkedIn-data analysis estimated about 27.4% of active US postings are likely ghosts. ATS platforms auto-renew listings every 30 to 90 days even when a role is paused or filled. Skip the cross-check and you will over-read roughly one in four signals as strategy.