Job Postings Database — All ATS, Live Verified avatar

Job Postings Database — All ATS, Live Verified

Pricing

from $2.00 / 1,000 job postings

Go to Apify Store
Job Postings Database — All ATS, Live Verified

Job Postings Database — All ATS, Live Verified

Search live jobs from tens of thousands of company career sites across 7 ATS platforms (Greenhouse, Lever, Ashby, SmartRecruiters, Teamtailor, Personio, BambooHR) in one query. Filter by title, company, location, remote and posted date. Every role is re-checked at the source before delivery.

Pricing

from $2.00 / 1,000 job postings

Rating

0.0

(0)

Developer

Berkan Kaplan

Berkan Kaplan

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

8 hours ago

Last modified

Share

Job Postings Database — All ATS, Live Verified 🚀

🔍 What is the Job Postings Database — and when should you use it?

Most job data on the market is either a scrape of one aggregator or a snapshot of a database that was fresh yesterday. This actor searches company career sites directly — the boards employers publish themselves on seven applicant tracking systems — and then re-reads the source before it hands you a row. A role that was filled this morning is not in your output.

Use it when you need live hiring data you can act on:

  • a job board or feed that must not show dead links
  • a sales or recruiting signal ("this company is hiring three DevOps engineers")
  • market research on titles, locations, remote share and departments

Not the right tool if you want aggregator listings (Indeed, LinkedIn) rather than the employer's own posting, or if you need a platform outside the seven below.

🤖 Use with AI agents

The actor is agent-friendly in three ways:

  • One query, no company ids. An agent asks for titles: ["backend engineer"], locations: ["Berlin"], postedAfter: 7 and gets roles across every platform. It never has to know which ATS a company uses or what its board token is.
  • Honest empty results. When nothing matches, the run returns a status row that names the filters that emptied it and charges nothing, so an agent can retry with a wider query instead of guessing why it got zero rows.
  • x402 / pay-per-event. You pay per delivered role, so an agent loop costs what it uses.
{
"titles": ["devops", "site reliability"],
"locations": ["Germany", "remote"],
"remote": "only",
"postedAfter": 14,
"maxResults": 100
}

📋 Overview

PlatformsGreenhouse, Lever, Ashby, SmartRecruiters, Teamtailor, Personio, BambooHR
Company boards indexed32,997 indexed, 20,380 currently carrying open roles (greenhouse 7,597 · bamboohr 8,833 · lever 5,235 · ashby 4,140 · personio 3,818 · smartrecruiters 1,783 · teamtailor 1,591)
Roles in the index445,722 (measured on the full refresh of 2026-10-20: greenhouse 185,617 · lever 70,317 · ashby 59,405 · smartrecruiters 49,921 · bamboohr 42,023 · personio 22,373 · teamtailor 16,066)
Index freshnessrebuilt daily (a full refresh takes ~14 minutes); every delivered row carries indexedAt and a live check
Verificationeach matched role's board is re-read at query time
Keys needednone — all seven sources are public employer boards

✨ Features

  • Cross-ATS search in one query. Title (any/all words, phrases), company, location, department, remote, posted-date window, platform.
  • Live verification. Closed roles are dropped before delivery and never charged. One board read verifies every matched role of that company, so verification is cheap.
  • Full descriptions. Delivered as text, not markup.
  • Freshest first. Results are sorted newest-first, so a cap keeps the newest roles.
  • Per-company cap. One employer with 392 open roles cannot fill your whole run.
  • Carried-over roles are flagged, not hidden. If a board could not be read during the last index refresh, its roles stay searchable and arrive with verified/stale set, so a network hiccup never looks like a hiring freeze.
  • No silent empty runs. An empty result says which filter emptied it.

🎬 Quick Start

{
"titles": ["backend engineer", "devops"],
"locations": ["Berlin"],
"maxResults": 200
}

Returns the newest matching open roles across all seven platforms, each verified live, with company, location, department, remote flag, posted date, description and apply URL.

🚀 Getting Started (3 steps)

  1. Say what you are looking for. A title or keyword is usually enough; everything else is optional. Leave titles empty to see the freshest roles across every platform.
  2. Narrow if you need to. locations, remote, departments, companies, postedAfter (a date, or a number of days like 7).
  3. Run it. Results arrive newest-first. Check verified on each row: true means the role was still on the employer's board when it was delivered.

📥 Input

FieldTypeDefaultWhat it does
titlesarray—Words to match in the job title. A multi-word entry is matched as a phrase.
titleModeany | allanyMatch at least one entry, or every entry.
locationsarray—City, region or country text to match.
remoteany | only | excludeanyKeep only remote roles, exclude them, or ignore the flag.
companiesarray—Company name or board id. Use it to watch a named list of employers.
departmentsarray—Department or team text, e.g. Engineering.
postedAfterstring—2026-10-01, or a number of days (7 = the last week).
postedBeforestring—2026-10-15.
atsarrayall sevenLimit to certain platforms.
maxResultsinteger200How many roles to deliver.
maxPerCompanyinteger0Cap per employer; 0 means no cap.
verifyLivebooleantrueRe-read each role's board before delivery.
includeDescriptionbooleantrueAttach the description text.
includeStalebooleantrueInclude roles carried over from an unreadable board.

Word boundaries are respected: ops does not match Operations, and go does not match Google. Accents and the Turkish dotless ı are folded, so Köln matches koln.

📤 Output

One row per open role, always the same 18 columns:

{
"jobId": "4457863009",
"ats": "greenhouse",
"companyName": "Corvias Corporate Services, LLC",
"companyBoard": "corviascorporateservicesllc",
"jobTitle": "Maintenance Manager",
"department": "Facilities",
"location": "Fort Sill, Oklahoma, United States",
"isRemote": false,
"employmentType": "Full-time",
"postedAt": "2026-10-19",
"updatedAt": "2026-10-19",
"description": "At Corvias, you'll join a team …",
"applyUrl": "https://job-boards.greenhouse.io/corviascorporateservicesllc/jobs/4457863009",
"sourceUrl": "https://job-boards.greenhouse.io/corviascorporateservicesllc/jobs/4457863009",
"verified": true,
"verifiedAt": "2026-10-20T08:45:12.004Z",
"indexedAt": "2026-10-20T08:43:21.870Z",
"stale": false
}

Measured fill rate (delivered rows, mixed-platform sample):

FieldFilledNote
jobTitle, location, applyUrl, sourceUrl, postedAt100%
description100%average ~6,500 characters
companyName93%Lever and BambooHR boards publish no company name; the board id is in companyBoard
department53%not every employer fills it in
employmentType53%same

Dates: Personio and BambooHR publish no posting date — those rows carry null rather than a guessed date, and a date filter sets them aside and tells you how many.

💼 Use cases

  • Job boards and feeds. Build a niche board (remote data roles, Berlin engineering) whose links are never dead.
  • Sales signals. A company hiring five salespeople has a budget; a company hiring its first DevOps engineer is about to buy tooling.
  • Recruiting intelligence. Who is hiring for the role you place, where, and since when.
  • Market research. Title mix, remote share, department spread across tens of thousands of employers.

🔗 Integration

curl -X POST "https://api.apify.com/v2/acts/foxlabs~job-postings-database/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"titles":["backend engineer"],"locations":["Berlin"],"maxResults":50}'
from apify_client import ApifyClient
client = ApifyClient("YOUR_TOKEN")
run = client.actor("foxlabs/job-postings-database").call(run_input={
"titles": ["backend engineer", "devops"],
"locations": ["Berlin"],
"postedAfter": 7,
"maxResults": 100,
})
for job in client.dataset(run["defaultDatasetId"]).iterate_items():
print(job["jobTitle"], "—", job["companyName"], "—", job["applyUrl"])

Works with Make, Zapier, n8n and any HTTP client through the standard Apify API.

📊 Pricing

Pay per event: $0.002 per delivered job posting, plus the standard Actor start event.

  • Roles that turned out to be closed are not delivered and not charged.
  • Status rows (an empty result, an input error) are free.
  • A 200-role run costs $0.40.

❓ FAQ

Which platforms are covered? Greenhouse, Lever, Ashby, SmartRecruiters, Teamtailor, Personio and BambooHR. Workday is not in this version.

How fresh is the data? The index is rebuilt daily, and every delivered role is re-checked against the employer's board at query time. indexedAt tells you when the index was built, verifiedAt when the role was last confirmed open.

What does verified: false mean? The employer's board could not be read at that moment (a timeout, or the platform answered with a page instead of data). The role is delivered anyway, because an unreadable board is not proof the job closed — but it is flagged so you can decide.

How fast is a query? Measured on the full 445,722-row index: a title+location query scanned the whole index, matched 45 roles and verified every one of them against its board in 11.8 seconds.

Do I need an API key for the sources? No. All seven are public employer job boards.

Can I search one company? Yes — put its name or board id in companies, and leave titles empty to get all of its open roles.

Why is department only filled half the time? Because employers fill it in about half the time. The actor never invents a value to make a column look full.

🐛 Troubleshooting

  • Zero rows. Read the status row in the dataset: it names the filters that emptied the result. The usual causes are a title that is too specific, or a date window narrower than the hiring pace.
  • A date filter returned fewer rows than expected. Personio and BambooHR roles are set aside when a date filter is used (no posting date at source). The status line reports the count.
  • A company you expect is missing. It may use an ATS outside the seven, or a board that was unreadable during the last refresh. Pass it in companies to check.

⚠️ Trademark

Greenhouse, Lever, Ashby, SmartRecruiters, Teamtailor, Personio and BambooHR are trademarks of their respective owners. This actor is not affiliated with, endorsed by or sponsored by any of them. It reads the public job boards those platforms host for employers.

The actor reads public job boards that employers publish to attract applicants — three of the seven sources are documented public APIs provided for exactly this purpose (Greenhouse Job Board API, Lever postings API, Ashby posting API). No login is used, no personal data about applicants is touched, and no paywalled or private content is accessed. Job postings are business information, not personal data. You are responsible for how you use the output in your jurisdiction.

🤝 Support & contact

Found a board that is missing, a platform you need, or a row that looks wrong? Open an issue on the actor page. Reports with a company board id and the query you ran get fixed fastest.

Changelog

0.1 — 2026-10-20

First release: seven ATS platforms, 32,997 indexed company boards (445,722 open roles measured), live verification of every delivered role, honest empty results, and null instead of a guessed date where the source publishes none.