Skip to content
API v1 preview — endpoints and fields may change before general availability.

Reqbeat

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

View .md

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.

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.

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

Reqbeat attribute (per Reqbeat docs) BetterJobs field
Seniority seniority
Job family job_family
Remote type location.remote
Declared and inferred pay salary, with 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.

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.

Per Reqbeat docs, no_ats_signal means unknown. BetterJobs keeps that meaning. On a company profile, is_hiring.value is true, false or null, and null means unknown.

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. The merged record is free: it counts in metadata.duplicates_merged.

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

Reqbeat event BetterJobs
opened job.opened
reposted job.reposted. repost_count goes up; the job id stays.
closed job.closed, with closed_reason
reobserved No event. last_seen_at moves forward.

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 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.

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.

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

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.