All feed pages

Country feed

US job listings API

Every US job posting from Greenhouse, Lever, Ashby, and Workable — pulled directly from employer career sites and normalized into a single JSON feed. Filter by state, city, remote, title, or salary. One HTTP call gets you a production-ready data source.

The Problem

Maintaining scrapers for multiple ATS platforms is a full-time job. Sites change, schemas break, and your job board ends up serving listings that expired three weeks ago.

Our Solution

We handle collection and normalization across the four ATS platforms that power most US tech hiring. You get one stable endpoint, consistent fields, and data that's refreshed continuously — not nightly.

What you're getting

Source
Direct postings from ATS and employers career sites.
Companies
This batch includes roles from Tidewater Tech, Aviation Institute of Maintenance, ASSYST, Inc., and Domino's, and more.
Volume
Preview shows 10 roles (limit 10, with more pages available). Authenticate and paginate to explore the full United States index.
Filters
Filter by country, state, city, title, remote setting, experience level, and salary. Full filter reference in the Jobs API docs.

At a glance

  • The largest volume of any region in our index, with deep coverage across tech, SaaS, and startup hiring. Filter by state or city to scope exactly the feed your product needs.
  • Every listing comes directly from an employer career page — no recruiter reposts, no agency duplicates. Companies using Greenhouse, Lever, Ashby, and Workable tend to be structured, well-funded, and actively hiring.
  • Sort by newest first and paginate with cursors to run nightly syncs or real-time feeds. You only pull what changed, not the entire dataset.

When you are ready for every filter, validation rule, and response field, use the Jobs API reference.

Global Platform Scale

1,079,058

Total Jobs Indexed

+1,090

Added Past 24h

+524,854

Added Past 30 Days

20,108

Employers

Example request

Same query as the playground, as cURL. Use your real key on the server only.

curl -X GET "https://api.cleanjobdata.com/jobs?country_id=233" \
  -H "Authorization: Bearer YOUR_API_KEY"

How to integrate

1. Get an API key

Sign up for CleanJobData, open the dashboard, and create or copy your API key. Send it as Authorization: Bearer <token> on every request (server-side only in production—never expose keys in mobile apps or public repos).

2. Query United States listings

Start from country_id 233 (United States), then add title, workSetting, experience_level, city_id, or state_id when you need a tighter audience.

Use a modest limit while prototyping, default to sort_by=published for recency, then follow pagination.next_page for large imports. Back off with exponential retry if you hit rate limits.

3. Shape data for your product

Choose which fields you render in job cards versus what you index for search. On list endpoints, trim payloads with fields, include_fields, or exclude_fields, and only request description when you truly need full text on list views.

FAQ

Can I use this in production for a paid job board?
Yes—that is the intended use case. Pick a plan that matches your query volume, keep keys on your server, cache responses where it makes sense, and follow the pagination contract for large imports. Contact support if you need higher limits or contract terms.
How do I narrow results beyond United States?
Add state_id, city_id, or location, combine with a keyword in title, or filter remote-only roles. Each option is spelled out in the Jobs API reference (/docs/api/jobs) with validation rules you can copy into code.
What rate limits or quotas should I expect?
Limits depend on the plan you choose. Higher tiers support more queries per second so job boards with heavy traffic or large sync jobs stay smooth. Paginate with the API's cursors and retry politely if you occasionally receive a 429 response.
How is this different from scraping job boards myself?
We normalize employers, locations, salary text, and remote flags into one schema, refresh listings continuously, and expose stable HTTP filters. You spend time on product and UX instead of repairing scrapers every time a site changes markup.
How fresh is the job data?
We refresh listings continuously from our sources, so you are not stuck with a stale export. Use sort_by=published when you want the newest posts first, and run incremental syncs on a schedule that matches how often your job board should update.
Do you return full job descriptions on list endpoints?
Descriptions are available but not included in lightweight list responses by default. Request them explicitly when building detail views so list pages and mobile clients stay fast and cheap to render.