Remote Jobs Scraper — RemoteOK Remotive WWR avatar

Remote Jobs Scraper — RemoteOK Remotive WWR

Pricing

Pay per usage

Go to Apify Store
Remote Jobs Scraper — RemoteOK Remotive WWR

Remote Jobs Scraper — RemoteOK Remotive WWR

One scraper, three remote job boards: RemoteOK, Remotive and WeWorkRemotely. Get fresh remote-only openings as clean JSON — title, company, category, salary and apply URL — deduplicated across boards. Perfect for remote job boards, alert bots and hiring research.

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Nomad.Dev

Nomad.Dev

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

10 hours ago

Last modified

Categories

Share

Fetch live remote-only job listings from RemoteOK, Remotive and WeWorkRemotely in a single run, merged into one clean dataset.

What remote jobs data does this scraper extract?

Each result is one flat JSON record per job posting:

FieldMeaning
sourceBoard the listing came from — remoteok, remotive or weworkremotely
idStable source-side identifier
titleJob title as posted
companyHiring company / organisation
locationLocation / duty station (may include remote hints)
urlDirect link to the posting
postedAtPosting date where the source provides it; null when absent
salarySalary text where the source provides it; null when absent (WeWorkRemotely feeds never include salary)
snippetShort description excerpt
tagsSource-provided tags/skills list (may be empty)
categoryJob category — Remotive only; not present for other sources

How to scrape remote jobs with this Actor

  1. Click Try for free / Run — no login to the target site, no cookies, no proxies to configure.
  2. Adjust the input (keyword, titleExclude, postedSince, board toggles, maxItems) or keep the defaults.
  3. Run it and export the dataset as JSON, CSV or Excel, or read it over the API.

Run it from your own code:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("nomad-agent/remote-boards-scraper").call(run_input={"maxItems": 50})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["title"], "—", item["company"], item["url"])

Or a single HTTP call that runs the Actor and returns items in one response:

curl -X POST \
"https://api.apify.com/v2/acts/nomad-agent~remote-boards-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"maxItems": 50}'

Input

FieldTypeDefaultNotes
keywordstring""Optional case-insensitive substring matched against job title and company name. Leave empty to return all listings.
titleExcludearray[]Skip listings whose title or company contains any of these case-insensitive terms. Exclusion twin of keyword above.
postedSinceinteger0Only return listings posted within this many days (max 365). Applied client-side after fetch — see note below. Set 0 to disable and return all fetched listings regardless of age.
enableRemoteOKbooleantrueScrape listings from RemoteOK.
enableRemotivebooleantrueScrape listings from Remotive.
enableWeWorkRemotelybooleantrueScrape tech/programming listings from WeWorkRemotely (Full-Stack, Back-End, Front-End, DevOps/SysAdmin).
maxItemsPerSourceinteger50Maximum number of listings to return from each enabled board (max 500). Each item returned is a billed dataset result. Set 0 for no limit (not recommended).
maxItemsinteger150Hard cap on the total number of listings returned across all boards (max 1000). Each item returned is a billed dataset result. Set 0 for no limit (not recommended).
cacheTtlSecondsinteger1800Advanced. Reuse a fetch from this many seconds ago instead of hitting the source board again on rapid re-runs. Set 0 to always fetch live.

Billing note: maxItemsPerSource and maxItems used to default to 0 (unlimited) — a single run merges three full remote-job-board feeds, so an unbounded run could bill for every listing on all three boards. They now default to 50 per source / 150 total. If you're an existing caller who relied on the old unlimited behavior, pass these explicitly (up to the new maximums of 500 / 1000) — nothing changed for callers who already set them.

postedSince is a client-side filter: none of the three source feeds accept a server-side date parameter, so the actor fetches the live feed and then drops listings older than N days by parsing each source's own postedAt format (RemoteOK/Remotive: ISO 8601; WeWorkRemotely: RSS published date). A listing with a date the actor can't parse is kept rather than silently dropped.

Output example

{
"source": "remotive",
"id": "1934582",
"title": "Backend Engineer (Go)",
"company": "Chili Piper",
"location": "Worldwide",
"url": "https://remotive.com/remote-jobs/software-dev/backend-engineer-1934582",
"postedAt": "2026-06-29T07:00:00",
"snippet": "Fully remote backend role...",
"salary": "$90k–$120k",
"category": "Software Development",
"tags": ["go", "backend"]
}

Integrations

Export the dataset as JSON, CSV or Excel from the Console, pull it over the Apify API (including run-sync-get-dataset-items for a single blocking call), wire it into Make/Zapier/n8n, or drive it from an AI agent via the Apify MCP server.

Pricing

Pay per event: $0.05 per Actor start and $0.004 per job returned. 100 jobs ≈ $0.45. No subscription, no rental — you pay only for what you fetch. Raising maxItemsPerSource / maxItems directly raises how many billed results a run can produce.

Use cases

  • Remote-job boards and newsletters
  • Job-alert bots for remote-first candidates
  • Remote-hiring market research
  • Feeding AI matching agents with remote-only supply

FAQ

Is it legal to scrape remote jobs? This Actor reads only publicly available job postings — data any visitor can see without logging in. No personal data behind authentication is touched. Review the target site's terms and your local regulations for your specific use case.

Do I need an account on the target site? No. Postings are fetched from public pages/APIs — no login, cookies or session tokens.

How fresh is the data? Every run fetches live listings. Results are cached for cacheTtlSeconds (default 30 min, set 0 to always hit the source live). Use postedSince to additionally filter out listings older than N days.

How many jobs can I get? maxItemsPerSource (default 50, max 500) and maxItems (default 150, max 1000) cap the run. Set either to 0 for no limit — not recommended, since every returned item is a billed dataset result and this Actor merges three full remote-job-board feeds.

Something broken or missing? Open an issue on the Actor's Issues tab — it is monitored and reliability fixes ship fast.