RemoteOK Jobs Scraper: Salary, Tags, Descriptions
Pricing
from $0.44 / 1,000 jobs
RemoteOK Jobs Scraper: Salary, Tags, Descriptions
RemoteOK jobs scraper for the whole live Remote OK board, not just its API's 100 newest: title, company, salary, tags, locations, dates, apply link and full description. Filter by tag, country, salary, date and benefits, sort by salary, add older listings, send to a webhook.
RemoteOK scraper: get the latest Remote OK jobs, or the ones for your tags (python, react, design, customer support), with title, company, salary, tags, locations, apply link and the full description, newest first.
| πΌ Title | π’ Company | π° Salary | π·οΈ Tags | π Location | π Posted |
|---|---|---|---|---|---|
| Senior DevOps Engineer | Lemon.io | USD 50,000 - 150,000 per year | devops, engineer, developer, python | Japan, Singapore, South Korea + 9 more | 2026-10-22 |
| Accounting Operations | Plaid | USD 110,000 - 170,000 per year | accounting, technical, customer support, marketing | Anywhere | 2026-10-22 |
| Senior Backend Engineer | DuckDuckGo | USD 190,000 per year | backend, perl, golang, javascript | Anywhere | 2026-10-21 |
$0.59 per 1,000 jobs on the Starter plan ($0.70 Free, $0.49 Scale, $0.44 Business). The prefilled run (up to 50 jobs: the latest Remote OK jobs) costs about $0.03.
It reads Remote OK's whole live board, not just the 100 newest jobs its API gives: every open job page, kept up to date every two hours, plus the jobs posted since, read at run time. No login, no browser, no cookies. On the Apify platform on 2026-10-22, the prefilled run delivered 50 jobs in 2.7 seconds, the first one 1.4 seconds after the search began (five runs of 10 to 50 jobs that day took 2.5 to 4.2 seconds); the board held 256 open jobs that day. Every job had its tags, job type, posted and expiry dates and full description.
Want more boards in one list? Remote Jobs Aggregator searches Remote OK, Himalayas, We Work Remotely, Jobicy, Relomote, Arbeitnow and Working Nomads at once.
What you can do with it
- Feed a job board, newsletter or Slack channel with fresh Remote OK jobs: schedule a daily run with
postedWithinDaysset to 2, and send the rows to your own system withwebhookUrl(or an Apify integration). - Find jobs you can actually take: filter by the country you live in, a minimum salary, job type, seniority and the benefits you want (
benefits: equity, 401k, 4 day week). - Benchmark remote pay: sort by salary (
sortBy), or open the π° With Salary list, which holds every job with a published salary, with numbers you can sort and average. - Go deeper than the open jobs:
includeOlderJobsadds the jobs Remote OK still lists after their listing period (about 1,000 jobs with no tag), for market research and hiring trends.
Input
{"keywords": ["python", "react"],"minSalary": 80000,"maxJobsPerKeyword": 50,"sortBy": "salary"}
| Field | What it does |
|---|---|
keywords | Remote OK tags or words to search for, one per line: python, react, design, customer support. Each is its own search, matched on the job's title, tags and description (role words like design or sales on the title and tags only). Leave empty for the latest jobs of every kind. You pay per job delivered. |
country | Optional. A country you live in (United States, Germany, India, Brazil...): keeps the jobs open to its residents, including jobs open worldwide and jobs for its region (Europe, LATAM, APAC, North America). Type Worldwide for only the jobs open to anyone, anywhere. Leave empty for every job. |
minSalary | Optional. Keep only jobs that list a salary whose top of range is at least this, per year (Remote OK lists pay in US dollars on most jobs). Jobs with no listed salary are left out. 0 means no salary filter. |
postedWithinDays | Keep only jobs posted in the last N days; older ones cost nothing. 0 means any date. Handy for a daily or weekly scheduled run. |
maxJobsPerKeyword | The jobs to keep per tag (or in all, with no tag): the best matches (title matches first), newest first. You pay per job, so this caps the cost per tag. 0 means every job. Default 100. |
sortBy | Newest first, or the best-paid first (jobs with no listed salary after them). |
includeOlderJobs | More filters. Remote OK keeps listing many jobs after their listing period ends (about 90 days), with their Apply button. Off: only the jobs inside their period. On: those older jobs too, newest first after the open ones (a broad search then reads up to ~1,000 jobs in about 30 s). Same price per job. |
benefits | More filters. Optional. Keep only jobs whose text mentions every one of these words or phrases: equity, 401k, health insurance, 4 day week, async. Matched in the description and tags (Remote OK has no benefits field). Leave empty for every job. |
categories | More filters. Optional. Keep only jobs in these categories (the boards' own categories, in common words). Leave empty for every category. |
employmentTypes | More filters. Optional. Keep only these job types. A job whose board doesn't give its type (and whose title doesn't say, e.g. 'Contract') is left out. Leave empty for every type. |
seniority | More filters. Optional. Keep only these levels, read from Remote OK's senior/junior tags or a clear title word (Senior, Lead, Junior, Director, VP); jobs with none are left out. Leave empty for every level. |
timezone | More filters. Hidden in the form: Remote OK lists no time zones. |
maxResults | Advanced. Stop after this many jobs in total. You pay per job, so this caps the run's cost. |
includeDescription | Advanced. The full job description as plain text. Same price either way; turn it off for smaller rows. |
includeDescriptionHtml | Advanced. Also the board's description as HTML (links and lists kept), in descriptionHtml. Same price; rows get about twice as big. |
findContactEmails | Advanced. For jobs whose description gives no email, look for one on the company's own website (confirmed from the company's name). Charged per job that gets an email this way ($); emails a description gives are always free. Slower. |
webhookUrl | Advanced. Optional. At the end of the run, every job row is POSTed to this URL as JSON, 50 rows a request ({"runId", "batch", "batches", "items": [...]}). A receiver that fails is reported in the run summary; the jobs stay in the dataset. |
webhookSecret | Advanced. Optional. Sent with each webhook request in the X-Scraper-Secret header. |
proxyConfiguration | Advanced. Apify Proxy (datacenter) by default; the boards' feeds are public, so it only spreads the requests over several IPs. Residential and SERP proxies are replaced with datacenter. Turn it off to connect directly. |
boards | Advanced. Fixed to remoteok (hidden in the form). |
Output
One row per job, newest first (or best-paid first with sortBy). A job that several tags find comes once, under the first tag that found it.
Two datasets, both with the same rows:
- πΌ All Jobs (default dataset). Views: π§βπ» RemoteOK Jobs (πΌοΈ Logo, πΌ Title, π’ Company, π° Salary, π Location, π·οΈ Tags, π Job Type, ποΈ Seniority, π Posted, β³ Expires, π Apply, π Job Page), then π Overview, π Details and π Contacts.
- π° With Salary: the delivered jobs that publish a salary, at no extra charge.
Output fields
In row order:
companyLogo: the company's logo from Remote OK.title: job title.company: company name.location: where a hire may live, in short:Anywhere,United States,Germany, Europe.isWorldwide:truewhen anyone anywhere can apply,falsewhen Remote OK names places.employmentType:Full-time,Part-time,Contract,Temporary,InternshiporVolunteer.seniority:Entry-level,Mid-level,Senior,Manager,DirectororExecutive, from Remote OK's tags or a clear title word; empty when neither says.category: the job's category in common words (Software Development, Design, Marketing...), from its tags.salary: published pay, e.g.USD 110,000 - 170,000 per year. Empty when the job lists none (Remote OK keeps some jobs' pay for its Premium members; those come with no salary, never a made-up range).salaryMin: the lowest pay in the range, as a number.salaryMax: the highest pay in the range, as a number.salaryCurrency: ISO currency code, e.g.USD.salaryPeriod:year,month,week,dayorhour.postedAt: when the job was published, in UTC (2026-10-22T12:58:28Z).expiresAt: the end of the job's listing period on Remote OK (about 90 days), in UTC. In the past for the older jobsincludeOlderJobsadds.jobUrl: the job's page on Remote OK.applyUrl: where to apply: the employer's own link when the description gives one, else the Remote OK page.contactEmail: a contact email the description gives (or, withfindContactEmails, the company's website).contactEmailSource: the page the email was found on.companyWebsite: the company's own website: Remote OK doesn't list it, so it's filled only withfindContactEmails.companyUrl: the company's page on Remote OK.locations: every country or region Remote OK lists for the job.timezones: empty: Remote OK lists no time zones.tags: every tag Remote OK gives the job, in its order (skills, role,full time).boardCategory: Remote OK's own industry label (Startups,Software...).description: the full job description as plain text (on by default).descriptionHtml: the description as HTML. Only withincludeDescriptionHtml.sources:Remote OK.sourceUrls: the job's page on Remote OK.jobId: Remote OK's job id.keywords: your tags or keywords that found the job. Empty for a run without any.scrapedAt: when this run read the job (UTC).
Example row (description shortened):
{"companyLogo": "https://r2.remoteok.com/jobs/f19931ee2d503f814823240405e33c191792673908.jpg","title": "Senior DevOps Engineer","company": "Lemon.io","location": "Japan, Singapore, South Korea, Philippines, Indonesia, Malaysia, Vietnam, Thailand, Saudi Arabia, Israel, Morocco, South Africa","isWorldwide": false,"employmentType": "Full-time","seniority": "Senior","category": "DevOps & IT","salary": "USD 50,000 - 150,000 per year","salaryMin": 50000,"salaryMax": 150000,"salaryCurrency": "USD","salaryPeriod": "year","postedAt": "2026-10-22T12:58:28Z","expiresAt": "2027-01-20T12:58:28Z","jobUrl": "https://remoteok.com/remote-jobs/remote-senior-devops-engineer-lemon-io-1137557","applyUrl": "https://remoteok.com/remote-jobs/remote-senior-devops-engineer-lemon-io-1137557","contactEmail": null,"contactEmailSource": null,"companyWebsite": null,"companyUrl": "https://remoteok.com/company/lemon-io","locations": ["Japan","Singapore","South Korea","Philippines","Indonesia","Malaysia","Vietnam","Thailand","Saudi Arabia","Israel","Morocco","South Africa"],"timezones": null,"tags": ["devops","engineer","developer","python","golang","aws","gcp","kubernetes","sql","linux","ansible","ai","full time","full stack","remote","remote work"],"boardCategory": "Startups","description": "Lemon.io helps companies in the US and Europe hire experienced engineers, from funded startups to teams like Klarna, Retool, and Pinterest. Weβve been ...","descriptionHtml": null,"sources": ["Remote OK"],"sourceUrls": ["https://remoteok.com/remote-jobs/remote-senior-devops-engineer-lemon-io-1137557"],"jobId": "1137557","keywords": null,"scrapedAt": "2026-10-22T13:22:20Z"}
The run's π§Ύ Run summary (the OUTPUT record in the key-value store) shows how many jobs Remote OK's board held and matched per tag, how old its index was, the older jobs found (includeOlderJobs), the webhook's result, and any error.
Credit the boards
Remote OK's terms ask you to link back to each job and name Remote OK as the source when you show its jobs: keep each job's sourceUrls (a link to the original posting) and name the board from sources. Don't submit its jobs to third-party job sites such as Google Jobs, LinkedIn Jobs or Jooble as your own.
When something goes wrong
- If the board's index can't be read, the run uses Remote OK's API instead (its 100 newest jobs, often a day or two behind) and says so in the run summary.
- If Remote OK doesn't answer after several retries on fresh IPs, or answers in a format we can't read, the run ends as failed with the reason in the status message and the run summary, so you notice.
- A tag with no Remote OK job gives a clean empty result and a status message saying so.
- With
includeOlderJobs, if the older jobs can't all be read the open jobs still go out, with a note in the run summary. - A webhook that refuses the rows is reported in the status message and the run summary; the rows stay in the dataset and the run succeeds.
- When
maxResultsor your spending limit is reached, the run stops after delivering every job the limit pays for; you pay only for the jobs delivered.
Pricing
You pay per job delivered: $0.59 per 1,000 jobs on the Starter plan ($0.70 Free, $0.49 Scale, $0.44 Business). Descriptions, salaries, older jobs and webhook delivery are included at the same price. No start fee. With findContactEmails on, a job that gets its contact email from the company's website adds $0.98 per 1,000 such jobs. Requests, retries, jobs left out by your filters and the π° With Salary list cost nothing.
Examples: the prefilled run (up to 50 jobs) about $0.03; 1,000 jobs $0.59; 5,000 jobs $2.95.
FAQ
How many jobs does it reach? Every open job on Remote OK (a few hundred at a time), not the 100 newest its API gives. With includeOlderJobs, the older jobs Remote OK still lists too: about 1,000 with no tag, and per tag as far back as Remote OK's own list goes.
Why fewer jobs for a tag than Remote OK's own tag page? Remote OK's tag pages are loose (in October 2026 its python list included a bartender and an HR job). A job here matches when your words are in its title or tags, or, for a skill or tool, in its description.
How fresh is the data? The board is re-read every two hours and each run reads the jobs posted since, so a new job comes in within minutes.
Does it collect personal data? Rows hold jobs and companies, no recruiter profiles.
Feedback
Missing a field or a filter? Open an issue on the Issues tab and we'll look at it. If the data helped you, a short review on this page helps other people find it.