Remote Jobs Scraper — 6 Boards, One Feed avatar

Remote Jobs Scraper — 6 Boards, One Feed

Pricing

from $12.00 / 1,000 results

Go to Apify Store
Remote Jobs Scraper — 6 Boards, One Feed

Remote Jobs Scraper — 6 Boards, One Feed

Collect remote jobs from Arbeitnow, Jobicy, Himalayas, RemoteOK, Remotive, and Working Nomads in one normalized dataset. Deduped title/company, only-new monitor, export JSON/CSV. No API key.

Pricing

from $12.00 / 1,000 results

Rating

5.0

(1)

Developer

Ben

Ben

Maintained by Community

Actor stats

0

Bookmarked

774

Total users

92

Monthly active users

3 days ago

Last modified

Share

Collect remote jobs from Arbeitnow, Jobicy, Himalayas, RemoteOK, Remotive, and Working Nomads in one run. The Actor normalizes each source into the same fields, removes duplicate title/company pairs, and can remember what it has already returned.

Use it for a one-off export or switch on onlyNew for a scheduled hiring feed. Export JSON, CSV, or Excel; call it through the API; send rows to Google Sheets; or connect the dataset to n8n, Make, Zapier, Slack, and email.

Try it: Remote Python jobs daily

n8n templates: email alerts and Google Sheets + Slack workflows

Pricing: $0.015 per returned job on the Free tier. Salary fields are included without an extra enrichment charge in the current build. A 20-row dataset at 512 MB costs $0.30005 before plan discounts. The start event costs $0.00005 per GB of allocated memory, with a minimum of one event. No output means no result charge, but the start event still applies. Older pinned builds can still call the legacy $0.01 salary event; use latest for the updated behavior.

What does this remote jobs scraper do?

Job APIs rarely agree on names. One calls the employer company_name; another nests it inside a company object. Dates, employment types, locations, and salary fields differ too. This Actor handles those differences and returns one dataset.

The selected boards run concurrently. If one is unavailable, the working sources can still return data and the log identifies the failed board. If every selected source fails, the run fails instead of reporting a successful empty update. No source login or API key is required.

Fields in each job row

  • title, company, location, and work type
  • salary when published by the source
  • normalized job type, plus inferred seniority
  • the full description supplied by the source, normalized to plain text, and tags
  • source board, application URL, and posting date
  • job_id, a stable fingerprint for downstream deduplication
  • scraped_at, is_new, monitor_id, and first_seen_at

Search and exclusion filters inspect the complete description returned by each source, without a 1,000-character cutoff. HTML formatting is removed and entities are decoded. If a source supplies only an excerpt or no description, the Actor preserves that limitation.

A missing salary or date stays null. Salary currency and period are included when the feed supplies them; amounts without units must not be assumed to be annual USD. Feed salaries are not independently verified offers. Location restrictions still apply to remote roles.

Input

FieldWhat it controls
searchKeywordsTerms that must appear in the job record. Leave empty for all available jobs.
platformsAny combination of arbeitnow, jobicy, himalayas, remoteok, remotive, and workingnomads.
maxJobsPerPlatformUp to 50 matches per board; Himalayas exposes at most 20 in its current feed response.
maxTotalJobsPositive final cap from 1 to 200. Setting 0 removes this final cap, not the per-source limits.
excludeKeywordsDrop rows containing any supplied term.
companyKeywordsKeep employers whose name contains at least one term.
locationKeywordsKeep locations containing terms such as Europe, Germany, or Worldwide.
jobTypesFilter normalized full-time, part-time, contract, freelance, or internship roles.
seniorityLevelsFilter inferred entry, senior, lead, manager, executive, or unspecified roles.
salaryOnlyKeep only rows with source-provided salary data.
postedWithinDaysKeep recent postings; 0 disables the date filter.
onlyNewSave a baseline and return only unseen jobs on later runs.
monitorIdStable name for one saved search, for example daily-python-europe.
firstRunModeemitAll returns the bounded baseline; seedOnly stores it without rows.
resetStateClear only the selected monitor before this run. Turn it off afterward.
debugModePrint source and row details for troubleshooting.

One-off search example

{
"searchKeywords": "python developer",
"platforms": [
"arbeitnow",
"jobicy",
"himalayas",
"remoteok",
"remotive",
"workingnomads"
],
"locationKeywords": ["Europe", "Worldwide"],
"excludeKeywords": ["unpaid"],
"maxJobsPerPlatform": 20,
"maxTotalJobs": 50
}

Scheduled only-new monitor

{
"searchKeywords": "python developer",
"platforms": [
"arbeitnow",
"jobicy",
"himalayas",
"remoteok",
"remotive",
"workingnomads"
],
"seniorityLevels": ["senior", "lead"],
"postedWithinDays": 14,
"onlyNew": true,
"monitorId": "daily-senior-python",
"firstRunMode": "seedOnly",
"maxJobsPerPlatform": 20,
"maxTotalJobs": 30
}

Run the second input once to seed today's matches. Later runs return only jobs the monitor hasn't emitted before.

Output

Selected fields from a real Remotive row checked on September 5, 2026:

{
"title": "Senior Independent Software Developer",
"company": "A.Team",
"location": "Americas, Europe, Israel",
"salary": "$90 - $150 /hour",
"platform": "remotive",
"work_type": "Remote",
"job_type": "Contract",
"seniority": "senior",
"url": "https://remotive.com/remote-jobs/software-development/senior-independent-software-developer-1919265",
"posted_date": "2026-08-16T10:09:34",
"scraped_at": "2026-09-05T12:31:54.674449",
"job_id": "26a0ba3158eb37351b76d822",
"is_new": false,
"monitor_id": null,
"first_seen_at": null,
"index": 4
}

This is a dated example, not confirmation that the vacancy remains open.

job_id stays stable when a source adds tracking parameters to its URL. A repost with a different published date can appear as a fresh opening.

How only-new monitoring works

The Actor stores monitor fingerprints in a named key-value store inside the run user's Apify account. It doesn't mix state between different Apify users.

Give each saved search a stable monitorId. If you leave it empty, the Actor derives one from the query, selected boards, and filters. Changing that configuration creates a new automatic scope.

On the first run:

  • emitAll returns up to maxTotalJobs current matches and records the full fetched baseline.
  • seedOnly records the baseline and returns an empty dataset.

Later runs remove fingerprints already stored for that monitor. Rows beyond maxTotalJobs remain eligible for the next run rather than disappearing. State keeps up to 5,000 fingerprints from the previous 90 days.

If the run reaches its maximum charge, the Actor reports the number of jobs actually saved and remembers only those exported jobs. Unexported matches remain eligible for the next monitor run, including when the spending limit interrupts the first baseline export. Increasing a result limit does not increase the run's maximum charge.

Don't overlap runs using the same monitorId; schedule the next run after the previous one can finish. To start over, run once with resetState: true, then switch it back off.

Daily alert workflow

The checked-in n8n template follows a weekday schedule, calls the synchronous dataset endpoint, and builds a digest from only-new rows. Keep the Apify token in an n8n Header Auth credential rather than pasting it into exported workflow JSON.

A practical setup looks like this:

  1. Import the n8n workflow.
  2. Attach an Apify Header Auth credential to the Actor request node.
  3. Choose one stable monitorId and test with firstRunMode: seedOnly.
  4. Connect the output to email, Slack, a Google Sheet, or your own webhook.
  5. Activate the schedule only after the first manual run succeeds.

Apify Tasks and Schedules work too. Save the input as a Task, run it once, inspect the dataset, then add a weekday schedule and a dataset/webhook integration.

Use cases

  • Recruiters can watch several remote boards without rereading the same jobs each morning.
  • Hiring-signal teams can track companies, regions, role levels, and salary-bearing openings.
  • Job-board operators can import normalized records while keeping source URLs and attribution.
  • Analysts can measure remote hiring volume and skill demand over time.
  • Career tools can feed current openings into matching, alerting, or research systems.

Source notes

RemoteOK asks API users to credit and link to remoteok.com. Remotive asks for the same credit and says its jobs must not be republished onto Jooble, Neuvoo, Google Jobs, or LinkedIn Jobs. Check each source's current terms before building a public redistribution product.

RemoteOK's free feed may trail current postings by roughly 24 hours. Jobicy can enforce a low request rate. These are bounded current-feed requests, not full-board or historical crawls; a matching job outside the fetched window will not appear. Arbeitnow rows must have the source's remote flag. A failed board produces a warning, while failure of every selected board stops the run.

The September 5 update repairs RemoteOK dates and Himalayas company, salary and application fields. Previously missing or incorrectly fingerprinted jobs can appear once as new after that correction; existing monitor state is not reset.

FAQ

Do I need API keys for the six boards? No. The Actor uses their public endpoints.

Can I filter by location now? Yes. Add one or more locationKeywords. Matching uses the normalized location text supplied by each source.

How is seniority determined? The Actor checks the title and tags for terms such as junior, senior, staff, lead, manager, director, and VP. Roles without a clear signal receive unspecified.

Why did an only-new run return zero rows? No unseen job passed the same query and filters. That empty update is expected and doesn't create per-result charges.

Will changing my search reuse old state? An explicit monitorId keeps its own scope. Automatic IDs change when the search or filters change.

Can I monitor several searches? Yes. Give each saved Task a different monitorId.

What if I accidentally reset a monitor? The next run treats it as new. Use seedOnly if you want to rebuild the baseline without sending the current jobs downstream.

Why is salary empty on many rows? Arbeitnow doesn't expose salary in its API, and many employers leave pay blank elsewhere. Use salaryOnly when missing salaries aren't useful.

Can I call it through Python, JavaScript, Make, or Zapier? Yes. Use the Actor API or a saved Task. The default dataset endpoint returns the normalized rows.

Is the data legal to use? The Actor calls public job APIs rather than bypassing browser controls. Follow source terms, preserve required attribution, and handle any personal data under applicable privacy and employment rules.

Keywords: remote jobs scraper, remote jobs API, only new job alerts, hiring signals, job monitor, Arbeitnow API, Jobicy API, Himalayas jobs, RemoteOK API, Remotive API, Working Nomads jobs, recruitment data, n8n job alerts, remote hiring feed, job listings export, scheduled job scraper, Slack job alerts, Google Sheets jobs.