DEV Community

Cover image for A remote jobs API from five public job boards, normalised into one schema
Joshua Smith
Joshua Smith

Posted on

A remote jobs API from five public job boards, normalised into one schema

If you are building a job board, a Slack alert, or a dataset of remote salaries, the good news is that several remote job boards publish public JSON APIs or RSS feeds and explicitly allow reuse with attribution. The bad news is that each one has its own shape.

The public sources

  • RemoteOK: https://remoteok.com/api (JSON, attribution required)
  • Remotive: https://remotive.com/api/remote-jobs (JSON)
  • Himalayas: https://himalayas.app/jobs/api (JSON)
  • Jobicy: https://jobicy.com/api/v2/remote-jobs (JSON)
  • We Work Remotely: RSS, one main feed plus a feed per category

Salary appears as "$170k - $200k" in one, as two integers in another, and not at all in a third. Location is free text: "Northern America, LATAM, Europe". Employment type is full_time, Full-Time or missing. Descriptions are HTML. And the same listing shows up on three boards.

The two-minute version

Remote Jobs Scraper & Aggregator API calls the five sources, parses salaries into numbers, maps locations to a compact remoteRegion, unifies employment types, adds a plain-text description, and keeps each title + company pair once.

  1. Keep all five Job boards selected, or untick some.
  2. Add Keywords (matched on title, company and tags) and Categories, set Posted within (days).
  3. Click Start. A default run (five boards, 200 jobs each, last 30 days) yields 500 to 700 unique listings in under a minute.

For alerts: add a Schedule (every 3 to 6 hours is plenty) and switch on Only new items since the last run. The Actor remembers what it has delivered in a named state store and marks each record isNew; skipped listings are never billed.

From code

curl -X POST "https://api.apify.com/v2/acts/josh99smith~remote-jobs-aggregator/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "keywords": ["python", "typescript"], "categories": ["programming"], "postedWithinDays": 7, "maxJobsPerSource": 200 }'
Enter fullscreen mode Exit fullscreen mode

What you get back

{
    "id": "jobicy:153610",
    "source": "Jobicy",
    "title": "Manager, Clinical Review and Quality Assurance",
    "company": "SmithRx",
    "location": "USA",
    "remoteRegion": "US",
    "category": "Healthcare & Medical",
    "tags": ["Healthcare & Medical", "Senior"],
    "employmentType": "Full-Time",
    "salaryMin": 136000,
    "salaryMax": 192000,
    "salaryCurrency": "USD",
    "salaryPeriod": "yearly",
    "descriptionText": "Who We Are:\n\nSmithRx is a rapidly growing ...",
    "url": "https://jobicy.com/jobs/153610-manager-clinical-review-and-quality-assurance-2",
    "publishedAt": "2026-09-18T14:43:04.000Z",
    "isNew": true
}
Enter fullscreen mode Exit fullscreen mode

A board that is down or rate-limiting produces one free { "success": false, "source": "Remotive", "errorType": "rate-limited" } record and the other boards continue.

Cost and limits

$0.001 per job record (1,000 jobs = $1). Filtering, de-duplication, monitor-mode skips and failed boards are free; each run stops at your cost cap. The Actor uses only official public APIs and feeds; it is not a LinkedIn or Indeed scraper and will not become one. Respect each board's attribution terms if you republish listings.

Use it from an AI agent

Add https://mcp.apify.com?tools=josh99smith/remote-jobs-aggregator to your MCP client and ask "find remote TypeScript jobs posted in the last 7 days".

Disclosure: I built this Actor. Source: github.com/josh99smith/remote-jobs-aggregator.

Top comments (0)