I Built a Remote Jobs API That Parses Salary So You Don't Have To

작성자

카테고리:

← 피드로
DEV Community · earnnova-dev · 2026-09-29 개발(SW)

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:

  1. A stable schema across multiple boards (same field names every time, even when the source format changes).
  2. Salary as data, not as text.
  3. 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

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.

원문에서 계속 ↗