RemoteOK Jobs Scraper - Search & All Current Remote Jobs
Pricing
from $1.10 / 1,000 results
RemoteOK Jobs Scraper - Search & All Current Remote Jobs
Search current RemoteOK jobs by keyword or export all current remote roles with salary, tags, location, apply links, and normalized fields for hiring and lead workflows.
Pricing
from $1.10 / 1,000 results
Rating
0.0
(0)
Developer
kane liu
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
1
Monthly active users
19 hours ago
Last modified
Categories
Share
RemoteOK Jobs Scraper - Search & Export All Current Remote Jobs
Search or filter RemoteOK jobs by keyword, geo, and industry/tag, or export every current remote job listing with salary, tags, location, and application links as a clean Dataset.
Architecture: this Apify Actor is a thin client. Scraping runs on the remoteok-com Cloud Run worker (
curl_cffi→https://remoteok.com/api) over HTTPS + API key. Dataset fields and Store pricing are unchanged.Worker URL is config, not code: the Actor reads
WORKER_BASE_URLfrom Actor environment variables (plus optional per-runworkerBaseUrl). Migrating the worker host means updatingWORKER_BASE_URL(andWORKER_AUTHif the API key changes) in Apify Console — no Actor code change required. SetWORKER_PROVIDES_PROXY=1when the worker supplies its ownPROXY_URLinstead of Apify RESIDENTIAL.
This Actor returns normalized, deduplicated job records ready for spreadsheets, dashboards, recruitment pipelines, or AI agent workflows.
Use searchQuery, geo, and/or industry to narrow results, or leave them empty to export all current listings. Every row includes the original API object in a raw field so you never lose upstream data. There are no preset keywords, geos, or industries.
Why use this RemoteOK Scraper?
- Keyword search: enter
searchQueryto filter current RemoteOK jobs by title, company, description, tags, location, slug, and URLs. - Geo filter: enter
geo(for exampleusa,uk,europe,india,worldwide) to match location text with common region aliases. - Industry / tag filter: enter
industry(for exampledev,python,marketing,customer support) to request RemoteOK with the officialtagquery and keep matching rows. - Full-feed export: leave filters empty to get every valid job record in the current RemoteOK API response.
- Structured output: normalized fields for title, company, salary, tags, location, posting date, job URL, and apply URL.
- Original raw data: each row preserves the unmodified upstream API object in a
rawfield. - Deduplication: response-local duplicates and malformed records are skipped, with counts reported in
RUN_SUMMARY. - Filter provenance: filtered rows include
sourceSearchQuery/searchRankand/orsourceGeo/sourceIndustry/filterRank. - No credentials needed for RemoteOK: the worker uses the public RemoteOK API and does not require any RemoteOK login.
- Cloud Run acquisition: the Actor calls the hosted
remoteok-comworker; setWORKER_AUTHto match the worker API key. - Attribution built in:
source_urlandattribution_urlfields make it easy to link back to RemoteOK.
More Actors like this
Need another job board or a different vertical? Use a dedicated Actor below for structured fields. Use this Actor for RemoteOK current remote job search and full-feed export.
Similar jobs & freelance Actors
- LinkedIn Jobs Scraper
- Indeed Jobs Scraper
- Upwork Jobs Scraper
- Himalayas Jobs Scraper
- Jobicy Remote Jobs Scraper
- Glassdoor Scraper
- Fiverr Gigs Scraper
- Freelancer.com Scraper
- SEEK Jobs Scraper
- Bayt Jobs Scraper
Prefer another specialized scraper?
If your target has a specialized Actor below, use that first — usually cheaper and more structured than a generic scrape.
E-commerce
- Walmart Product Scraper
- Amazon Search Scraper
- Shopee Search Scraper
- Etsy Scraper
- SHEIN Product Scraper
- 1688 Global Product Search Scraper
- Allegro Scraper
Real Estate
- Zillow & Zumper Scraper
- Realtor.com Scraper
- Apartments.com Rental Scraper
- Rightmove Scraper
- Idealista Scraper
- realestate.com.au Scraper
Travel & Stays
Social & Content
Ads Intelligence
Local & Maps
General Tools
→ See the full catalog in Related Actors below, or browse apify.com/lentic_clockss.
Tutorial
- Click Try for free on this Actor page.
- Optionally enter
searchQuery(e.g.python,frontend,devops). - Optionally enter
geo(e.g.usa,uk,worldwide) and/orindustry(e.g.dev,marketing). - To export all current jobs, leave
searchQuery,geo, andindustryempty. - Optionally set
maxItemsto cap the output size.0means no limit. - Click Start and wait for the run to finish.
- Open the Dataset tab to download results as JSON, CSV, Excel, or JSONL.
- Check
RUN_SUMMARYin the key-value store for source counts, duplicates skipped, and malformed records.
Example inputs
All-current-jobs mode (empty input):
{}
Keyword search mode:
{"searchQuery": "python","maxItems": 25}
Geo + industry filter:
{"geo": "usa","industry": "dev","maxItems": 50}
Keyword + geo + industry:
{"searchQuery": "python","geo": "europe","industry": "dev","maxItems": 25}
Input and output examples
Input fields
| Field | Type | Default | Description |
|---|---|---|---|
searchQuery | string | empty | Optional keyword or phrase. When set, the Actor filters current RemoteOK API job records by title, company, description, tags, location, slug, job URL, and application URL. |
geo | string | empty | Optional region slug or free-text location filter. Common aliases are listed in Common geo slugs. Leave empty for all regions. |
industry | string | empty | Optional RemoteOK tag/industry slug. Common values are listed in Common industry / tag slugs. Spaces, hyphens, and underscores are accepted (customer support = customer-support). |
maxItems | integer | 0 | Maximum matching job records to emit. 0 means no client-side limit on paid plans (schema max 5000). Free Apify plan: also capped at 1,000/run and 10 total runs of this Actor. |
workerBaseUrl | string | (env) | Optional per-run override of the Cloud Run worker origin. Default: Actor env WORKER_BASE_URL. |
Output item example
{"id": "123456","record_type": "job","title": "Senior Python Developer","company_name": "Example Co","company_logo": "https://remoteok.com/assets/img/logo.png","description": "We are looking for a senior Python developer...","tags": ["python", "django", "remote"],"location": "Worldwide","salary": "$80,000-$120,000/yr","salary_min": 80000,"salary_max": 120000,"original_created_at": "2026-07-15T00:00:00+00:00","epoch": "1784073600","url": "https://remoteok.com/remote-jobs/123456","apply_url": "https://example.com/apply","slug": "senior-python-developer-example-co","source_url": "https://remoteok.com/remote-jobs/123456","source": "remoteok","sourceSearchQuery": "python","searchRank": 1,"sourceGeo": "usa","sourceIndustry": "dev","attribution_url": "https://remoteok.com","crawled_at": "2026-07-15T09:00:00+00:00","raw": {"id": "123456", "position": "Senior Python Developer", "company": "Example Co"}}
In all-current-jobs mode, filter provenance fields are absent. In keyword mode, rows include sourceSearchQuery and searchRank. In geo/industry-only mode, rows include sourceGeo / sourceIndustry and filterRank as applicable.
Output fields
| Field | Description |
|---|---|
id | RemoteOK job ID. |
record_type | Always job. |
title | Job title / position. |
company_name | Hiring company name. |
company_logo | Company logo URL when available. |
description | Full job description text when available. |
tags | Job tags (e.g. python, remote, senior). |
location | Job location; defaults to remote when not specified. |
salary | Formatted salary range string (e.g. $80,000-$120,000/yr). |
salary_min, salary_max | Numeric salary bounds when available. |
original_created_at | Original posting date from RemoteOK. |
epoch | Epoch timestamp as string. |
url | RemoteOK job URL when provided by the API. |
apply_url | Direct application URL when available. |
slug | URL slug for the job. |
source_url | Constructed or provided RemoteOK job URL. |
source | Always remoteok. |
sourceSearchQuery | The keyword used when in search mode. |
searchRank | Match rank (1-based) when in search mode. |
sourceGeo | The geo filter used when set. |
sourceIndustry | The industry filter used when set. |
filterRank | Match rank (1-based) when geo/industry filters are set without keyword search. |
attribution_url | https://remoteok.com for attribution. |
crawled_at | ISO timestamp when this Actor collected the row. |
raw | The original unmodified RemoteOK API record. |
Lead / Contact fields (线索字段)
Every row carries all 10 lead keys. The public feed API already returns
posting-body depth (description carries the full job HTML), so feed rows
are leadSource=detail items, not thin search cards. Enrich re-validates
the API description against the live detail page (JSON-LD JobPosting
description) and backfills the org name when the API row lacks one.
| Field | Type | Meaning and RemoteOK source |
|---|---|---|
phones | [{value, type}] | Phone numbers extracted verbatim from the description HTML text (type=posting-contact). Partially verified site-wide: 0407 427 396 (job 1137267), 07860943048 (job 1137263). Strict guards (10-15 digits + visible separators + contact context; 8-digit 2611xxxx job numbers, ISO dates, salary bands, and postal fragments excluded). Rows without one carry leadAbsences.phones. |
emails | [{value, type}] | Contact emails extracted from description HTML text (type=posting-contact). Partially verified (~11% of feed postings): talent@clutch.ca (1137278), hrd@coca-cola.com.kh (1137227), signature-line addresses such as Sarah.Thompson@justice.vic.gov.au (1137267). mailto: is zero site-wide, so visible text is matched. Rows without one carry leadAbsences.emails. |
address | {street, unit, locality, region, postalCode, country, full} | Address. unit = 门牌 (door/unit number). RemoteOK has no street-level data: street/unit/postalCode are always null; locality/full mirror the human-readable location string (e.g. St. George's,); the literal Anywhere sentinel (JSON-LD PostalAddress + worldwide posts) is filtered to all-null. Reason in leadAbsences.address. |
geo | {lat, lng} | Coordinates. Always null on RemoteOK (API, detail, and company surfaces all carry no lat/lng; there is no map surface). Supplement, never a substitute for address. Reason in leadAbsences.geo. |
person | {name, role?} | Hiring contact person from description signature lines ("Name – Role" with a role keyword, e.g. Sarah Thompson – Manager, Community Work & Partnerships, or Contact: Name … with contact context). Generic headline fragments are never promoted. Partially verified; rows without one carry leadAbsences.person (未验证). |
org | {name, id?} | Employer organization: name = company_name (backfilled from detail JSON-LD hiringOrganization when the API row lacks it), id always null. Rows without one carry leadAbsences.org (未验证). |
web | {website, socials[]} | Per-job website + social links. Always {website: null, socials: []} on RemoteOK: job/API/company surfaces carry no per-company links (external links are only platform-ecosystem domains; the platform contact hello@remoteok.com lives on /legal Terms, not on jobs). Reason in leadAbsences.web. |
leadSource | enum search|detail|entity|contact|reveal-xhr | Provenance surface. Always detail here: feed rows already carry posting-body depth (API description = detail-level contact surface). |
leadReveal | enum visible|click|xhr|gated|image|absent | How the lead was revealed. visible when org/phone/email/person/city is present, else absent. Never click/xhr: the whole site exposes revealControls=[] (no click-reveal controls on any of the 7 probes). All encoding is plain (description HTML plaintext; no [at]/[dot], no CF email-protection, no split-DOM, no image, no XHR-after-click). |
leadAbsences | object/map | Per-subfield absence reason in the recon wording (本站无 = structurally absent site-wide, 未验证 = unverified for this row). Present on every row; see Honest limitations. |
Output item example (lead block):
{"phones": [],"emails": [{"value": "talent@clutch.ca", "type": "posting-contact"}],"address": {"street": null, "unit": null, "locality": "Toronto", "region": null, "postalCode": null, "country": null, "full": "Toronto"},"geo": {"lat": null, "lng": null},"person": null,"org": {"name": "Clutch", "id": null},"web": {"website": null, "socials": []},"leadSource": "detail","leadReveal": "visible","leadAbsences": {"phones": "本站无…", "address": "本站无…", "geo": "本站无…", "person": "未验证…", "web": "本站无…"}}
Reveal cost (揭示成本)
There is nothing to click and no extra request to pay for:
- Detail re-validation only: the feed API row already contains the full
description, so phones/emails/person are extracted from the same response that produced the row.enrichDetails(default on) only re-checks the description against the live detail page (JSON-LDJobPostingdescription) and backfillsorg; it never opens company pages (/company/{slug}is a post-aggregation surface with no per-job contact) and never follows/l/{id}apply redirects. - No "show phone/email" click and no reveal XHR: the whole site exposes
revealControls=[](7 probes, incl. 2 detail pages;tel:/mailto:are zero site-wide, so visible plaintext is matched, not anchors). - Effect on run cost/time: lead extraction is local regex over text already
fetched, so it adds no proxy traffic, no rate-limit pressure, and no
measurable run-time overhead. The only cost driver remains feed size
(the public
/apireturns ~100 jobs in a single response, no pagination).
Honest limitations (诚实限制)
What you cannot get from this Actor, matching the 2026-09-04 recon report
(~/Downloads/RemoteOK页面调研分析报告_2026-09-04.md) and the per-row
leadAbsences:
- Phones — sparse (rarer than emails), not guaranteed. Only postings whose description embeds a contact number yield
phones; the rest honestly reportleadAbsences.phones.tel:links do not exist site-wide. Do not expect a phone per row. - Emails — sparse (~11%), not guaranteed. Only postings whose description embeds a mailbox yield
emails(sample:talent@clutch.ca); the rest honestly reportleadAbsences.emails.mailto:links do not exist site-wide. - Street address / 门牌 — 本站无.
locationis city-level free text only (e.g.St. George's,); no street, unit/door number, or postal code anywhere on the API/detail/company surfaces. JSON-LDPostalAddressfields are all the literalAnywheresentinel and are filtered, never emitted. - Coordinates — 本站无. No lat/lng fields on any surface; there is no map surface.
- Per-job website / social links — 本站无.
webis always{website: null, socials: []}. Company pages carry no per-company links; the platform contacthello@remoteok.comlives on/legalTerms only and is not a per-job lead. - Contact person — partial (未验证 per row). Only signature-line rows yield
person(e.g.Sarah Thompson – Manager, Community Work & Partnerships); the rest reportleadAbsences.person. Personal names elsewhere in prose are never promoted. - No click-reveal layer. There is no deeper gated lead layer: no "show phone/email" controls, no XHR-after-click, no login wall on public postings. Login-state behavior was never tested and is not claimed.
Run artifacts
| Artifact | When it is written | What it contains |
|---|---|---|
INPUT_ECHO | After valid input parsing | Normalized scope, keyword, geo, industry, and limits. |
RUN_SUMMARY | After a successful run | Source, filters, record counts, duplicates, malformed records, warnings, and timestamps. |
ERROR_SUMMARY | When a run fails | Error type, safe error message, and timestamps. |
Common geo slugs
geo is matched against RemoteOK location text (and related free-text fields). Use either a short slug or free text. Multi-word values may use spaces or hyphens.
| Slug / input | Also matches | Notes |
|---|---|---|
usa | us, united-states, united states, u.s., u.s.a. | United States |
uk | united-kingdom, united kingdom, england, scotland, wales, britain | United Kingdom |
europe | eu, emea | Europe / EMEA-style labels |
emea | emea, europe | EMEA-style labels |
apac | asia, pacific | Asia-Pacific-style labels |
latam | latin america, south america | Latin America |
canada | canadian | Canada |
germany | deutschland, berlin, munich | Germany |
france | paris | France |
netherlands | holland, amsterdam | Netherlands |
spain | espana, españa, madrid, barcelona | Spain |
ireland | dublin | Ireland |
australia | sydney, melbourne | Australia |
singapore | singapore | Singapore |
japan | tokyo | Japan |
india | bangalore, bengaluru, mumbai, delhi, hyderabad, chennai, pune | India |
brazil | brasil, sao paulo, são paulo | Brazil |
mexico | méxico | Mexico |
philippines | manila | Philippines |
worldwide | world wide, anywhere, global, remote | Global / remote-friendly labels |
remote | remote, worldwide, anywhere, global | Same family as worldwide |
Any other free-text value is also accepted and matched as-is (plus hyphen/space variants). RemoteOK does not expose a reliable server-side location query on the public API, so geo filtering is applied on the current feed returned at run time.
Common industry / tag slugs
industry maps to RemoteOK tags. When set, the Actor calls https://remoteok.com/api?tag=... and still applies a local tag match so only relevant rows are emitted. Spaces, hyphens, and underscores are interchangeable.
| Slug | Examples of accepted forms | Typical use |
|---|---|---|
dev | dev | Software development |
web-dev | web dev, web-dev | Web development |
python | python | Python roles |
javascript | javascript | JavaScript roles |
react | react | React roles |
design | design, designer | Design |
marketing | marketing | Marketing |
customer-support | customer support, customer-support, support | Customer support |
digital-nomad | digital nomad, digital-nomad | Digital nomad friendly |
exec | exec | Executive / leadership |
ops | ops | Operations |
education | education, teaching | Education |
medical | medical | Medical / healthcare |
content-writing | content writing, content-writing, copywriting | Content / writing |
technical | technical | Technical roles |
sys-admin | sys admin, sys-admin | Sysadmin |
finance | finance | Finance |
sales | sales | Sales |
hr | hr, recruiter | HR / recruiting |
legal | legal | Legal |
testing | testing | QA / testing |
mobile | mobile | Mobile |
video | video | Video |
social-media | social media, social-media | Social media |
virtual-assistant | virtual assistant, virtual-assistant | Virtual assistant |
data-entry | data entry, data-entry, analyst | Data / analysis-related tags |
engineer | engineer | Engineering labels |
non-tech | non tech, non-tech | Non-tech roles |
full-time | full time, full-time | Employment type tag |
RemoteOK tag inventory changes over time. If a tag is rare or unused on the current feed, the run can succeed with zero rows and a clear RUN_SUMMARY.
Data source and search boundary
This Actor uses the public RemoteOK API endpoint (https://remoteok.com/api) at run time. RemoteOK decides which current job records are present in that response.
searchQueryfilters the current API payload locally.industryrequests the officialtagquery and also filters locally.geofilters the returned payload locally against location/text fields.- The Actor does not query a separate RemoteOK historical index and does not paginate through older jobs.
Unsupported aliases such as query, keyword, keywords, tags, tag, and location are rejected. Use the canonical fields searchQuery, geo, and industry so automation does not silently change scope.
Free Apify plan limits (set by this Actor's developer)
| Limit | Free Apify plan | Paid Apify plan |
|---|---|---|
| Runs of this Actor | 10 runs total | Unlimited |
Jobs per run (maxItems) | Up to 1,000 | Up to 5,000 (0 = no client-side cap) |
When the run cap is hit, the run finishes with a clear status message — not an Apify platform error.
Pricing
Pay per event. No subscription. Apify displays the effective event price before each run.
Free Apify plan: up to 10 runs of this Actor and 1,000 jobs per run. Upgrade to a paid Apify plan for unlimited runs. (Limits set by the Actor developer.)
| Event | Price | When it is charged |
|---|---|---|
apify-actor-start | $0.005 | Automatically once when a normal Actor run starts. |
apify-default-dataset-item | $2.00 / 1,000 | Automatically for each item written to the default Dataset. |
For example, a run returning 100 job records costs $0.205 in Actor events: $0.005 to start plus $0.200 for results. Platform usage costs are charged to the user in addition to these Actor events, as shown by Apify before a run.
Both listed events are Apify synthetic events: the platform accounts for them automatically, so the Actor does not manually issue duplicate charges in code.
Live View and Standby endpoints
This Actor exposes an honest lightweight Live View service. Data collection stays in normal Actor runs; the standby service does not pretend to offer a separate scrape API.
| Endpoint | Purpose |
|---|---|
GET / | Readiness and service information. |
GET /health | Fast health check. |
GET /input-example | Low-cost input compatible with the Actor schema. |
GET /openapi.json | The deployed OpenAPI 3.x contract. |
The interactive Standby tab on Apify renders these endpoints from the same OpenAPI document served by the Actor.
Connect from code or an AI workflow
Use this Actor in Apify, Make, Zapier, n8n, or an agent workflow. The Actor ID is lentic_clockss/remoteok-all-jobs-scraper.
Related Actors
All 77 public Actors from [lentic_clockss]. Click a name to open the Store detail page.
Jobs & Freelance
- LinkedIn Jobs Scraper
- Bayt Jobs Scraper
- Fiverr Gigs Scraper
- Freelancer.com Scraper
- Glassdoor Scraper
- Himalayas Jobs Scraper
- Indeed Jobs Scraper
- Jobicy Remote Jobs Scraper
- RemoteOK Jobs Scraper
- SEEK Jobs Scraper
- Upwork Jobs Scraper
Real Estate
- Zillow & Zumper Scraper
- Realtor.com Scraper
- 99.co Scraper
- Realtor.com Agents Scraper
- Apartments.com Rental Scraper
- Bayut Scraper
- Craigslist Housing Scraper
- Daft.ie Scraper
- Dot Property Scraper
- FINN.no Scraper
- Funda Scraper
- Hepsiemlak Scraper
- Idealista Scraper
- Immobiliare.it Scraper
- ImmoScout24 Scraper
- Naver Land Scraper
- OpenSooq Scraper
- Otodom Scraper
- Property Finder Scraper
- PropertyGuru Scraper
- realestate.com.au Scraper
- Realtor.ca Scraper
- Rightmove Scraper
- SeLoger Scraper
- SUUMO Scraper
- Zillow Group Scraper
E-commerce
- Shopee Search Scraper
- E-commerce Scraper
- 1688 Global Product Search Scraper
- Allegro Scraper
- Amazon Search Scraper
- ASOS Product Scraper
- Cdiscount Product Scraper
- Costco Product Scraper
- Coupang Product Scraper
- Etsy Scraper
- Lazada Scraper
- MercadoLibre Scraper
- Mercari Japan Scraper
- Rakuten Japan Scraper
- SHEIN Product Scraper
- Target Product Scraper
- Temu Product Scraper
- Walmart Product Scraper
Travel & Stays
- Booking.com & Airbnb Scraper
- Agoda Scraper
- Airbnb Listings Scraper
- Booking.com Hotels Scraper
- Despegar Scraper
- Expedia Scraper
- Traveloka Scraper
- Travelstart Flights Scraper
- Trip.com Scraper
- TripAdvisor Scraper
Social & Content
Ads Intelligence
Local & Maps
General Tools
→ Browse the full profile: apify.com/lentic_clockss
FAQ and support
Does it search RemoteOK by keyword? Yes. Set searchQuery to a word or phrase. The Actor filters the current RemoteOK API job records and returns matching jobs with sourceSearchQuery and searchRank.
Can I filter by region or industry? Yes. Use geo and/or industry. See the slug tables above. Filtered rows include sourceGeo / sourceIndustry provenance.
Does "all" include RemoteOK history? No. "All" means all valid job records in the API response at run time. The RemoteOK endpoint itself decides which current records it returns and does not expose a historical pagination option here.
What happens when there are no matches? If any of searchQuery, geo, or industry is set and nothing matches, the run succeeds with zero Dataset rows and a clear RUN_SUMMARY showing the filters and recordsEmitted: 0. That is different from a source failure, which writes ERROR_SUMMARY and fails.
Can I publish the results commercially? Check the upstream notice and RemoteOK terms before use. The API metadata says the API is free for non-commercial use, and RemoteOK's terms require a hyperlink back where API or site data is used. Keep source_url and attribution_url, link back visibly, and obtain written permission before commercial redistribution or Store publication.
Where can I report a problem? Include the Actor run ID, RUN_SUMMARY or ERROR_SUMMARY, and one example source_url in your support request. Never include credentials because this Actor does not need any.
I'm on the free Apify plan — are there limits? Yes. Free Apify plan users get 10 runs of this Actor and up to 1,000 jobs per run. These limits are set by the Actor developer (not Apify). When you hit the run cap, the run finishes with a clear status message — it is not a platform bug. Upgrade to a paid Apify plan for unlimited runs.
Explore more tools from lentic_clockss on Apify.