Remote Jobs Scraper avatar

Remote Jobs Scraper

Pricing

from $3.48 / 1,000 item extracteds

Go to Apify Store
Remote Jobs Scraper

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

Stas Persiianenko

Maintained by Community

Actor 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?

FieldMeaning
recordIdStable source-qualified record ID
sourcePrimary board: remoteok or remotive
sourcesEvery board attributed to a merged record
sourceJobIdPrimary source's job ID
sourceJobIdsAll source IDs represented by the row
sourceUrlPublic API endpoint for the primary source
sourceUrlsAll represented public source endpoints
titleJob title
companyHiring company
locationCandidate location or eligibility text
salarySource salary text or normalized salary range
salaryMin, salaryMaxNumeric bounds when Remote OK supplies them
employmentTypeEmployment type when available
categorySource category when available
tagsSkills and job tags
publishedAtNormalized ISO publication time
descriptionSource description, which can contain HTML
applyUrlDirect apply link or canonical job link
jobUrlCanonical public listing URL
dedupeKeyNormalized company/title/location key
scrapedAtTime this Actor collected the record

Fields unavailable from a source are returned as null rather than guessed.

How to scrape remote jobs

  1. Open the Actor in Apify Console.
  2. Keep both job boards selected for a unified feed, or choose one source.
  3. Optionally enter keywords such as software engineer.
  4. Optionally add a location or publication-date filter.
  5. Choose the maximum number of jobs.
  6. Keep deduplication enabled for monitoring workflows.
  7. Click Start.
  8. Open the Remote jobs dataset view.
  9. 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

InputTypeDefaultDescription
sourcesstring arrayboth boardsOne or both of remoteok, remotive
querystringemptyAll words must match normalized searchable fields
locationstringemptyCase-insensitive location/eligibility substring
publishedAfterISO date-timeemptyExcludes older and undated jobs
deduplicatebooleantrueMerges matching company/title/location records
maxItemsinteger100Saves 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:

  1. company name;
  2. job title;
  3. 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 start event per run;
  • one item event 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:

PlanPrice 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 jobsEstimated 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:

  1. save a Task with both sources selected;
  2. choose filters and a bounded maxItems;
  3. schedule the Task hourly, daily, or weekly;
  4. connect a webhook or integration;
  5. compare recordId, sourceJobIds, and publishedAt with 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 recordId values.

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 ApifyClient
client = 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().items
print(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.
  • maxItems is 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.

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.

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.