Multiple Job Board Scraper — Remote Job Search API avatar

Multiple Job Board Scraper — Remote Job Search API

Pricing

from $5.00 / 1,000 validated job saveds

Go to Apify Store
Multiple Job Board Scraper — Remote Job Search API

Multiple Job Board Scraper — Remote Job Search API

Search public Remote OK, Remotive, and Arbeitnow listings in one normalized, AI-ready dataset for recruiting and job-market research.

Pricing

from $5.00 / 1,000 validated job saveds

Rating

0.0

(0)

Developer

Khadin Akbar

Khadin Akbar

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

3 days ago

Last modified

Share

Multiple Job Board Scraper searches Remote OK, Remotive, and Arbeitnow with one query and returns a single normalized job dataset. Use it to source remote candidates, monitor hiring demand, research companies, compare job markets, or feed current public vacancies into recruiting and analytics workflows without maintaining three separate integrations.

Choose the job boards you want, enter a role or skill query, optionally require a location match, and cap the number of saved results. Every accepted record has the same field names regardless of its source, including the job title, company, location, description, tags, original listing URL, application URL, publication date, and source provenance.

The Actor uses public job-board endpoints and does not require login cookies or user-supplied proxies.

Pricing is $0.005 per validated job saved, plus a $0.001-per-GB start event and Apify platform usage. maxResults caps both the dataset size and per-job event charges.

What job data can you extract?

FieldTypeDescription
jobIdstringStable, source-prefixed identifier used for within-run deduplication.
titlestringJob title published by the source board.
companyNamestring or nullHiring company when the board provides it.
locationstring or nullPublished location or remote-region requirement.
descriptionstring or nullCleaned job description, capped at 10,000 characters; null when disabled or unavailable.
salaryTextstring or nullSalary or compensation text when published by the source.
employmentTypestring or nullEmployment type such as full-time or contract when available.
workArrangementstring or nullNormalized remote-work signal when the source exposes one.
tagsarray of stringsSkills, categories, or source-supplied job tags.
jobUrlURLCanonical public job-listing URL.
applyUrlURL or nullPublic application URL when available.
postedAtstring or nullSource publication date or timestamp.
sourcestringOne of remoteok, remotive, or arbeitnow.
sourceUrlURLPublic endpoint from which the record was obtained.
scrapedAtISO 8601 stringTime the Actor fetched and normalized the record.

Optional values remain null instead of being guessed. The Actor never fabricates a salary, company, date, or application URL.

When should you use Multiple Job Board Scraper?

  • Build a normalized feed of remote and international vacancies.
  • Find companies currently hiring for a role or skill set.
  • Monitor job demand for technologies such as React, Python, or Kubernetes.
  • Create recruiting shortlists and talent-market research datasets.
  • Compare listings across Remote OK, Remotive, and Arbeitnow.
  • Export public jobs to Google Sheets, a database, a CRM, or a data warehouse.
  • Supply structured job records to an AI agent through the Apify API or MCP.

This Actor is not a replacement for a LinkedIn, Indeed, ZipRecruiter, or company ATS scraper. It searches only the three supported public boards. It also does not return applicant profiles, private candidate data, historical listings that are no longer exposed by a source, or guaranteed contact details.

How to use the job board scraper

The quickest workflow is:

  1. Enter a searchQuery, such as react engineer.
  2. Set location to Remote, a location substring such as Germany, or any to disable location filtering.
  3. Keep all three sources selected or choose only the boards you need.
  4. Set maxResults between 1 and 500.
  5. Run the Actor and open the default dataset.

The search uses all whitespace-separated query terms. For example, react engineer requires both react and engineer to appear across the job title, company, description, or tags. Location matching is a case-insensitive substring check against the published location and work-arrangement text.

Input parameters

ParameterTypeDefaultDescription
searchQuerystringsoftware engineerRequired role or skill keywords. Maximum 160 characters.
locationstringRemoteLocation text to require. Use any or an empty string to accept any location.
sourcesstring[]all three boardsAny combination of remoteok, remotive, and arbeitnow. At least one is required.
maxResultsinteger50Global cap on validated, saved, and billable job records. Allowed range: 1–500.
includeDescriptionbooleantrueInclude the cleaned description. Set false for smaller dataset items.

Example input

{
"searchQuery": "data engineer",
"location": "Remote",
"sources": [
"remoteok",
"remotive",
"arbeitnow"
],
"maxResults": 50,
"includeDescription": true
}

For a broad international search, set "location": "any". For a source-specific search, pass only that board, for example "sources": ["remotive"].

Output example

The default dataset contains job records only. Run diagnostics are stored separately in the OUTPUT and RUN_SUMMARY key-value-store records.

{
"jobId": "remoteok:1135025",
"title": "Presentation Designer",
"companyName": "INFUSE",
"location": "Warszawa, Warszawa, Woj. Mazowieckie, Polska",
"description": null,
"salaryText": null,
"employmentType": null,
"workArrangement": "remote",
"tags": [
"design",
"marketing",
"photoshop"
],
"jobUrl": "https://remoteok.com/remote-jobs/remote-presentation-designer-infuse-1135025",
"applyUrl": "https://remoteok.com/remote-jobs/remote-presentation-designer-infuse-1135025",
"postedAt": "2026-07-18T09:56:25+00:00",
"source": "remoteok",
"sourceUrl": "https://remoteok.com/api",
"scrapedAt": "2026-07-19T16:14:43.766Z"
}

The exact fields available depend on what each source publishes. A missing salary or employment type is returned as null, not inferred from the description.

Pricing

This Actor uses Pay per event plus Apify platform usage.

EventPriceWhen it is charged
Actor start$0.001 per GB of Actor memory, minimum one eventWhen a run starts. The current 4 GB default results in four start events, or $0.004.
Validated job saved$0.005 per jobOnly after a normalized job record is validated and persisted to the dataset.
Platform usageVariableApify compute, storage, data transfer, and other platform usage are billed separately.

At the current 4 GB default, approximate event charges are:

  • 1 saved job: $0.009 plus platform usage.
  • 50 saved jobs: $0.254 plus platform usage.
  • 100 saved jobs: $0.504 plus platform usage.
  • 500 saved jobs: $2.504 plus platform usage.

maxResults is both an output cap and a job-event cost cap. You are not charged a job-scraped event for unmatched, invalid, duplicate, or unsaved records. Actual totals can be lower when fewer jobs match.

Run with the Apify API

JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({
token: process.env.APIFY_TOKEN,
});
const run = await client.actor(
'khadinakbar/multiple-job-board-scraper',
).call({
searchQuery: 'data engineer',
location: 'Remote',
sources: ['remoteok', 'remotive', 'arbeitnow'],
maxResults: 50,
includeDescription: false,
});
const { items } = await client
.dataset(run.defaultDatasetId)
.listItems();
console.log(items);

Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor(
"khadinakbar/multiple-job-board-scraper"
).call(run_input={
"searchQuery": "data engineer",
"location": "Remote",
"sources": ["remoteok", "remotive", "arbeitnow"],
"maxResults": 50,
"includeDescription": False,
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items)

Use with an MCP server or AI agent

Add this Actor to an Apify MCP connection:

https://mcp.apify.com?tools=khadinakbar/multiple-job-board-scraper

An MCP-compatible agent can then run the Actor with the same structured input and retrieve its dataset. This is useful for requests such as:

Find up to 25 remote React engineer jobs across Remote OK, Remotive, and Arbeitnow. Return company, location, tags, posting date, and application URL.

Use includeDescription: false when an agent needs compact records. Use maxResults to keep the response and event cost predictable.

Reliability, partial results, and limits

Each selected board is fetched independently. If one source is temporarily unavailable but another produces validated jobs, the Actor keeps the useful records and reports a PARTIAL outcome instead of discarding the dataset.

Every run writes machine-readable diagnostics:

  • OUTPUT contains the final outcome, message, saved-item count, successful sources, and failed sources.
  • RUN_SUMMARY contains source-level received and matched counts, warnings, duplicate counts, invalid-record counts, and charged-event counts.

Possible outcomes are:

  • COMPLETE: matching jobs were saved with no recoverable source failures.
  • PARTIAL: useful jobs were saved, but a board or dataset write produced a recoverable warning.
  • VALID_EMPTY: the selected boards responded successfully, but no jobs matched.
  • INVALID_INPUT: the input failed validation and includes a corrective example.
  • UPSTREAM_FAILED: every selected board failed before producing usable data.
  • CONFIG_ERROR: required billing configuration was unavailable.

The Actor deduplicates jobs within each run by source ID and job URL. Results reflect what the public source endpoints expose at run time; boards can change fields, remove listings, rate-limit requests, or return incomplete optional data. The Actor does not crawl application forms or verify that a vacancy remains open after the source response is received.

Other dedicated job scrapers

Use a dedicated Actor when you need a platform or employer-specific search:

FAQ

How many results can I scrape with Multiple Job Board Scraper?

You can save between 1 and 500 jobs per run. Set maxResults to the maximum you need. The actual count depends on current source inventory and how many listings match every search and location term.

Can I integrate Multiple Job Board Scraper with other apps?

Yes. Use Apify integrations, webhooks, dataset exports, Make, Zapier, Google Sheets, or the API to move results into another system. Each run produces a normalized default dataset that can be exported as JSON, CSV, Excel, XML, or RSS through Apify.

Can I use Multiple Job Board Scraper with the Apify API?

Yes. Call khadinakbar/multiple-job-board-scraper with the JavaScript client, Python client, or REST API, then read the run's default dataset. The examples above show JavaScript and Python.

Can I use Multiple Job Board Scraper through an MCP Server?

Yes. Add the Actor to an Apify MCP connection and let an MCP-compatible AI agent submit the same input schema. Keep maxResults small and disable descriptions when you want a compact response.

Do I need proxies to scrape these job boards?

No user-supplied proxy is required. The Actor reads public job-board endpoints directly. Upstream boards can still rate-limit or change their public interfaces; those failures are reported in OUTPUT and RUN_SUMMARY.

Why did my run return no jobs?

The search requires every whitespace-separated query term to match the title, company, description, or tags, and the location must also match unless it is any. Try a shorter role query, set location to any, select more sources, or inspect RUN_SUMMARY to distinguish a valid empty result from a source failure.

This Actor extracts public job-listing data, but whether and how you may use it depends on the source terms, applicable laws, and your purpose. Do not use the output for unlawful discrimination, spam, privacy violations, or redistribution that infringes third-party rights. You are responsible for reviewing the relevant requirements and handling personal data appropriately.

Your feedback

Found a missing field, unexpected source response, or workflow this README does not cover? Open an issue on the Actor page with a reproducible input and, when possible, the run ID. Do not include API tokens, private candidate data, or other secrets.