Remote Jobs API - Remotive, RemoteOK, Himalayas, Jobicy avatar

Remote Jobs API - Remotive, RemoteOK, Himalayas, Jobicy

Pricing

from $1.10 / 1,000 job rows

Go to Apify Store
Remote Jobs API - Remotive, RemoteOK, Himalayas, Jobicy

Remote Jobs API - Remotive, RemoteOK, Himalayas, Jobicy

Remote job listings from Remotive, Remote OK, Himalayas, Jobicy and Arbeitnow in one normalized dataset: title, company, salary, tags, location and link. Duplicates merged. dryRun prices a run before you pay; charged only for jobs delivered.

Pricing

from $1.10 / 1,000 job rows

Rating

0.0

(0)

Developer

Natalia Ivanova

Natalia Ivanova

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

8 days ago

Last modified

Share

Remote Jobs Scraper - Remotive, RemoteOK, Himalayas, Jobicy

Get remote job listings from five job boards in one clean dataset: Remotive, Remote OK, Himalayas, Jobicy and Arbeitnow. One run, one schema — title, company, location, employment type, salary, tags, publication date, description and the canonical link to the original posting. Duplicates posted on several boards are merged, with links to every copy.

The Actor reads only the official public JSON APIs the boards publish for developers. No HTML scraping, no browser, no proxies, no logins — so it does not break when a site changes its layout, and it respects each board's attribution rules by design.

What you can do with it

  • Job alerts — run it every morning with postedAfter: "24 hours" and your keywords, then send new matches to Slack, email or a Google Sheet with Apify integrations.
  • Job-board or newsletter feed — fill a niche job site ("remote Python jobs in Europe") with fresh, deduplicated listings that link back to the source.
  • Market research — track how many remote roles per stack, seniority or region appear each week; salary ranges where boards publish them.
  • Recruiting and lead generation — see which companies are hiring remotely right now for a given skill.
  • AI agents — let an agent query the job market through the Apify MCP server (see below).

Sources

BoardCoverageNotes
RemotiveTech, marketing, design, supportListings delayed 24 h by the board itself
Remote OKLatest ~100 remote jobs, tags, USD salaries
HimalayasLargest feed (100 000+ listings), salaries, seniority, location and timezone restrictionsPaginated by date until postedAfter
JobicyWorldwide, industries, levels, salariesUp to 200 newest per run
ArbeitnowEurope-focused, hourly updatesOnly jobs marked remote are kept

All boards allow this kind of re-use provided the original job URL and the source are kept. Every item therefore contains url, source, sourceName and an attribution line. Please keep them when you display the data.

Input

FieldTypeDefaultDescription
keywordsarray[]Keep jobs whose title, company, category, tags (and description, see below) contain any of these words. Empty = everything.
excludeKeywordsarray[]Drop jobs whose title, company, category or tags contain any of these.
searchDescriptionbooleantrueAlso match keywords in the full description. Turn off for strict title/tag matching.
sourcesarrayall fiveAny of remotive, remoteok, himalayas, jobicy, arbeitnow.
postedAfterstring7 daysA date (2026-09-01), today, yesterday or a period (24 hours, 2 weeks).
locationstring—Keep only jobs whose location text contains this (USA, Europe, Worldwide, Germany).
jobTypesarray[]full_time, part_time, contract, freelance, internship, temporary, other.
maxItemsinteger500Stop after this many jobs (after filtering and merging).
includeDescriptionbooleantrueFull description as text and HTML; off = 300-character excerpt.
dedupebooleantrueMerge the same job found on several boards.

Example — remote React or Vue jobs for Europe from the last day, without senior roles:

{
"keywords": ["react", "vue"],
"excludeKeywords": ["senior", "lead"],
"location": "Europe",
"postedAfter": "24 hours",
"maxItems": 200
}

Output

One dataset item per job:

{
"id": "himalayas:senior-full-stack-python-fastapi-react-engineer",
"title": "Senior Full Stack Python/FastAPI/React Engineer",
"company": "Anovium",
"url": "https://himalayas.app/companies/anovium/jobs/senior-full-stack-python-fastapi-react-engineer",
"applyUrl": "https://himalayas.app/companies/anovium/jobs/senior-full-stack-python-fastapi-react-engineer/apply",
"source": "himalayas",
"sourceName": "Himalayas",
"sourceSite": "https://himalayas.app",
"attribution": "Originally posted on Himalayas: https://himalayas.app/companies/anovium/jobs/…",
"location": "Colombia",
"remote": true,
"jobType": "full_time",
"seniority": "Senior",
"category": "Engineering",
"tags": ["Full Stack Engineer"],
"salaryMin": 60000,
"salaryMax": 90000,
"salaryCurrency": "USD",
"salaryPeriod": "year",
"salaryText": null,
"companyLogo": "https://…/logo.png",
"publishedAt": "2026-09-10T12:28:04Z",
"expiresAt": "2026-10-10T12:28:04Z",
"description": "About Anovium …",
"descriptionHtml": "<p>About Anovium …</p>",
"alsoOn": [{ "source": "remoteok", "url": "https://remoteok.com/remote-jobs/…" }],
"scrapedAt": "2026-09-10T14:02:11Z"
}

jobType is normalized across boards; salaryText keeps free-text ranges (e.g. $90k–$120k) when a board publishes salary as text. The OUTPUT record of the key-value store holds a run summary: jobs per board, boards that failed (the run still succeeds if at least one board answers), and the filters used.

Use cases

Ready-made examples you can run without configuring anything:

Scrape Remotive jobs

Remotive's curated remote tech board in one normalized schema — title, company, salary, tags, location and the canonical apply link.

{ "sources": ["remotive"], "keywords": ["python"] }

Scrape Jobicy jobs

Jobicy's feed with the same fields as every other board, so nothing downstream has to know which site a row came from.

{ "sources": ["jobicy"] }

Build a remote work job feed

All five boards in one run with cross-board duplicates merged — the shape you want behind a job aggregator, a newsletter or a Slack alert.

{ "sources": ["remotive", "remoteok", "himalayas", "jobicy", "arbeitnow"] }

Pricing

Pay per event: a small fee per Actor start plus a fee per job returned. You pay only for jobs that pass your filters after deduplication — the filtering and merging themselves are free. A daily alert run with 20–50 new matches typically costs a few cents; the current prices are shown in the Pricing tab.

Limits and good practice

  • The boards ask developers not to poll them constantly. The Actor makes one request per board per run (Himalayas and Arbeitnow paginate as far as postedAfter requires). Schedules every few hours are fine; every minute is not.
  • Boards describe locations in their own words (Worldwide, USA only, EMEA, Remote job). The location filter is a substring match; use short terms.
  • Remotive delays its public feed by 24 hours on purpose; other boards publish in near real time.
  • Keywords are matched as substrings, case-insensitive: go also matches Django. Use golang or go with spaces if you need precision.

Use with AI agents (MCP)

Add this Actor to the Apify MCP server and an agent (Claude, Cursor, any MCP client) can ask for "remote data-engineer jobs posted this week that mention dbt" and receive structured rows with links. Typical tool input:

{ "keywords": ["data engineer", "dbt"], "postedAfter": "7 days", "maxItems": 50, "includeDescription": false }

FAQ

Why do results differ from the boards' websites? Boards show more jobs on their sites than in their public APIs (e.g. Remote OK exposes the latest ~100, Jobicy up to 200 per query). Combine several boards and run regularly to build a complete picture.

Can I get non-remote jobs too? No — this Actor is remote-only by design (Arbeitnow's on-site listings are filtered out).

Is this affiliated with the boards? No. Data is provided by the boards through their public APIs and remains theirs; keep the links and source names when you republish it.

Something is missing or a board changed its API? Open an issue on the Actor's Issues tab — fixes usually ship within a day.

Cost control

Pay per event only works if you can see the bill before you pay it:

  • Set dryRun to count every result and print what a full run would cost - nothing is charged, and only a few sample rows are stored.
  • You are charged only for rows actually delivered to the dataset; a run that finds nothing costs nothing beyond the start event.
  • maxItems is respected exactly, and the run stops before the platform's Max total charge for the run.
  • Every run writes a COST record to the key-value store: chargeable events, charged events, the amount in USD and whether a limit was hit.