Point your agent, RAG pipeline, or LLM tool at a single no-auth JSON endpoint and get 340+ deduplicated remote roles — tagged, salary-carrying, and ranked by fit. No scraping, no 5 separate board integrations, no API key to request.
ai matchBuilding an AI recruiting copilot, a RAG pipeline over live job postings, an MCP server that answers "what's on the market right now?", or a data product that needs fresh remote-role signals means the same problem: you need structured, current, cross-board job data. Doing it by hand means scraping Remotive, RemoteOK, Jobicy, We Work Remotely, and the weekly Hacker News "Who is hiring" thread — each with a different shape, rate limit, and change cadence — then normalizing the fields yourself.
Remote Jobs API does that normalisation for you. One GET returns a single JSON array where every job has the same stable fields: a deduplicated id, title, company, location, source, a tags array, salary_min/salary_max/salary_currency/salary_period, published, and a fit_score when you query by skill. No auth on the free tier. No per-board adapters. Just data your model can ingest.
The current live snapshot (2026-10-02) contains 340 remote jobs across five sources: Jobicy (120), RemoteOK (99), We Work Remotely (89), Remotive (17), and Hacker News (15). 232 of them carry a tags array and 88 carry a parsed salary (26% coverage — a data-availability fact, not a gap: the feed reports exactly what each board exposes).
For agent workloads the skill ranking is the useful part. Query skills= with a skill or stack and the feed scores every posting for a match and returns them best-first — so skills=ai surfaces 259 fit-scored roles, skills=data 153, skills=rust 88, skills=ml / skills=agent 55, and skills=python 21. That is the "ranked, deduped, structured" input an agent or RAG index actually wants.
| Query | Fit-scored roles | Use for |
|---|---|---|
skills=ai | 259 | AI/ML market signal, recruiting copilot |
skills=data | 153 | Data/analytics demand tracker |
skills=rust | 88 | Systems / high-perf stack tracking |
skills=ml | 55 | Machine-learning hiring pulse |
skills=agent | 55 | Agent/autonomy role emergence |
Counts are a point-in-time read of the live feed at 2026-10-02 and move daily as the boards update. The endpoint is the source of truth — this page is a snapshot.
skills= works — honestlyPassing skills=ai does not hard-filter the feed to AI-only jobs. It scores every posting for an AI match (a title hit weighs more than a body/tag hit) and returns them best-first, with the strongest AI-named roles leading the list. The full board is still available so your agent can see adjacent roles too. Combine it with min_score to keep only the strongest matches — that is the clean way to gate a RAG ingestion or a "top-N relevant roles" answer.
Each job has a stable id you can dedupe on across pulls, so a scheduled agent can surface only new roles instead of re-announcing yesterday's. There is no session, no cookie, and no rate-limit handshake on the free tier — one request returns the whole board, which is exactly the call pattern a cron, a GitHub Action, or an MCP tool wants.
The free tier needs no authentication and allows 100 calls per month. Pull the current AI-ranked remote roles with a single request:
curl "https://remote-jobs-api.tten.no/v1/jobs?skills=ai&min_score=15&limit=20"
Or ingest it with the Python standard library — no dependencies, ideal as the tool function behind an agent:
import json, urllib.request
url = "https://remote-jobs-api.tten.no/v1/jobs?skills=ai&min_score=15&limit=25"
with urllib.request.urlopen(url) as r:
data = json.load(r)
for job in data["jobs"]:
fit = job.get("fit_score") or 0
sal = job.get("salary") or "n/a"
tags = ", ".join(job.get("tags") or [])
print(f"- [{fit}] {job['title']} | {job['company']} | {sal} | {tags}")
Useful parameters for agent tools: skills (comma-separated), source (remotive, remoteok, jobicy, wwr, hn), limit, min_salary, and min_score (minimum fit_score, requires skills). min_salary filters on the salary floor, so it is the honest way to gate by a compensation band.
skills=<stack> on a schedule, dedupe on id, and only surface new roles — a self-updating "what's on the market" signal with zero scraping code.title, description, tags, and salary_min fields straight into a vector store; the stable id makes upserts idempotent across daily re-indexes.skills= + min_score query against a real job description's skill set to surface the best-matching open remote roles, then answer with the top-N and their salary bands.Agent builders: use the feed as the live data source behind an MCP tool, a RAG pipeline, or an agentic job-matcher — one endpoint instead of five scrapers you maintain. Data teams: track remote demand, salary bands, and skill coverage over time from a stable, documented schema. Job-seekers building their own tools: wire a cron to pull the roles that match your skills and get pinged when new ones land — no refreshing five tabs.
No key, no signup, 100 calls/month free. Pro and Team tiers add higher limits, multi-source priority, and SLA. Self-serve checkout is live.
Open the API →