Remote OK Scraper avatar

Remote OK Scraper

Pricing

from $0.97 / 1,000 job scrapeds

Go to Apify Store
Remote OK Scraper

Remote OK Scraper

Scrape remote job listings from Remote OK with filters for role, location, benefits, salary, and sort order. Accepts listing/job URLs or structured filters and returns structured job JSON.

Pricing

from $0.97 / 1,000 job scrapeds

Rating

0.0

(0)

Developer

Farhan Ali

Farhan Ali

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Remote OK Scraper creates a structured dataset of remote job records collected from remoteok.com. Each dataset item represents one job posting and can include the position, company, location, salary range, tags, benefits, employment type, posting date, and apply links. Query the source using a keyword search, role tag, location, benefit, or minimum-salary filter, or paste a pre-filtered Remote OK URL, control the result limit with maxItems, and retrieve records through the Apify Dataset API or export them as JSON, CSV, Excel, or XML.

Dataset at a glance

PropertyValue
Sourceremoteok.com
Record unitOne remote job posting
Input methodssearchQueries, tags, locations, benefits, minSalary, startUrls
Main identifiersid, url, applyUrl
DeliveryApify Dataset and API
Export formatsJSON, CSV, Excel, XML
Update modelFresh records per Actor run
Pricing$1 per 1,000 jobs

Coverage and available records

The Actor returns job postings from Remote OK's board, resolved from keyword searches, role tags, locations, benefits, salary thresholds, or direct URLs. Supported coverage includes:

  • Keyword search results, scraped one query at a time.
  • Role/category tags (for example dev, backend, seo), combined with AND.
  • Location filters (countries or regions such as US, NL, region_EU, or Worldwide), each scraped as a separate search.
  • Benefit filters such as 401k, async, unlimited_vacation, and 4_day_workweek.
  • A minimum annual salary threshold in USD.
  • Direct listing, tag, and single-job URLs via startUrls.
  • Optional full job descriptions and direct apply links when scrapeJobDetails is enabled.

Salaries are returned only when Remote OK publishes them; when a salary is withheld (for example, behind a Premium upgrade), salaryMin and salaryMax are null rather than estimated.

Data dictionary

FieldTypeNullableDescriptionExample
idstringNoRemote OK job identifier"1137062"
slugstringNoURL slug for the job"remote-desarrollador-full-stack-..."
positionstringNoJob title"DESARROLLADOR FULL STACK"
companystringNoCompany name"Kruger NearShore LLC - Rekluti"
urlstringNoCanonical job page URL"https://remoteok.com/remote-jobs/..."
applyUrlstringYesDirect apply link"https://remoteok.com/l/1137062"
companyUrlstringYesCompany page URL"https://remoteok.com/company/..."
companyLogostringYesCompany logo URL""
locationstringYesDisplay location text"Probably worldwide"
applicantLocationsarrayYesAccepted applicant locations["Anywhere"]
tagsarrayYesRole and skill tags["Full Stack", "Python", "DevOps"]
benefitsarrayYesListed benefits["401k"]
salaryMinnumberYesMinimum annual salary (USD), when publishednull
salaryMaxnumberYesMaximum annual salary (USD), when publishednull
salaryCurrencystringYesSalary currency code""
salaryPeriodstringYesSalary period, when published""
employmentTypestringYesEmployment type"FULL_TIME"
workHoursstringYesWork-hours classification"Flexible"
industrystringYesIndustry classification"Startups"
jobLocationTypestringYesLocation-type classification"TELECOMMUTE"
datePostedstringYesPosting timestamp (ISO 8601)"2026-08-22T00:00:12+00:00"
validThroughstringYesListing expiry timestamp"2026-11-20T00:00:12+00:00"
postedAgostringYesRelative age of the posting"16h"
descriptionstringYesFull job description, only when scrapeJobDetails is on"Kruger NearShore LLC - Rekluti is hiring..."
isVerifiedbooleanYesWhether the listing is verifiedfalse
detailsFetchedbooleanYesWhether full details were retrievedfalse
sourceQuerystringYesQuery or filter that produced the record"python"

The most stable field for deduplication is id.

Example dataset record

{
"id": "1137062",
"slug": "remote-desarrollador-full-stack-kruger-nearshore-llc-rekluti-1137062",
"url": "https://remoteok.com/remote-jobs/remote-desarrollador-full-stack-kruger-nearshore-llc-rekluti-1137062",
"applyUrl": "https://remoteok.com/l/1137062",
"position": "DESARROLLADOR FULL STACK",
"company": "Kruger NearShore LLC - Rekluti",
"companyUrl": "https://remoteok.com/company/kruger-nearshore-llc-rekluti",
"location": "Probably worldwide",
"applicantLocations": ["Anywhere"],
"tags": ["Full Stack", "Front End", "Python", "Developer"],
"benefits": [],
"salaryMin": null,
"salaryMax": null,
"salaryCurrency": "",
"employmentType": "FULL_TIME",
"workHours": "Flexible",
"jobLocationType": "TELECOMMUTE",
"datePosted": "2026-08-22T00:00:12+00:00",
"postedAgo": "16h",
"isVerified": false,
"detailsFetched": false,
"sourceQuery": "python"
}

This record was produced by a search for python with maxItems capped, without full job details enabled.

Query and input reference

InputTypeRequiredDefaultAccepted valuesDescription
startUrlsarrayNononeRemote OK listing or job URLsDirect URLs to scrape; when set, filter fields are ignored for those URLs.
searchQueriesarrayNononeFree-text termsKeyword searches, scraped one query at a time.
tagsarrayNononedev, backend, seo, etc.Role/category tags, combined with AND.
locationsarrayNononeWorldwide, US, NL, region_EU, etc.Location filters; each scraped as a separate search.
benefitsarrayNonone401k, async, 4_day_workweek, etc.Required benefits.
minSalaryintegerNonone0–250000Minimum annual salary in USD.
sortBystringNodatedate, salary, views, applied, hot, benefitsSort order for the board.
maxItemsintegerNo100 (unlimited) or a positive integerMaximum jobs to scrape.
scrapeJobDetailsbooleanNofalsetrue / falseFetch full descriptions and apply URLs; adds a job-details charge.
proxyConfigurationobjectNoApify ResidentialApify proxy settingsProxy configuration.

Minimal request:

{
"searchQueries": ["python"],
"maxItems": 10,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Advanced request with filters and full details:

{
"searchQueries": ["staff engineer"],
"tags": ["dev", "backend"],
"locations": ["US"],
"benefits": ["401k"],
"minSalary": 120000,
"sortBy": "date",
"maxItems": 100,
"scrapeJobDetails": true,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Retrieve the data through the API

  1. Start the Actor with a JSON input containing search queries, filters, or start URLs.
  2. Wait for the run to finish, or use the synchronous run endpoint.
  3. Retrieve items from the run's default dataset via the Dataset API.
  4. Paginate the dataset or export it in the required format.

The Apify Console generates ready-to-run code for Python, JavaScript, and other languages in the Actor's API tab; see that tab for the current endpoint and authentication details. Never place a real API token in a URL or example.

Data quality and record handling

  • Salaries and benefits are conditional and appear only when Remote OK publishes them; withheld values are returned as null rather than estimated.
  • The Actor normalizes posting dates to ISO 8601 and adds postedAgo and detailsFetched flags alongside the source fields.
  • Within a run, listings are deduplicated by id. Across runs, key on id to avoid storing duplicates.
  • Source changes to Remote OK's layout or anti-bot measures can affect extraction; a failed fetch is skipped and logged rather than aborting the run.
  • Enable Apify Residential proxies (the default) to reduce blocks and rate limiting.

Export and pipeline examples

DestinationRecommended methodTypical use
PostgreSQL/SupabaseDataset API or webhook consumerStore job records keyed on id
Google SheetsApify integrationShareable job board snapshot
S3/cloud storageScheduled export or integrationDaily archive of new postings

Pricing and cost examples

Billing is pay-per-event. Each job written to the dataset is one job charge, and each successful full-page enrichment is one job-details charge. apify-actor-start is a small one-time per-run charge.

RecordsEstimated base cost
1,000 jobs$1.00
10,000 jobs$10.00

Enabling scrapeJobDetails adds one job-details charge per successful fetch (also $1 per 1,000). Estimates assume the published pay-per-event model and do not include Apify platform usage; Apify subscription plan discounts may reduce the per-event rate.

Limitations and responsible data use

  • Only publicly accessible Remote OK listings are returned; salaries hidden by Remote OK are not recovered.
  • Extraction depends on Remote OK's current availability and site structure, which can change without notice.
  • Conditional fields may be missing for individual postings.
  • No historical snapshots are stored unless the user archives dataset exports.
  • Users are responsible for compliance with applicable terms of service and privacy obligations.

Dataset questions

What does one dataset item represent?

One dataset item is a single remote job posting, identified by its id.

Which field should I use as a unique identifier?

Use id; it is unique per posting and stable across runs.

Are fields nullable or conditional?

Yes. salaryMin, salaryMax, benefits, description, and companyLogo depend on what Remote OK publishes for the posting; description is present only when scrapeJobDetails is enabled.

Can I retrieve the records as CSV or JSON?

Yes. The dataset can be exported as JSON, CSV, Excel, or XML from the Apify Console or Dataset API.

How do I paginate large datasets?

Raise maxItems (set 0 for unlimited) to collect more records in a single run, then paginate via the Dataset API.

What counts as a billable result?

Each job record written to the dataset is one job charge; each successful full-page enrichment adds one job-details charge.

Data Scrapers support

Need an additional field, record type, or export workflow? Contact Data Scrapers at stardustspotlight@gmail.com. Include a sample source URL, required fields, expected record volume, and preferred delivery format.