Search ten job boards with one API call: job scraper bundles, explained
See how job scraper bundles combine LinkedIn, Hacker News, RemoteOK, EURAXESS, and more into one deduplicated jobs dataset.
A serious job hunt turns into the same ritual: a browser window with ten pinned tabs. LinkedIn. RemoteOK. Hacker News "Who is hiring". A couple of niche boards for your field. Each has its own search syntax, its own idea of what "remote" means and its own way of hiding the posting date.
You check them all on Monday. By Thursday you are checking three. A month later it is just LinkedIn, which is where every other applicant is looking too. The boards you stopped opening are not the ones where jobs stopped appearing. They are the ones where you stopped appearing.
The fix: one endpoint for stored postings
We publish bundle Actors on the Apify Store that bring several job sources into one dataset. The Web Developer bundle reads stored postings with complete original descriptions. It applies your search filters before counting the results, so you can ask for React jobs across the bundle without running a separate search on each board.
One HTTP call returns a flat JSON list:
curl -X POST \
"https://api.apify.com/v2/acts/nomad-agent~web-dev-bundle/run-sync-get-dataset-items?build=latest" \
-H "Authorization: Bearer <YOUR_APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"schemaVersion": "nomad-agent-simple-inventory-search-v2", "queries": ["react"], "maxItemsPerSource": 20}'
A posting matches when its title or description contains every word in a query. Multiple queries are alternatives. The bundle returns source facts, without AI ranking or translation. This illustrative row shows the v3 output shape; a real row carries the employer's full description:
{
"schemaVersion": "nomad-agent-job-row-v3",
"source": "remote_boards",
"id": "weworkremotely:senior-react-developer",
"url": "https://weworkremotely.com/remote-jobs/acme-senior-react-developer",
"title": "Senior React Developer",
"company": "Acme Software",
"locations": ["Europe"],
"postedAt": "2026-09-27",
"deadline": null,
"description": "Acme Software is hiring a Senior React Developer to build and maintain its web application. This full-time role is remote within Europe.",
"descriptionHtml": "<p>Acme Software is hiring a Senior React Developer to build and maintain its web application. This full-time role is remote within Europe.</p>",
"workType": "remote",
"salary": null,
"employmentTypes": ["Full-time"],
"hiringContacts": []
}
Each row keeps its source and posting ID. Optional unknown facts are null; an empty locations array means no usable location was parsed, and an empty hiringContacts array means no named contact was found.
The latest builds since 18 October 2026 return nomad-agent-job-row-v4 rows. They have the same fields plus applicantLocations, where an applicant may live as the source states it (null when the source states nothing, [] when it states no restriction).
Plan for a null salary. On 18 October 2026, Oink's own store of postings had a parsed salary amount for 52.4% of InfoJobs postings and 18.4% of Tecnoempleo postings. A missing amount can mean the employer gave none or the collector did not parse one, so treat it as unknown and keep the source next to any pay statistic you compute.
Pick your bundle
Four starting points cover different kinds of search:
- Web Developer Jobs — 10 source integrations spanning 12 named sites.LinkedIn, RemoteOK, Remotive, WeWorkRemotely, Built In, JustJoin.it, NoFluffJobs, Hacker News Who-is-Hiring, Y Combinator, Welcome to the Jungle, InfoJobs and Tecnoempleo. The three remote sites share one
remote_boardsintegration; the other sites each have their own source key. - AI & ML Engineer Jobs — 8 source integrations spanning 10 named sites.Everything above that matters for ML plus Foorilla (formerly aijobs.net), the field's dedicated board. For LLM, ML or data roles it covers both the startup boards (HN, YC) and the specialist ones.
- Research & Academic Jobs — academic, policy and NGO coverage.Its source set is release-dependent, so use the linked Store Input tab rather than copying a source list from this overview.
- Company Careers — stored company postings.Search collected jobs from Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Workday through one endpoint. Check its Input tab for the current filters.
Foorilla, LinkedIn, Hacker News, Y Combinator, Built In, the remote boards and more in one run and one merged dataset, with no repeats across runs. Pay per result on the Apify Store.
The knobs that matter
Bundles are pay-per-result, so the controls are mostly about cost and freshness:
queriesFilters title and description before the result limit.["react developer", "frontend engineer"]matches either phrase's words.locations,locationTypes,employmentTypesNarrow by geography, work arrangement and employment type. A posting with an unknown arrangement or type is excluded when that filter is set.maxItemsPerSourceandmaxItemsThe first caps what each of the Web Developer bundle's ten source integrations contributes; the second caps the merged result, newest postings first.postedWithinSets the age window, such as7d, oranyfor no date filter.dedupeSuppresses repeat deliveries to the same Apify account and search. Setdedupe.enabledtofalsefor a stateless snapshot, or give each alert a separatededupe.key.
How much a locationTypes filter removes depends on the board. In Oink's own store of postings on 18 October 2026, 84.7% of InfoJobs postings and 55.7% of Tecnoempleo postings stated a work arrangement. Of those that did, 1.8% on InfoJobs and 29.1% on Tecnoempleo were remote. Set it to ["remote"] and it keeps the remote ones. It also drops every posting that never says where the work happens. The shares cover every posting Oink stores from those two boards, so a narrow search such as react can differ. Run it once without the filter to see what it takes out.
For scheduled alerts, choose a repeat-delivery policy that fits your consumer. If one run serves several people, a stateless snapshot lets you track each person's delivery history separately.
These controls describe the simple Web Developer bundle. Other bundles may retain different contracts and optional features; check the linked Store Input and Output tabs before sharing a workflow between them.
When a bundle beats a single scraper
A single-board scraper is the right tool when one board is your market. LinkedIn alone is often enough for a first automation. Reach for a bundle when:
- Your field is scatteredResearch and NGO jobs are the extreme case, with many specialist sources and none dominant. Web-dev remote roles are nearly as fragmented.
- You want fewer moving partsOne scheduled run, one dataset, one place to break instead of ten scrapers to babysit.
- You need stable posting identitiesThe
(source, id)pair lets your consumer track a posting across runs. It does not prove that differently identified listings are different jobs.
How often does the same job turn up on two boards? By exact match, rarely. In the 30 days to 18 October 2026, Oink's bot first saw 24,390 distinct title and employer pairs, and 0.53% of them appeared on more than one board. No posting URL appeared on two sources. The match is exact, so a cross-post with an edited title is missed, and Oink's mix of boards differs from any one bundle's. Across those boards, most pairs appeared on only one board, so a merge step will find few exact duplicates to drop.
Within a given bundle, every source follows that bundle's output contract. Switching from a single scraper or another bundle is still an integration change: compare the deployed schemas before reusing a consumer.
The part after the scraping
A merged feed solves coverage. It does not solve attention: if a feed brings 150 fresh postings a day, that is still 150 things to read. The next layer is scoring, deciding which postings deserve your evening based on your actual experience and constraints. That layer is why I built Oink.
Describe the role you want and add a resume where required or useful. Oink searches the public sources available to your run, ranks viable postings 0–5, and delivers explained matches by email or in Telegram.
Ten tabs, one call
Spend the saved hour on the application that matters.
