How long job postings typically stay open and the average time to fill a role are two different measures. In the vacancy statistics of the US Bureau of Labor Statistics, the UK Office for National Statistics and Eurostat we found counts of open jobs and no figure for either. This post sets out what those statistics do measure, shows how to compute posting duration yourself from open and close dates, and explains how to read a role that has stayed open a long time or has been posted again.
How long do job postings typically stay open, and what is the average time to fill?
We found no figure in official US, UK or EU vacancy statistics for how long job postings stay open or for average time to fill. Vacancy surveys in the US and the UK count the jobs open on one date. The US federal government's own standard is 80 calendar days from validated hiring need to entry on duty.
Three measures are in play.
| Measure | What it records | Who can observe it |
|---|---|---|
| Vacancy count | The jobs open on one reference date | A statistics office, through a survey of employers |
| Time to hire | The days from a validated hiring need to entry on duty, in the US federal standard | The employer |
| Posting duration | The days a posting stayed published, from its open date to its close date | Anyone who observed the careers page on both dates |
What the official statistics measure
The US Job Openings and Labor Turnover Survey defines a job opening as a position open on the last business day of the month, under three conditions: a specific position exists with work available for it, the job could start within 30 days, and the employer is actively recruiting from outside the establishment. The survey's questions and answers call job openings a stock measure and hires a flow measure over the whole month.
In its release of 29 September 2026 the BLS reported 7.1 million job openings and 5.2 million hires for August. Dividing one by the other gives a stock equal to about 1.4 months of hiring. That ratio is our arithmetic and a rough measure of turnover: we found no duration in the release itself.
The UK Vacancy Survey asks one question of approximately 6,100 businesses every month: how many vacancies they had on a specified date for which they were actively seeking recruits from outside. Eurostat's definition of a job vacancy is a paid post, newly created, unoccupied or about to fall vacant, for which the employer is taking active steps to find a candidate from outside the enterprise and which it means to fill at once or within a set period.
A posting is a different object, an advertisement: by the BLS conditions, one kept up with no specific position behind it would not be a job opening.
The official hiring clock we found belongs to the US federal government. A memorandum of 30 September 2026 from the Office of Personnel Management tells agencies to manage all hiring actions within an overall 80 calendar days. It names 66 calendar days from validated hiring need to tentative job offer, acceptance of the offer within 2 days and entry on duty within 14 days of acceptance. The days after the tentative offer are a stretch on which a posting is silent.
How to measure posting duration from open and close dates
Posting duration is one subtraction, the close date minus the open date, and five decisions about which postings and which dates go into it.
- Use observed dates. Take the open date from the first observation of the posting and the close date from the observed close. The date the employer states can differ from the day the posting could first be seen, so keep it as a second column.
- Leave out postings whose opening was not observed. A posting already published at the first observation of a company's postings opened on a day outside the record, so its duration is unknown.
- Keep the postings that are still open. A figure built from closed postings alone is biased short, because the long-running roles are the ones still open. Count each open posting at its age so far, which is a floor on its duration.
- Report a median and a tail. A few standing postings pull a mean far above the typical role. Give the median, and the share of postings open longer than 60 days.
- Compare like with like. Split by job function and seniority level, and compare a company with its own earlier periods first.
In Fokals Job Postings each record carries the dates this takes: the posting date where the employer's board gives one, the first-seen date, the last-seen date and the close date, with a baseline flag on a posting that was already published at the first observation. The query computes the median for each company and job function. Its share past 60 days is taken over postings first seen at least 60 days ago, since a younger posting has not had the time.
select
company_id,
labels ->> 'job_function' as job_function,
count(*) as postings,
count(closed_at) as closed,
percentile_cont(0.5) within group (
order by extract(epoch from coalesce(closed_at, now()) - first_seen_at) / 86400
) as median_days,
avg(case when coalesce(closed_at, now()) - first_seen_at > interval '60 days'
then 1.0 else 0.0 end)
filter (where first_seen_at <= now() - interval '60 days') as share_past_60_days
from job_postings
where not found_on_first_read
group by company_id, labels ->> 'job_function';The median is exact when the middle posting is closed and every open posting is already older than it. Otherwise it is a floor that rises as the open postings age.
Hiring Activity gives a second reading without touching single postings. It holds each company's open, new and closed postings for every closed day, so the open postings summed over a window, divided by the closings in it, give the days the present stock would take to clear at the present pace.
select
company_id,
avg(open_postings) as avg_open,
sum(closed_postings) as closings,
sum(open_postings)::numeric
/ nullif(sum(closed_postings), 0) as days_to_clear
from company_hiring_daily
where day between :first_day and :last_day
group by company_id;A worked example: Acme Robotics (illustrative)
Acme Robotics is an invented company, and every figure in this example is illustrative.
Assumptions:
- The window is 90 days, and a posting is counted on every day it was open.
- Two postings were already published at the first observation, and both stay open through the window.
- Nine postings were seen opening. Six of them closed, after 12, 19, 26, 33, 41 and 58 days.
- The other three are still open when the window ends, aged 45, 64 and 88 days.
The working, in three readings:
- Closed postings only. The median of 12, 19, 26, 33, 41 and 58 is the mean of the two middle values: (26 + 33) / 2 = 29.5 days.
- Every posting seen opening. With the open postings at their age so far the nine values are 12, 19, 26, 33, 41, 45, 58, 64 and 88. The fifth is 41 days. All three open postings are already older than that, so the median is exact. Two of the nine have passed 60 days, and the posting aged 45 days may yet.
- Stock over closings. The posting-days are 189 for the six closed postings, 197 for the three open ones and 180 for the two baseline postings at 90 days each: 566 in all, or 6.3 open postings on an average day. The 566 posting-days divided by six closings give 94 days.
| Reading | Result | What it answers |
|---|---|---|
| Median of closed postings | 29.5 days | How long the roles that closed were advertised |
| Median of every posting seen opening | 41 days | How long a typical posting stays open |
| Open posting-days per closing | 94 days | How long the present stock would take to clear |
The first reading is short because it leaves out the three roles still open. The third is long because the two baseline postings and the three open ones account for 377 of the 566 posting-days. The second answers the question in the title. When two published averages disagree, ask which of the three readings each one is.
What it means when a job posting stays open a long time
A posting that stays open a long time shows that the employer is still advertising the role, and nothing more. A posting records an intention to hire. The role may be hard to fill, the posting may serve several hires, it may be a standing advertisement with no single vacancy, or the process behind it may have slowed.
| Reading | What supports it in the data |
|---|---|
| A hard-to-fill role | A high seniority label or a specialised job function, while the company's other roles close sooner |
| One posting, several hires | A role labelled as one of several hires growing a team, or the same title open in several locations |
| A standing posting | A general title that the company has open in every period you look at |
| A slowed process | Nothing in the posting itself: read the company's new postings and closings around it |
Job Postings carries labels that bear on the first two: job function, seniority and ten role flags, among them one for an urgent hire and one for a role that is one of several hires growing a team.
Federal hiring has a name for the standing posting. OPM lists three ways a job announcement closes: on the closing date it states, when a cut-off number of applications is reached, or, for an open continuous announcement, on no fixed date, since it stays open indefinitely and usually names the dates on which applications are reviewed. OPM describes a close as the point after which you can no longer apply. None of the three is a hire.
Google's documentation for job posting markup says that jobs no longer open for applications must be expired: by an expiry date in the past, by removing the page or by removing the markup. The public record marks the end of applications, and whether the role was filled or cancelled is not in it.
Stale or reposted: what a long-open job posting says about the hiring process
A long-open posting says the hiring process has not ended the advertisement, and a repost says it ended one and began another. Neither proves a stale role. Treat a close followed by a new posting for the same title and place as one continuing search, and judge staleness from the company's other openings and closings.
A repost breaks a duration figure: one search of 100 days becomes two postings of 50. Chain them before you measure. The query finds, for each closed posting, a posting of the same company, title and country first seen within 30 days of the close. Thirty days is our choice of threshold.
select
a.company_id, a.title, a.country,
a.first_seen_at as first_opened,
a.closed_at as closed,
b.first_seen_at as opened_again
from job_postings a
join job_postings b
on b.company_id = a.company_id
and b.title = a.title
and b.country = a.country
and b.posting_id <> a.posting_id
and b.first_seen_at between a.closed_at
and a.closed_at + interval '30 days'
where a.closed_at is not null;Measure a role the query returns from its first opening. Then ask whether the role is alone: if the company's other postings in the same function open and close while this one stays, the role is the exception, and if nothing moves in Hiring Activity, the board itself has gone quiet.
Hiring datasets with a job posting open date and close date
A hiring dataset supports duration work when each posting carries two dates the collector observed: when the posting was first seen and when it was confirmed gone. Several do, under different field names. Ask of each whether the open date is the employer's or the collector's, and whether the close date was observed or assigned by a rule.
| Dataset | Open date | Close date, as its documentation defines it |
|---|---|---|
| USAJOBS Historic JOAs, public | The day the announcement opened | The day it closed, with a further field for the actual close date of a position closed early |
| LinkUp RAW data package | When the job was first observed, with the posted date shown on the listing in a further table | The latest read of the site that did not find the posting, with the close date shown on the listing in that further table |
| Revelio Labs individual job postings | The date the job was posted | The date the job was removed, empty while it has not been |
| Lightcast job postings | The date an advertisement was posted | An expiration set in one of two ways: by revisiting the advertisement, or by the age of the advertisement, at no more than 60 days. A posting made up of several advertisements is marked expired once all of them have expired, at a maximum of 121 days |
| Fokals Job Postings | The first-seen date, beside the posting date the employer gives | The close date, confirmed before it is written |
The field names, as each documentation writes them:
dataset open date close date
USAJOBS Historic JOAs PositionOpenDate PositionCloseDate, PositionExpireDate
LinkUp RAW data package created delete_date (posted_date and close_date are the listing's dates)
Revelio Labs postings Post_date Remove_date
Fokals job_postings first_seen_at closed_at (posted_at is the employer's date)Check which clock a column runs on: the Revelio Labs dictionary defines an average time to fill as the remove date minus the post date, in months, which is posting duration as measured here.
Fokals Job Postings is refreshed daily and delivered by REST API or as bulk files, and Hiring Activity is written once for each closed day and never revised, so a duration series reads the same whenever you load it. The data dictionary defines each date, and why we read job postings from the company's own board covers the source.
Date posted and date closed in a job posting or hiring dataset
Date posted is the employer's statement of when a role was published, and in a collected dataset date closed is the collector's observation that the posting has gone. The public markup for postings has a field for the first and an expiry date for the second, and we found none for the date a role was closed or filled.
The JobPosting type of schema.org has datePosted, the date an online listing was published, and validThrough, the date after which the item is no longer valid. Google's documentation requires datePosted, which it defines as the original date the employer posted the job. It lists validThrough as recommended, notes that it is required for a posting that has an expiration date, and says to leave it out when a posting never expires or the expiry is not known.
So an employer publishes a start date and, at most, a planned end. The actual close shows only as an absence: the page is gone or the markup is removed. An absence has to be observed, which makes the close date a property of the collector. Three tests on sample data show what you hold.
- Compare the open date with the employer's posting date on twenty postings, and read the largest gaps.
- Open the public address of twenty closed postings and confirm that each is gone.
- Chart the durations of closed postings. A spike at one round age, such as 30 or 60 days, marks close dates assigned by a rule.
Public job posting datasets with open and close dates (date posted, date closed)
The public dataset we found with both dates is the USAJOBS Historic JOAs API, which returns current and past job announcements of the US federal jobs site with the date each opened and the date each closed, and needs no authentication. The City of New York publishes its current postings as open data, a snapshot to keep daily.
The USAJOBS documentation lists filters for the range of dates in which an announcement opened or closed. Jobs NYC Postings holds the postings current on the City of New York's jobs site. Keep each day's copy of a snapshot like it, and the first and last copy a posting appears in give its open and close dates.
Frequently asked questions
How long do job postings typically stay open?
We found no official figure. The vacancy surveys of the US and the UK count the jobs open on one date, and we found no duration in the releases we read. Posting duration has to be measured from open and close dates, company by company. Report the median over every posting seen opening, with still-open postings counted at their age so far, and the share open longer than 60 days.
What is the difference between posting duration and time to fill?
Posting duration is the time an advertisement stayed published, from its open date to its close date, and anyone who observed the careers page can measure it. Time to fill or time to hire is the employer's own clock. In the US federal standard it runs from validated hiring need to entry on duty, within 80 calendar days, and it continues past the tentative offer, through acceptance to entry on duty.
Does a closed job posting mean the role was filled?
No. A close means the posting is no longer published, and a posting records an intention to hire. US federal announcements, for example, close on a stated date or when a cut-off number of applications arrives, whatever happens next. A role may be filled, cancelled or advertised again, so read a close beside the company's later postings and its stated headcount.
Why would a job posting be reposted?
The data shows that a posting closed and another for the same title and place opened soon after. The reason stays with the employer. For measurement the handling matters more: chain the two postings into one search before you compute a duration, or one long search is counted as two short ones and the median falls.
Is there a public dataset of job postings with date posted and date closed?
Yes. The USAJOBS Historic JOAs API returns current and past job announcements of the US federal jobs site with the date each opened and the date each closed, and its documentation says the endpoint needs no authentication. Open data portals also publish current postings, such as those of the City of New York, which become an open and close record once you keep each day's copy.
What does a job posting open a long time say about a company?
By itself, only that the company is still advertising the role. Read it against the company's own record: whether its other roles in the same function close sooner, whether it opens and closes postings at all in the same weeks, and whether the role is labelled as one of several hires. A long-open role at a company whose board is otherwise moving is a hard search or a standing posting.
The queries and code on this page are examples to adapt. Test them in your own environment before you rely on them.
What this page says about the products it names was checked against their public documentation on 7 October 2026. Product and company names are trademarks of their owners. Fokals is not affiliated with them or endorsed by them.