Developer guide
Getting started
Choose how you access the feed directory, then fetch job postings from each ATS. There are three ways:
- Snapshot download — manual catalog download on-demand
- API (PRO plan) — backfill the catalog into your local database with incremental sync
- API (ULTRA plan) — live catalog queries, no need to store feeds in your local database
Evaluating the API? Subscribe to the free BASIC plan to explore the catalog before spending any money.
Step 1
Query the catalog at runtime
The ULTRA plan suits integrations that skip a local feed database. Subscribe on RapidAPI and call the catalog API when your app needs feed URLs and account slugs — we maintain discovery, validation, and retirement on our side.
Omit since on GET /active-feeds for live catalog queries. Narrow results with ats, job_count_gte, job_count_lte, and paginate with next_cursor when you need more than one page. Each HTTP call counts as one RapidAPI request (up to 1,000 feeds per page on ULTRA).
curl --request GET \
--url 'https://ats-job-feed-directory.p.rapidapi.com/active-feeds?ats=greenhouse&job_count_gte=5' \
--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
--header 'X-RapidAPI-Host: ats-job-feed-directory.p.rapidapi.com'{
"feeds": [
{
"id": "00000000-0000-4000-8000-000000000001",
"ats": "greenhouse",
"account": "example-co",
"feed_url": "https://boards-api.greenhouse.io/v1/boards/example-co/jobs",
"available_since": "2026-01-15T08:00:00Z",
"company_name": "Example Co",
"job_count": 42
},
{
"id": "00000000-0000-4000-8000-000000000002",
"ats": "lever",
"account": "example-co",
"feed_url": "https://api.lever.co/v0/postings/example-co",
"available_since": "2026-02-01T10:00:00Z",
"company_name": "Example Co",
"job_count": 27
}
],
"next_cursor": "eyJhdmFpbGFibGVfc2luY2UiOiIyMDI2LTAyLTAxVDEwOjAwOjAwWiIsImlkIj..."
}When you already hold a feed id (for example from a prior user session), GET /active-feeds/{feedId} returns that single catalog row without listing the full catalog.
curl --request GET \
--url 'https://ats-job-feed-directory.p.rapidapi.com/active-feeds/00000000-0000-4000-8000-000000000001' \
--header 'X-RapidAPI-Key: YOUR_RAPIDAPI_KEY' \
--header 'X-RapidAPI-Host: ats-job-feed-directory.p.rapidapi.com'{
"id": "00000000-0000-4000-8000-000000000001",
"ats": "greenhouse",
"account": "example-co",
"feed_url": "https://boards.example.com/example-co",
"available_since": "2026-01-15T08:00:00Z",
"company_name": "Example Co",
"job_count": 42
}You do not run incremental sync or track watermarks — re-query when you need an up-to-date feed list. Tradeoffs: higher API usage, request latency on each lookup, and no offline catalog copy. Job postings still come from each ATS; only the feed directory is hosted.
ULTRA subscription and plan limits are on Get the catalog and the linked RapidAPI pricing page.
Step 2
Fetch jobs from ATS feeds
Job data lives on each company's ATS, not in the ATS Feeds catalog. For each feed in your workflow, HTTP GET the feed_url and parse the response into your job store.
Response shape is platform-specific. Greenhouse, Lever, Ashby, and others each expose their own JSON. Plan one fetch worker and one parser per ATS you support.
curl "https://boards-api.greenhouse.io/v1/boards/example-co/jobs"ATS Feeds does not normalize or enrich postings. You own storage, deduplication, search indexing, and refresh scheduling for the jobs you pull.
Public API patterns, cURL examples, and integration notes for each platform are on the ATS platform pages.
For authentication, query parameters, and worked examples, see the RapidAPI API docs.