Remote Jobs Scraper
Pricing
from $3.48 / 1,000 item extracteds
Remote Jobs Scraper
Collect, filter, normalize, source-attribute, and deduplicate current remote jobs from Remote OK and Remotive in one automation-ready feed.
Pricing
from $3.48 / 1,000 item extracteds
Rating
0.0
(0)
Developer
Stas Persiianenko
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Collect remote jobs from Remote OK and Remotive in one normalized, source-attributed feed.
The Actor fetches both public job APIs, applies the same filters to every record, deduplicates matching company/title/location combinations, and exports data that is ready for recruiting research, hiring-market monitoring, spreadsheets, or a data warehouse.
It does not require a login, browser, or proxy.
What does Remote Jobs Scraper do?
Remote Jobs Scraper turns two different public job-board response formats into one stable dataset.
In one run, it can:
- collect current jobs from Remote OK;
- collect current jobs from Remotive;
- search titles, companies, locations, categories, and tags;
- filter by candidate location or geographic eligibility;
- filter by publication date;
- normalize salary, job type, category, tags, dates, and URLs;
- deduplicate matching jobs across boards;
- preserve every source ID and source endpoint on merged records;
- sort jobs newest first and limit output to a predictable number of results.
The default dataset contains one row per accepted job, ordered by publication time with undated jobs last.
Who is it for?
Recruiters and talent teams
Monitor which companies are hiring remotely and build focused role lists without manually checking two boards.
Labor-market analysts
Compare job titles, locations, salary signals, skills, and publication dates in a consistent tabular format.
Job-search products
Feed public listings into an internal search index, newsletter workflow, or candidate-matching pipeline while retaining source attribution.
Data and automation teams
Schedule recurring runs and send the dataset to Google Sheets, Airtable, Make, Zapier, webhooks, cloud storage, or a warehouse.
Why use a multi-board remote jobs scraper?
Remote OK and Remotive expose useful public records, but their field names and shapes differ.
This Actor provides:
- one schema across both sources;
- one set of filters applied after normalization;
- explicit attribution through
source,sources, source IDs, and source URLs; - cross-board deduplication without hiding where a record came from;
- fail-closed behavior when a selected source changes shape or becomes unavailable;
- lightweight execution through public JSON APIs rather than a browser.
Choose a single-board Actor when you need source-specific features not included here. Choose this Actor when the unified feed is the product you need.
What remote job data can I extract?
| Field | Meaning |
|---|---|
recordId | Stable source-qualified record ID |
source | Primary board: remoteok or remotive |
sources | Every board attributed to a merged record |
sourceJobId | Primary source's job ID |
sourceJobIds | All source IDs represented by the row |
sourceUrl | Public API endpoint for the primary source |
sourceUrls | All represented public source endpoints |
title | Job title |
company | Hiring company |
location | Candidate location or eligibility text |
salary | Source salary text or normalized salary range |
salaryMin, salaryMax | Numeric bounds when Remote OK supplies them |
employmentType | Employment type when available |
category | Source category when available |
tags | Skills and job tags |
publishedAt | Normalized ISO publication time |
description | Source description, which can contain HTML |
applyUrl | Direct apply link or canonical job link |
jobUrl | Canonical public listing URL |
dedupeKey | Normalized company/title/location key |
scrapedAt | Time this Actor collected the record |
Fields unavailable from a source are returned as null rather than guessed.
How to scrape remote jobs
- Open the Actor in Apify Console.
- Keep both job boards selected for a unified feed, or choose one source.
- Optionally enter keywords such as
software engineer. - Optionally add a location or publication-date filter.
- Choose the maximum number of jobs.
- Keep deduplication enabled for monitoring workflows.
- Click Start.
- Open the Remote jobs dataset view.
- Download JSON, CSV, Excel, XML, or RSS, or connect an integration.
A useful first run is:
{"sources": ["remoteok", "remotive"],"query": "software engineer","maxItems": 10,"deduplicate": true}
Input parameters
| Input | Type | Default | Description |
|---|---|---|---|
sources | string array | both boards | One or both of remoteok, remotive |
query | string | empty | All words must match normalized searchable fields |
location | string | empty | Case-insensitive location/eligibility substring |
publishedAfter | ISO date-time | empty | Excludes older and undated jobs |
deduplicate | boolean | true | Merges matching company/title/location records |
maxItems | integer | 100 | Saves 1–500 accepted jobs |
query uses AND semantics: every entered word must be present somewhere across
the title, company, location, category, or tags.
For example, software engineer requires both words but does not require them
to be adjacent.
Output example
A current run returns rows shaped like this:
{"recordId": "remotive:2090000","source": "remotive","sources": ["remotive"],"sourceJobId": "2090000","sourceJobIds": ["2090000"],"sourceUrl": "https://remotive.com/api/remote-jobs","sourceUrls": ["https://remotive.com/api/remote-jobs"],"title": "Senior Data Engineer","company": "Sample Technology Company","location": "Worldwide","salary": null,"salaryMin": null,"salaryMax": null,"employmentType": "full_time","category": "Software Development","tags": ["python", "data"],"publishedAt": "2026-08-20T12:00:00.000Z","description": "<p>Public job description...</p>","applyUrl": "https://remotive.com/remote-jobs/software-dev/senior-data-engineer-2090000","jobUrl": "https://remotive.com/remote-jobs/software-dev/senior-data-engineer-2090000","dedupeKey": "sample technology company|senior data engineer|worldwide","scrapedAt": "2026-08-25T14:00:00.000Z"}
The exact records change as the boards publish and remove jobs.
How deduplication works
When deduplicate is enabled, the Actor normalizes:
- company name;
- job title;
- location or eligibility.
Records with the same normalized combination are merged.
The first record remains the primary record, while sources, sourceJobIds,
and sourceUrls retain all represented attribution.
This conservative key avoids claiming two loosely similar roles are identical. It can leave near-duplicates when boards use materially different titles or location wording.
Disable deduplication if you need one row per source listing.
How much does it cost to collect remote jobs?
The Actor uses pay-per-event pricing:
- one
startevent per run; - one
itemevent per saved dataset row; - no charge for rejected, duplicate, or empty records.
The run-start price is $0.005. Per-item prices decrease by Apify plan:
| Plan | Price per saved job |
|---|---|
| Free | $0.00667 |
| Bronze | $0.0058 |
| Silver | $0.004524 |
| Gold | $0.00348 |
| Platinum | $0.00232 |
| Diamond | $0.001624 |
Example Bronze-plan totals:
| Saved jobs | Estimated Actor charge |
|---|---|
| 10 | $0.063 |
| 50 | $0.295 |
| 100 | $0.585 |
Platform compute is included under Apify's pay-per-event model for this Actor. The final charge is shown before and after each run in Apify Console.
Scheduling remote hiring monitoring
Use an Apify schedule for repeat monitoring:
- save a Task with both sources selected;
- choose filters and a bounded
maxItems; - schedule the Task hourly, daily, or weekly;
- connect a webhook or integration;
- compare
recordId,sourceJobIds, andpublishedAtwith your stored snapshot.
The Actor returns the current public feed. It does not maintain history or send change alerts by itself; your scheduled workflow owns comparison and retention.
Integration ideas
- Append newly observed jobs to Google Sheets.
- Send matching roles to Slack through a webhook.
- Load normalized records into BigQuery or Snowflake.
- Build a remote-hiring company watchlist.
- Feed jobs into a search or recommendation index.
- Track title, location, and salary trends over time.
- Trigger enrichment only for unseen
recordIdvalues.
Use sources and sourceUrls whenever downstream attribution matters.
Run with the Apify API
Replace APIFY_TOKEN with your token.
cURL
curl -X POST \"https://api.apify.com/v2/acts/automation-lab~remote-jobs-multi-board-feed/runs?token=APIFY_TOKEN&waitForFinish=120" \-H "Content-Type: application/json" \-d '{"sources":["remoteok","remotive"],"query":"software engineer","maxItems":10}'
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation-lab/remote-jobs-multi-board-feed').call({sources: ['remoteok', 'remotive'],query: 'software engineer',maxItems: 10,deduplicate: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
Python
from apify_client import ApifyClientclient = ApifyClient("APIFY_TOKEN")run = client.actor("automation-lab/remote-jobs-multi-board-feed").call(run_input={"sources": ["remoteok", "remotive"],"query": "software engineer","maxItems": 10,"deduplicate": True,})items = client.dataset(run["defaultDatasetId"]).list_items().itemsprint(items)
Use with MCP and AI agents
Add the Apify MCP server to Claude Code:
claude mcp add --transport http apify \"https://mcp.apify.com?tools=automation-lab/remote-jobs-multi-board-feed"
Claude Desktop, Cursor, and VS Code MCP JSON
Use this configuration in Claude Desktop, Cursor, or VS Code:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com?tools=automation-lab/remote-jobs-multi-board-feed"}}}
Example prompts:
- “Run Remote Jobs Scraper for software engineer jobs across both boards.”
- “Collect 20 Remote OK jobs and summarize the companies and locations.”
- “Create a deduplicated remote hiring feed and group jobs by source.”
Your MCP client may request Apify authentication before the first run.
Limits and responsible operation
- Each run returns current records exposed by the two public APIs.
maxItemsis limited to 500.- Source APIs can change, rate-limit, or temporarily fail.
- A selected source failure fails the run rather than returning a silent partial feed.
- Transient network, HTTP 429, and temporary server failures are retried three times.
- The Actor uses direct HTTP and does not expose a proxy mode.
- Descriptions can contain HTML supplied by the source.
- Salary formats differ between boards; unavailable numeric bounds remain null.
- Deduplication is exact after conservative text normalization, not semantic matching.
Keep scheduled frequency reasonable and avoid unnecessary repeat runs.
Legal and responsible use
Remote OK and Remotive make these job records publicly accessible, but public access does not remove your responsibilities.
You should:
- follow the source sites' terms and applicable policies;
- respect database, copyright, and employment laws in your jurisdiction;
- retain source attribution and canonical links;
- avoid republishing descriptions beyond your legal rights;
- verify a job on its source page before acting on it;
- avoid automated applications or unsolicited outreach that violates law or policy;
- delete retained records when you no longer have a lawful purpose.
This Actor provides technical access to public data, not legal advice.
Troubleshooting
The run returned no jobs
Remove filters one at a time. A multi-word query requires every word to match,
and publishedAfter excludes jobs without a usable publication date.
A selected board failed
Inspect the run log for the source name and HTTP or response-shape error. Retry later if the public API is temporarily unavailable. Do not add a proxy: this Actor intentionally uses the public API route.
I see fewer than maxItems
maxItems is a ceiling, not a guaranteed count. Filters, source feed size, and
deduplication can all reduce the result.
Salary bounds are null
Remotive generally supplies free-form salary text. Numeric salaryMin and
salaryMax are populated only when the source provides reliable numeric bounds.
Related Automation Lab Actors
- Jobgether Remote Jobs Scraper for Jobgether-specific remote listings.
- Working Nomads Jobs Scraper for Working Nomads categories and listings.
- Remote Rocketship Jobs Scraper for Remote Rocketship-specific data.
These are separate source products. They are not automatically included in this Actor's two-board feed.
FAQ
Does this Actor scrape every remote job board?
No. It supports exactly Remote OK and Remotive.
Does it need an API key for either board?
No. It uses their public JSON endpoints.
Does it use residential proxies or a browser?
No. Direct public API requests are sufficient and cheaper.
Can it find remote jobs near me?
Use location with the geography or eligibility wording you need. Remote jobs
are often listed as Worldwide, a country, or a region rather than a nearby city,
so results depend on how employers describe eligibility.
Can it find no-experience jobs automatically?
You can search query fields for relevant words, but the Actor does not infer
experience requirements from unstructured descriptions. Review the source job
before treating it as entry-level.
Can I monitor new or changed jobs?
Yes: schedule repeated Tasks and compare stable IDs in your own storage. The Actor itself returns the current feed and does not persist historical snapshots.
Can I export CSV or Excel?
Yes. Use the dataset export controls in Apify Console or the dataset API.
Are duplicates guaranteed to be removed?
Exact normalized company/title/location matches are merged. Near-duplicates with different wording can remain so the Actor does not hide distinct roles.