Looking for the overview — what this API returns, what it costs, and a call you can run without a key? See the Local Business Intelligence API page →
Reputation & Reviews

Local Business Intelligence API & Scraper

The Local Business Enrichment API resolves a business to structured data as clean JSON.

2 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 business_lookup endpoint returns a place's name, address, phone, website, domain, category, rating, review count and location, and you can batch many lookups. It is built for CRM enrichment, lead generation and local-data products that need clean business records. One ReefAPI key, one shared credit pool, the standard envelope.

Reference

How to tell a real match from a nearest-neighbor match

This engine always returns a place, so the match block is the only thing standing between you and the wrong business. The two columns below are real calls: one for a business that exists, given with coordinates, and one for a name that does not exist anywhere. Both returned ok:true and a fully populated place, and the difference is visible only in these fields.

FieldReal business, lat/lng suppliedFabricated name, no coordinates
Query sentKatz's Delicatessen, Manhattan, lat 40.7223 lng -73.9874Qqxzv Nonexistent Plumbing Services, Austin, Texas
place.name returnedKatz's DelicatessenEconomy Plumbing Services, LLC
match_confidence0.970.83
name_similarity1.00.67
geo_validatedtruefalse
distance_km0.01null
runner_upnullReliant Plumbing - Austin, score_gap 0.09

geo_validated is the field that separated the two, and it can only be true when you supply lat and lng or an address specific enough to geocode. A second fabricated name, this one a bakery in an invented Kansas town, behaved identically: it returned a real bakery in Herington, KS at match_confidence 0.75 with geo_validated false. Gate on geo_validated and name_similarity together, not on match_confidence alone.

Live example

Real request and response JSON

Captured from the indexed primary action, business_lookup, on .

Captured request
{
  "method": "POST",
  "url": "https://api.reefapi.com/enrich-local/v1/business_lookup",
  "headers": {
    "x-api-key": "$REEF_KEY",
    "content-type": "application/json"
  },
  "body": {
    "name": "Katz's Delicatessen",
    "location": "Manhattan",
    "lat": 40.7223,
    "lng": -73.9874,
    "include": [
      "website"
    ]
  }
}
Captured response
{
  "ok": true,
  "meta": {
    "api": "enrich-local",
    "endpoint": "business_lookup",
    "mode": "live",
    "latency_ms": 2850.2,
    "record_count": 1,
    "bytes": 0,
    "cache_hit": false,
    "groups_run": [
      "website",
      "legitimacy"
    ],
    "subcalls": [
      {
        "api": "google-maps",
        "action": "place/search",
        "status": "ok",
        "latency_ms": 2060.1
      },
      {
        "api": "domain-intel",
        "action": "full_report",
        "status": "ok",
        "latency_ms": 779.9
      }
    ]
  },
  "data": {
    "provenance": {
      "reviews": {
        "status": "skipped",
        "missing_reason": "skipped"
      },
      "presence": {
        "status": "skipped",
        "missing_reason": "skipped"
      },
      "news": {
        "status": "skipped",
        "missing_reason": "skipped"
      },
      "place": {
        "status": "matched",
        "engine": "google-maps"
      },
      "website": {
        "status": "matched",
        "engine": "domain-intel"
      },
      "legitimacy": {
        "status": "matched",
        "engine": "composite",
        "signal_count": 6,
        "unknown_count": 2
      }
    },
    "freshness": "[redacted-phone]T17:19:38Z",
    "place": {
      "fid": "0x89c2598f7ff4aa09:0x313547e757cb8cea",
      "place_id": "0x89c2598f7ff4aa09:0x313547e757cb8cea",
      "cid": "[redacted-phone]",
      "name": "[redacted-name]",
      "rating": 4.5,
      "category_primary": "Deli",
      "categories": [
        "Deli",
        "American restaurant",
        "Jewish restaurant"
      ],
      "address": "205 E Houston St, New York, NY 10002",
      "locality": "New York, NY 10002",
      "latitude": 40.722232999999996,
      "longitude": -73.98742899999999,
      "website": "https://katzsdelicatessen.com/",
      "domain": "katzsdelicatessen.com",
      "phone": "[redacted-phone]",
      "phone_display": "[redacted-phone]",
      "hours_today": [
        "Open 24 hours"
      ],
      "maps_url": "https://www.google.com/maps?cid=[redacted-phone]"
    },
    "match": {
      "match_confidence": 0.97,
      "name_similarity": 1,
      "distance_km": 0.01,
      "geo_validated": true,
      "alternatives_considered": 1,
      "runner_up": null
    },
    "coverage_note": "country could not be determined — Yelp (US/CA-centric) attempted best-effort. Yelp is keyless via its internal GraphQL (no Fusion key / no browser): review SAMPLES populate with an encBizId (pass `yelp_enc_biz_id`); otherwise REAL presence (rating + review count) is reported from the Google-indexed Yelp page (the name→encBizId resolver is DataDome-walled). Tripadvisor (travel/hospitality) provides review samples for this business. Trustpilot is matched by website domain (real-data gated).",
    "website": {
      "domain": "katzsdelicatessen.com",
      "registered": true,
      "registrar": "GoDaddy.com, LLC",
      "domain_created": "[redacted-phone]T19:06:45Z",
      "domain_age_days": 5820,
      "ssl_active": true,
      "ssl_latest_issuer": "C=US, O=Let's Encrypt, CN=E7",
      "dns_summary": {
        "A": 2,
        "AAAA": 0,
        "MX": 5,
        "TXT": 3,
        "NS": 4,
        "CNAME": 0,
        "SOA": 1,
        "CAA": 0
      },
      "website_alive": true
    },
    "legitimacy": {
      "signals": [
        {
          "signal": "listed_on_google_maps",
          "present": true,
          "detail": "Found on Google Maps as 'Katz's Delicatessen' (Deli)."
        },
        {
          "signal": "has_public_address",
          "present": true,
          "detail": "205 E Houston St, New York, NY 10002"
        },
        {
          "signal": "has_public_phone",
          "present": true,
          "detail": "([redacted-phone]"
        }
      ],
      "unknowns": [
        "google_maps_review_count",
        "google_presence"
      ],
      "coverage_note": "country could not be determined — Yelp (US/CA-centric) attempted best-effort. Yelp is keyless via its internal GraphQL (no Fusion key / no browser): review SAMPLES populate with an encBizId (pass `yelp_enc_biz_id`); otherwise REAL presence (rating + review count) is reported from the Google-indexed Yelp page (the name→encBizId resolver is DataDome-walled). Tripadvisor (travel/hospitality) provides review samples for this business. Trustpilot is matched by website domain (real-data gated).",
      "disclaimer": "Signal list for due-diligence context only. Absence of reviews/data is reported as 'unknown', NOT as a negative or risk signal. This is NOT a KYB/AML/credit decision, trust score, or verdict."
    }
  }
}
Actions

What the Local Business Intelligence API does

ActionDescriptionConcrete use caseKey params
business_lookupname+location ‖ place_query → matched place (Google Maps) + multi-source review presence + website health + indexed presence + negative-news + legitimacy signal list, with an honest coverage_note + per-group provenance.Support teams call business_lookup to get name+location ‖ place_query → matched place (Google Maps) + multi-source review presence + we….name, location, place_query, lat, lng, ...
batchenrich up to 10 businesses in one call (lead-list use-case; per-item ok/error, cache-first).Reputation platforms call batch to enrich up to 10 businesses in one call (lead-list use-case; per-item ok/error, cache-first)..businesses, include, exclude
Code samples

Call business_lookup from your stack

curl -X POST https://api.reefapi.com/enrich-local/v1/business_lookup \
  -H "x-api-key: $REEF_KEY" \
  -H "content-type: application/json" \
  -d '{"name":"Katz's Delicatessen","location":"Manhattan","lat":40.7223,"lng":-73.9874,"include":["website"]}'
MCP one-liner
Ask your MCP-connected assistant: call reefapi.enrich-local.business_lookup with {"name":"Katz's Delicatessen","location":"Manhattan","lat":40.7223,"lng":-73.9874,"include":["website"]}.
Use cases

Who uses this API and why

  • CRM enrichment calls business_lookup to attach place data to a lead.
  • Lead-gen tools resolve a business to its phone and website.
  • Data pipelines use batch to enrich a whole list of businesses.
FAQ

Questions developers ask before integrating

What does the response look like when the business does not exist?

It does not 404 and it does not come back empty. In two measured runs with invented business names, the engine returned ok:true and the nearest same-category real business: a fabricated Kansas bakery resolved to 'Sweet Creations Bakery' at match_confidence 0.75, and a fabricated Austin plumber resolved to 'Economy Plumbing Services, LLC' at 0.83. In both cases geo_validated was false, name_similarity was 0.67 or lower, and a runner_up was present with a small score_gap. Treat a miss as something you detect from the match block rather than from an error code.

Google shows found:false but there is a rating in the same object. Which is it?

found on the google entry means review text is available, not that the place has no rating. A measured lookup returned google {found:false, rating:4.5, review_count:null} together with the note that Maps supplies a star rating only. A second lookup on the same business, phrased as a place_query with country US, returned found:true with review_count 54698. The rating is reliable in both, so read rating and review_count directly instead of branching on found.

Yelp and Tripadvisor keep coming back found:false. Are they really absent?

Not necessarily. Each source carries its own missing_reason, and that reason describes the lookup path rather than proving the business has no page there. In one measured run for a famously reviewed New York deli, both came back found:false, and a repeat of the same business returned more sources. If Yelp coverage matters, pass yelp_enc_biz_id, the encrypted business identifier, which skips the resolution step and populates the review samples directly.

What are fid, place_id and cid, and are they the same thing?

fid and place_id came back identical in every measured response, both in the hex-pair form 0x89c2598f7ff4aa09:0x313547e757cb8cea. cid is the decimal form of the second half, 3545819340560108778 in that example, and it is what maps_url uses: https://www.google.com/maps?cid=3545819340560108778. Store all of them as strings, because cid overflows a 32-bit integer and the hex pair is not a number at all.

Is the legitimacy block a trust score?

No, and the response goes out of its way to say so. It returns signals as a list of named checks, each with present true or false and a human-readable detail, alongside an unknowns array for anything that could not be established. A measured lookup produced 7 signals and 4 unknowns, including listed_on_google_maps, has_public_address, has_public_phone, has_working_website, domain_registered and website_has_ssl. The disclaimer in the payload states that missing data is reported as unknown and never as a risk signal, and that this is not a KYB, AML or credit decision.

Does passing country actually change anything?

Yes, it changes source routing and the honesty note attached to it. Without country, a measured response carried a coverage_note beginning 'country could not be determined' and its reviews group listed only one real source. With country US on the same business, the note dropped that clause and the reviews group reported two real sources. It costs nothing to send, so send it.

When should I use enrich-company instead?

When your input is a domain rather than a name and a place. This engine is anchored on a Maps listing, so it wants a business name plus a location, coordinates or a place_query, and it will not accept a bare domain. enrich-company starts from the domain and returns firmographics, WHOIS, hiring and tech instead of storefront data. The overlap is small: both can surface a Trustpilot match and basic domain health.

How do include and exclude behave, and what is the batch limit?

The place group is always resolved because it is the anchor, so include and exclude only govern reviews, website, presence, news and legitimacy. Groups you leave out appear in provenance with status 'skipped', which is distinct from 'not_found'. Batch takes up to 10 businesses per call and reports per-item ok or error; an empty request with no name, location or place_query returns MISSING_PARAM.

What is the Local Business Intelligence API?

Local Business Intelligence API is a ReefAPI endpoint group for local business intelligence It returns live JSON through POST requests under /enrich-local/v1.

Is the Local Business Intelligence API free to try?

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

Do I need a Local Business Intelligence login or account?

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

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

How many credits does the Local Business Intelligence API use?

Local Business Intelligence actions currently cost 8 credits per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.

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

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

docs / enrich-local

Local Business Intelligence

Local Business Intelligence

base /enrich-local/v12 endpoints
post/enrich-local/v1/business_lookup8 credits

name+location ‖ place_query → matched place (Google Maps) + multi-source review presence + website health + indexed presence + negative-news + legitimacy signal list, with an honest coverage_note + per-group provenance.

ParameterAllowed / rangeDescription
nameoptionalBusiness name to look up. Pair with `location` (or lat/lng) for accurate chain-branch matching. Provide this+location OR `place_query`.
locationoptionalCity / neighborhood / address the business is in. Disambiguates same-named branches (used with `name`).
place_queryoptionalFree-text place query (name + place hint in one string). Alternative to name+location.
latoptional-90–90Latitude to geo-bias the match around — strongest branch disambiguator (pair with lng).
lngoptional-180–180Longitude to geo-bias the match around (pair with lat).
countryoptionalISO-3166 country hint (us, gb, tr…) — improves region-source routing (Yelp=US/CA, Tripadvisor=travel) and the coverage_note.
yelp_enc_biz_idoptionalOptional Yelp business identifier (the encrypted ID, not the URL slug). This is a shortcut: the engine already resolves a business name to its Yelp ID automatically — pass this only when you already have it and want to skip the lookup step.
includeoptionalreviews · website · presence · news · legitimacyRun ONLY these enrichment groups (cost control). Default: all. `place` (Google Maps) is always resolved — it is the anchor.
excludeoptionalreviews · website · presence · news · legitimacyDrop these enrichment groups from the default set.
Try in playground →
post/enrich-local/v1/batch8 credits

enrich up to 10 businesses in one call (lead-list use-case; per-item ok/error, cache-first).

ParameterAllowed / rangeDescription
businessesrequiredUp to 10 businesses (each {name,location} / {place_query} / {name,lat,lng}). Lead-list enrichment; per-item ok/error, cache-first.
includeoptionalreviews · website · presence · news · legitimacyRun ONLY these enrichment groups (cost control). Default: all. `place` (Google Maps) is always resolved — it is the anchor.
excludeoptionalreviews · website · presence · news · legitimacyDrop these enrichment groups from the default set.
Try in playground →