# Reqbeat

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

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

Reqbeat sells deduplicated, normalized job postings and hiring events. BetterJobs uses it as one of six partner providers.

Reqbeat

`reqbeat`

Deduplicated, normalized job postings and hiring events from ATSs, job boards and aggregators.

- Sources

  ATSs, job boards and aggregators; agencies and aggregators excluded by default

- Dedup

  One row per company + title + country

- Refresh

  Corpus refreshed every 3 hours

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

Facts per Reqbeat docs.

## What it is strong at

All facts in this section are per Reqbeat docs.

- **Clean, normalized postings.** Postings come from ATSs, job boards and aggregators. Reqbeat dedups and normalizes them: seniority, job family, skills, remote type, and declared plus inferred pay.
- **Less noise by default.** Agencies and aggregators are excluded by default.
- **Hiring events.** Postings move through `opened`, `reobserved`, `reposted` and `closed`.
- **Unknown kept separate from “no”.** A `coverage_status` of `no_ats_signal` means Reqbeat does not know, not that the company is not hiring.
- **No person PII.** Postings and companies only.

## What it contributes to a BetterJobs job

Reqbeat’s normalized attributes line up with these BetterJobs fields:

| Reqbeat attribute (per Reqbeat docs) | BetterJobs field                                                                                                                                                                                               |
| ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Seniority                            | [`seniority`](https://docs.betterjobs.cc/data/field-dictionary.md#field-job-seniority)                                                                                                                         |
| Job family                           | [`job_family`](https://docs.betterjobs.cc/data/field-dictionary.md#field-job-job_family)                                                                                                                       |
| Remote type                          | [`location.remote`](https://docs.betterjobs.cc/data/field-dictionary.md#field-job-location-remote)                                                                                                             |
| Declared and inferred pay            | [`salary`](https://docs.betterjobs.cc/data/field-dictionary.md#field-job-salary), with [`salary.origin`](https://docs.betterjobs.cc/data/field-dictionary.md#field-job-salary-origin) `declared` or `inferred` |

What Reqbeat actually filled on a given job is in that job’s `sources[]` entry for `reqbeat`, under `fields`. Our v1 job schema has no skills field, so Reqbeat’s skills tags are not returned.

## Refresh

Per Reqbeat docs, its corpus is refreshed every 3 hours. On each BetterJobs job, the `reqbeat` entry in `sources[]` carries `first_seen_at` and `last_seen_at`: when Reqbeat first and last saw that posting.

## Notes and quirks we normalize

### Unknown is not “not hiring”

Per Reqbeat docs, `no_ats_signal` means unknown. BetterJobs keeps that meaning. On a [company profile](https://docs.betterjobs.cc/data/companies.md), `is_hiring.value` is `true`, `false` or `null`, and `null` means unknown.

> Never treat null as false
>
> A company with no detected careers page or ATS returns `is_hiring.value: null`, not `false`. If you suppress outreach on `false`, do not also suppress it on `null`. See [Provenance and confidence](https://docs.betterjobs.cc/concepts/provenance-and-confidence.md).

### Two dedup passes, one result

Per Reqbeat docs, it keeps one row per company + title + country. BetterJobs then runs its own dedup across all seven sources, so a Reqbeat row and a TheirStack record for the same opening become one [canonical job](https://docs.betterjobs.cc/concepts/canonical-jobs.md). The merged record is free: it counts in `metadata.duplicates_merged`.

### Event names

Reqbeat’s event names differ from ours. The closest BetterJobs equivalents:

| Reqbeat event | BetterJobs                                                                                                                  |
| ------------- | --------------------------------------------------------------------------------------------------------------------------- |
| `opened`      | [`job.opened`](https://docs.betterjobs.cc/data/events.md#event-job-opened)                                                  |
| `reposted`    | [`job.reposted`](https://docs.betterjobs.cc/data/events.md#event-job-reposted). `repost_count` goes up; the job `id` stays. |
| `closed`      | [`job.closed`](https://docs.betterjobs.cc/data/events.md#event-job-closed), with `closed_reason`                            |
| `reobserved`  | No event. `last_seen_at` moves forward.                                                                                     |

### MCP tools

Per Reqbeat docs, it runs its own MCP server with about 15 tools, including `is_hiring`, `hiring_pulse` and `get_changes`. The BetterJobs [MCP server](https://docs.betterjobs.cc/agents/mcp-server.md) is a separate server with its own tools. Its `is_hiring` tool answers from the merged company profile (`GET /v1/companies/{domain}`), built from every source on your plan, not from Reqbeat alone.

## When BetterJobs routes to it

Only when Reqbeat 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", "reqbeat"]` 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 Reqbeat’s docs from this site. Everything you need to use Reqbeat data through BetterJobs is on this page and in the [field dictionary](https://docs.betterjobs.cc/data/field-dictionary.md).

## Related

- [All providers](https://docs.betterjobs.cc/providers.md)
- [Detect hiring changes](https://docs.betterjobs.cc/guides/detect-hiring-changes.md)
- [Events](https://docs.betterjobs.cc/data/events.md)
