# Coresignal

> What does Coresignal contribute, and when does BetterJobs route to it?

Source: https://docs.betterjobs.cc/providers/coresignal/

Coresignal sells a large historical job-posting dataset, plus company and employee records. BetterJobs uses it as one of six partner providers, for job postings.

Coresignal

`coresignal`

Large historical job-posting dataset plus company and employee records.

- Records

  Job postings, company records, employee records

- Postings

  475M+ job postings, 70M+ active

- History

  Since August 2020

- Recheck

  Active postings rechecked within 24h

- Credits

  Search free; collect 1 credit per job, 20 per company or employee record

Growth includes 2 partner providers; Pro and above include all six. GET /v1/providers shows what your plan enables.

Facts per Coresignal docs.

## What it is strong at

All facts in this section are per Coresignal docs.

- **Scale.** 475M+ job postings, 70M+ of them active.
- **History.** Postings since August 2020.
- **Recheck.** Active postings are rechecked within 24 hours.
- **Bulk delivery.** JSONL, Parquet or CSV to S3, GCS, Azure or Snowflake.
- **Query power.** Elasticsearch DSL and flat filters.

## What it contributes to a BetterJobs job

Coresignal job postings join the same merge as every other source. We do not list one-to-one field-name equivalents for Coresignal in the [field dictionary](https://docs.betterjobs.cc/data/field-dictionary.md) yet, so check each job directly: the `coresignal` entry in `sources[]` lists the `fields` it supplied. In the spec’s illustrative async-search example, Coresignal supplied `job_family` to a job JobsPipe found first.

Coresignal’s company and employee records are not part of BetterJobs results. BetterJobs returns jobs and its own [company hiring profiles](https://docs.betterjobs.cc/data/companies.md).

## Refresh

Per Coresignal docs, active postings are rechecked within 24 hours. On each BetterJobs job, the `coresignal` entry in `sources[]` carries `first_seen_at` and `last_seen_at` for that source.

## Notes and quirks we normalize

### isDuplicate rows become one job

Per Coresignal docs, its Base API returns one row per source, with an `isDuplicate` flag on the copies. If you use Coresignal directly, you filter those rows yourself.

BetterJobs does this for you. Every row that describes the same opening merges into one [canonical job](https://docs.betterjobs.cc/concepts/canonical-jobs.md), together with matching records from the other providers. Merged copies are free and counted in `metadata.duplicates_merged`. You pay for the job once.

### Search is free there; estimates are free here

Per Coresignal docs, search is free and collecting costs 1 credit per job and 20 per company or employee record. BetterJobs has one step, not two. To see the cost before you fetch, send the same request with `dry_run: true`. It returns `expected_unique_jobs_range`, `providers_planned` and `credits_range`, and costs nothing.

```json
{
  "filters": { "title_or": ["Head of RevOps"], "country_code_or": ["DE", "AT", "CH"], "posted_within_days": 7 },
  "waterfall": { "strategy": "max_coverage" },
  "limit": 100,
  "dry_run": true
}
```

See [Search jobs](/api/operations/searchjobs/).

### No Elasticsearch DSL

BetterJobs takes one flat filter grammar with suffix operators (`title_or`, `country_code_or`, `salary_min_gte`). It does not accept Elasticsearch DSL. Unknown fields return `400 unknown_filter`. See [Filters](https://docs.betterjobs.cc/platform/filters.md) and [Migrate from Coresignal](https://docs.betterjobs.cc/guides/migrate-from-coresignal.md).

### Bulk files vs async searches

Coresignal ships bulk files to your storage. BetterJobs has no bulk file delivery in v1. For large pulls, use an [async search](https://docs.betterjobs.cc/platform/async-searches.md) of up to 10,000 jobs, with `webhook_url` for `search.completed`.

> Partial results
>
> If Coresignal is slow, it is dropped at `waterfall.timeout_ms` and the result is `partial`, with `coresignal` in `metadata.providers.failed`. The spec’s partial example shows exactly this case. You pay only for returned jobs. See [Providers](https://docs.betterjobs.cc/providers.md#when-a-provider-fails).

## When BetterJobs routes to it

Only when Coresignal is enabled on your plan. Then:

- `max_coverage` asks it on every search.
- `cheapest_first` asks it only if the BetterJobs index and earlier sources did not fill the page.
- `waterfall.providers: ["betterjobs", "coresignal"]` pins it.

Check `metadata.providers.tried` and `metadata.providers.hit` to see whether it was asked and matched.

## Plans that include it

Growth includes 2 partner providers; Pro and above include all six. GET /v1/providers shows what your plan enables. See the [plan table](https://docs.betterjobs.cc/providers.md#which-plan-includes-which-provider).

## Provider docs

We do not link to Coresignal’s docs from this site. Everything you need to use Coresignal data through BetterJobs is on this page and in [Migrate from Coresignal](https://docs.betterjobs.cc/guides/migrate-from-coresignal.md).

## Related

- [Migrate from Coresignal](https://docs.betterjobs.cc/guides/migrate-from-coresignal.md)
- [All providers](https://docs.betterjobs.cc/providers.md)
- [Canonical jobs](https://docs.betterjobs.cc/concepts/canonical-jobs.md)
