What we count
We count roles, not postings. A role is one company hiring for one job title at one level: Stripe hiring a senior data engineer is one role. When that role is posted in several cities, on several boards or again later, it still counts once.
Copies of a role whose open periods overlap, or are less than 60 days apart, are one role. A gap of 60 days or more starts a new one, since it is probably a new hire.
Every page covers a rolling 90-day window that ends on the day its numbers were built, named by its months in the heading (for example Jul-Oct 2026). A role counts when it was open at any time in that window. "Updated" on a page is the last day its numbers changed.
Every count is shown with what it is out of, as in 412 of 1,030, and each one has its own base: skills are out of the roles whose requirements we read, years out of the roles that state years, degrees out of the roles whose degree wording we read, and pay and remote work out of the roles whose details we may use. A role known only from a source that is switched off still counts as a role, without its details.
Where it comes from
We read public postings from two kinds of source: the job boards employers run on hiring platforms (Ashby, Greenhouse, Lever, Recruitee, SmartRecruiters and Workable), and four public job feeds (Himalayas, Remote OK, The Muse and USAJOBS).
When a role appears in more than one place, its details come from one copy: the employer's own board first, otherwise the copy with the most requirements we could read, then the one seen most recently.
Each source can be switched off from these counts, and any employer can ask to be left out of them. Either change starts a recount at once; our target is that the employer or source is off these pages within 48 hours of the request. To ask, email [email protected].
How requirements are read
An AI model reads the text of each posting and lists its requirements, each marked required or preferred as the posting words it. It also notes the years of experience the posting asks for and what it says about a degree. A person reviews the tables that turn what it reads into names:
- Titles. A reviewed title table maps job titles to 18 role names, from software engineer to data analyst. A title it does not know counts nowhere until a person reviews it. Management titles are left out.
- Levels. The level comes from the title: junior, mid-level, senior, staff, principal or lead (interns are counted but have no page of their own). When the title names no level, it comes from the years asked: up to 2 is junior, 3 to 5 mid-level, 6 or more senior. A role with neither counts in its role page but on no level page.
- Skills. A reviewed skill table makes React.js, ReactJS and React one skill. Words that are not skills ("design", "ability") are dropped, and a name not yet in the table counts nowhere until it is reviewed.
- Years. The overall experience a posting requires: "3-5 years" counts as 3. Years tied to one tool count only when no general years are asked. Preferred years do not count.
- Degree. Each role is in exactly one of four groups: degree required, degree or equivalent experience, degree preferred, or no degree mentioned.
- Pay. Only what the employer states in the posting; we never estimate it. Stated pay is turned into US dollars a year: a range counts as its midpoint, and a single figure or a one-sided amount ("from $120k", "up to $200k") counts as that figure. Pages show the median of those amounts, never a range of our own.
- Remote work. A role counts as remote when its posting says it can be done remotely.
A role whose posting we have not read still counts as a role, but not in skills, years or degree: we do not know what it asks, which is not the same as asking for nothing.
The short summary at the top of each page is written from that page's own numbers and states no number that is not among them.
Thresholds
A share of a small group swings with a few postings, so a number needs enough roles behind it before we show it as a share. Below 50, a page shows the count alone (12 of 40); from 50 up it adds the share, rounded to a whole number: 412 of 1,030 (40%).
| What | Needs | Below it |
|---|---|---|
| A share next to a count | 50 or more in the number it is out of | The count alone |
| Pay (the median) | 50 roles that state pay | Pay is hidden; the page says how many state it |
| A company's numbers | 3 roles at that company | Its numbers are not shown |
| A company page in search | 10 roles at that company | The page stays up, out of search |
| A level page in search | 100 roles at that level, and its role page in search | The page stays up, out of search |
| A role page in search | 300 roles | The page stays up, out of search |
| A pay page in search | Its role page in search and 50 roles that state pay | The page stays up, out of search |
A page whose numbers drop below the bar for search stays up. It keeps its address, leaves search engines and their sitemaps, and other pages name it without linking to it until it has enough roles again. A level page stays even with no role left in the window, and says so. A company page goes only when the company has no role left in the window and no open role listed.
Each new set of numbers is checked before it is used. One with more than 20% fewer roles than the set before it is not used, unless the drop comes from a source being switched off or an employer asking to be left out since that set: the pages keep the last set until a person has looked. A group in which one company holds more than 20% of the roles, or a number that moved more than 30% since the last set, is flagged for review.
Limits
- Not the whole market. The numbers describe the employers and feeds we read. The employer boards are mostly technology companies, which is why headings say "at tech companies". Roles at other employers count only when one of the feeds lists them.
- Software and data roles only. Other jobs at the same employers are not counted. Roles are not filtered by country.
- History starts with our reading. A window that reaches back before we began reading a source holds only the roles still open when we first read it.
- One role, several openings. A company hiring for the same title at the same level in several teams counts as one role.
- Reading can be wrong. The model can misread a posting, and the title and skill tables miss new names until a person adds them.
- Pay where stated. Pay figures come only from postings that state pay, so they lean toward employers and places where stating it is common or required by law.
- Unknown levels. Many titles name no level and ask for no years. Those roles count on their role page but on no level page.
Changes
Each change to how roles are counted, or to the title and skill tables, starts a new counting version, and every set of numbers records the version it was counted under.
- , Counting version 1. First version. Roles counted as company, title and level, with copies less than 60 days apart as one role; a rolling 90-day window; the reviewed title and skill tables; the thresholds above.