Every plan gets the same normalized job data — titles, companies, structured locations, salary, remote type — just sized differently by request volume (daily on Trial, monthly on paid plans) and jobs per response.
Questions? Email us at [email protected]free, forever
or try the playground without signing up
billed monthly
billed monthly
tailored scale
Connect CleanJobData to Claude, Cursor, or any MCP client for your own personal job search. This is a different kind of plan from the job-board tiers above: you can be on this or one of those, not both at once.
Most job boards keep a local copy and top it up on a schedule. Every plan can do this. On Trial, the daily request quota limits how much you can load, so scope it to the slice you need.
next_page cursor. Filter by country, role or remote to load just your slice. One request returns up to 50 jobs on Starter and 100 on Pro, so loading N jobs takes about N ÷ page size requests.created_max_age (for example 2h for an hourly run, with some overlap). It filters on when we indexed a listing, so a job posted last week but added today is still caught. Most listings are under 24 hours old when they reach the API.max_age to get ids that closed since your last run (up to 1,000 ids per request) and delete them locally.Job list, single-job and expired-jobs requests all count against the same monthly request quota. Location suggestions and company lookups do not. Your database is as live as your schedule: a sync every hour keeps it about an hour behind the API. There is no separate sync limit, only the monthly quota above and a per-second cap (15 requests a second on Starter, 40 on Pro). As a guide, a Starter quota covers a first load of up to 2.5M jobs, or a smaller first load plus daily updates for the rest of the month.
Requests × jobs per response is the most job records a plan can pull in a period — a day on Trial, a month on every paid plan. It's an upper bound, since it assumes every request returns a full page.
| Plan | Requests | Jobs per response | Up to jobs |
|---|---|---|---|
| Trial | 300 / day | 20 | 6,000 / day |
| Starter | 50,000 / mo | 50 | 2.5M / mo |
| Pro | 200,000 / mo | 100 | 20M / mo |
| Enterprise | Unlimited | 100 | No capor the full dataset as daily dumps |
| Solo MCP | 20,000 / mo | 50 | 1M / mopersonal use, not a job-board plan |
Each job's application_url depends on your plan. The redirect is a Trial-only behaviour; paid plans get the employer's own page.
| Plan | application_url |
|---|---|
| Trial | A cleanjobdata.com/apply/{id} redirect that resolves to the employer's page |
| Starter | The employer's direct application page |
| Pro | The employer's direct application page |
| Enterprise | The employer's direct application page |
| Solo MCP | Omitted from list results; unlock the direct URL per job (1,000 unlocks a month) |
next_page cursor, use created_max_age to pull only listings added since your last run, and call the expired jobs endpoint to remove closed ones (see the sync guide). Starter and Pro both allow storing the data in your own database to power your own product. Because each request returns up to 50 jobs on Starter, a full page works out to about $0.04 per 1,000 jobs at best ($97 ÷ 2.5M jobs); real usage is higher because not every request returns a full page.next_page cursor. Your request quota (daily on Trial, monthly on every paid plan) is what limits total volume, and multiplying it by the page size gives the most jobs a plan can pull in that period (for example, 50,000 requests × 50 jobs = 2.5M a month on Starter). That is an upper bound: it assumes every request returns a full page.X-RateLimit-Remaining header so you can watch usage and upgrade before you hit the ceiling.limit).Rate limits, billing, upgrading between plans — see our FAQ, or reach out directly.