Search remote jobs on LinkedIn, Indeed, Glassdoor, ZipRecruiter, Naukri and Bayt in one sweep
Last updated
A remote job search that covers every major board takes one run of the Datapika job board scraper: set isRemote to true, enter up to 5 search terms, and it sweeps LinkedIn, Indeed, Glassdoor, ZipRecruiter, Naukri and Bayt, then removes cross-posted duplicates so each opening appears once. Every row carries title, company, location, salary range, is_remote flag and a direct apply URL. Indeed and LinkedIn rows land within 5 to 20 seconds. It costs $0.005 per job delivered, and 2,471 people have used it across 27,458 runs with a 5.0 rating.
How do I search remote jobs on every job board at once?
Start with the isRemote switch, which asks each board for remote listings only, and put your role names in searchTerms, up to 5 per run, so titles like backend engineer, platform engineer and site reliability engineer merge into one dataset with a matched_search_term column showing which query found each row. Leave location empty or set it to Remote; giving a city instead, with the default 50 mile distance, returns remote listings the board associates with that area, which helps when an employer hires remotely but only inside one country. Pick boards in sites: linkedin, indeed, glassdoor, zip_recruiter, bayt and naukri run by default. Set maxResults between 1 and 100 per board per term, and add jobType if you only want fulltime or contract work. Because the same posting often appears on LinkedIn, Indeed and Glassdoor together, the run removes duplicates before rows reach the dataset, so a six-board sweep reads like one board with far more listings.
- isRemote: true applies the remote filter on every board that supports it in a single run
- searchTerms accepts up to 5 titles; each row records matched_search_term
- location can be blank, Remote, or a city with the 50 mile default distance for region-bound remote roles
- maxResults ranges from 1 to 100 per board per search term
- jobType narrows to fulltime, parttime, contract, internship or temporary
- Default sites are linkedin, indeed, glassdoor, zip_recruiter, bayt and naukri
Which job boards cover remote roles, and where does each one fall short?
Each board behaves differently for remote searches. LinkedIn is global and accepts isRemote, but it rate-limits at roughly 100 results per IP, so the residential proxy default matters on large runs; enable linkedinFetchDescription when you need full descriptions and direct apply links from it. Indeed is the most dependable source and takes a countryIndeed code (usa by default, with uk, canada, australia, germany, france, india and others), so run it once per country to map where a remote role is actually open. Glassdoor needs the same countryIndeed setting for country targeting. ZipRecruiter only covers the US and Canada. Naukri serves India and returns a work_from_home_type field describing the work-from-home arrangement, plus skills and experience_range. Bayt covers the Middle East but accepts only searchTerm, so isRemote does not apply there and you filter its rows by description afterwards. Google Jobs and BDJobs stay selectable but currently return no results. The full list of boards, including the ones outside this search, is in the catalog at /scrape.
- LinkedIn: global coverage, about 100 results per IP, residential proxy on by default
- Indeed and Glassdoor: set countryIndeed (usa, uk, canada, australia, germany, france, india and more)
- ZipRecruiter: US and Canada listings only
- Naukri: India, with work_from_home_type, skills and experience_range fields
- Bayt: Middle East, searchTerm only, so apply the remote filter on your side
- Google Jobs and BDJobs: selectable but returning no results at the moment
How does deduplication keep one row per remote job?
Remote roles are heavily cross-posted: an employer that hires anywhere tends to publish on LinkedIn, Indeed and Glassdoor at once, and a naive multi-board pull repeats every row. The scraper collapses those duplicates before pushing to the dataset, so you review each opening once, and the site column tells you which board supplied the surviving copy. That is also why a run usually returns fewer rows than maxResults multiplied by boards and terms, and why the theoretical ceiling of 100 results x 6 default boards x 5 terms, 3,000 rows, is rarely reached. Billing follows the deduplicated count, not the ceiling. For your own tracker, key on the id field, which carries the board's job identifier, and drop any id you have already seen; a weekly run then yields only openings that are new to you. Use offset to page past the first results when a single title on one board has more than 100 remote matches.
- Cross-board duplicates are removed automatically; each opening is one row
- site names the board the row came from; id is that board's job identifier
- Ceiling per run: 100 results x 6 default boards x 5 terms = 3,000 rows, with dedup usually returning fewer
- You are billed for delivered rows only, never the theoretical maximum
- Keep a seen-id list in your tracker to dedupe across repeat runs
- offset skips the first N results for pagination
What fields help a job seeker decide whether to apply?
Every row is built to answer the questions you ask before spending an hour on an application. salary_min, salary_max, salary_currency and salary_interval come straight from the board when available, and salary_source tells you whether the figure was board-provided (direct_data) or parsed from the description text. Set enforceAnnualSalary to true and hourly and monthly rates convert to yearly equivalents, so a mixed remote list sorts on one column. company_rating and company_reviews_count let you screen employers, company_num_employees and company_industry show whether you are looking at a 50-person startup or a bank, and job_level on LinkedIn rows flags seniority. job_url_direct is the employer's own application page where the board exposes it, which avoids creating yet another job-board account. The description arrives as Markdown by default, or HTML if you prefer, so keyword checks for US only or EU hours are a regex away, and any emails found in the description are pulled into their own field.
- salary_min, salary_max, salary_currency, salary_interval, plus salary_source for provenance
- enforceAnnualSalary converts hourly and monthly pay to yearly figures
- company_rating, company_reviews_count, company_num_employees, company_industry for employer screening
- job_url_direct points at the employer's apply page when the board exposes it
- description in Markdown or HTML; emails extracted into their own field
- job_level (LinkedIn) and job_function for seniority and role category
How do I turn this into a repeatable job-seeker workflow?
The job-seeker loop is: run, dedupe against what you have seen, review, apply, repeat. On Apify, save the input once and attach a schedule so the sweep runs on the mornings you choose; each run produces a dataset you can download as JSON, CSV or Excel, or read through the API. For a no-code pipeline, the Apify app for Zapier, Make and n8n can append new rows to Google Sheets or Airtable and post a summary to Slack when a run finishes, and a webhook on run completion can trigger any script you already have. Keep maxResults low while you tune search terms, then raise it, and cap the run's total charge in Console so an over-broad query cannot surprise you. If you work with an AI assistant, add the MCP server URL for the actor and ask it in plain language for remote roles matching your profile; it receives the same structured rows. For a strictly recent feed, pair this setup with the hoursOld filter described on the fresh-jobs page.
- Schedule the saved input in Apify Console to run on your chosen mornings
- Export JSON, CSV or Excel, or pull rows through the API
- Zapier, Make and n8n connectors push new rows to Google Sheets, Airtable or Slack
- Webhook on run completion to trigger your own scoring or tracker script
- MCP: https://mcp.apify.com/?tools=fetch-actor-details,openclawai/job-board-scraper
- Cap the run's total charge in Console and start with a small maxResults while tuning
| Field | What it tells you | Decision it drives |
|---|---|---|
| is_remote | The board marked the listing as remote | Keep or drop the row; cross-check location for hybrid or region-locked roles |
| work_from_home_type (Naukri) | Work-from-home arrangement on Naukri listings | Separate remote from office-based roles in India |
| location | City, state or country text on the posting | Skip remote roles restricted to a country you cannot work from |
| salary_min, salary_max, salary_interval | Pay range and pay period as published | Sort every offer on one column after enforceAnnualSalary |
| salary_source | direct_data (board-provided) or description (parsed from text) | Weight board-provided ranges above parsed ones |
| job_type | fulltime, parttime, contract, internship, temporary | Match the engagement type you are looking for |
| date_posted | Date the listing went live | Prioritize newer postings in your review queue |
| company_rating, company_reviews_count | Employer rating and review volume | Screen out employers below your threshold |
| company_num_employees, company_industry | Company size band and sector | Filter to startups, mid-size firms or enterprises |
| job_url_direct | Employer's own application page when the board exposes it | Apply at the source and avoid extra job-board accounts |
| matched_search_term | Which of your up-to-5 queries surfaced the row | Drop title variants that return nothing useful |
| id | The source board's job identifier | Dedupe against previous runs in your tracker |
How to do it
- 1.Open https://apify.com/openclawai/job-board-scraper, enter up to 5 searchTerms for the roles you want, set isRemote to true, and leave location blank or set it to Remote (use a city plus countryIndeed if the role must sit within one country).
- 2.Keep the default boards (linkedin, indeed, glassdoor, zip_recruiter, bayt, naukri), pick a jobType if you need one, turn on enforceAnnualSalary, and start with maxResults at 20 to check the output shape.
- 3.Start the run. Indeed and LinkedIn rows land within 5 to 20 seconds and the browser-fetched boards follow within 1 to 3 minutes; sort the dataset by salary and company_rating to build your shortlist.
- 4.Export as CSV or JSON, or connect Zapier, Make or n8n to append new ids to your tracker, then schedule the run so future sweeps only surface openings you have not seen.
Questions, answered
Does LinkedIn or Indeed have an official API for remote job search?
No self-serve option exists on either. LinkedIn's only jobs API, the Job Posting API, pushes listings onto LinkedIn rather than reading them, is restricted to approved Talent Solutions partners, and its documentation states LinkedIn is currently not accepting new partnerships (Microsoft Learn, updated June 2026). Indeed closed its Publisher Program to new publishers in October 2022 (Job Boardly) and shut the Publisher API in 2023, with remaining partner access granted through sales-led approval (JobsPipe, July 2026). The scraper reads public search pages instead.
Why does Indeed return fewer remote jobs when I add hoursOld?
Indeed's search cannot combine hoursOld with isRemote, jobType or easyApply in one query, so a run that sets both returns fewer Indeed rows than you expect. For a remote sweep that includes Indeed, leave hoursOld empty and filter on date_posted in your own tracker instead. LinkedIn has a similar restriction between hoursOld and easyApply. No such restriction is documented for the other boards.
How many remote jobs can one run return?
maxResults caps at 100 per board per search term and searchTerms at 5, so the six default boards give a ceiling of 3,000 rows, or 4,000 if you also select Google Jobs and BDJobs, which currently return nothing. Deduplication across boards usually brings the actual count well under the ceiling. To go further, paginate with offset or split the run by country, job type or search term.
How much does a remote job search across all boards cost?
Pricing is $0.005 per job delivered, which works out to $5 for 1,000 rows, and you pay only for rows that land in the dataset after deduplication. A run that finds nothing costs only the small Apify start fee. Apify's free plan includes $5 of monthly credit, roughly 1,000 jobs, so a weekly single-term sweep at 20 results across the six default boards fits inside it.
Does the remote filter work on every board?
The scraper passes isRemote to every board except Bayt, which accepts only searchTerm, so Bayt rows arrive unfiltered; check is_remote and the description before applying. Naukri additionally returns work_from_home_type, which describes the work-from-home arrangement on each listing. On any board, some employers tag a role remote but restrict it to one country, so read the location field and scan the description for phrases like US only or EU hours.
Can I get new remote jobs sent to Google Sheets or Slack automatically?
Yes. Schedule the run in Apify Console, then use the Apify app in Zapier, Make or n8n to append each new dataset to Google Sheets or Airtable and post a Slack message when the run finishes. Filter on the id field so the sheet only receives openings you have not seen before. A webhook on run completion works the same way for custom scripts or a personal tracker.
Keep reading
Comparisons
LinkedIn Jobs API alternatives that work (2026)
Scrape guides
Scrape LinkedIn Jobs Without Login, Cookies, or an API
Scrape guides
How to scrape Indeed jobs at scale without an API key
Use cases
Jobs posted in the last 24 hours: filter, verify, schedule
Use cases
Scrape salary data from job postings for market research