API & MCP Docs
Technology data for your code and your AI agent: which companies use a product, what any company runs, and who just started using a tool, each with how we found it. Company contacts are included where we have them. Use the REST API below, or the MCP server.
Endpoints
| Method | Path | Description | Cost |
|---|---|---|---|
| GET | /api/v1/tech/{slug} | Companies using a technology: the customer list for any product we track | 1 lookup per result |
| GET | /api/v1/tech | The most used technologies, with company counts | 1 lookup |
| GET | /api/v1/signals | Technology changes: companies that started using a tool, newest first | 1 lookup per result |
| GET | /api/v1/lookup?domain={domain} | One company: the tools it runs, company facts and signals; on Pro, Business and the trial also the email format, addresses published on its own website (with verification status) and named people from its own pages | 1 reveal with contacts |
| GET | /api/v1/companies?sector=&size=&tech= | Companies filtered by technology, sector and size | 1 lookup per result |
| GET | /api/v1/search?q={query} | Find a company by name or domain | 1 lookup per result |
| GET | /api/v1/people | Named people from companies' own websites, filtered (Pro, Business and the trial) | 1 reveal per company |
| GET | /api/v1/people/{id} | One person from a company's own website (Pro, Business and the trial) | 1 reveal |
| GET | /api/v1/me | Your plan, usage, and API key info | Not counted |
| POST | /api/v1/api-key/regenerate | Generate or regenerate your API key | Not counted |
Authentication
Send your API key as a Bearer token. Every account has one; find it in your account settings. Company, technology and signal endpoints also answer without a key, on the per-IP limits below.
curl https://agentdata.run/api/v1/lookup?domain=stripe.com \
-H "Authorization: Bearer YOUR_API_KEY"Email Filtering
The /v1/lookup endpoint returns every address we found at the domain with its verification_status (valid, catch-all, unverified, unknown). Free provider emails (Gmail, Yahoo, etc.) and addresses that failed verification are always excluded. By default, only emails with confidence ≥ 50 are returned; pass verification_status=valid,catch-all for SMTP-verified only.
| Parameter | Default | Description |
|---|---|---|
| min_confidence | 50 | Minimum confidence score (0-95). Use 90 for outreach-safe emails only. |
| verification_status | all | Filter by status. Comma-separated: valid, catch-all, catch-all-unknown, unknown. |
# Only outreach-safe emails (confidence 90+, verified or catch-all)
curl "https://agentdata.run/api/v1/lookup?domain=stripe.com&min_confidence=90&verification_status=valid,catch-all" \
-H "Authorization: Bearer YOUR_API_KEY"Email Verification
Verification runs continuously against the receiving mail server; the status and the date it was checked come back with each address, so filter on it rather than assuming. Free provider emails (Gmail, Yahoo, Hotmail) are excluded from all responses.
| Status | Confidence | Meaning |
|---|---|---|
| valid | 90-95 | SMTP confirmed: the mailbox exists and server is not catch-all |
| catch-all | 55-85 | Server accepts all addresses, so the email is likely valid but can't be individually confirmed |
| catch-all-unknown | 65-80 | SMTP accepted but catch-all detection was inconclusive |
| unknown | 45-75 | Server didn't respond or returned an inconclusive result |
| unverified | 50 | Not yet verified, queued for an SMTP check |
Invalid and disposable emails are filtered out by default (confidence below 50). Emails are re-verified every 30-90 days.
Limits
Three dials per tier. Company, tech stack and signal endpoints work without a keyon the per-IP limits; a key moves you to your account's limits. Limits exist to stop bulk extraction, not to meter normal use; almost nobody meets them.
| No key (per IP) | Account, no plan | Pro and trial | Business | |
|---|---|---|---|---|
| Requests per second | 2 | 5 | 20 | 20 |
| Requests per 5 hours | 300 | 5,000 | 25,000 | 50,000 |
| Distinct companies per day | 50 | 100 | 1,000 | 5,000 |
| Contact reveals per day | none | none | 10,000 | 25,000 |
The 5-hour window is fixed (it resets on the clock, see X-RateLimit-Reset); companies and contacts reset at midnight UTC. One bucket per account across the website, the API and the MCP server. A 429 carries Retry-After and a reason of rps, req5h, companies_day or contacts_day.
What counts as a contact reveal
Only endpoints that return emails or people charge reveals: one per company, and look-up limits reset at midnight UTC; a company you already looked up today doesn't count again.
- /v1/lookup: 1 reveal per domain (emails and people included). An unknown domain is queued for crawling, answers 404 with
Retry-After, and is not charged. - /v1/people, /v1/people/{id}: 1 reveal per company in the response. Results are capped to your remaining reveals.
- /v1/companies, /v1/search, /v1/tech, /v1/tech/{slug}, /v1/signals: no reveals. They count against the request window and the distinct-companies dial, and work without a key.
- /v1/me, /v1/api-key/regenerate: not counted.
Fair use: the website, the API and the MCP server share one set of limits per account (per IP without one): 50 companies a day without an account, 100 on an account without a plan, 1,000 on Pro and 5,000 on Business. Paging through a customer list you have unlocked counts as requests, not as companies looked up. Up to 50 domains a day can be pushed to the front of the crawl (500 on Pro); more still queue, at normal priority. Accounts used to copy the database in bulk, or shared outside the users a plan includes, are closed.
Response Headers
All data endpoints return usage headers so you can track consumption programmatically.
| Header | Description |
|---|---|
| X-RateLimit-Limit | Requests allowed per 5-hour window for your tier |
| X-RateLimit-Remaining | Requests left in the current window |
| X-RateLimit-Reset | Unix time the window resets |
| X-Companies-Limit / X-Companies-Remaining | Distinct companies allowed and left today (list endpoints) |
| X-Plan | anonymous, or your account's plan |
| X-Lookups-Limit / X-Lookups-Remaining | Contact reveals allowed and left today |
| X-Lookups-Consumed | Reveals charged by this request |
| Retry-After | On a 429: seconds until you can retry |
Example: /v1/lookup
Full company enrichment in a single call.
curl https://agentdata.run/api/v1/lookup?domain=stripe.com \
-H "Authorization: Bearer YOUR_API_KEY"{
"domain": "stripe.com",
"company": {
"name": "Stripe",
"description": "Financial infrastructure for the internet",
"sector": "Financial Services & Fintech",
"vertical": "Payments",
"b2b_b2c": "b2b",
"business_model": "saas",
"sales_motion": "plg",
"size": "large",
"founded_year": 2010,
"headquarters_city": "San Francisco",
"headquarters_country": "US",
"employee_count": 8000,
"linkedin": "https://linkedin.com/company/stripe",
"email_pattern": "first.last",
"is_catch_all": false,
"mx_provider": "google-workspace",
"signals": {
"has_pricing_page": true,
"has_api_docs": true,
"has_blog": true,
"has_careers_page": true
}
},
"emails": {
"data": [
{
"email": "jane.smith@stripe.com",
"name": "Jane Smith",
"title": "VP Engineering",
"confidence": 95,
"verification_status": "valid",
"verified_at": "2026-04-14T10:30:00Z",
"source": "found",
"found_on_url": "https://stripe.com/about",
"found_at": "2026-03-02T08:12:00Z",
"is_role_based": false
}
],
"total": 42,
"verified": 38,
"returned": 10,
"capped": true
},
"technologies": [
{ "name": "React", "category": "Framework", "confidence": "high" }
],
"people": {
"data": [
{ "id": "...", "name": "...", "title": "CTO", "seniority": "c_level" }
],
"total": 156,
"returned": 10,
"capped": true
},
"lookup": {
"consumed": true,
"remaining": 249,
"cached_until": null
}
}Error Codes
| Status | Meaning | Action |
|---|---|---|
| 400 | Bad request | Check required parameters (e.g. domain, q) |
| 401 | Authentication required | Add Bearer token header |
| 403 | Your plan does not include this | Check your plan in your account, or start a trial |
| 404 | Not found | Domain or person not in our database |
| 429 | A limit was hit (reason in the body) | Wait for Retry-After seconds, then retry |
| 500 | Internal error | Retry or contact support |
MCP Server
Customer lists, new customers and company look-ups in Claude, Claude Code, ChatGPT, Cursor, VS Code or any MCP client, with your AgentData account and its plan's limits. Claude and ChatGPT connect by signing in or pasting your API key; other clients send the key as a header.
Setup for each client, the tools and limits: MCP server guide.
Hosted (Streamable HTTP):
{
"mcpServers": {
"agentdata": {
"url": "https://mcp.useagentdata.com/mcp",
"headers": {
"Authorization": "Bearer YOUR_API_KEY"
}
}
}
}Source and changelog: github.com/nick-timms/agentdata-mcp-server.
Ready to start?
Try Pro free for 7 days, no card needed. Your API key is in your account from the start.