Jobs & Hiring

Hiring Signals API API

The Hiring Signals API turns a company domain into a hiring signal as clean JSON.

3 actionsLive JSON1,000 free creditsMCP-ready
Get a free keyOpen in playground

🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.

The primary hiring_signal endpoint resolves the company (name, confidence, match type) and returns its ATS provider and job-board presence with supporting evidence, and a rich variant and batch add depth and scale. It is built for sales intelligence, recruiting and go-to-market tools that need to detect which companies are actively hiring without scraping career pages. One ReefAPI key, one shared credit pool, the standard envelope.

Live example

Real request and response JSON

Captured from the indexed primary action, hiring_signal, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/enrich-hiring/v1/hiring_signal",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "domain": "stripe.com"
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "enrich-hiring",
    "endpoint": "hiring_signal",
    "mode": "basic",
    "latency_ms": 13868.6,
    "record_count": 95,
    "bytes": 0,
    "cache_hit": false,
    "completeness_pct": 100,
    "subcalls": [
      {
        "api": "ats-jobs",
        "action": "company_jobs",
        "status": "ok",
        "latency_ms": 422
      },
      {
        "api": "ats-jobs",
        "action": "company_jobs",
        "status": "fail:NOT_FOUND",
        "latency_ms": 616.6
      },
      {
        "api": "ats-jobs",
        "action": "company_jobs",
        "status": "ok",
        "latency_ms": 730.4
      }
    ]
  },
  "data": {
    "coverage": [
      {
        "source": "ats-jobs",
        "status": "ok",
        "count": 524,
        "note": "provider=greenhouse (authoritative direct count)"
      },
      {
        "source": "linkedin",
        "status": "ok",
        "count": 45,
        "note": "45/50 keyword hits passed the company-name filter (dropped 5 foreign-company rows)"
      },
      {
        "source": "indeed",
        "status": "ok",
        "count": 1,
        "note": "1/50 keyword hits passed the company-name filter (dropped 49 foreign-company rows)"
      }
    ],
    "freshness": "[redacted-phone]T17:19:36Z",
    "entity": {
      "input": "stripe.com",
      "resolved_name": "Stripe",
      "confidence": 0.9,
      "match": "ats-board",
      "evidence": [
        {
          "name": "stripe",
          "kind": "ats-board:greenhouse",
          "weight": 0.9
        }
      ]
    },
    "ats": {
      "provider": "greenhouse",
      "slug": "stripe",
      "direct_jobs_count": 524,
      "returned": 50,
      "matched": true,
      "probed": [
        "greenhouse:ok=524",
        "lever:not_found=-",
        "ashby:not_found=-"
      ]
    },
    "jobs": {
      "count_by_source": {
        "ats": 524,
        "linkedin": 45,
        "indeed": 1
      },
      "dedup_count": 1,
      "deduplicated_total": 95,
      "sample": [
        {
          "title": "Account Executive, AI Sales (Grower)",
          "location": "San Francisco, CA",
          "department": "sales",
          "seniority": "unspecified",
          "remote": null,
          "source": "ats",
          "url": "https://stripe.com/jobs/search?gh_jid=7954688",
          "posted": "[redacted-phone]T08:58:57-04:00"
        },
        {
          "title": "Account Executive, Billing",
          "location": "Sydney",
          "department": "sales",
          "seniority": "unspecified",
          "remote": null,
          "source": "ats",
          "url": "https://stripe.com/jobs/search?gh_jid=8029128",
          "posted": "[redacted-phone]T01:35:20-04:00"
        },
        {
          "title": "Account Executive, Commercial Grower (Japanese Fluency)",
          "location": "Japan",
          "department": "sales",
          "seniority": "unspecified",
          "remote": null,
          "source": "ats",
          "url": "https://stripe.com/jobs/search?gh_jid=8042978",
          "posted": "[redacted-phone]T03:24:50-04:00"
        }
      ],
      "note": "count_by_source are reported separately (NOT summed — that would inflate); deduplicated_total = unique postings across sources by title+location+company"
    },
    "departments": [
      {
        "name": "sales",
        "count": 42,
        "pct": 44.2
      },
      {
        "name": "other",
        "count": 15,
        "pct": 15.8
      },
      {
        "name": "engineering",
        "count": 11,
        "pct": 11.6
      }
    ],
    "seniority_mix": [
      {
        "level": "unspecified",
        "count": 72,
        "pct": 75.8
      },
      {
        "level": "manager",
        "count": 13,
        "pct": 13.7
      },
      {
        "level": "director",
        "count": 3,
        "pct": 3.2
      }
    ],
    "remote_ratio": 0.8,
    "remote_basis": "4/5 roles with a known workplace flag",
    "tech_signals": [
      {
        "name": "ruby",
        "count": 1
      },
      {
        "name": "salesforce",
        "count": 1
      },
      {
        "name": "react",
        "count": 1
      }
    ],
    "classified_n": 95,
    "current_hiring_intensity": {
      "level": "very_high",
      "open_jobs": 524,
      "basis": "524 open roles (count-band; no headcount anchor; snapshot, not velocity)"
    }
  }
}
Actions

What the Hiring Signals API API does

ActionDescriptionConcrete use caseKey params
hiring_signaldomain → company hiring snapshot: ATS provider + direct open-roles count, per-source counts (deduped), departments/seniority/remote-ratio/tech-signals, entity-confirm, honest snapshot intensityRecruiting teams call hiring_signal to get domain → company hiring snapshot.domain, company_name, ats_slug, ats_provider, countries
hiring_signal_richeverything in hiring_signal + employer firmographics (linkedin company / glassdoor employer: industry, employee_count, HQ, founded, rating) which anchor a headcount-relative intensity (open-roles-to-headcount ratio)Labor-market analysts call hiring_signal_rich to get everything in hiring_signal + employer firmographics (linkedin company / glassdoor employer.domain, company_name, ats_slug, ats_provider, countries
batchhiring_signal for up to 10 domains in one call (cache-first, per-item ok/error)Job boards call batch to get hiring_signal for up to 10 domains in one call (cache-first, per-item ok/error).domains
Code samples

Call hiring_signal from your stack

curl -X POST https://api.reefapi.com/enrich-hiring/v1/hiring_signal \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"domain":"stripe.com"}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.enrich-hiring.hiring_signal with {"domain":"stripe.com"}.
Use cases

Who uses this API and why

  • Sales-intelligence teams call hiring_signal to flag accounts that are actively hiring (a buying signal).
  • Recruiting tools use hiring_signal_rich to see which ATS a company uses and what roles are open.
  • Go-to-market products use batch to score a whole prospect list for hiring activity at once.
FAQ

Questions developers ask before integrating

What is the Hiring Signals API API?

Hiring Signals API API is a ReefAPI endpoint group for hiring signals api It returns live JSON through POST requests under /enrich-hiring/v1.

Is the Hiring Signals API API free to try?

Yes. ReefAPI starts with 1,000 free credits, no card required. Hiring Signals API calls use the same shared credit balance as every other ReefAPI engine.

Do I need a Hiring Signals API login or account?

No login to Hiring Signals API is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.

How fresh is the Hiring Signals API data?

The page example is captured from a live hiring_signal call, and production requests fetch live data through ReefAPI rather than a static sample.

How many credits does the Hiring Signals API API use?

Hiring Signals API actions currently cost 5-10 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Hiring Signals API from an AI assistant or MCP client?

Yes. Connect ReefAPI once through MCP and your assistant can call enrich-hiring actions with the same key, credit pool and JSON envelope used by normal REST requests.

Is the Hiring Signals API API a Hiring Signals API scraper?

It is the managed alternative to a DIY Hiring Signals API scraper. Instead of building and maintaining your own scraper — proxies, headless browsers, captcha and constant breakage — you call one ReefAPI endpoint and get the same hiring signals api back as clean JSON.

Why does my Hiring Signals API scraper keep getting blocked?

Most Hiring Signals API scrapers break on anti-bot defenses, rate limits and IP bans that need rotating residential proxies and browser fingerprinting to clear. ReefAPI handles all of that for you — no proxies, no captchas, no maintenance — and returns live JSON. Blocked or failed calls are free.

docs / enrich-hiring

Hiring Signals API

Hiring Signals API

base /enrich-hiring/v13 endpoints
post/enrich-hiring/v1/hiring_signal6 credits

domain → company hiring snapshot: ATS provider + direct open-roles count, per-source counts (deduped), departments/seniority/remote-ratio/tech-signals, entity-confirm, honest snapshot intensity

ParameterAllowed / rangeDescription
domainoptionalCompany website domain (bare host like stripe.com; a full URL or leading www. is accepted and normalized). The ATS board slug is derived from the domain stem. Provide `domain` OR `company_name` (domain gives the strongest entity anchor).
company_nameoptionalCompany name, used when no domain is available (entity-match is weaker without a domain). Also seeds the ATS slug guess.
ats_slugoptionalAdvanced: force the ATS board token/subdomain (skips slug auto-detect). Use when the board slug differs from the domain stem (e.g. a parent-company board).
ats_provideroptionalgreenhouse · lever · ashby · workableAdvanced: force the ATS provider (skips the parallel probe). One of greenhouse / lever / ashby / workable.
countriesoptionalOptional country hints for the keyword job sources (best-effort location filter; ATS count is global).
Try in playground →
post/enrich-hiring/v1/hiring_signal_rich10 credits

everything in hiring_signal + employer firmographics (linkedin company / glassdoor employer: industry, employee_count, HQ, founded, rating) which anchor a headcount-relative intensity (open-roles-to-headcount ratio)

ParameterAllowed / rangeDescription
domainoptionalCompany website domain (bare host like stripe.com; a full URL or leading www. is accepted and normalized). The ATS board slug is derived from the domain stem. Provide `domain` OR `company_name` (domain gives the strongest entity anchor).
company_nameoptionalCompany name, used when no domain is available (entity-match is weaker without a domain). Also seeds the ATS slug guess.
ats_slugoptionalAdvanced: force the ATS board token/subdomain (skips slug auto-detect). Use when the board slug differs from the domain stem (e.g. a parent-company board).
ats_provideroptionalgreenhouse · lever · ashby · workableAdvanced: force the ATS provider (skips the parallel probe). One of greenhouse / lever / ashby / workable.
countriesoptionalOptional country hints for the keyword job sources (best-effort location filter; ATS count is global).
Try in playground →
post/enrich-hiring/v1/batch5 credits

hiring_signal for up to 10 domains in one call (cache-first, per-item ok/error)

ParameterAllowed / rangeDescription
domainsrequiredUp to 10 domains (array or comma-separated). Each gets a hiring_signal snapshot; per-item ok/error, cache-first.
Try in playground →