How to pull every job posted in the last 24 hours from six boards in one run

Last updated

Set hoursOld to 24 in the Datapika job board scraper and one run returns only postings published within the last day from LinkedIn, Indeed, Glassdoor, ZipRecruiter, Naukri and Bayt, deduplicated across boards and exported as JSON, CSV or Excel. Indeed and LinkedIn rows land in the dataset 5 to 20 seconds after start; browser-fetched boards follow within 1 to 3 minutes. Each job costs $0.005. The actor has 27,458 runs and 2,471 users on Apify with a 5.0 rating, and a daily schedule turns the same input into a standing fresh-jobs feed.

How do I filter for jobs posted in the last 24 hours across every board?

The hoursOld input takes a whole number of hours and is passed to each board's own recency filter, so 24 means the last day and 168 means the last week. Pair it with searchTerm, or up to 5 searchTerms for an OR search where every row carries matched_search_term, then add a location and a distance radius (default 50 miles). The default board list is LinkedIn, Indeed, Glassdoor, ZipRecruiter, Bayt and Naukri; Google Jobs stays selectable but currently returns nothing. maxResults caps each board at 1 to 100 rows per term, default 20, and a single run tops out at 4,000 rows across all 8 boards. Results stream as each board finishes: Indeed and LinkedIn usually within 5 to 20 seconds, Glassdoor, ZipRecruiter, Bayt and Naukri within 1 to 3 minutes because they run through a real browser. A posting that appears on three boards collapses to one row, so counts reflect unique jobs, and every row keeps date_posted, scraped_at, site and a direct apply URL when the board exposes one.

  • hoursOld: any whole number of hours, 24 for a daily sweep, 168 for weekly; the window is sent to every selected board
  • searchTerms: up to 5 queries per run, merged, each row tagged with matched_search_term
  • maxResults: 1 to 100 per board per term, default 20; use offset to page deeper
  • Streaming: Indeed and LinkedIn rows in 5 to 20 seconds, browser-fetched boards in 1 to 3 minutes
  • Dedup: one row per unique job even when it is listed on several boards
  • Export: JSON, CSV, Excel, XML or RSS from the dataset, or through the API

Which filters conflict with a 24-hour window?

Boards do not all accept a recency filter alongside other filters, and the combinations that fail return fewer rows rather than an error. On LinkedIn, hoursOld cannot be paired with easyApply in the same search. On Indeed, hoursOld cannot be combined with jobType, isRemote or easyApply, which is the most common reason a remote-jobs-posted-today run comes back thin. Bayt accepts only searchTerm, so hoursOld is ignored there and its rows need a date_posted check on your side. LinkedIn also rate-limits at roughly 100 results per IP, which is why residential proxy is the default; keep it on for any fresh sweep larger than a test. The practical pattern for a remote-only daily feed is two passes: run the boards with hoursOld set to 24 and no job-type or remote flags, then filter the export on is_remote and job_type, both returned on every row where the board provides them. Glassdoor and Indeed also need countryIndeed set to the market you care about; the default is usa.

  • LinkedIn: hoursOld and easyApply cannot be used in the same search
  • Indeed: hoursOld excludes jobType, isRemote and easyApply in the same search
  • Bayt: only searchTerm is honored, so filter Bayt rows on date_posted yourself
  • LinkedIn: about 100 results per IP; residential proxy stays on by default
  • Workaround: fetch with hoursOld alone, then filter on is_remote and job_type in the export
  • Set countryIndeed (usa, uk, canada, india, uae and others) so Indeed and Glassdoor search the right market

How precise are posting timestamps on each board?

The multi-board scraper writes date_posted as a calendar date, for example 2026-04-01, plus scraped_at as an ISO 8601 UTC timestamp, so recency inside a day is not visible in this dataset. Indeed dates postings the same day, which is why a 24-hour window is driven mostly by Indeed. ZipRecruiter loads new postings once a day in a batch, so the freshest rows it returns tend to be 12 to 48 hours old, and 48 hours is the smallest window that gives reliable two-board coverage. When you need the hour, use the companion Indeed and ZipRecruiter scraper: it reads the exact posted_at from the ZipRecruiter page, filters by that timestamp instead of the board's date filter, accepts hoursOld from 1 to 720 (default 48), and reports reposted_at separately when an employer bumps an old ad, so a refreshed listing never masquerades as new. It bills $0.0005 per record. Keep the multi-board actor for breadth and the two-board actor for hour-level precision and repost detection on the same search terms.

  • job-board-scraper: date_posted is day-level, scraped_at is a full UTC timestamp
  • Indeed: postings dated the same day, the anchor for any 24-hour sweep
  • ZipRecruiter: daily ingest batches, freshest jobs typically 12 to 48 hours old
  • indeed-ziprecruiter-scraper: hour-precise posted_at, hoursOld 1 to 720, default 48
  • reposted_at flags employer bumps so reposts stay out of your new-today list
  • recencyMode last48h or latest10 on the two-board actor when volume matters more than age

How do I schedule a daily fresh-jobs feed?

Save the input once and attach an Apify schedule, for example 07:00 in your timezone, with hoursOld at 24 so consecutive runs tile the calendar with no gap; use 26 if you want a small overlap and dedupe downstream. Deduplication happens per run, across boards, so across days you should key your own store on id plus site and drop rows you have already seen. Attach a webhook to the run-finished event to push new rows into a Slack channel, Google Sheet, Airtable base or CRM through Zapier, Make or n8n, or read the dataset from the API with run-sync-get-dataset-items in a single call. Cost stays predictable because you pay only for rows delivered: cap the run with a maximum total charge in the Apify Console, keep maxResults near 20 while tuning, and remember that the Apify free plan's $5 monthly credit covers roughly 1,000 jobs. Runs default to 4 GB of memory, enough for the browser-fetched boards. For a weekly digest, switch hoursOld to 168 and raise maxResults.

  • Schedule in Apify Console with the saved input; hoursOld 24 tiles days end to end
  • Dedup is per run; across days, key on id and site in your own store
  • Webhook on run finish to Slack, Sheets, Airtable or a CRM via Zapier, Make or n8n
  • run-sync-get-dataset-items returns the rows in one API call
  • Set a max total charge per run; free plan credit covers about 1,000 jobs a month
  • Weekly variant: hoursOld 168 with a higher maxResults

Who runs 24-hour job sweeps and what do they do with the rows?

Job seekers and career coaches run one search every morning and apply from the direct apply URL while a posting is hours old and the applicant count is small. Recruiters watch for new openings at target accounts, using linkedinCompanyIds to restrict LinkedIn to named employers, and treat a burst of postings as a sourcing trigger. Sales teams read the same burst as a buying signal: five new SDR roles at one company is a reason to call, and the competitor-hiring guide covers scoring accounts on posting velocity. Niche job boards and aggregators refill their listings without maintaining six separate scrapers, and AI agents call the actor through the Apify MCP server with prompts such as remote React roles posted in the last 24 hours with salary ranges. Over the last 30 days, 381 users ran the actor on Apify. If you need boards beyond the six defaults, the full catalog at /scrape lists every board Datapika covers.

  • Job seekers: daily search, direct apply URL, first-wave applications
  • Recruiters: linkedinCompanyIds to watch named employers for new openings
  • Sales: posting bursts as buying signals; score accounts on new-role counts
  • Aggregators: refill listings from six boards with one scheduled run
  • AI agents: MCP tool at mcp.apify.com, natural-language prompts over fresh rows
Recency behavior by board in a 24-hour sweep, and what to do about it
BoardhoursOld honored?date_posted precisionDecision for a 24-hour feed
LinkedInYes, but not together with easyApplyDayLeave easyApply off, keep residential proxy on, enable linkedinFetchDescription when you need full text
IndeedYes, but not with jobType, isRemote or easyApplyDay, dated the same day the job goes liveAnchor board for a strict 24-hour window; filter remote and job type after export
GlassdoorYes, no documented restrictionDaySet countryIndeed for the market; allow 1 to 3 minutes for the browser fetch
ZipRecruiterYesDay; new postings ingested in daily batches, typically 12 to 48 hours behindUse a 48-hour window, or the Indeed and ZipRecruiter scraper for hour-precise posted_at
NaukriYes, no documented restrictionDayIndia market; rows add skills, experience_range and vacancy_count for triage
BaytNo, only searchTerm is appliedDayFilter Bayt rows on date_posted after export; Middle East coverage
Google JobsSelectable, currently returns no resultsn/aSweep the source boards directly instead
ZipRecruiter via indeed-ziprecruiter-scraperYes, 1 to 720 hours, filtered by timestampHour-precise posted_at plus reposted_atUse when new-today must exclude employer bumps and reposts

How to do it

  1. 1.Open apify.com/openclawai/job-board-scraper, enter a searchTerm (or up to 5 searchTerms) and a location, and set hoursOld to 24.
  2. 2.Leave the six default boards selected, set countryIndeed for your market, and keep jobType, isRemote and easyApply off so Indeed and LinkedIn honor the window; filter those columns after export.
  3. 3.Run it, read Indeed and LinkedIn rows within 5 to 20 seconds, then export JSON, CSV or Excel or fetch the dataset through the API.
  4. 4.Attach a daily schedule and a webhook in Apify Console, dedupe across days on id and site, and add the Indeed and ZipRecruiter scraper when you need hour-precise posted_at and repost flags.
Run a search

Questions, answered

Is there one search that returns jobs posted in the last 24 hours from every job board?

Run the Datapika job board scraper with hoursOld set to 24 and your search terms. One run sweeps LinkedIn, Indeed, Glassdoor, ZipRecruiter, Naukri and Bayt, merges duplicates into single rows, and streams results as each board finishes. Add up to 5 search terms for an OR search and raise maxResults to 100 per board when you need depth. Bayt ignores the window, so check its date_posted values before counting those rows as new.

Does Indeed have an official API for fresh job postings?

No self-serve one. Indeed's Publisher job search API was retired, and the APIs documented at docs.indeed.com today cover job posting management, candidate handling and employer entities, with access provisioned by Indeed through its Partner Console. Job search is offered only as a hosted JavaScript plugin for publisher sites, not as a data endpoint. ZipRecruiter's API is likewise reserved for partner job boards and publishers that syndicate listings, not for on-demand job queries. The scraper reads the public search pages instead, so no partner agreement is required.

Why does a 24-hour run include jobs older than a day?

Three causes. Bayt honors only searchTerm, so its rows are unfiltered. ZipRecruiter loads postings in a daily batch, so its freshest rows are typically 12 to 48 hours old. And employers bump old ads, which a board's own filter treats as new. Filter Bayt on date_posted, widen ZipRecruiter to 48 hours, and use the Indeed and ZipRecruiter scraper's reposted_at field when bumps must be excluded.

Can I get hour-precise posting times instead of a date?

Not from the multi-board scraper, which returns date_posted as a calendar date and scraped_at as the run timestamp. For hour precision use the companion Indeed and ZipRecruiter scraper: it captures posted_at from the ZipRecruiter page, filters by that timestamp with hoursOld from 1 to 720, marks employer bumps as reposted_at, and accepts up to 10 keywords or a list of company names per run.

How much does a daily 24-hour sweep cost?

You pay $0.005 per job delivered, $5 per 1,000, and a run that returns zero jobs costs nothing beyond the Apify platform's small start fee. A default run of six boards at 20 results each tops out at 120 rows, or $0.60, and most daily sweeps come in below that after deduplication. Put a spending cap on the run with the maximum total charge setting, and note that the Apify free plan includes $5 of monthly credit, about 1,000 jobs.

Why does LinkedIn return fewer fresh jobs than Indeed?

LinkedIn rate-limits at roughly 100 results per IP, so larger sweeps need the residential proxy that is on by default, and it will not combine hoursOld with easyApply. Full descriptions and direct URLs also require linkedinFetchDescription, which adds requests and time. Indeed has no rate limit in the scraper and dates postings the same day, which makes it the higher-volume board for a strict 24-hour window.

Keep reading