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).

Filtered live query
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'
Response (first page)
{
  "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.

Lookup by feed id
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'
Single feed response
{
  "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.

Example: fetch jobs from Greenhouse
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.