Ats Jobs Feed avatar

Ats Jobs Feed

Pricing

from $0.10 / 1,000 jobs

Go to Apify Store
Ats Jobs Feed

Ats Jobs Feed

Bulk fetch jobs from 57 ATS platforms with cursor-based pagination. Up to 1000 jobs per batch. Perfect for data pipelines, job boards & incremental syncs.

Pricing

from $0.10 / 1,000 jobs

Rating

5.0

(1)

Developer

Enrico

Enrico

Maintained by Community

Actor stats

3

Bookmarked

36

Total users

5

Monthly active users

5 days ago

Last modified

Share

ATS Jobs Feed & Bulk API | Download Millions of Jobs from 57 ATS Platforms

A high-throughput bulk feed across 57 ATS platforms — Greenhouse, Lever, Ashby, Workday, iCIMS, Taleo, SuccessFactors, Workable, BambooHR, and 48 more. Built for ETL pipelines, data warehouses, and full-inventory sync, with up to 1,000 jobs per batch and cursor pagination. Open the actor on Apify, click Try for free, and run with the default input (one small batch).

Run on Apify Service Status


What can ATS Jobs Feed do?

  • Bulk-optimized — up to 1,000 jobs per batch (vs. 100 max for the search actors)
  • Cursor pagination — fast, stable iteration through millions of rows
  • 57 ATS platforms — every major ATS in one feed
  • max_batches driver — pull 1 batch for a smoke test, 100 for a full inventory dump
  • Resumable — pass the previous run's last_cursor to pick up where you left off
  • Incremental syncs — filter with posted_after for cheap nightly deltas
  • Schedule on Apify — run hourly / daily / weekly with built-in monitoring and webhooks

Supported ATS platforms (57)

CategoryPlatforms
Tech-focusedgreenhouse, lever, ashby, workable, polymer, rippling, gem, kula
Enterprise HCMworkday, successfactors, taleo, oraclecloud, csod, dayforce, ultipro, paycom, paycor, paylocity, adpmyjobs, adpworkforcenow, isolved, pageup
SMB / Mid-marketbamboohr, breezy, jazzhr, personio, recruitee, smartrecruiters, freshteam, hibob, jobscore, recooty, zohorecruit, manatal, hireology
AI-nativeeightfold, phenompeople, joincom
Specialty / Othericims, jobvite, applicantpro, careerplug, careerpuck, comeet, dover, gohire, hirebridge, hirehive, hiringthing, homerun, pinpoint, rival, talnet, teamtailor, trakstar, trinet, werecruit

Leave sources empty to pull all 57. Set it to a subset (e.g. ["greenhouse", "lever", "ashby"]) to scope the feed.


How does cursor pagination work?

The feed uses opaque cursors. The first call omits cursor; each response returns next_cursor and has_more — pass next_cursor back to fetch the next batch:

Request → {batch_size: 1000}
Response → {jobs: [...1000 rows], next_cursor: "abc123...", has_more: true}
Request → {batch_size: 1000, cursor: "abc123..."}
Response → {jobs: [...300 rows], next_cursor: null, has_more: false}

The actor loops max_batches times automatically and stops early when has_more is false. The final cursor is written to the FEED_METADATA key in the run's key-value store for resumable runs.


Input

Configure the actor on the Input tab in the Apify UI.

Batching & pagination

max_batches × batch_size is your spend ceiling — e.g. 100 × 1000 pulls up to 100,000 rows. Start small.

ParameterTypeDefaultDescription
batch_sizeInteger500Jobs per batch. Min 1, max 1000.
max_batchesInteger1How many batches to pull this run. Min 1, max 100.
cursorString-Opaque cursor from a previous response. Omit for the first request.

Filters

ParameterTypeDescription
locationsArrayStructured filters; each entry is {country, region?, city?}. Jobs match ANY entry.
sourcesArrayATS source ids (e.g. ["greenhouse", "lever"]). Leave empty for all 57.
work_modelsArrayremote, hybrid, onsite. Leave empty for all.
posted_afterStringISO 8601 or relative (7 days ago, 1 month). Use for incremental syncs.
"locations": [
{ "country": "United States" },
{ "country": "Germany", "region": "Bavaria" },
{ "country": "United Kingdom", "city": "London" }
]

Company enrichment

ParameterTypeDefaultDescription
include_company_detailsBooleanfalseOff by default for bulk feeds. Enable to attach the full company profile (deduped per company across the run). Slower and uses more API calls.

Output

The feed returns the same normalized job shape as ATS Jobs Search. The source field tells you which of the 57 ATSes the row came from. The full JSON Schema is on the Dataset Schema tab in the Apify UI.

Each call also writes a FEED_METADATA value to the key-value store with total_jobs, batches_processed, last_cursor (for resume), and has_more.

The Output tab offers two views: Job Listings (jobs with a lightweight company preview) and Company details (the full company profile, populated when include_company_details is enabled).

Job fields

NameDescriptionType
idStable Jobo job identifieruuid
titleRaw job titletext
normalized_titleCanonical title for grouping across ATSestext
descriptionFull job description, HTML strippedtext
summary2–3 sentence AI role recaptext
listing_urlCanonical listing URL on the source ATSuri
apply_urlDirect apply URLuri
locationsArray of {location, city, region, country, latitude, longitude} (geocoded when possible)object[]
compensation{min, max, currency, period}object
employment_typefull_time / part_time / contract / internship / freelance / temporarytext
workplace_typeremote / hybrid / onsitetext
experience_levelentry / mid / senior / lead / executivetext
qualificationsmust_have / preferred, each with typed skills ({name, type: hard|soft}), education, certificationsobject
responsibilitiesBullet list extracted from the descriptiontext[]
benefitsBullet list extracted from the descriptiontext[]
is_work_auth_requiredWork authorization requiredbool
is_h1b_sponsorEmployer sponsors H1Bbool
is_clearance_requiredSecurity clearance requiredbool
sourceATS platform the job came fromtext
date_postedWhen the role was postedtimestamp
valid_throughExpiry timestamp (null in most cases)timestamp
created_atWhen Jobo first indexed the jobtimestamp
updated_atLast time Jobo refreshed the jobtimestamp

Company fields

company is always present. With include_company_details: true it is the full enriched profile; with it off (the default for bulk feeds), only the preview fields below are returned. When enabled, companies are deduped across the whole run so each unique company is fetched once.

Preview (always present)

NameDescriptionType
idStable Jobo company identifier — use as your primary keyuuid
nameTrade nametext
websiteCompany marketing websitetext
logo_urlHosted logo URLtext
summaryShort company blurbtext
industriesVertical industry labelstext[]
details_urlLink to GET /api/companies/{id} for the full profileuri

Enriched (when include_company_details is on)

NameDescriptionType
legal_nameRegistered legal entity nametext
primary_industryMain industry labeltext
company_sizeHeadcount band, e.g. 1001-5000text
revenueAnnual revenue bandtext
founding_yearYear foundedtext
headquarters_locationHQ city / regiontext
country_codeHQ country codetext
operating_statusactive / closedtext
ipo_statusprivate / ipo / delistedtext
company_typefor_profit / non_profittext
stock_symbolTicker symboltext
stock_exchangeListing exchangetext
funding_stageLatest funding stagetext
total_fundingTotal funding raisedtext
investorsInvestor namestext[]
funding_roundsPer-round detail (investment_type, announced_on, raised_amount, …)object[]
foundersFounder namestext[]
leadership{name, title, linkedin_url, avatar_url}object[]
ratings{source, rating, url, review_count} (Glassdoor, etc.)object[]
press_references{url, posted_on, title, publisher}object[]
h1b_annual_job_counts{year, count} H1B historyobject[]
technology_listDetected technologiestext[]
tech_stack{name, categories}object[]
page_rankDomain authority scorenumber
leadership_displayDisplay tag — "Name — Title"text[]
ratings_displayDisplay tag — "Glassdoor 4.3 (2.1k)"text[]
funding_displayDisplay tag — "Series F · $15.4B"text[]

The complete company schema (every field) is on the Dataset Schema tab and at docs.jobo.world/api-reference/companies/schema.


Quick-start examples

Smoke test — one small batch

{
"batch_size": 10,
"max_batches": 1
}

Daily incremental sync — last 24 hours, US only

{
"batch_size": 1000,
"max_batches": 100,
"locations": [{ "country": "United States" }],
"posted_after": "1 day ago"
}

Full-inventory pull — Greenhouse + Lever + Ashby

{
"batch_size": 1000,
"max_batches": 100,
"sources": ["greenhouse", "lever", "ashby"]
}

Resume from a previous run — read last_cursor from the previous run's FEED_METADATA, then:

{
"batch_size": 1000,
"max_batches": 100,
"cursor": "eyJsYXN0X2lkIjoiZTIwM2YxZjAtMzMyOC0..."
}

Tips & advanced options

  • Use posted_after for incremental syncs. A daily cron with posted_after: "1 day ago" is far cheaper than re-paginating the full feed.
  • max_batches × batch_size = your spend ceiling. A run with max_batches: 100, batch_size: 1000 can pull up to 100,000 rows. Start small.
  • Cursors are opaque. Don't construct or modify them — they encode internal pagination state. Pass them back as-is.
  • Cursors can expire. A cursor older than a few days may return 400 Invalid cursor. Omit the cursor to restart from the beginning.
  • has_more=false means you're done. The actor stops automatically when the feed reports no more pages.
  • industries empty for some companies. Coverage is heaviest for large employers; long-tail SMBs may not be fully enriched yet.
  • 503 means retry. A 503 Feed temporarily unavailable is a transient circuit-breaker trip — wait the Retry-After seconds and retry the same cursor. Check jobo.world/status.
  • Search vs. Feed. For filtered, paginated user-facing queries use ATS Jobs Search. For bulk download / sync, use this actor.

Use cases

IndustryUse case
Data PlatformsSync millions of jobs into your warehouse for analytics
Job BoardsPower your full job index with cross-ATS coverage
Search InfraBuild a custom job search engine on top of Jobo data
HR TechRun market-intel pipelines with bulk daily syncs
AI TrainingBuild job-data training sets for LLM fine-tunes / embeddings
Competitive IntelTrack hiring velocity across companies and sectors

Our scrapers are ethical and do not extract any private user data, such as email addresses, gender, or location. They only extract what the user has chosen to share publicly. We therefore believe that our scrapers, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you're unsure whether your reason is legitimate, consult your lawyers.


FAQ

ATS Jobs Search — filtered, paginated queries (page up to 20, page_size up to 100). Use it for job-board UIs, AI agents, and interactive lookups. ATS Jobs Feed (this actor) — bulk download with cursor pagination, up to 1,000 jobs per batch. Use it for data warehouses, full-inventory sync, and ETL pipelines.

How many ATS platforms are supported?

57 — Greenhouse, Lever, Ashby, Workday, iCIMS, Taleo, SuccessFactors, Workable, BambooHR, Personio, SmartRecruiters, ADP, Oracle Cloud, and many more. See the full list above.

How do I do incremental syncs?

Combine posted_after with a daily/hourly schedule. A typical setup is posted_after: "1 day ago" running every 24h.

How do I resume a long-running sync?

Save FEED_METADATA.last_cursor from each run and pass it as cursor in the next run to pick up where you left off.

Are duplicates de-duped?

Yes — Jobo Connect de-duplicates by (company + canonical title + listing URL) before serving from the feed.

What's the maximum throughput?

batch_size: 1000 × max_batches: 100 = up to 100,000 jobs in one Apify run. For larger pulls, schedule multiple runs and resume with cursor.

Where can I check if the Jobo API is up?

At jobo.world/status — check there first if runs return 503 or hang.


ActorBest for
ATS Jobs SearchFiltered, paginated queries across all 57 ATSes
AI Deep Job SearchAI-powered relevance scoring
Workable Jobs ScraperSingle-ATS workflows for Workable
Greenhouse Jobs ScraperSingle-ATS workflows for Greenhouse
Workday Jobs ScraperSingle-ATS workflows for Workday
Crunchbase Company LookupPair with company.details_url for funding / leadership data

Changelog

2.2

  • Job description in the listing view. The full description field now appears directly in the Job Listings view.
  • Company enrichment is opt-in. include_company_details now defaults to off — the listing view carries a lightweight company preview, and the Company details view holds the full profile when enabled.

2.1

  • Company enrichment (opt-in). Enable include_company_details to replace the company preview with the full company profile — funding, leadership, ratings, tech stack, H1B, and more. Off by default for bulk feeds; companies are deduplicated across the whole run.
  • New "Company details" output view and company tags in the overview.

2.0

  • Expanded from 13 to 57 ATS platforms, calling Jobo Connect directly (POST /api/jobs/feed).
  • Same enriched job shape as the search actors: typed qualifications, responsibilities[], benefits[], summary, normalized_title, and geocoded locations[].
  • Added the work_models filter (remote / hybrid / onsite) and work-authorization signals (is_work_auth_required, is_h1b_sponsor, is_clearance_required).
  • Cursor pagination, batch_size, max_batches, locations, sources, and posted_after are unchanged from v1.x.

About Jobo

Jobo provides comprehensive job data infrastructure for developers and businesses. Our ATS Jobs Database powers job boards, AI agents, and HR tech platforms worldwide.