Jobs API: what is open now, and what changed since you last looked

162,649 open jobs read straight from company career pages, plus the full description and a cursor-based feed of which postings opened and which closed. 5,343 companies, 48 countries. Free tier, then from $45 a month on RapidAPI.

Most job APIs sell a snapshot. They tell you what is open right now, which answers half a question. If a posting vanished overnight, a snapshot cannot tell you that - it can only stop mentioning it, and you find out by noticing an absence.

This API keeps the events underneath. Measured over eight days: 17,061 postings disappeared from this set. Ask for the change feed and you get them by name, with the company, the role and the moment they went.

Two endpoints need no key at all

Check the data before you pay for it. Every number on this page comes from the second one, and you can call it yourself right now:

curl https://datasignalslab.com/jobs/v1/health
curl https://datasignalslab.com/jobs/v1/coverage

What is in it

open positions 162,649
companies with an opening 5,343
remote 43,083
countries 48
posted in the last seven days 15,633
closing events recorded 17,061

Largest markets: United States 79,153, United Kingdom 8,816, India 4,943, Germany 4,360, Canada 4,006.

Where the data comes from

Eight applicant tracking systems publish a public JSON endpoint for their customers' career pages: Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Teamtailor, Breezy and Rippling. This API reads those directly.

No aggregator in between, no bot protection to work around, and the posting is here before a job board copies it.

The change feed

/v1/jobs/changes is cursor-based. You pass back the cursor from your last response and you get exactly what happened after it: no duplicates, no gaps, however often you poll.

curl -H "X-RapidAPI-Key: YOUR_KEY" \
     -H "X-RapidAPI-Host: datasignals-jobs.p.rapidapi.com" \
     "https://datasignals-jobs.p.rapidapi.com/v1/jobs/changes?since=196700&limit=2"
{
  "changes": [
    { "cursor": 196701, "change": "opened", "company": "zscaler",
      "title": "Principal Software Development Engineer",
      "country": "India", "posted_at": "2026-08-11T09:14:02Z" },
    { "cursor": 196702, "change": "closed", "company": "acme",
      "title": "Senior Data Engineer", "country": "Germany" }
  ],
  "cursor": 196702,
  "has_more": true
}

Every row in a search result carries open_since. That is what a snapshot cannot give you: a role open for eleven weeks says something a role posted yesterday does not.

The full job description

Every row can carry the job description as the employer wrote it. It is off by default and comes back with include_description=true, because a description runs to a few thousand characters and a page of a hundred jobs would otherwise be megabytes for someone who only wanted titles.

Present on 146,324 of the 162,649 open positions - 90 percent. The rest are employers whose applicant tracking system publishes no description in the feed.

curl -H "X-RapidAPI-Key: YOUR_KEY" \
     -H "X-RapidAPI-Host: datasignals-jobs.p.rapidapi.com" \
     "https://datasignals-jobs.p.rapidapi.com/v1/jobs?q=data+engineer&include_description=true"

Who this is for

  • Job boards that need to keep their own set clean. A stale posting costs you a candidate and a complaint; the change feed tells you which ones to pull.
  • Recruiters and sourcers who want the posting before an aggregator copies it.
  • Growth analysts who want to see a company stop hiring before it is in the news.
  • AI agents that need structured openings instead of scraped HTML.

Pricing

Sold through RapidAPI. Counted in rows returned, not calls: a call that returns a hundred jobs is not the same as one that returns three.

plan price rows / month change feed
Basic free 250 no, and delayed 24 hours
Pro $45 10,000 yes
Ultra $95 25,000 yes
Mega $199 75,000 yes

Subscribe on RapidAPI

Honest limits

Not real time. Sources are refreshed once a night, so the freshest a row can be is last night's run. /v1/health says so itself, and you can check it.

No salary fields. They are not in the source, so they are not in the answer.

5,343 companies, not the whole internet. fantastic.jobs indexes 200,000+ and also sells expired-job and modified-job endpoints, with AI-enriched fields and company data this API does not have. If you need breadth or enrichment, buy theirs. What this one gives you that an aggregator cannot: the posting comes from the employer's own applicant tracking system, not from a scrape of LinkedIn, so it is here before an aggregator copies it and it says what the employer actually published.

FAQ

How is this different from a job scraper?

A scraper reads an aggregator such as LinkedIn or Indeed, a day or two late and behind bot protection. This reads the applicant tracking system the employer already publishes for their own career page, and it keeps the history of what disappeared.

What does "cursor-based" mean in practice?

Every event gets a number that only goes up. You store the last number you saw and send it back next time. You cannot get the same row twice and you cannot skip one, however often or rarely you poll.

Can I check the data before subscribing?

Yes. `/v1/health` and `/v1/coverage` need no key at all. Every figure on this page came from `/v1/coverage`.

How fresh is it?

One refresh per night. `/v1/health` reports the exact age of the newest observation, so you never have to take our word for it.

Do you have salary data?

No. The applicant tracking systems do not publish it in the feed, so inventing it would mean guessing. jobs, job change feed, closed job postings, hiring data API, remote jobs API, job board data feed, recruitment data API

What does "cursor-based" mean in practice? Every event gets a number that only goes up. You store the last number you saw and send it back next time. You cannot get the same row twice and you cannot skip one, however often or rarely you poll.

Can I check the data before subscribing? Yes. /v1/health and /v1/coverage need no key at all. Every figure on this page came from /v1/coverage.

How fresh is it? One refresh per night. /v1/health reports the exact age of the newest observation, so you never have to take our word for it.

Do you have salary data? No. The applicant tracking systems do not publish it in the feed, so inventing it would mean guessing.

jobs, job change feed, closed job postings, hiring data API, remote jobs API, job board data feed, recruitment data API