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
Enter fullscreen mode Exit fullscreen mode
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"
}
Enter fullscreen mode Exit fullscreen mode
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
Enter fullscreen mode Exit fullscreen mode
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
Enter fullscreen mode Exit fullscreen mode
Or just hit the endpoint with curl:
curl "https://remote-jobs-api.tten.no/v1/jobs?limit=10"
Enter fullscreen mode Exit fullscreen mode
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.