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.
- Keep all five Job boards selected, or untick some.
- Add Keywords (matched on title, company and tags) and Categories, set Posted within (days).
- 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 }'
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
}
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)