POST /v1/resolve
Resolve a company identity (domain, email, or name) into a fused profile from the shared business graph. This is the "context that remembers": a hit serves the compounding ledger record (already fused, carrying a source count and freshness); a miss extracts live from the company's own site, fuses it into the graph, and returns the fresh record. Either way the graph gets better every call.
They cache pages. We keep a ledger.
Request
POST /v1/resolve
Content-Type: application/json
x-api-key: YOUR_KEYBody
At least one of domain, email, or name is required.
| Field | Type | Description |
|---|---|---|
domain | string | Company domain, e.g. stripe.com. Strongest match. |
email | string | Resolved to its domain (jane@stripe.com → stripe.com). |
name | string | Company name. Best paired with state or zip to disambiguate. |
state | string | Two-letter state, narrows a name match. |
zip | string | Postal code, narrows a name match. |
Example
curl -X POST https://api.superscraper.dev/v1/resolve \
-H "x-api-key: ss_live_xxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{"domain": "stripe.com"}'Response
{
"resolved": true,
"domain": "stripe.com",
"name": "Stripe, Inc.",
"description": "Financial infrastructure for the internet",
"logo": "https://stripe.com/img/logo.svg",
"industry": { "naics": "522320", "title": "Financial Transactions Processing" },
"socials": { "linkedin": "https://linkedin.com/company/stripe" },
"tech_stack": ["react", "stripe"],
"location": { "city": "San Francisco", "state": "CA", "zip": "94103", "country": "US" },
"phone": "+1-888-555-0100",
"email": "info@stripe.com",
"employee_band": "1000+",
"revenue_band": null,
"_resolved_by": "domain",
"_confidence": 0.9,
"_freshness": "2026-07-18T12:00:00.000Z",
"_source_count": 4
}Hit vs miss
_resolved_by | Meaning | Confidence |
|---|---|---|
domain / uei / license | Graph hit on a strong key | 0.9 |
phone | Graph hit on phone | 0.85 |
name+… | Graph hit on a name match | 0.7 |
live | Graph miss, extracted live from the site + written through | 0.4-0.88 (by signals resolved) |
_source_count= how many independent sources have fused into this record. It grows over time, which is the "gets fresher every call" property a stateless scraper cannot offer._freshness= when the record was last enriched or seen.
Errors
| Status | Cause |
|---|---|
| 400 | none of domain, email, or name supplied |
| 404 | graph miss and no domain to resolve live from |
| 503 | graph disabled and no domain supplied (live resolution needs a domain) |
A live-path fetch failure returns 200 with { "resolved": false, "error": "..." }, never a crash.
Notes
- Pair with Brand (assemble a profile) and Graph query (reverse-index the graph). Together they are the Understand layer: any company in, a confidence- scored, compounding profile out.