Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Company Intelligence API page →
Utilities & AI

Company Intelligence API & Scraper

The Company Enrichment API resolves a domain to a company as clean JSON.

3 actionsLive JSON1,000 free credits$0.67–$1.50 / 1,000 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 company_domain endpoint returns the final domain, match type, confidence and canonical company name, with a rich variant and batch. It is built for sales intelligence and CRM enrichment that need to turn a domain into a clean company record. One ReefAPI key, one shared credit pool, the standard envelope.

Reference

The eleven field groups, and which action can run them

Everything this engine does is split into groups you switch on with include or exclude. Four exist only on the rich action, and asking for one of those from the basic action is rejected rather than quietly ignored. The measured column is what each group actually returned for stripe.com, which shows you which groups are deep and which are thin before you pay for them.

GroupActionMeasured on stripe.com
domainbothregistrar, created 1995-09-12, age_days 11306, dnssec false, DNS record counts, 50 active certs, 114 subdomains
techbothtechnologies ['Next.js','Nginx'], server nginx, count 2, categories {} empty
presencebothog title, description, image and favicon, website_alive true, redirect summary
newsboth10 articles from a brand-name query, each with source and published date
developerbothgithub_org login 'stripe', public_repos 98, followers 3484, top_repos [] empty
hiringbothATS provider greenhouse, company_token 'stripe', jobs_count 580, by_department breakdown
reputationbothTrustpilot trust_score 1.6 across 17438 reviews, plus a Google Maps match
trendsrich onlystatus error with missing_reason 'unsupported' and an empty object
appsrich onlyfound true, four Apple and two Play titles matched by name, every id null
fundingrich onlyWikidata Q7624104, founded 2010, recent_funding_news headlines, total_raised null
trafficrich onlyTranco rank 240, tier top_1k, as_of 2026-07-20

include on the basic action accepts only the seven groups marked 'both'. Sending include ['trends'] to company_domain returns ok:false INVALID_PARAM with detail.allowed listing domain, tech, presence, news, developer, hiring and reputation. The entity and company blocks are always computed from whatever did run, and a non-hostname input such as 'definitely not a domain' is rejected with INVALID_PARAM before any lookup.

Live example

Real request and response JSON

Captured from the indexed primary action, company_domain, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/enrich-company/v1/company_domain",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "domain": "github.com",
    "include": [
      "domain",
      "presence"
    ]
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "enrich-company",
    "endpoint": "company_domain",
    "mode": "basic",
    "latency_ms": 24799,
    "record_count": 2,
    "bytes": 0,
    "cache_hit": false,
    "completeness_pct": 100,
    "groups_run": [
      "domain",
      "presence"
    ],
    "subcalls": [
      {
        "api": "url-resolver",
        "action": "full",
        "status": "ok",
        "latency_ms": 359.4
      },
      {
        "api": "domain-intel",
        "action": "full_report",
        "status": "ok",
        "latency_ms": 628.9
      },
      {
        "api": "ext:homepage",
        "action": "fetch",
        "status": "ok",
        "latency_ms": 958.5
      }
    ]
  },
  "data": {
    "provenance": {
      "tech": {
        "status": "skipped",
        "missing_reason": "skipped"
      },
      "news": {
        "status": "skipped",
        "missing_reason": "skipped"
      },
      "developer": {
        "status": "skipped",
        "missing_reason": "skipped"
      },
      "hiring": {
        "status": "skipped",
        "missing_reason": "skipped"
      },
      "reputation": {
        "status": "skipped",
        "missing_reason": "skipped"
      },
      "trends": {
        "status": "skipped",
        "missing_reason": "skipped"
      },
      "apps": {
        "status": "skipped",
        "missing_reason": "skipped"
      },
      "funding": {
        "status": "skipped",
        "missing_reason": "skipped"
      },
      "traffic": {
        "status": "skipped",
        "missing_reason": "skipped"
      },
      "domain": {
        "status": "matched",
        "engine": "domain-intel",
        "latency_ms": 621.1
      },
      "presence": {
        "status": "matched",
        "engine": "google-search+url-resolver"
      }
    },
    "entity": {
      "input_domain": "github.com",
      "final_domain": "github.com",
      "match": "exact-domain",
      "confidence": 0.85,
      "canonical_name": "GitHub",
      "evidence": [
        {
          "name": "GitHub",
          "kind": "site-og",
          "source": "url-resolver",
          "weight": 0.8
        },
        {
          "name": "Github",
          "kind": "stem-guess",
          "source": "derived",
          "weight": 0.3
        },
        {
          "name": "GitHub",
          "kind": "site-og",
          "source": "homepage",
          "weight": 0.8
        }
      ]
    },
    "domain": {
      "registered": true,
      "registrar": "MarkMonitor Inc.",
      "created": "[redacted-phone]T18:20:50Z",
      "expires": "[redacted-phone]T18:20:50Z",
      "age_days": 6856,
      "nameservers": [
        "DNS1.P08.NSONE.NET",
        "DNS2.P08.NSONE.NET",
        "DNS3.P08.NSONE.NET"
      ],
      "dnssec": false,
      "dns_summary": {
        "A": 1,
        "AAAA": 0,
        "MX": 1,
        "TXT": 22,
        "NS": 8,
        "CNAME": 0,
        "SOA": 1,
        "CAA": 7
      },
      "mx_hosts": [
        "0 github-com.mail.protection.outlook.com."
      ],
      "ssl": {
        "active_certs": 50,
        "total_seen": 52,
        "latest_issuer": "C=US, O=Let's Encrypt, CN=YR2"
      },
      "subdomains": {
        "count": 40,
        "sample": [
          "api.mcp.github.com",
          "api.security.github.com",
          "asset-generator.github.com"
        ]
      }
    },
    "presence": {
      "search": {
        "top_results": [],
        "knowledge_panel": null,
        "engine": "google"
      },
      "og": {
        "title": "GitHub · Change is constant. GitHub keeps you ahead.",
        "description": "Join the world's most widely adopted, AI-powered developer platform where millions of developers, businesses, and the largest open source community build software that advances humanity.",
        "image": "https://images.ctfassets.net/8aevphvgewt8/4pe4eOtUJ0ARpZRE4fNekf/f52b1f9c52f059a[redacted-phone]ed0/GH-Homepage-Universe-img.png",
        "site_name": "GitHub",
        "favicon": "https://github.com/fluidicon.png"
      },
      "social_links": {
        "github": "https://github.com/why-github"
      },
      "redirect": {
        "redirected": false,
        "final_domain": "github.com",
        "hops": 0
      },
      "website_alive": true,
      "site_signals": {
        "has_contact_page": false,
        "has_about_page": false,
        "has_phone": false,
        "has_quote_cta": true,
        "has_service_keywords": true
      }
    },
    "company": {
      "name": {
        "value": "GitHub",
        "source": "url-resolver",
        "confidence": 0.85,
        "last_checked": "[redacted-phone]T17:19:59Z"
      },
      "description": {
        "value": "Join the world's most widely adopted, AI-powered developer platform where millions of developers, businesses, and the largest open source community build software that advances humanity.",
        "source": "url-resolver",
        "confidence": 0.8,
        "last_checked": "[redacted-phone]T17:19:59Z"
      },
      "logo_hint": {
        "value": "https://images.ctfassets.net/8aevphvgewt8/4pe4eOtUJ0ARpZRE4fNekf/f52b1f9c52f059a[redacted-phone]ed0/GH-Homepage-Universe-img.png",
        "source": "url-resolver",
        "confidence": 0.75,
        "last_checked": "[redacted-phone]T17:19:59Z"
      },
      "site_title": {
        "value": "GitHub · Change is constant. GitHub keeps you ahead.",
        "source": "url-resolver",
        "confidence": 0.85,
        "last_checked": "[redacted-phone]T17:19:59Z"
      }
    }
  }
}
Actions

What the Company Intelligence API does

ActionDescriptionConcrete use caseKey params
company_domaindomain → entity-resolved company profile (core groups) with per-field provenanceOps teams call company_domain to get domain → entity-resolved company profile (core groups) with per-field provenance.domain, include, exclude
company_domain_richeverything in company_domain + firmographics (LinkedIn/Indeed/Glassdoor), review depth, local/maps match, brand trends, app/package presence, registry funding signals (Wikidata), traffic rankDeveloper tools call company_domain_rich to get everything in company_domain + firmographics (LinkedIn/Indeed/Glassdoor), review depth, local….domain, include, exclude
batchenrich up to 10 domains in one call (core groups, cache-first, per-domain ok/error)Validation workflows call batch to enrich up to 10 domains in one call (core groups, cache-first, per-domain ok/error).domains, include, exclude
Code samples

Call company_domain from your stack

curl -X POST https://api.reefapi.com/enrich-company/v1/company_domain \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"domain":"github.com","include":["domain","presence"]}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.enrich-company.company_domain with {"domain":"github.com","include":["domain","presence"]}.
Use cases

Who uses this API and why

  • Sales-intelligence tools call company_domain to resolve a lead's domain to a company.
  • CRM enrichment fills account records from a website.
  • Data pipelines use batch to enrich a whole prospect list.
FAQ

Questions developers ask before integrating

Two blocks give me different employee counts and headquarters. Which one is right?

Both are reported and neither is adjudicated. On stripe.com the company block returned employees 17148 with source linkedin-jobs at confidence 0.7, while funding.registry returned employees 2500 from Wikidata. Headquarters split the same way: 'South San Francisco, California' from linkedin-jobs at 0.65 against 'San Francisco' from Wikidata. Every field under company is an object with value, source, confidence and last_checked precisely so you can apply your own preference order instead of trusting a merged number.

Is revenue_range a real financial figure?

No. It is a self-reported band lifted from an employer profile and it arrives at the lowest confidence in the response. The measured value for stripe.com was '$25M to $100M' with source indeed and confidence 0.6, which is plainly not Stripe's revenue. Use it as a rough sizing hint on small companies and ignore it on large ones.

Why does the news group return articles that are not about the company?

Because news is a brand-name keyword search, not an entity-resolved feed. A measured run on stripe.com returned 10 articles, several of which were about a college football player losing his black stripe, mixed in with genuine Stripe coverage. Filter on your side using the title and source fields, or exclude the group when the brand name is also a common word.

What does total_raised null mean?

Unknown, not zero. The funding group is built from a public registry plus funding press, and the response says as much in its own note: exact amounts and investor lists live in paid sources that are not wired in. For stripe.com the registry matched Wikidata Q7624104 with founded 2010, and recent_funding_news carried real valuation headlines, while total_raised and investors were both null.

Does the traffic group tell me how many visitors a site gets?

No, it is a popularity rank from the Tranco top-million list and the response repeats the distinction. The measured value for stripe.com was rank 240, tier top_1k, as_of 2026-07-20. A rank is ordinal: it says fewer than 240 domains are more popular, not how many visits the site received.

Why did entity.confidence change between two calls on the same domain?

Because entity resolution is assembled from whatever groups ran. With include ['domain','presence'] the entity block scored 0.8 on the site's own og name plus a stem guess. With the reputation group included, a trustpilot-domain-match arrived at weight 0.95 and confidence rose to 0.99, with the extra evidence listed in entity.evidence. If entity confidence matters to your pipeline, run more groups rather than fewer.

The reputation group returned a Google Maps place that is not the head office.

That match is made by website domain, so it lands on whichever listing carries the domain rather than the headquarters. On stripe.com it returned 'Stripe Toronto Office' with rating 3.2 from 4 reviews. Read reputation.maps as evidence that a physical listing exists, and use enrich-local when you need a specific named branch.

A group says status matched but the field I want is empty. Is that a contradiction?

No, provenance reports the group and not each source inside it. Several groups fan out to more than one source and are marked matched when any of them lands, which is why presence can carry a filled og block next to an empty search.top_results array, and why developer can report a matched github_org while top_repos stays []. Test the specific field you need instead of the status flag, and note that meta.completeness_pct counts groups that ran, not fields that filled.

What is the Company Intelligence API?

Company Intelligence API is a ReefAPI endpoint group for company intelligence It returns live JSON through POST requests under /enrich-company/v1.

Is the Company Intelligence API free to try?

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

Do I need a Company Intelligence login or account?

No login to Company Intelligence 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 Company Intelligence data?

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

How many credits does the Company Intelligence API use?

Company Intelligence actions currently cost 6-24 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

Can I call Company Intelligence from an AI assistant or MCP client?

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

docs / enrich-company

Company Intelligence

Company Intelligence

base /enrich-company/v13 endpoints
post/enrich-company/v1/company_domain6 credits

domain → entity-resolved company profile (core groups) with per-field provenance

ParameterAllowed / rangeDescription
domainrequiredCompany website domain to enrich (bare host like stripe.com; a full URL or leading www. is accepted and normalized).
includeoptionaldomain · tech · presence · news · developer · hiring · reputationRun ONLY these field groups (cost control). Default: all groups of this action. `entity` + `company` are always computed from whatever ran.
excludeoptionaldomain · tech · presence · news · developer · hiring · reputationDrop these field groups from this action's default set.
Try in playground →
post/enrich-company/v1/company_domain_rich14 credits

everything in company_domain + firmographics (LinkedIn/Indeed/Glassdoor), review depth, local/maps match, brand trends, app/package presence, registry funding signals (Wikidata), traffic rank

ParameterAllowed / rangeDescription
domainrequiredCompany website domain to enrich (bare host like stripe.com; a full URL or leading www. is accepted and normalized).
includeoptionaldomain · tech · presence · news · developer · hiring · reputation · trends · apps · funding · trafficRun ONLY these field groups (cost control). Default: all groups of this action. `entity` + `company` are always computed from whatever ran.
excludeoptionaldomain · tech · presence · news · developer · hiring · reputation · trends · apps · funding · trafficDrop these field groups from this action's default set.
Try in playground →
post/enrich-company/v1/batch24 credits

enrich up to 10 domains in one call (core groups, cache-first, per-domain ok/error)

ParameterAllowed / rangeDescription
domainsrequiredUp to 10 domains (array or comma-separated). Each is enriched like company_domain; per-domain ok/error, cache-first.
includeoptionaldomain · tech · presence · news · developer · hiring · reputationRun ONLY these field groups (cost control). Default: all groups of this action. `entity` + `company` are always computed from whatever ran.
excludeoptionaldomain · tech · presence · news · developer · hiring · reputationDrop these field groups from this action's default set.
Try in playground →