Guides · Domain lookup
Domain to company API
Send a website domain and get back the company it belongs to: name, industries, headquarters, headcount band and funding summary. One domain per request, or up to 100 domains in a batch. Useful for enriching CRM records, lead lists and signup forms.
Look up one domain
GET https://indexed.vc/api/v1/companies?domain= with your key in the X-API-Key header. A match returns one company card; fields we do not have come back as null.
curl "https://indexed.vc/api/v1/companies?domain=stripe.com" \
-H "X-API-Key: idx_YOUR_KEY_HERE"{
"data": [
{
"id": "<uuid>",
"name": "Stripe",
"slug": "stripe",
"logo_url": "<logo url>",
"website": "http://stripe.com",
"short_description": "Stripe provides payments, billing, money-management, fraud-prevention, and identity tools that help businesses accept payments and manage online commerce.",
"industries": [
"Banking",
"Fintech",
"SaaS",
"Payments",
"Developer Tools"
],
"hq_city": "South San Francisco",
"hq_country": "United States",
"employee_count_range": "5001-10000",
"total_funding_raised": 8755000000,
"last_funding_date": "2023-03-15",
"last_funding_type": "series_g_plus",
"last_valuation": 107000000000,
"operating_status": "active",
"estimated_revenue_range": null,
"_revealed": false,
"domain_match": {
"queried": "stripe.com",
"canonical_domain": "stripe.com",
"matched_via": "canonical_domain"
}
}
],
"meta": {
"total": 1,
"page": 1,
"limit": 25,
"hasMore": false,
"revealed_count": 0,
"unrevealed_count": 1,
"search_quota": {
"per_day": 250,
"used_today": 1,
"remaining_today": 249,
"resets_at": "2026-09-26T00:00:00.000Z"
},
"depth": {
"endpoint": "GET /api/v1/companies/{slug}?depth=full",
"cost_credits": 3,
"unlocks": [
"funding_rounds",
"investors",
"tech_stack",
"app_stack",
"valuations"
],
"docs": "https://indexed.vc/docs/api#credits"
}
}
}The same call from JavaScript:
const res = await fetch("https://indexed.vc/api/v1/companies?domain=stripe.com", {
headers: { "X-API-Key": process.env.INDEXED_API_KEY },
})
const { data } = await res.json()
const company = data[0] ?? null // null when the domain is not coveredLook up a batch
POST https://indexed.vc/api/v1/companies/lookup takes up to 100 domains per request. Inputs are normalized and deduplicated, and each domain gets its own result: hit with the company,miss with a coverage_status, or insufficient_credits. Each costs 1 credit per delivered hit; misses are free.
curl -X POST "https://indexed.vc/api/v1/companies/lookup" \
-H "X-API-Key: idx_YOUR_KEY_HERE" \
-H "Content-Type: application/json" \
-d '{ "domains": ["stripe.com", "https://www.notion.so/product", "example-startup.io"] }'In Python:
import requests
domains = ["stripe.com", "notion.so", "linear.app"]
res = requests.post(
"https://indexed.vc/api/v1/companies/lookup",
headers={"X-API-Key": "idx_YOUR_KEY_HERE"},
json={"domains": domains}, # up to 100 per request
)
for item in res.json()["data"]: # one item per domain, in the order sent
if item["status"] == "hit":
company = item["data"]
print(item["domain"], company["name"], company["total_funding_raised"])
else:
print(item["domain"], item["status"], item.get("coverage_status"))How matching works
The lookup matches the exact domain, never a guess. When the match came from somewhere other than the current website, domain_match.matched_via says so (former_website or alias_domain), so a different canonical website is explicit rather than surprising.
| You send | You get | Why |
|---|---|---|
| https://www.Stripe.com/pricing | stripe.com | Scheme, www, path and letter case are ignored |
| stripe.com | Stripe | Exact domain match: matched_via is canonical_domain |
| bluemercury.com | Not Mercury | Never a lookalike: mercury.com never matches bluemercury.com |
| transcarent.ai | Transcarent (transcarent.com) | A company that moved domains is still found: matched_via is former_website |
| app.example.com | Looked up as written | A sub-host is not rewritten to example.com, so send the company's main domain |
If two companies claim the same domain, the most specific host wins. When that cannot be decided, the lookup returns a miss rather than picking one.
When a domain is not found
Misses are free and never count against your daily lookups. A miss carriescoverage_requested and a coverage_status that says why:
| coverage_status | Meaning |
|---|---|
| queued | We do not have the company yet; the domain is recorded for coverage review |
| pending_enrichment | We hold the company but its profile is not yet complete enough to serve |
| scope_review | We hold the company and its fit with coverage scope is under review |
| not_in_coverage_scope | We hold it but it is outside coverage scope (for example a consultancy), so it is not served |
| not_queued | Recording the request failed; retry later |
Cost and limits
| Plan | Lookups per day | Rate limit |
|---|---|---|
| Free | 25 | 30 req/min |
| Silver | 250 | 60 req/min |
| Gold | 1,000 | 120 req/min |
| Platinum | 2,500 | 240 req/min |
Single-domain lookups count against the daily lookups above. Full company records, with round-by-round funding and the investors in each round, cost 3 credits through GET /api/v1/companies/{slug}?depth=full. A free key needs no card.
Without writing code
Paste a list of domains into Enrich my list after signing up and download the results as a CSV, or run the lookup from a Clay table with the Clay guide.
Questions
What does a lookup that finds nothing cost?
Nothing. Misses are free and do not count against your daily lookups. The domain is recorded for coverage review, and coverage_status says why it missed.
Can I send full URLs instead of domains?
Yes. A full URL is reduced to its host, and www and letter case are ignored. Send the company's main domain rather than a sub-host such as app.example.com.
What happens when a company changed its domain?
Its old domain still resolves to the company. The response includes domain_match, and matched_via is former_website or alias_domain when the match did not come from the current website.
How do I get funding rounds and investors, not just the summary?
Call GET /api/v1/companies/{slug}?depth=full with the slug from the lookup. It costs 3 credits and returns round-by-round funding history with the investors in each round.
Which companies are covered?
Technology and product companies, including bootstrapped ones, and their funding and investors. It is not a registry of every business, so expect misses on agencies, local services and very new companies.