Remote OK Jobs Scraper: Only New Remote Jobs avatar

Remote OK Jobs Scraper: Only New Remote Jobs

Pricing

from $1.00 / 1,000 jobs

Go to Apify Store
Remote OK Jobs Scraper: Only New Remote Jobs

Remote OK Jobs Scraper: Only New Remote Jobs

Get remote job postings from Remote OK in one clean schema: title, company, location, tags, salary range, date and the link back to each job. Filter by tag and keywords. On scheduled runs, pay only for new or changed jobs. No personal-data fields.

Pricing

from $1.00 / 1,000 jobs

Rating

0.0

(0)

Developer

Quicksloth

Quicksloth

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 days ago

Last modified

Share

Get the newest remote jobs for your skills without checking the site every day. This Remote OK jobs scraper reads the public Remote OK API for the tags you choose (python, devops, design, customer-support and others, up to 50 per run) and returns the jobs in one clean table: title, company, location, tags, salary range, posting date and the link to each job on Remote OK. Filter by title or location keywords; no API key, no browser and no proxies needed.

Built for job alerts, remote-work job boards and newsletters, recruiters who follow remote hiring, and AI agents that need a predictable JSON schema. Switch on only new or changed jobs for scheduled runs: after the first run you pay only for jobs that are new or changed. A job listed under several of your tags is saved and paid once. The output has no recruiter or contact fields, and job descriptions are off unless you ask for them.

Remote OK is a job board for remote work. Its public API lists the latest jobs of each tag, and asks everyone who reuses the data to link back to the job on Remote OK.

Example output

Three jobs from a test run on 2026-10-11 (tags python, devops and design, title keywords "engineer" and "designer", no limit, descriptions off). The run saved 42 jobs: 5 jobs listed under two of the tags were saved, and charged, only once. Each row is one dataset item, shown here as text; in the dataset a value the employer does not publish is null. The full record with all fields is shown under Output.

TitleCompanyFound with tagLocationSalary (USD)Posted
Senior Software Engineer Case ExecutionPivotal HealthpythonNew York City190,000 – 220,0002026-08-16
Staff Software Development Engineer SDMDelineadevopsRedwood City150,000 – 185,0002026-08-16
Product Engineering LeadTether Operations Limiteddesignnot givennot given2026-10-10

Download the result as JSON, CSV or Excel, or read it through the Apify API.

Get remote jobs from Remote OK in three steps

  1. Write the Remote OK tags you want in Tags, one per line, as they appear in the tag pages of remoteok.com (python, devops, customer-support). Leave the list empty to get the latest jobs of all tags.
  2. Optional: add Title keywords (recommended, see Limits), location keywords, and set Max jobs.
  3. Click Start. The Overview table of the dataset shows title, company, location, salary, posting date and the link to the job on Remote OK. Download it as JSON, CSV or Excel, or read it through the Apify API.

Pricing

You pay per job saved to the dataset: $1.00 per 1,000 jobs ($0.001 per job), plus Apify's start charge of $0.00005 for each GB of run memory (one charge, $0.00005, at this Actor's default of 256 MB). Tags with no jobs, jobs removed by your filters, jobs already saved under another tag and jobs already returned in only-new-jobs mode cost nothing.

Jobs savedCost
100$0.10
1,000$1.00
10,000$10.00

Monitoring example. You follow 3 tags and run the Actor once a day with Only new or changed jobs on. The first run saves all matching jobs (at most about 100 per tag). If, say, 20 jobs are new or changed on a given day (your number will differ), that run costs about $0.02, and 30 such days cost about $0.60.

Cost control. In Apify Console you can set a maximum cost for each run; the Actor stops cleanly when it is reached and says so in the status message. Runs started from the Console form are prefilled with a 100-job limit (about $0.10): change or clear it to get more. API and MCP runs have no limit unless you set maxResults or a maximum cost (the free-plan limit below still applies).

Free plan. Users on the free Apify plan get up to 100 jobs per run, enough to try the Actor on your tags. The run log and status message say when this limit is reached. Paid plans have no such limit.

Why this Remote OK scraper

  • Several tags in one run. Up to 50 tags; a job listed under more than one of them is saved once, not twice, in the same run and, with Only new or changed jobs on, across scheduled runs.
  • Only new or changed jobs. For job alerts, get just what appeared or changed since the last run, and pay only for that.
  • Clean text. Broken characters are fixed ("für", not "für"), HTML codes are decoded (Larsen & Toubro, not Larsen & Toubro), stray commas at the end of locations are removed, and a salary of 0 becomes empty.
  • Only jobs that really carry your tag. Remote OK's API also returns jobs whose tags merely contain your word (for ux it returned Linux jobs): the Actor drops them, at no cost to you.
  • Fast and light. One request per tag to the public Remote OK API, with the one-second pause that Remote OK asks for. No browser, no proxies.
  • No personal-data fields. The output has no names, emails or phone numbers of people (see Legal and data protection).

What can you do with it?

  • Job alerts: send the new remote jobs for your stack to a spreadsheet, an email digest or a chat channel with Apify schedules, webhooks and integrations.
  • Remote-work job boards and newsletters: get fresh postings with the link back to Remote OK that its API terms ask for (see Using the data).
  • Recruiting and market research: follow which companies hire remotely, for which roles, and the salary ranges they publish.
  • AI agents and data pipelines: one predictable JSON schema, available through the Apify API and, for AI agents, through Apify's MCP server.

Input examples

Basic: Python and DevOps jobs with "engineer" in the title

{
"tags": ["python", "devops"],
"titleKeywords": ["engineer"],
"maxResults": 100
}

Customer support and customer success jobs

{
"tags": ["customer-support", "non-tech"],
"titleKeywords": ["support", "success"],
"maxResults": 100
}

Scheduled monitoring: only new or changed jobs

{
"tags": ["python"],
"titleKeywords": ["engineer", "developer"],
"onlyNewJobs": true,
"stateKey": "daily-python"
}

Input fields

FieldTypeDefaultDescription
tagsarray of stringsemptyRemote OK tags, as in the tag pages of remoteok.com (python, devops, customer-support). Spaces become dashes. Up to 50. Empty = the latest jobs of all tags.
titleKeywordsarray of stringsemptyKeep only jobs whose title contains at least one of these words (case-insensitive). The best way to get precise results, see Limits.
locationKeywordsarray of stringsemptyKeep only jobs whose location contains at least one of these words (case-insensitive). The location is free text written by the employer ("London", "Remote - US", "Worldwide") and often empty, so this filter keeps few jobs: avoid short words that match inside longer ones.
includeDescriptionbooleanfalseAdd the job description as plain text (emails, phone numbers and names after labels such as "Recruiter:" removed). Makes the dataset much larger.
onlyNewJobsbooleanfalseReturn only jobs that are new or changed since the previous run with the same tags and filters (or the same stateKey).
stateKeystringemptyOptional name for the "only new jobs" history, so different scheduled tasks keep separate histories.
maxResultsintegerno limitStop after this many jobs in total. The Console form is prefilled with 100; clear it, or set 0, for no limit.

Output

Each job is one dataset item. Fields are always present; a field is null when the employer does not publish it. This is the first row of the example table above, as saved by the run (the long tags list is Remote OK's own, see Limits):

{
"id": "remoteok:1136795",
"jobId": "1136795",
"source": "Remote OK",
"tag": "python",
"title": "Senior Software Engineer Case Execution",
"company": "Pivotal Health",
"location": "New York City",
"tags": ["dev", "front end", "python", "customer support", "design", "admin", "exec", "senior", "ops", "sys admin", "medical", "engineer", "backend", "digital nomad"],
"postedAt": "2026-08-16T00:00:03.000Z",
"salaryMin": 190000,
"salaryMax": 220000,
"salaryCurrency": "USD",
"url": "https://remoteok.com/remote-jobs/remote-senior-software-engineer-case-execution-pivotal-health-1136795",
"applyUrl": "https://remoteok.com/remote-jobs/remote-senior-software-engineer-case-execution-pivotal-health-1136795",
"descriptionText": null,
"scrapedAt": "2026-10-11T17:02:54.856Z"
}
FieldDescription
idUnique, stable id: remoteok:<jobId>.
jobIdRemote OK job id.
sourceAlways Remote OK. Use it with url for the link back that Remote OK asks for.
tagThe input tag the job was found with; null for the latest jobs of all tags.
title, companyAs published, with broken characters and HTML codes fixed.
locationLocation or region as written by the employer (for example Worldwide); null when not given.
tagsRemote OK tags of the job.
postedAtWhen the job was posted (ISO 8601).
salaryMin, salaryMax, salaryCurrencySalary range as published on Remote OK, in USD. Usually yearly; a few employers enter small numbers that are probably hourly. null when not given.
urlThe job on Remote OK.
applyUrlWhere to apply, as given by the API (often the same page on Remote OK).
descriptionTextPlain-text description when includeDescription is on, otherwise null.
scrapedAtWhen the run started (ISO 8601).

Run summary

Every run also saves a summary in the default key-value store under the key OUTPUT. This is the summary of the example run above:

{
"tags": [
{"input": "python", "status": "ok", "jobs": 11, "error": null},
{"input": "devops", "status": "ok", "jobs": 18, "error": null},
{"input": "design", "status": "ok", "jobs": 13, "error": null}
],
"totalJobs": 42,
"newJobs": null,
"stoppedBecause": null
}

status is ok, failed or skipped; jobs is how many jobs were saved for that tag (the 5 design jobs already saved under another tag are not counted again); error holds a note, for example for a tag with no jobs. newJobs says how many jobs were returned in only-new mode. stoppedBecause is maxResults, freePlanLimit or maxTotalChargeUsd when a limit cut the results.

A tag that fails does not stop the run (the run fails only when every tag fails) and costs nothing: it is reported here and the other tags continue.

Only new jobs (scheduled runs)

Turn on onlyNewJobs and schedule the Actor (for example daily). The first run returns all matching jobs and remembers them. Later runs return only jobs that are new or whose title, company, location, tags, salary or link changed. Changes in the description do not count. Jobs that were not returned because of a limit stay "unseen" and come back in the next run.

The history is one for all the tags of the run, so a job listed under several of your tags is returned (and paid) once, also across runs. It is kept in a named key-value store in your account (remoteok-jobs-scraper-seen-state) and is separate for each combination of tags and filters: if you change the tags, the next run starts a new history and returns everything again (unless you set stateKey, which names the history and keeps it when the tags or filters change). If you run several scheduled tasks with the same tags and filters, give each one its own stateKey. The history keeps the 5,000 newest jobs; a forgotten job that the API still lists is returned (and charged) again as new.

Limits

  • The Remote OK API returns about the latest 100 jobs per tag (and about 100 for "all tags"). For a complete stream of a busy tag, run the Actor on a schedule with onlyNewJobs.
  • Tags are broad. Remote OK gives many jobs a long list of tags (in the example run, an engineering job had 48, including photoshop and golang), so a tag alone can bring jobs from other fields. Add titleKeywords to keep only the roles you want.
  • The API is refreshed periodically, not live: it can lag the Remote OK website by a day or more, so a job posted this morning may appear in a later run.
  • Up to 50 tags per run. The Actor waits one second between requests, as Remote OK's robots.txt asks.
  • Many jobs have no location or salary: those fields are null.

Other Quicksloth job scrapers

Two more job scrapers on this profile, each with an only-new-jobs mode for scheduled runs:

  • ATS Jobs Scraper: the public job boards of the companies you list on Greenhouse, Lever and Ashby, with locations, remote or hybrid, department and published pay.
  • Workday Jobs Scraper: the public Workday career sites of large employers, with the same output fields as ATS Jobs Scraper.

Remote OK's API terms ask everyone who uses the data to mention Remote OK as the source and link back to the job on Remote OK (with a normal, followed link). Each result has source and url for this. Remote OK also asks not to use its logo without written permission. If you publish the jobs, keep the link; otherwise Remote OK may suspend access to its API.

  • The Actor reads only the public Remote OK API, which Remote OK offers for this use, with the attribution described above (legal page). No login, no private data.
  • It respects Remote OK's robots.txt, including its one-second crawl delay, and sends a User-Agent that names the Actor.
  • No personal-data fields: the output has no names, emails or phone numbers of people. Descriptions are off by default. When you turn them on, they are free text written by the employer: email addresses, phone numbers in common formats and names after labels such as "Recruiter:" or "Contact:" are removed, but other mentions of people may remain. Check that you have a legal basis before storing them, and that your use of the employer's text is allowed.
  • Remote OK is a trademark of its owner, named here only to say which source the Actor reads. Company names on this page belong to their owners. This Actor is not affiliated with or endorsed by Remote OK or by the companies whose jobs it lists.
  • You are responsible for how you use the data, including compliance with the laws that apply to you.

FAQ

Which tags can I use? The ones in Remote OK's tag pages, for example python, javascript, devops, design, marketing, customer-support, non-tech. Spaces become dashes. A tag with no jobs gives an empty result and a note in the run summary.

Why do I get jobs from other fields? Remote OK tags many jobs with a long list of tags, so a tag alone is broad. Add titleKeywords (for example engineer, designer, support) to keep only the roles you want.

Why are some fields empty? A field is null when the employer did not publish it (location and salary are often missing).

Can I get older jobs? No. The API gives the latest jobs only. Schedule the Actor with onlyNewJobs to build your own history.

Do I need proxies or a browser? No. The Actor calls the public Remote OK API with plain HTTP requests.

How current is the data? Each run reads the API at that moment. The API itself can lag the website by a day or more. scrapedAt is the time of the run; postedAt is the posting time given by Remote OK.

Can I read job boards of specific companies? Not with this Actor. Use ATS Jobs Scraper for Greenhouse, Lever and Ashby boards, or Workday Jobs Scraper for Workday career sites.

Support

Found a problem or need a new field? Open an issue in the Issues tab of this Actor and include the run ID.

Changelog

  • 0.2 (2026-10-22): HTML codes in titles, companies and locations are decoded (Larsen & Toubro, not Larsen &amp; Toubro), and stray commas at the end of locations are removed. Descriptions where the employer's HTML arrives encoded inside real tags now come out as plain text too. In only-new mode, a job whose title, company or location changes with this fix is returned (and charged) once more.
  • 0.1 (2026-10-09): first public release.
    • Reads the public Remote OK API for up to 50 tags per run; a job listed under several tags is saved once.
    • Filters: tags, title keywords, location keywords, maximum jobs in total.
    • Optional job descriptions as plain text, with email addresses, phone numbers and names after labels such as "Recruiter:" removed.
    • Only-new-or-changed mode for scheduled runs, one history for all tags, separate histories through stateKey.
    • Run summary per tag in the OUTPUT record; one failing tag does not stop the run.
    • Pay-per-event pricing: $0.001 per job saved. Free plan: up to 100 jobs per run.