Coresignal splits job retrieval in two: a search that finds matches, then a collect call per job. Its Base API returns one row per source and flags duplicates. BetterJobs does all of it in one request: search, fetch, merge and dedup, billed per unique job.
Coresignal is also one of the six providers behind BetterJobs, so its postings can still reach you through the waterfall.
Before: search, collect each hit, drop duplicate rows. coresignal_search and coresignal_collect stand for your existing wrappers around Coresignal’s endpoints.
# Before (Coresignal): 1 search + N collect calls + your own dedup
ids =coresignal_search(query) # free per Coresignal docs
rows =[coresignal_collect(job_id) for job_id in ids]# 1 credit per job collected
jobs =[r for r in rows ifnot r["isDuplicate"]]# one row per source, so filter
After: one request returns merged, deduplicated jobs. Start with a free estimate, then fetch with a cap.
We do not publish one-to-one field names for Coresignal yet: none are confirmed against Coresignal’s current schema. Map by meaning using the field dictionary, which lists every BetterJobs field with its type, derivation and what null means. The fields you will use most:
You need
BetterJobs field
Stable job key
id (canonical, job_...)
The source’s own id
sources[].provider_job_id where sources[].provider is coresignal
Duplicate handling
Not needed: duplicates are merged. sources[] lists every source that saw the job
Still live?
status, closed_reason, last_verified_at
When it appeared
posted_at (employer date, may be null), first_seen_at (earliest sighting)
No collect step. Coresignal charges 1 credit per job collected, per its docs. BetterJobs charges 1 credit per unique job returned by the search itself.
Duplicates are free. With one row per source, the same opening can arrive more than once. BetterJobs merges them into one canonical job and charges once. metadata.duplicates_merged shows how many records were folded.
Re-reads are free. A job you already paid for returns free in any later search or GET /v1/jobs/{id}. The ledger shows it as already_paid.
Company data costs less and covers less. Coresignal company records cost 20 credits each, per its docs. A BetterJobs company profile costs 1 credit and covers hiring only.
Coresignal is a partner provider: Growth includes two partner providers, Pro and above include all six. GET /v1/providers shows whether your plan enables coresignal. On Scale you can bring your own provider keys. Plans are on Credits and billing.
posted_within_days caps at 365. For older history, keep Coresignal or your existing archive.
Partial results are billed only for what returns. A provider timeout gives 200 with metadata.status: partial. Re-run later; already-paid jobs are free.
Set max_credits. Coresignal’s free search let you look before paying. Do the same with dry_run, then cap the real request.