🌍 Remote Jobs Scraper — Work From Home Jobs, Salary USD avatar

🌍 Remote Jobs Scraper — Work From Home Jobs, Salary USD

Pricing

from $3.00 / 1,000 job scrapeds

Go to Apify Store
🌍 Remote Jobs Scraper — Work From Home Jobs, Salary USD

🌍 Remote Jobs Scraper — Work From Home Jobs, Salary USD

Scrape remote jobs from six public boards — WeWorkRemotely, RemoteOK, Remotive, Jobicy, Himalayas, Arbeitnow — plus 582 company career pages on Greenhouse and Ashby that no other remote-jobs scraper reads. One schema, every salary in USD per year, equity flagged. No API keys.

Pricing

from $3.00 / 1,000 job scrapeds

Rating

5.0

(1)

Developer

Dương Thiệu Trần

Dương Thiệu Trần

Maintained by Community

Actor stats

1

Bookmarked

1

Total users

0

Monthly active users

2 days ago

Last modified

Share

🌍 Remote Jobs Scraper API — 6 Job Boards + 582 Company Career Pages

Scrape remote jobs from six public boards — WeWorkRemotely, RemoteOK, Remotive, Jobicy, Himalayas and Arbeitnowplus 582 company career pages read straight from the hiring systems those companies post into. One unified schema, every salary converted to USD per year.

Looking for a WeWorkRemotely scraper, a RemoteOK API or a Remotive job feed? This returns all three, plus three more boards, plus the remote roles at Stripe, Datadog, Perplexity, Cerebras, Anduril and 577 other companies — in one normalised dataset.

Every posting is a work from home job. The six boards are remote-only by construction, and onsite roles from the company career pages are dropped before you ever see them.

No API keys. No browser. No proxies.


Remote job boards and company career pages this scraper covers

BoardWhat it isJobs available
WeWorkRemotelyThe largest curated remote job board~715
RemoteOKRemote-first tech and startup roles~100
RemotiveHand-screened remote roles~18
HimalayasThe deepest catalogue of the six24,000+
JobicyRemote roles with structured salary data~100
ArbeitnowEuropean and German-market remote roles~60 remote
Greenhouse237 company career pages, first-hand from the employer~14,900
Ashby368 company career pages, with structured pay and equity~7,000

The last two are applicant tracking systems — the software a company posts its own jobs into, which then generates its careers page. That makes those rows first-hand rather than syndicated, and it is where the salary and equity data comes from. Pass atsBoards to narrow them to specific companies: a recruiter tracking 40 targets wants those 40, not all 582.

Why scrape 588 sources in one run

Job boards barely overlap. Measured across a live sample, cross-board duplication is 0.5% — which means a single board shows you a small slice of the market and you have no way of knowing what you're missing.

One boardThis Actor
Remote jobs reachable~100~4,000
Schemas to handle11 (eight normalised into one)
Salary formats to parse11 (USD/year, converted from any currency and pay period)
Sources covered16 boards + 582 company career pages
Equity offers flaggednoyes, where the employer publishes it

Remote job salaries, normalised to USD per year

Every board publishes pay differently, and most of it is unusable as-is:

RemoteOK salary_min: 0 ← zero, not null, when there is no salary
Himalayas salaryPeriod: "annual" ← plus a separate currency field
Remotive salary: "OTE $25k - $35k" ← free text, with prefixes
Jobicy salaryMin + salaryCurrency + salaryPeriod
Arbeitnow (no salary field at all — parsed from the description)

This Actor turns all of it into two comparable integers:

"salary_min_usd_year": 120000,
"salary_max_usd_year": 160000,
"has_salary": true

Hourly, daily, weekly and monthly rates are annualised. Currencies are converted at daily rates. When a currency or figure cannot be resolved with confidence, the field is left empty rather than guessed — a wrong salary is worse than no salary.

About 37% of jobs publish pay, so hasSalaryOnly gives you the subset that is actually usable for compensation benchmarking.

Remote job data fields you get

{
"id": "remotive:2086540",
"source": "remotive",
"title": "Senior Backend Engineer",
"company": "Acme Inc",
"company_logo": "https://…",
"location_raw": "Worldwide",
"location_type": "remote",
"location_regions": ["worldwide"],
"employment_type": "full_time",
"seniority": "senior",
"salary_raw": "OTE $25k - $35k",
"salary_min": 25000,
"salary_max": 35000,
"salary_currency": "USD",
"salary_period": "year",
"salary_min_usd_year": 25000,
"salary_max_usd_year": 35000,
"has_salary": true,
"tags": ["python", "backend"],
"description_text": "…",
"apply_url": "https://…",
"posted_at": "2026-08-08T21:48:06Z",
"scraped_at": "2026-08-13T02:14:00Z"
}

seniority and employment_type are inferred from the job title where the board doesn't state them, so the filters work uniformly across all eight sources.

Equity offers, not just base salary

Ashby lets an employer publish compensation as a field rather than burying it in prose, and that field frequently names equity:

$257K – $335K • Offers Equity
$189K – $240K • Offers Equity • Offers Commission
€224K – €248K • Offers Equity

Rows sourced from Ashby carry an offers equity tag when the employer says so. It is read with a regex from the employer's own field — never inferred by a language model — so a number here is a number the company published, not a guess.

Measured honestly: across 70 Ashby boards and 1,214 jobs, 40% carried structured pay and 30% named equity. Coverage varies enormously by employer — the median board sits far below the average, because a handful of large pay-transparency-compliant companies carry the aggregate. On Greenhouse, pay lives in the job description and is text-parsed instead, reaching 48-59% depending on the boards sampled.

Filter remote jobs by salary, seniority and location

InputWhat it does
sourcesPick which boards to query
searchMatches job title or description
location"Germany", "United States", "Europe" — or "worldwide" for every job open to applicants anywhere
excludeKeywordsDrop jobs matching these words, e.g. "sales, crypto"
worldwideOnlyOnly jobs with no country restriction
employmentTypeFull time · Part time · Contract · Internship
seniorityIntern · Junior · Mid · Senior · Lead · Executive
hasSalaryOnlyKeep only jobs that publish pay
minSalaryUsdMinimum salary, compared after currency and period conversion
postedWithinDaysFreshness cutoff, default 30 days
maxItemsHard cap, so a run can't produce an unexpected bill
maxJobsPerPlatformCap each board's contribution, e.g. 10 from each
debugModeLog every URL fetched and each filtering step

Daily remote jobs digest — get only the new jobs

Turn on onlyNew and schedule the Actor. The first run returns everything that matches your filters; every run after that returns only the jobs that appeared since — usually a handful, not the same sixty rows again.

Because you are billed per job returned, a daily digest costs a fraction of a full run. A first run of 60 jobs followed by six days of ~5 new jobs each is 90 results for the week, not 420.

RunWith onlyNew offWith onlyNew on
Monday60 jobs60 jobs
Tuesdaythe same 60the 4 posted overnight
Wednesdaythe same 60the 7 posted since

History is kept on your own account for 60 days. If storage is ever unavailable the run returns everything rather than silently returning nothing — an empty digest and a quiet day on the job boards look identical, and only one of them is a bug.

Send it to Slack every morning

  1. Schedule → new schedule, 0 8 * * *, pointing at this Actor with onlyNew: true.
  2. In n8n, Make or Zapier, add an Apify → Actor run finished trigger.
  3. Map title, company, salary_min_usd_year, apply_url into a Slack message.

Anything with a salary_min_usd_year above your threshold is a one-line filter in the same flow — the field is already normalised to USD per year, so no currency handling is needed downstream.

Remote Jobs Scraper pricing

Tiered by your Apify plan — bigger plans pay less per job:

Your Apify planPer job returned
Free$0.006
Bronze$0.005
Silver$0.004
Gold / Platinum / Diamond$0.003

Actor start: $0.00005 — effectively free, so scheduling this costs you nothing to try.

RunJobsFree planGold+
Default60$0.36$0.18
Medium200$1.20$0.60
Everything1,000$6.00$3.00

You are charged for jobs returned, not jobs fetched. A narrow search reads thousands of postings across all eight sources and bills you only for the ones that match — and a search that matches nothing costs you nothing.

What people build with remote job data

  • Salary benchmarking — pay from 588 sources, directly comparable in one currency and period
  • Job board aggregation — feed your own site or newsletter
  • Recruitment market research — what roles are open, where, at what level
  • Lead generation — companies actively hiring are companies actively spending

Remote jobs scraper FAQ

Which job boards does this remote jobs scraper cover?

Six public boards — WeWorkRemotely, RemoteOK, Remotive, Jobicy, Himalayas, Arbeitnow — plus 582 company career pages on Greenhouse and Ashby. All are read in a single run and returned in one schema, so you never reconcile eight different field names yourself.

Do all remote jobs include salary data?

No — not every board publishes pay, and the ones that do don't publish it on every posting. Set hasSalaryOnly to keep only postings with a resolvable salary. WeWorkRemotely has no salary field at all, so those figures are parsed out of the posting text.

How are salaries in EUR or GBP handled?

Every figure is converted to USD per year, so a posting quoted in EUR per month and one quoted in GBP per year sort against each other correctly. The original values stay in salary_min, salary_max, salary_currency and salary_period if you'd rather do your own conversion. Anything that can't be resolved with confidence is left empty rather than guessed.

Can I get only worldwide remote jobs?

Yes — set worldwideOnly. Note that boards are unreliable here: a posting can be filed under "Anywhere in the World" while its own text says US-only. Where the two disagree, the more specific field wins, so is_worldwide is stricter than the board's own label.

Is there a job postings API for remote jobs?

Yes. Run this Actor over the Apify API, schedule it, or wire it into n8n, Make or Zapier — the output is the same normalised JSON either way.

How fresh are the postings?

postedWithinDays defaults to 30. Each row carries posted_at, days_since_posted and an is_stale flag so you can apply your own cutoff downstream.

Can I use this to find work from home jobs?

That is all it returns. The six boards are remote-only, and onsite roles from the company career pages are dropped before output, so the whole dataset is work from home jobs by construction — you never filter office roles out. Use worldwideOnly if you also need postings open to candidates in any country, rather than remote-but-US-only.

What are Greenhouse and Ashby doing in a remote jobs scraper?

They are applicant tracking systems — the software a company posts its own jobs into, which then builds its careers page. Reading them directly means a posting reaches you first-hand rather than after a board syndicates it, and it reaches you from companies that never post to a public remote board at all. Onsite roles are filtered out before output, so the dataset stays remote-only.

Can I scrape only specific companies?

Yes — pass atsBoards with the company slugs you care about, e.g. stripe, figma, openai. Leave it empty to use the built-in registry of 582 boards.

How much does it cost to scrape 1,000 remote jobs?

You're charged per job returned, not per source read — a single run reads every source and bills only for the rows it delivers. See the pricing table above.

Notes and limitations

  • Job postings are business data, not personal data.
  • All eight sources are public APIs or feeds used within their intended purpose. The Greenhouse and Ashby endpoints are the documented public job-board APIs; robots.txt permits them.
  • One source failing degrades coverage; it never fails the run. The log names what was skipped.
  • Every board is read until it has contributed its share or genuinely run out, and the log says which: jobicy: 0 matching of 200 fetched (exhausted) means that board really has no matches — not that the scraper stopped early.