Every week I check the same five remote job boards: Remotive, RemoteOK, We Work Remotely, Jobicy, and Hacker News. Every week I notice the same problems: the formats don't match, salaries are buried in free-text descriptions (or missing entirely), and if I want to filter by pay I end up copy-pasting into a spreadsheet by hand.
So I built an API that does the boring part for you.
What it is
The Remote Jobs API is a free, keyless REST endpoint that aggregates remote job listings from live boards and returns them in one stable, normalized schema. No signup, no API key, no "add your card to start" — the free tier just works.
GET https://remote-jobs-api.tten.no/v1/jobs?limit=50
One request gives you a normalized list of jobs, each with the fields you actually want:
{
"title": "Senior VMware Engineer",
"company": "EPAM Systems",
"url": "https://weworkremotely.com/remote-jobs/epam-systems-senior-vmware-engineer",
"location": "Anywhere in the World",
"salary_min": null,
"salary_max": null,
"salary_currency": null,
"salary_period": null,
"category": "Engineering",
"source": "wwr",
"published": "2026-09-28T23:53:19+00:00"
}
The part I actually cared about: parsed salary
Most "job feed" projects just pass through the raw description and call it a day. But salary is the one field that's almost always messy — it's hidden in prose like "salary range $120,000–$150,000 USD per year", or "140k–180k", or just not present at all.
The API parses that prose into structured fields: salary_min, salary_max, salary_currency, and salary_period. When a listing doesn't publish a number, those fields are honestly null rather than a guessed value. In a sample of the last 200 live jobs, 70 carried a parseable salary — and every one of them comes back as clean numeric bounds you can sort, filter, and chart without regex.
That unlocks the filter I wanted from day one:
GET https://remote-jobs-api.tten.no/v1/jobs?min_salary=90000&limit=20
Now the feed only returns jobs where the parsed minimum is at least $90k. No client-side parsing, no scraping, no guesswork — just a query parameter.
Why I built it
I wanted three things and couldn't find them in one place:
- A stable schema across multiple boards (same field names every time, even when the source format changes).
- Salary as data, not as text.
- Zero friction — no account, no token, no paywall to even look at the data.
The free tier is open by default: you can call /v1/jobs with no key and get real results. If you want higher limits, there's a Pro tier, but you don't need it to do something useful today.
Use it in 30 seconds
It's also on PyPI, so you can pull it in a script directly:
pip install remote-jobs-api
Or just hit the endpoint with curl:
curl "https://remote-jobs-api.tten.no/v1/jobs?limit=10"
Where it's live
- API: https://remote-jobs-api.tten.no (free, keyless, real data)
-
PyPI:
remote-jobs-api - Source: github.com/earnnova-dev/remote-jobs-api
I'm happy to hear what you build with it, or what field I'm missing. The one thing I'd push back on: if a tool only gives you raw job text and calls that "a job feed", it's done half the job. The parsing is the part that makes the data actually usable.
Top comments (0)