The BetterJobs index is our own job sources: an owned crawl of employer career pages and ATSs. It is the one source on every plan, including Free.
BetterJobs index
betterjobsOur own job sources: an owned crawl of employer career pages and ATSs.
Sources Employer career pages and ATSs crawled by BetterJobs Volume Published at GA. Live counts per request in metadata.providers.contributions. Freshness Published at GA. Each job carries first_seen_at, last_seen_at and last_verified_at. Cost 1 credit per unique job returned, same as every source Every plan.
Facts BetterJobs.
BetterJobs crawls employer career pages and the ATSs behind them. Jobs found there go into the index. It is not a partner provider. No third party sits between the employer’s page and your result.
Because we run it ourselves:
It is on every plan . Free (1,000 credits to test, no card) and Starter search the index only.
cheapest_first, the default strategy, asks it first . Partner providers are added only when the index cannot fill the page.
own_only restricts a search to it. Use this on Free and Starter, or when you want the simplest licensing.
The index reads the employer’s own posting, so it tends to supply the fields that live on that page. In the spec’s illustrative example, the index contributed these fields to a canonical job:
"provider" : " betterjobs " ,
"provider_job_id" : " bj_idx_5521907 " ,
"url" : " https://jobs.acme-robotics.example/revops-lead " ,
"first_seen_at" : " 2026-10-08T06:40:00Z " ,
"last_seen_at" : " 2026-10-11T06:10:00Z " ,
"fields" : [ " title " , " description " , " apply_url " , " location " , " employment_type " , " posted_at " ]
Illustrative. On real jobs, sources[].fields tells you exactly what the index supplied. See Provenance and confidence .
We do not publish a refresh number for the index yet. It is published at GA. Every job carries its own timestamps instead:
sources[].first_seen_at and sources[].last_seen_at for the index’s entry: when our crawl first and last saw the posting.
last_verified_at on the job: the latest time the job was confirmed live at its origin.
See Freshness and lifecycle .
Published at GA. Each search reports what the index added: metadata.providers.contributions.betterjobs counts the unique jobs it contributed first.
curl https://api.betterjobs.cc/v1/jobs/search \
-H " Authorization: Bearer $BETTERJOBS_API_KEY " \
-H " BetterJobs-Version: 2026-10-01 " \
-H " Content-Type: application/json " \
"title_or": ["Head of RevOps", "Head of Revenue Operations"],
"country_code_or": ["DE", "AT", "CH"],
"waterfall": { "strategy": "own_only", "max_credits": 50 },
" https://api.betterjobs.cc/v1/jobs/search " ,
" Authorization " : f "Bearer {os.environ [ ' BETTERJOBS_API_KEY ' ] } " ,
" BetterJobs-Version " : " 2026-10-01 " ,
" title_or " : [ " Head of RevOps " , " Head of Revenue Operations " ] ,
" country_code_or " : [ " DE " , " AT " , " CH " ] ,
" waterfall " : { " strategy " : " own_only " , " max_credits " : 50 },
print ( len ( body [ " data " ]) , body [ " metadata " ] [ " credits_charged " ] )
const resp = await fetch ( ' https://api.betterjobs.cc/v1/jobs/search ' , {
Authorization: ` Bearer ${ process . env . BETTERJOBS_API_KEY } ` ,
' BetterJobs-Version ' : ' 2026-10-01 ' ,
' Content-Type ' : ' application/json ' ,
title_or: [ ' Head of RevOps ' , ' Head of Revenue Operations ' ] ,
country_code_or: [ ' DE ' , ' AT ' , ' CH ' ] ,
waterfall: { strategy: ' own_only ' , max_credits: 50 },
if ( ! resp . ok ) throw new Error ( ` BetterJobs ${ resp . status } ` );
const body = await resp . json ();
console . log (body . data . length , body . metadata . credits_charged );
Same as every source: 1 credit per unique job returned. Duplicates and empty searches are free. A job the index and a partner both found is one job and one credit. See Credits and billing .
Free and Starter: only the index
On Free and Starter, sending a partner slug in waterfall.providers returns 403 plan_required. Growth adds 2 partner providers; Pro and above add all six. See Providers .
None. This is our own source. Everything about it is on this site.