Fresh jobs, as they are posted.
How to get new job postings as soon as they are collected, keep changed jobs current and drop closed jobs, with hourly feeds and a live changes stream.
Updated
The short answer
The Jobs API has two ways to get fresh jobs. The new jobs feed (/v1/active-ats with time_frame=1h) returns jobs collected in the last full hour. The changes feed (/v1/changes) lists every new, changed, expired and excluded job in order, seconds behind collection. Jobs come from employer career sites in the US and Canada.
What does real-time mean for job data?
A job is fresh when you get it soon after the employer posts it, and when you drop it soon after it closes. Both matter: a stale closed job is as bad as a missed new one.
We read employer career sites and hiring systems again and again. How soon we see a new job depends on the site, so we do not promise a fixed delay per job. What we do promise is that each job reaches your feed as soon as we collect it.
Which feed should I use?
| Feed | What it returns | Best for |
|---|---|---|
| /v1/changes | Every created, updated, expired and excluded job, in order, from a position you store | The freshest copy, polled every few minutes |
| /v1/active-ats?time_frame=1h | Jobs first collected in the last full UTC hour | Hourly polling with filters |
| /v1/active-ats?time_frame=24h | Jobs first collected in the 24 hours up to the last full hour | Daily polling |
| /v1/modified-ats | Jobs whose content changed in a time range | Updating jobs you already have |
| /v1/expired-ats | Ids of jobs that left the feed | Removing closed jobs |
| /v1/jobs?window=1h | A search limited to jobs first seen in the last hour | Live search pages and alerts |
How does the hourly feed avoid gaps?
Each window ends on a full UTC hour. Called at 09:15, time_frame=1h returns jobs collected from 08:00 to 09:00, and each hour is ready two minutes after it ends. So the same call in the same hour gives the same jobs, and hourly polling never skips or repeats one.
Try it: follow every change
- Call /v1/changes?since=0 and save the jobs.
- Store next_since from the response.
- A few minutes later, call again with since set to that value.
- Add created jobs, replace updated ones, and remove expired and excluded ones.
curl "https://api.thejobsapi.com/v1/changes?since=YOUR_NEXT_SINCE&limit=1000&description=html" \
-H "Authorization: Bearer YOUR_API_KEY"When more is true, call again right away; there are more changes waiting.
When does a job count as expired?
When it is missing from two complete scans of the employer’s board at least two hours apart. A failed, partial or suddenly much smaller scan never closes jobs, so an outage at the source does not empty your copy. A job is excluded, not closed, when new evidence shows it is in another country.
Can I filter the new jobs feed?
Yes. The new jobs feed takes title, description and location searches, source, remote, has_salary and country, among others. The changes feed has no filters: it is the whole catalogue for one country, in order.
What does it cost?
The US is $900 USD a month, Canada is $200 USD a month, and both are $1,100 USD a month. Paid plans have no job or request limit, only a rate limit of 10 requests per second. The free trial lasts 14 days and includes 100,000 jobs from the US and Canada, with no request limit. You do not need a card.
Questions people ask
Is there a webhook for new jobs?
Not at the moment. Poll the changes feed every few minutes, or the 1h feed once an hour.
How fresh is the changes feed?
It is seconds behind collection. A job appears there as soon as we collect it.
How do I get only today’s new jobs?
Call /v1/active-ats with time_frame=24h, or search /v1/jobs with window=24h.
Do changed jobs count again on the trial?
On the trial, each job returned counts toward the 100,000-job allowance. Paid plans have no job limit.
Do expired job ids count toward usage?
No. Expired ids do not count toward the job allowance; each call counts as one request.
Can a closed job come back?
Yes. If a job reappears on the employer’s board, it is active again with the same id.