6 Free Remote Job APIs & Data Sources (2026)

A curated list of free endpoints for remote-job data — every one verified to return live data, each with a copy-paste Python example. No scraping, no accounts, no API keys for most.

The hard part of a remote-job feed is not the logic — it's that every board exposes its data differently: some are JSON APIs, some are RSS, some are plain HTML. The list below is only sources that were actually verified to return data (checked 2026). Here are the six that work and how to read each one.

Scope: every source below is public and free as of 2026. Some are official JSON endpoints, some are RSS feeds, some are public HTML. Respect each board's rate limits and terms of service. If you want one call that returns all of them in a single normalized schema, see Remote Jobs API at the end.

The list

1. Remotive

Official JSON API

Remotive exposes a public JSON endpoint for all current jobs. One call returns the full set with title, location, tags and salary ranges.

import requests
r = requests.get("https://remotive.com/api/remote-jobs", timeout=15)
jobs = r.json()["jobs"]
print(len(jobs))   # full current set

2. RemoteOK

Public JSON API

RemoteOK's listing is backed by a public JSON endpoint (it asks you to link back, follow, no nofollow). Useful for high-volume tech remote roles.

import requests
r = requests.get("https://remoteok.com/api", timeout=15)
jobs = r.json()          # list of jobs
for j in jobs[:5]:
    print(j["id"], j["name"][:40])

3. We Work Remotely

RSS feed

WWRemotely publishes a daily RSS feed of new remote jobs. Parse it with any RSS library.

import feedparser
d = feedparser.parse("https://weworkremotely.com/remote-jobs.rss")
for e in d.entries[:10]:
    print(e.title, e.link)

4. Jobicy

Keyless JSON API

Jobicy aggregates 50+ remote boards and exposes a public JSON endpoint — no API key, no signup. One call returns title, company, industry, geo, level and salary range.

import requests
r = requests.get("https://jobicy.com/api/v2/remote-jobs?count=50", timeout=15)
jobs = r.json()["jobs"]          # jobTitle, companyName, jobGeo, salaryMin/Max
for j in jobs[:5]:
    print(j["jobTitle"], "|", j["companyName"])

5. Hacker News (whoishiring)

Algolia search API

HN's monthly "Who is hiring?" posts are searchable via Algolia — a clean, keyless JSON API.

import requests
r = requests.get("https://hn.algolia.com/api/v1/search",
                 params={"query": "who is hiring", "tags": "story"},
                 timeout=15)
hits = r.json()["hits"]
print(len(hits), "hiring posts")

6. Remote Leaf

Public listings

Remote Leaf aggregates remote jobs and exposes a readable, public listing of the latest openings.

import requests
r = requests.get("https://remoteleaf.com/remote-jobs/", timeout=15)
# parse the public listing for the latest jobs

The normalizer: Remote Jobs API

REST API · self-hostable · MIT

Maintaining six separate adapters — and re-fixing each one when a board changes — is the real cost of a cross-board feed. Remote Jobs API pulls Remotive, RemoteOK, We Work Remotely, Jobicy and Hacker News, normalizes everything into a single schema, dedupes, and returns JSON/CSV — with an optional 0–100 skill fit-score.

curl "https://<your-host>/v1/jobs?skills=python,backend&limit=3"

Remote Jobs API → — 5 boards, one schema, stdlib-only Python, free & MIT.

Choosing a source

If you only need one board, use its native endpoint — it's the most direct. If you need a cross-board feed (most real use cases do), the single biggest cost is adapter maintenance: every board quietly changes its format. A normalizer collapses that into one stable schema you control. That's exactly the gap Remote Jobs API fills.