Remote jobs API: one JSON feed of fresh remote jobs with salaries
Short answer
Remote OK and Jobicy both publish public job APIs, but in different shapes with salaries as raw text. Yonderlist on Apify calls both, normalises each job (title, company, where it is open to, salary range with currency and period, type, level, posting date, apply link), removes duplicates and filters by keyword, location, job type and minimum yearly salary, at $0.0008 per job. Monitor mode returns only jobs you have not seen.
- Pick keywords for the role ("python", "product manager") and, if needed, words to exclude.
- Add locations the job must be open to ("Europe", "USA", "Anywhere") and a job type (Full-Time, Contract).
- Set minSalaryYearly and onlyWithSalary to keep only listings that publish pay.
- Use postedWithinDays: 1 for a daily feed, or monitor mode with a monitorKey to get only jobs not sent before.
- Keep each row's attribution line and link to the original listing when you republish jobs.
Copy-paste code
Python (pip install apify-client): well-paid remote dev jobs
import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("cybermax/remote-jobs").call(run_input={
"keywords": ["engineer", "developer"],
"minSalaryYearly": 120000,
"onlyWithSalary": True,
"postedWithinDays": 7,
"maxItems": 200,
})
for j in client.dataset(run["defaultDatasetId"]).iterate_items():
print(j["title"], "|", j["company"], "|", j["location"],
f"{j.get('salaryMin')}-{j.get('salaryMax')} {j.get('salaryCurrency')}/{j.get('salaryPeriod')}", j["applyUrl"])JavaScript / Node (npm i apify-client): a JSON feed for your job board
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('cybermax/remote-jobs').call({
locations: ['Europe', 'EMEA', 'Anywhere'], postedWithinDays: 1, maxItems: 500,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const feed = items.map(({ title, company, location, salaryMin, salaryMax, salaryCurrency, applyUrl, attribution }) =>
({ title, company, location, salaryMin, salaryMax, salaryCurrency, applyUrl, attribution }));
console.log(JSON.stringify(feed, null, 2));No code: n8n, Make or Zapier
n8n: HTTP Request node (or the Apify node, action "Run an Actor and get dataset")
Method: POST
URL: https://api.apify.com/v2/acts/cybermax~remote-jobs/run-sync-get-dataset-items
Auth: Header Auth -> Authorization: Bearer <your Apify token>
Body: JSON {"keywords": ["product manager"], "monitor": true, "monitorKey": "pm-alert"}
Output: one n8n item per result row
Make: Apify app -> "Run an Actor" (Actor: cybermax/remote-jobs, wait for finish = yes)
-> Apify "Get Dataset Items" (dataset = the run's defaultDatasetId) -> your next module
Zapier: Apify app -> action "Run Actor" (cybermax/remote-jobs, input JSON as above)
-> trigger "Finished Actor Run" -> "Fetch Dataset Items" -> your app
Runs longer than 5 minutes: start with POST /v2/acts/cybermax~remote-jobs/runs and read the dataset when the run finishes.
Job alert flow: Schedule trigger (every morning) -> the request above -> Telegram, Slack or Gmail message per new job (title, company, salary, applyUrl). Quiet days return nothing and cost nothing.From an AI agent (MCP)
# Any MCP client (Claude Desktop, Claude Code, Cursor, VS Code): Apify's hosted MCP server
{
"mcpServers": {
"remote-jobs": {
"command": "npx",
"args": ["-y", "mcp-remote", "https://mcp.apify.com/?tools=cybermax/remote-jobs",
"--header", "Authorization: Bearer ${APIFY_TOKEN}"],
"env": { "APIFY_TOKEN": "<your Apify token>" }
}
}
}
# The agent sees one tool, cybermax--remote-jobs, with the Actor's input schema.
# Ask: "find remote Python jobs open to Europe paying over 100k".| Job | Company | Open to | Salary | Source |
|---|---|---|---|---|
| Software Engineer - Console | XBOW | Argentina, Europe, USA | 100,000-350,000 USD / year | Jobicy |
| Senior Software Engineer | Cloudbeds | LATAM, Canada, USA | 140,000-180,000 USD / year | Jobicy |
| Senior Platform Engineer, Quality Platform | MaintainX | Canada | 107,000-165,000 CAD / year | Jobicy |
| Senior Sales Engineer, DACH Channel | Horizon3.ai | Germany | 160,000-190,000 EUR / year | Jobicy |
| Senior Vue Developer | Lemon.io | Remote | 50,000-180,000 USD / year | Remote OK |
Source: Yonderlist (Apify Actor cybermax/remote-jobs) README, real Apify run on 10 Nov 2026
Remote job feed for job boards and newsletters
Every row has the same shape whichever board it came from, with the source's credit line in an attribution field. Both boards allow reuse with credit: keep the attribution, link to the original url and send applicants to applyUrl.
Salary data for remote roles
Salaries are normalised into salaryMin, salaryMax, salaryCurrency and salaryPeriod (hourly, monthly or yearly), so you can compare published remote pay by role, level, region and currency in a spreadsheet.
Remote jobs plus company career sites
Remote boards carry a slice of the market. For jobs posted straight on company career sites (Greenhouse and Lever), HireHeat searches across companies in one run.
Good to know
Price on Apify: $0.0008 per job delivered ($0.80 per 1,000), no start fee; 100 jobs are $0.08. Apify's free plan includes $5 of usage each month.
Remote OK's feed carries its latest ~100 jobs and Jobicy's several hundred or more at a time. Run daily with monitor mode to build a complete history.
Yonderlist: Fresh remote jobs with salaries in one feed
$0.0008 per job, no start feeYonderlist: fresh remote jobs from Remote OK and Jobicy in one de-duplicated feed with salaries, filters and daily alerts. $0.0008 per job, no start fee.
Runs on your own Apify account, pay per result; failed results are not charged.Questions
Is there a free remote jobs API?
Remote OK and Jobicy publish free public APIs with their own shapes and terms. Yonderlist merges both into one filtered, de-duplicated feed; Apify's monthly free credit covers about 6,000 jobs.
Can I publish these jobs on my site?
Both boards allow reuse with credit: keep the attribution line, link to the original listing and send applicants to the apply link. Check each board's terms for your use.
Why is a salary missing?
The employer did not publish one. Turn on onlyWithSalary to keep only jobs with pay listed.
Can an AI agent use it?
Yes. Apify's MCP server exposes it as cybermax--remote-jobs for Claude, Cursor and other MCP clients.
Free: the Free API Starter Kit
Copy-paste calls for 4 APIs with free daily tiers (CVE priority, VIN recalls, US duty rates, email checks), then 5 short emails on KEV/EPSS, MCP and free data.