Aurelix

Tools › Jobs

Multi Job Board Scraper

Search LinkedIn, about 50 company career sites, Remote OK and We Work Remotely at once, duplicates merged and charged once, for $1.50 per 1,000 jobs, no login.

For job boards, recruiters and newsletters. One input (keywords, country, city, remote, date posted) runs on every source, and every job comes back in one schema with ISO dates and numeric pay.

$1.50 per 1,000 jobs ($0.90 on paid Apify plans)

At a glance

What the Multi Job Board Scraper does

Search by
Keywords + country, optional city
Sources
LinkedIn, ~50 bundled company career sites plus your own, Remote OK, We Work Remotely
Filters
Remote only, date posted, sources, max jobs per source, new jobs only
Output
30 fields per job; JSON, CSV, Excel, API
Automate
Schedules, webhooks, Zapier, Make, n8n, Google Sheets, MCP for AI agents

Who it is for

  • Job seekers and career coaches running one daily search instead of three
  • Job boards and newsletters backfilling deduplicated postings with the new-jobs-only mode
  • Recruiters comparing a role's pay and posting date across LinkedIn and the employer's own site
  • Market researchers counting hiring demand without double-counting cross-posted jobs

Output

What you get

  • source, sources and also_listed_on (source, id, link)
  • Title, company, location, city, region, ISO country
  • Remote/hybrid/on-site, job types, seniority (LinkedIn)
  • Pay minimum, maximum, currency, period, or pay text where published
  • Posted date where the source gives one
  • Job link, employer apply link where known, description text and HTML

Example

Input and output

Input

{
  "keywords": [
    "data engineer"
  ],
  "country": "CA",
  "location": "Toronto, ON",
  "datePosted": "pastWeek",
  "sources": [
    "linkedin",
    "careersites",
    "remoteboards"
  ],
  "companies": [
    "greenhouse:stripe"
  ],
  "maxResultsPerSource": 50
}

One output record

{
  "job_id": "careersite:lever:pointclickcare:6ec25484-b204-48a6-ab91-7b0b1625aa02",
  "source": "careersite",
  "source_job_id": "lever:pointclickcare:6ec25484-b204-48a6-ab91-7b0b1625aa02",
  "title": "Intermediate Software Engineer",
  "company": "PointClickCare",
  "company_url": "https://www.linkedin.com/company/pointclickcare",
  "location": "Mississauga/Toronto/Kitchener/Waterloo/Cambridge",
  "city": "Mississauga",
  "region": "ON",
  "country": "CA",
  "workplace_type": "hybrid",
  "job_types": [
    "fullTime"
  ],
  "seniority": null,
  "salary_min": 102600,
  "salary_max": 128300,
  "salary_currency": "CAD",
  "salary_interval": "year",
  "salary_text": "At PointClickCare, base salary is one of the many components that make up our total rewards package. The CAD base salary range for this position is $102,600…",
  "posted_at": "2026-10-21T20:57:35Z",
  "posted_date": "2026-10-21",
  "job_url": "https://jobs.lever.co/pointclickcare/6ec25484-b204-48a6-ab91-7b0b1625aa02",
  "apply_url": "https://jobs.lever.co/pointclickcare/6ec25484-b204-48a6-ab91-7b0b1625aa02/apply",
  "description_text": null,
  "search_keyword": "intermediate software engineer",
  "sources": [
    "careersite",
    "linkedin"
  ],
  "also_listed_on": [
    {
      "source": "linkedin",
      "job_id": "linkedin:4481154739",
      "job_url": "https://www.linkedin.com/jobs/view/4481154739/"
    }
  ],
  "dedupe_key": "pointclickcare|intermediate software engineer|mississauga toronto kitchener waterloo cambridge",
  "source_url": "https://jobs.lever.co/pointclickcare/6ec25484-b204-48a6-ab91-7b0b1625aa02",
  "scraped_at": "2026-11-04T06:18:09Z"
}

From a real run of this tool; long text and lists shortened here.

How to use it

Three steps

  1. Type job keywords (e.g. 'data engineer') and pick a country; optionally a city.
  2. Pick the sources (LinkedIn, career sites and remote boards by default), remote-only, date posted and how many jobs to take from each source; optionally add company job boards.
  3. Click Start, then download one deduplicated list as JSON, CSV or Excel, or schedule it as a daily feed to Google Sheets, Zapier, Make or n8n.

API

Call it from Python

from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("aurelix/multi-job-board-scraper").call(run_input={'keywords': ['data engineer'],
 'country': 'CA',
 'location': 'Toronto, ON',
 'datePosted': 'pastWeek',
 'sources': ['linkedin', 'careersites', 'remoteboards'],
 'companies': ['greenhouse:stripe'],
 'maxResultsPerSource': 50})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

pip install apify-client. The same input works from the Apify console, a schedule, Make, n8n, Zapier or an AI agent through the Apify MCP server.

Pricing

Pay per result

Per 1,000 jobs, free plan$1.50
Per 1,000 jobs, paid plans$0.90
Start fee per run$0.001

Live prices from the Apify Store; no subscription and no platform usage billed on top. See the Store page.

Honest limits

What it does not do

  • LinkedIn caps results per search at about 1,000; split broad searches.
  • Career sites cover only the bundled employers plus the boards you add, not every company in the country.
  • Career-site and remote-board jobs are matched by keyword in the title (and company, for remote boards), not by full-text relevance.
  • Dedupe is by company, title and overlapping location: two genuinely different openings with the same title in a shared city are merged. Rows are saved in batches during long runs (after the first minute); a duplicate found after its first copy was saved is dropped, but is not added to that row's 'also_listed_on'.
  • LinkedIn shows a posted date without a time; posted_at is null for LinkedIn rows.
  • Pay and remote flags are only as complete as each source publishes them.
  • Sources can change their pages; the daily health run catches breakage within 24 hours.

FAQ

Questions buyers ask

How much does the Multi Job Board Scraper cost?

$1.50 per 1,000 jobs ($0.90 on paid Apify plans), billed through your Apify account; you pay only for results. Apify's free plan includes $5 of credit a month, enough for about 3,333 jobs.

How are duplicates matched?

By normalised company name (legal suffixes like Inc. or Ltd removed), job title and an overlapping location: any shared city (a career site's 'Mississauga/Toronto' matches LinkedIn's 'Mississauga'), both remote, or one side without a location. Jobs are sorted newest posting first before merging, so the copy with the latest posting time keeps the row (a career-site copy with a full timestamp usually wins over a LinkedIn copy from the same day); in a long run, a copy saved in an earlier batch keeps it. The others are listed in 'also_listed_on', and their pay, apply link or description fill any gaps.

Which career sites are searched?

About 50 bundled public job boards on Greenhouse, Lever, Ashby and SmartRecruiters (Canadian employers such as Geotab, Wealthsimple and Cohere, plus global employers such as Stripe and GitLab), plus any you add in 'Extra companies'. By default 25 of them are searched per run, home-country employers first; set 'Max bundled company boards' to 0 for all, or the bundled list to 'canada' or 'none' to narrow it.

Do I need accounts on these sites?

No. Everything is read logged-out: LinkedIn's public job search, the employers' public job-board APIs, and the remote boards' public feeds.

What happens if a source is rate-limited?

The other sources still run. Jobs already found are kept and charged; the run ends with a 'Partial' status naming the source that stopped. Retry later for the rest.

Is this legal?

It reads only public data any logged-out visitor can see: job postings on LinkedIn, the Greenhouse, Lever, Ashby and SmartRecruiters job-board APIs, Remote OK's API and We Work Remotely's RSS feed. It goes at a polite pace, never logs in and never solves CAPTCHAs. It returns job posting fields (title, company, location, pay, dates, description, link); no member or candidate profiles; descriptions can name a recruiter or hiring contact (business contact information, B2B use only, see Lawful use). To have a record removed, open an issue on this Actor's Issues tab; if a source formally asks us to stop, this Actor will stop. You are responsible for using the data lawfully, incl. anti-spam and privacy laws; this is not legal advice.

Why not Indeed, Glassdoor or ZipRecruiter?

Indeed is not included. Glassdoor and ZipRecruiter block shared datacenter addresses, so they are not included either.

Can I use it from an AI assistant?

Yes. Give 'keywords' and a 'country'. It works through Apify's MCP server and API.

What am I charged when nothing matches, or only part of the search works?

A run that finds nothing pays only its start fee. Jobs are charged one by one as they are saved, so a run where one source is rate-limited still pays only for the jobs the other sources delivered. Duplicates merged into another row, jobs dropped by your filters and, in new-jobs mode, jobs already returned are never charged.

How many jobs can one run return?

Up to 'Max jobs per source' from each of the three sources (LinkedIn, career sites, and the two remote boards together), at most 500 each, so at most 1,500 rows. The limit counts rows after dedupe, newest first. LinkedIn also stops at about 1,000 results per search; the Actor runs one LinkedIn search per keyword.

How long does a run take?

In our tests a search with no matches took 8 s, 171 jobs from LinkedIn and career sites took 36 s with descriptions off, and 18 jobs from all sources took 30 s. Full descriptions need one extra LinkedIn request per job, so turn 'Include full description' off when you only need the list. Searching the whole bundled list (Max bundled company boards = 0) is slower than the default 25.

How does 'Only new jobs since last run' work?

The Actor remembers each job by its company, title and first city (or 'remote'), the 'dedupe_key' field, so a job reposted on another source is not new. The memory is shared by runs with the same keywords, country, city, remote, date, sources and company settings, or by every run with the same 'Incremental state name'. Changing 'Max jobs per source' or descriptions keeps the memory. A job is forgotten 60 days after it was last seen.

Which countries can I search?

The 30 countries in the Country list, including the US, Canada, the UK, most of Western Europe, India, Singapore, Japan, Australia and Brazil. LinkedIn searches that country (or the city you give). Career-site jobs are kept when their location is in that country; remote-board jobs when they are open to that country or worldwide.

What do 'source', 'sources' and 'also_listed_on' mean?

'source' is where the saved row came from: linkedin, careersite, remoteok or weworkremotely. 'sources' lists every source the same job was found on, and 'also_listed_on' gives the other copies' source, job_id and job_url. 'search_keyword' is the keyword that matched, and 'job_id' is the source plus that source's own ID.

Why do I get only a few career-site jobs?

Career-site jobs are matched by keyword in the title, so 'data engineer' does not find 'Data Platform Engineer'. Only the bundled employers (25 per run by default, 10 in the prefilled input) and the boards you add are searched, and a job must be in the chosen country and mention your city unless it is remote. Add more keywords, raise 'Max bundled company boards', or add employers in 'Extra companies'.

Which proxy does it need?

Only the LinkedIn search uses a proxy, and Apify's datacenter proxy (the default) works; it is included in the price. Career sites and the remote boards are public APIs and feeds and are read without a proxy.

How do I export jobs to Google Sheets?

Download the run's results as CSV or Excel and open them in Google Sheets, or add Apify's Google Sheets integration to the run or a schedule so every run's results land in a sheet.

Guides

Tutorials using this tool

Related

Related tools

Try the Multi Job Board Scraper

Open it on the Apify Store, paste the example input above and click Start. Results download as CSV, Excel or JSON.