RemoteOK Scraper - Remote Jobs, Salary & Tags API avatar

RemoteOK Scraper - Remote Jobs, Salary & Tags API

Pricing

from $6.15 / 1,000 results

Go to Apify Store
RemoteOK Scraper - Remote Jobs, Salary & Tags API

RemoteOK Scraper - Remote Jobs, Salary & Tags API

RemoteOK scraper and remote jobs API. Export remote job listings with company, tags, category, seniority, USD salary, apply URL, contact emails and full descriptions. 14 filters (keyword, tag, company, region, salary, date, sort). Fast JSON feed, no login or API key. JSON, CSV, Excel.

Pricing

from $6.15 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Share

RemoteOK Scraper - Remote Jobs, Salary & Tags API

RemoteOK Scraper - Remote Jobs, Salary & Tags API

Scrape remote job listings from RemoteOK into structured JSON, CSV or Excel. This RemoteOK scraper reads the live remote jobs feed and returns the position, company, tags, a derived category and seniority, the USD salary range, apply URL, contact emails and the full job description, with 14 input filters to target exactly the remote roles you want. No login or API key.

Here is one real result, with every field the actor returns (description trimmed for readability):

{
"id": "1136937",
"position": "Solutions Delivery Manager",
"company": "Benchling",
"companyUrl": "https://remoteok.com/company/benchling",
"companyLogo": null,
"slug": "remote-solutions-delivery-manager-benchling-1136937",
"url": "https://remoteOK.com/remote-jobs/remote-solutions-delivery-manager-benchling-1136937",
"jobUrl": "https://remoteOK.com/remote-jobs/remote-solutions-delivery-manager-benchling-1136937",
"applyUrl": "https://remoteOK.com/remote-jobs/remote-solutions-delivery-manager-benchling-1136937",
"location": "Boston",
"remote": true,
"isWorldwide": false,
"applicantRegion": "United States",
"tags": ["exec", "design", "technical", "marketing", "sales", "biotech", "medical", "education", "digital nomad"],
"category": null,
"seniority": null,
"employmentType": "FULL_TIME",
"salaryMin": 150000,
"salaryMax": 200000,
"salaryCurrency": "USD",
"salaryText": "$150,000 - $200,000",
"salaryDisclosed": true,
"isVerified": false,
"isOriginalPost": false,
"postedAt": "2026-08-18T08:00:07+00:00",
"postedEpoch": 1787040007,
"validThrough": "2026-11-16T08:00:07+00:00",
"contactEmails": null,
"applyLinks": null,
"excerpt": "We are rebuilding biotech for the AI era. When a breakthrough is delayed, the world waits...",
"description": "We are rebuilding biotech for the AI era.\n\nWhen a breakthrough is delayed, the world waits...",
"rawDescription": "<p>We are rebuilding biotech for the AI era...</p>",
"observedAt": "2026-08-26T08:37:04.434Z",
"error": null
}

The most complete RemoteOK scraper on Apify. It returns every field RemoteOK exposes for a listing, plus derived fields other scrapers do not give you (category, seniority, isWorldwide, salaryCurrency, salaryDisclosed, excerpt, extracted contactEmails and off-platform applyLinks), and an optional detail add-on for employmentType, applicantRegion, validThrough and companyUrl. Fourteen input filters let you target the exact remote roles you need.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

This is a remote jobs scraper and RemoteOK API export tool. It reads RemoteOK's live remote jobs feed, applies the filters you pass, and writes one normalized record per job to the run's dataset. Each record carries the position, company, RemoteOK tags, a derived category and seniority, the location, the published USD salary split into salaryMin, salaryMax, salaryCurrency and salaryText, the apply URL, both a clean plain-text description and the raw HTML rawDescription, plus a short excerpt. It also extracts public contactEmails and off-platform applyLinks out of each description, which most remote job board scrapers do not. Posting dates are normalized to ISO 8601 with a Unix postedEpoch, and any value RemoteOK does not publish is returned as null.

Turn on the optional detail add-on (enrichDetails) and each job is enriched from its RemoteOK page with employmentType, applicantRegion (the hiring-region requirement, for example United States or Anywhere), validThrough (the listing expiry) and companyUrl.

The scraper is HTTP-only and reads RemoteOK's JSON feed directly, so a typical run finishes in seconds. RemoteOK's public feed exposes roughly the 100 most recent postings; the actor filters and sorts across all of them.

How we compare

There are several RemoteOK scrapers on Apify. This one is built to be a strict superset on filters and fields, while staying honest about where others win.

Capabilityscrapers_lat (this actor)newbs/remoteok-premium-job-scraperfetch_cat/remoteok-jobs-scraperrocketapi/remoteok-jobs-scraperpixflor/remote-jobs-aggregator
Input filters14 (keyword, exclude, tag, company, location, remote region, seniority, min/max salary, salary-only, posted-after, posted-within-days, sort, max)6~135~11
Contact emails from descriptionYesNoNoNoNo
Off-platform apply linksYesNoNoNoNo
Derived category and seniorityYes (from title)Nocategory onlyNocategory + seniority
salaryCurrency / salaryDisclosedYes / YesNoYes / YesNoYes / No
Verified-listing flagYesNoNoNoNo
Detail add-on (employmentType, applicantRegion, validThrough, companyUrl)Yes (opt-in)employmentType onlyNoNoemploymentType, locationRestrictions, expiresAt
TransportJSON feed (fast)browserJSON feedJSON feedmulti-board
Multi-board (WWR, Himalayas)No, RemoteOK onlyNoNoNoYes
Adoptiongrowing~102 users (most adopted)~8 users~2 users~2 users
Priceper-result (see pricing tab)$29/mo rental + usage~$0.30-0.575 / 1k (cheaper)$4 / 1k~$2 / 1k

Honest notes: newbs/remoteok-premium-job-scraper has the largest user base today and bundles a structured baseSalary object; fetch_cat/remoteok-jobs-scraper is cheaper per result and also uses the JSON feed; pixflor/remote-jobs-aggregator covers multiple boards (We Work Remotely, Himalayas, Arbeitnow), which this RemoteOK-only actor does not. Where we win: more input filters, unique contactEmails and applyLinks, a verified flag, and derived category/seniority, all from a fast JSON feed.

Use cases

  • Job aggregators and remote job boards: pull a clean, deduplicated remote jobs feed from RemoteOK with tags, category, salary and apply links to power a job board or newsletter.
  • Recruiting and sourcing: capture the company, apply URL, off-platform apply links and any public contact emails to build outreach lists for remote hiring.
  • Salary benchmarking: filter to listings with a disclosed USD salary (salaryOnly) and export salaryMin / salaryMax for remote compensation research by role, tag or seniority.
  • Remote-work and labor-market research: track which categories, regions and tech stacks are hiring remotely over time using category, seniority, tags and postedAt.
  • Lead generation: find companies actively hiring for a stack (tags), region (remoteRegion) or seniority and reach the hiring team via companyUrl and extracted emails.

Quickstart

Open the actor, paste this into the input, and press Run. It returns the 10 most recent remote engineering jobs.

{
"searchTerms": ["engineer"],
"sortBy": "newest",
"maxJobs": 10
}

Leave every filter empty to collect the full live feed. Combine filters to narrow: for example the highest-paying US remote jobs with a disclosed salary.

{
"remoteRegion": "usa",
"salaryOnly": true,
"sortBy": "salary_high",
"maxJobs": 25
}

Input reference

Every field is optional. With an empty input the actor returns the full live RemoteOK feed.

FieldTypeRequiredDefaultDescription
searchTermsstring[]no["engineer"]Keep a job when its position, company, tags or description matches ANY term (case-insensitive). Empty keeps every job.
excludeTermsstring[]no(none)Drop a job when it matches ANY term (case-insensitive).
tagsstring[]no(none)Keep only jobs carrying at least one of these RemoteOK tags, for example react, golang, design, senior.
companystringno(empty)Keep only jobs whose company name contains this text (case-insensitive).
locationstringno(empty)Keep only jobs whose location text contains this value, for example Europe, United States.
remoteRegionstringnoanyworldwide, usa or europe to restrict by the listing's hiring region.
senioritystringnoanyjunior, mid, senior or lead, derived from tags and title.
minSalaryintegerno(none)Keep only jobs whose published maximum salary is at or above this annual USD amount.
maxSalaryintegerno(none)Keep only jobs whose published minimum salary is at or below this annual USD amount.
salaryOnlybooleannofalseKeep only listings that publish a salary range.
postedAfterstringno(empty)Keep only jobs posted on or after this date (YYYY-MM-DD).
postedWithinDaysintegerno(none)Keep only jobs posted within this many days of now.
sortBystringnodefaultnewest, oldest, salary_high or salary_low.
maxJobsintegerno10Maximum number of matching jobs to return.
enrichDetailsbooleannofalseFetch each job's page to add employmentType, applicantRegion, validThrough and companyUrl. Paid plans only; billed as a details event on a successful fetch.

Output reference

One dataset item per job. Types: string, integer, boolean, string[], or null when the source value is absent.

FieldTypeDescription
idstringRemoteOK job id (unique per listing).
positionstringJob title / position.
companystringHiring company name.
companyUrlstringRemoteOK company page URL. Populated only when enrichDetails is on, else null.
companyLogostringCompany logo URL when RemoteOK publishes one (often null).
slugstringRemoteOK URL slug.
url / jobUrlstringRemoteOK listing page URL.
applyUrlstringURL to apply for the job.
locationstringLocation text as published, or null.
remotebooleanAlways true (all RemoteOK listings are remote).
isWorldwidebooleantrue when the listing is open worldwide / anywhere, else false.
applicantRegionstringHiring-region requirement (for example United States, Anywhere). enrichDetails only.
tagsstring[]RemoteOK tags (skills, seniority, category).
categorystringDerived top-level category from the title (engineering, design, sales, ...), or null.
senioritystringDerived seniority (junior, mid, senior, lead), or null.
employmentTypestringEmployment type from the listing (for example FULL_TIME). enrichDetails only.
salaryMinintegerPublished minimum annual salary in USD, or null.
salaryMaxintegerPublished maximum annual salary in USD, or null.
salaryCurrencystringUSD when a salary is published, else null.
salaryTextstringOriginal salary range text, for example $150,000 - $200,000, or null.
salaryDisclosedbooleantrue when the listing publishes a salary.
isVerifiedbooleantrue when RemoteOK flags the listing as verified.
isOriginalPostbooleantrue when the job was posted directly on RemoteOK (not aggregated from another board).
postedAtstringISO 8601 posting timestamp.
postedEpochintegerPosting time as a Unix epoch (seconds).
validThroughstringListing expiry as published by RemoteOK. enrichDetails only.
contactEmailsstring[]Public contact emails found in the description, or null.
applyLinksstring[]Off-platform apply / company links found in the description, or null.
excerptstringShort plain-text excerpt of the description.
descriptionstringFull plain-text job description.
rawDescriptionstringRaw HTML job description.
observedAtstringISO 8601 timestamp of when the record was collected.
errorstringnull on success. On a failed run, a single item with a populated error field is written instead.

Example output record

Real record from a {"salaryOnly": true, "sortBy": "salary_high", "enrichDetails": true} run, description trimmed. See the hero example at the top for the full field set.

{
"position": "Solutions Delivery Manager",
"company": "Benchling",
"companyUrl": "https://remoteok.com/company/benchling",
"location": "Boston",
"applicantRegion": "United States",
"employmentType": "FULL_TIME",
"salaryMin": 150000,
"salaryMax": 200000,
"salaryCurrency": "USD",
"salaryText": "$150,000 - $200,000",
"salaryDisclosed": true,
"postedAt": "2026-08-18T08:00:07+00:00",
"validThrough": "2026-11-16T08:00:07+00:00",
"tags": ["exec", "design", "technical", "marketing", "sales", "biotech", "medical", "education", "digital nomad"],
"error": null
}

Run via API and CLI

Start a run and read the dataset. Replace <TOKEN> with your Apify API token.

Run synchronously and get dataset items in one call:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~remoteok-scraper/run-sync-get-dataset-items?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"searchTerms":["engineer"],"tags":["react"],"salaryOnly":true,"maxJobs":25}'

Start a run asynchronously:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~remoteok-scraper/runs?token=<TOKEN>" \
-H "Content-Type: application/json" \
-d '{"remoteRegion":"europe","minSalary":100000,"sortBy":"salary_high","maxJobs":100}'

Apify CLI:

apify call scrapers_lat/remoteok-scraper \
--input '{"tags":["golang"],"sortBy":"newest","maxJobs":50}'

Fetch results

Every run writes to a dataset. Fetch items as JSON, CSV, or Excel by changing format:

# JSON
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=json"
# CSV
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&clean=true&format=csv"
# Paginate large datasets
curl "https://api.apify.com/v2/datasets/<DATASET_ID>/items?token=<TOKEN>&offset=1000&limit=1000"

<DATASET_ID> is returned as defaultDatasetId in the run object. clean=true drops empty and internal fields.

Billing and limits

  • Pay per result. You are charged per job returned (result event). See the pricing tab for the current per-result price.
  • Optional detail add-on. With enrichDetails on, each successfully enriched job also charges a details event. It is opt-in, off by default, and disabled for free accounts.
  • No charge on failure. If a run errors, the actor writes a single item with a populated error field and does not charge for it. Empty runs cost nothing.
  • Spend cap respected. Set maxTotalChargeUsd on the run; once reached, the actor stops emitting and charging further results.
  • Free Apify plans are capped at 10 jobs per run. Upgrade for higher maxJobs.
  • Live feed size. RemoteOK's public feed exposes roughly the 100 most recent postings. The actor filters and sorts across all of them; it does not page deep historical archives.
  • No login or API key is required.

FAQ and troubleshooting

How many jobs can I get per run? RemoteOK's public feed serves roughly its 100 most recent postings. This scraper filters and sorts across all of them, so maxJobs above ~100 will still return at most what the live feed contains. It is a live feed reader, not a historical archive.

A run returned 0 records. Why? Your filters excluded everything. Loosen searchTerms, remove tags, company or location, or turn off salaryOnly. Note that minSalary, maxSalary and salaryOnly all drop jobs with no published salary (only a minority of RemoteOK jobs disclose one). Zero-result runs are not charged.

Why is salaryMin / salaryMax null on some jobs? Not every RemoteOK listing publishes a salary. When none is given, salaryMin, salaryMax, salaryCurrency and salaryText are null and salaryDisclosed is false. Use salaryOnly to keep only jobs with a published salary.

How are category and seniority set? Both are derived: category from the job title, seniority from the tags and title. They are best-effort and return null when the title gives no clear signal, so they are never fabricated.

What does enrichDetails add, and why is it optional? It fetches each job's RemoteOK page to add employmentType, applicantRegion, validThrough and companyUrl. That is one extra request per job, so it is slower and opt-in. It is billed as a details event only on a successful fetch and is disabled for free accounts.

What is the difference between description and rawDescription? description is clean plain text (mojibake fixed); rawDescription preserves the original HTML (links, lists, formatting).

Is this an official RemoteOK tool? No. This actor is independent and not affiliated with RemoteOK. It reads only publicly available RemoteOK data. Use it in accordance with RemoteOK's terms.

More scrapers at scrapers.lat

Built and maintained by scrapers.lat, where we publish scrapers for US and Latin American public platforms: company registries, government data, finance, e-commerce and more. Browse the catalog or request a custom scraper at scrapers.lat.


Independent tool, not affiliated with RemoteOK. Accesses only publicly available RemoteOK data. Use in accordance with RemoteOK's terms.