Documentation

Everything in the dashboard is available by API and MCP with the same key. Misses never cost credits. Account, usage and catalog calls are free.

1. Install the tag

<script async src="https://deanonymized.com/d.js?k=YOUR_PIXEL_KEY"></script>

4 KB, async, one first-party cookie (_dzid, 400 days). Honours Global Privacy Control and TCF v2 automatically. Shopify cart activity is captured without extra code.

Optional calls

dz('identify', 'jane@example.com');            // deterministic match (login, form, ESP click)
dz('consent', 'granted');                       // or 'denied' — from your CMP
dz('track', 'pricing_toggle', { plan: 'pro' }); // custom event
dz('order', { id: '#1001', total: 129.00, email: 'jane@example.com' }); // attribution

Server-side ingest

POST https://deanonymized.com/api/ingest
Content-Type: application/json
{ "k": "YOUR_PIXEL_KEY", "cid": "<your visitor id>", "ua": "<user agent>", "e": [{ "t": "pv", "u": "https://…", "p": "/pricing", "ts": 1730000000000 }] }

2. Authentication

Authorization: Bearer dz_live_…      # or X-API-Key header, or ?api_key=

Keys are scoped (read, enrich, search, ingest). Requests are limited to 600/min per key; records are limited per plan over 5-hour and 7-day windows.

3. Enrichment tools

POST /api/v1/<tool> with a JSON body, or { items: [...] } for batches up to 1,000. Each hit charges the listed credits; a miss returns status: "not_found" and charges nothing.

ToolCreditsInputReturns
ip_to_company1ipIP address → company domain with share of traffic
ip_to_hem1ip, user_agent?IP → up to 3 hashed emails ranked by confidence
ip_to_business_profile3ipIP → best person profile (name, title, company)
email_to_business_profile2emailEmail or HEM → work profile
email_to_linkedin1emailEmail or HEM → best LinkedIn URL
email_to_maid1emailEmail or HEM → mobile advertising IDs
email_activity1emailEmail → last active date (suppress stale addresses)
email_validate1emailEmail → A–F send-safety grade with reason
work_to_personal1emailWork email → personal hashed emails
linkedin_to_business_profile4linkedin_urlLinkedIn URL → work profile incl. business email
linkedin_to_business_email4linkedin_urlLinkedIn URL → verified work email only
linkedin_to_personal_email2linkedin_urlLinkedIn URL → personal email (consented regions)
linkedin_to_hashed_emails1linkedin_urlLinkedIn URL → MD5/SHA256 variants for audience matching
linkedin_to_mobile3linkedin_urlLinkedIn URL → carrier-verified mobile (1 phone token)
find_linkedin1first_name, last_name, company_domainFirst + last name + company domain → LinkedIn URL
find_email2first_name, last_name, company_domainName + company domain → business email with grade
universal_identity3emailEmail or HEM → everything: profile, all hashes, device IDs
domain_to_firmographics1domainCompany domain → firmographics (size, revenue, NAICS, HQ, tech)
maid_to_hem1maidMobile advertising ID → hashed emails

Example

curl -X POST https://deanonymized.com/api/v1/linkedin_to_business_profile \
  -H "Authorization: Bearer dz_live_…" -H "Content-Type: application/json" \
  -d '{"linkedin_url":"linkedin.com/in/jane-example"}'

{
  "ok": true, "tool": "linkedin_to_business_profile", "credits_charged": 4, "status": "found",
  "result": {
    "full_name": "Jane Example", "title": "VP Marketing", "seniority": "VP", "department": "Marketing",
    "business_email": "jane.example@example.com", "business_email_grade": "A",
    "business_email_grade_reason": "Validated 9 days ago, mailbox live", "business_email_validated_at": "2026-10-24T…",
    "profile_last_seen": "2026-10-30T…", "company": { "name": "Example Co", "domain": "example.com", "employee_range": "201-500" }
  }
}
POST /api/v1/people_search   { "title": "VP Marketing", "size": "201-500", "grade": "AB", "page": 1 }
POST /api/v1/people_search   { "company": "ramp.com", "count_only": true }     # free preview
POST /api/v1/company_search  { "industry": "Fintech", "size": "1001-5000" }    # free

5. Send-safety grades

  • A validated in the last 30 days, mailbox live. Send.
  • B known positive engagement in the last 180 days. Probably send.
  • C catch-all domain. Your call.
  • D bounce, complaint, spam trap or do-not-mail. Do not send.
  • F no signal either way. Your call.

6. MCP

# Claude Code
claude mcp add --transport http deanonymized https://deanonymized.com/api/mcp --header "Authorization: Bearer dz_live_…"

# Claude Desktop / Cursor / ChatGPT connectors
{ "mcpServers": { "deanonymized": { "url": "https://deanonymized.com/api/mcp", "headers": { "Authorization": "Bearer dz_live_…" } } } }

# Local stdio
DEANONYMIZED_API_KEY=dz_live_… npx @deanonymized/mcp

Extra MCP-only tools: website_visitors, find_decision_makers, draft_first_touch, account.

7. Webhooks out

X-Deanonymized-Timestamp: 1730000000000
X-Deanonymized-Signature: hex(HMAC_SHA256(secret, timestamp + "." + body))

Flat payload fields: id, identified_at, domain, level, confidence, intent_score, hot_lead, net_new, repeat, hot_pages, icp_tags, first_name, last_name, full_name, title, seniority, department, linkedin_url, email, email_grade, personal_email, mobile_phone, company_name, company_domain, industry, employee_range, revenue_range, city, state, country, page_views, sessions, last_pages, profile_url.

8. Account and usage

GET /api/v1/account                  # plan, balances, limits (free)
GET /api/v1/usage?period=week        # per-day usage by type (free)
GET /api/v1/tools                    # this catalog (free, no auth)

9. Errors

200 with status: not_found means no data. 401 bad key. 403 missing scope. 404 unknown tool. 429 rate limit with retry_after_seconds. Free-plan credit exhaustion returns 200 with credits_exhausted: true.