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

Scrape and aggregate remote jobs from Arbeitnow, Jobicy, Himalayas, and RemoteOK in one normalized dataset. Search by role and export title, company, location, salary, skills, description, source, and application URL. No API key or proxy required.

Pricing

from $12.00 / 1,000 results

Rating

5.0

(1)

Developer

Ben

Ben

Maintained by Community

Actor stats

0

Bookmarked

679

Total users

127

Monthly active users

2 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 plus a $0.00005 run-start event. A 20-row dataset costs about $0.30005 before account discounts. An only-new run with no matching arrivals produces no result charge. The separately listed salary-extracted event starts on August 27, 2026; until then it isn't charged.

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 six requests run concurrently. If Jobicy hits its public rate limit or another source is temporarily unavailable, the remaining boards still return data. 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
  • description excerpt 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

A missing salary or date stays null. The Actor doesn't guess source data.

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.
maxJobsPerPlatformSource-level limit from 1 to 50.
maxTotalJobsFinal dataset limit across all boards; use 0 for no total cap.
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

Every posting becomes one dataset row:

{
"title": "Senior Python Engineer",
"company": "Example Co",
"location": "Europe",
"salary": "$140,000 - $180,000",
"description": "Build data services for a distributed product team...",
"platform": "remotive",
"work_type": "Remote",
"job_type": "Full-time",
"seniority": "senior",
"tags": ["Python", "APIs"],
"url": "https://remotive.com/remote-jobs/software-dev/example",
"posted_date": "2026-08-20T08:00:00+00:00",
"scraped_at": "2026-08-20T09:00:00+00:00",
"job_id": "68c242ec20fc44fc48a6c6c4",
"is_new": true,
"monitor_id": "daily-senior-python",
"first_seen_at": "2026-08-20T09:00:01+00:00",
"index": 1
}

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.

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's public API can enforce a low request rate. These limits come from the sources, so the Actor treats an unavailable board as an empty source instead of failing the whole run.

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.