Free domain intelligence API: what you can get without paying
· 6 min read · Company enrichment
A free domain intelligence API should tell you, for any email address or domain, what kind of domain it is (company, free webmail, disposable, academic, government or ISP), whether the address looks machine-generated, whether the domain exists and can receive mail, and for company domains, who the company is. pingutil does all of that for free, with no credit card and no monthly quota: you get a key from the dashboard and a limit of 60 requests per minute per key. What you don't get is SMTP mailbox verification, bulk endpoints, contact data or registration data like WHOIS and domain age.
This page lists exactly what's included, what isn't, and how it compares to the free tiers of other services as of 2026. If you want the broader definition first, read what domain intelligence is.
What a free domain intelligence API should give you
Before comparing products, here's the checklist we'd use. A useful API answers these in one call:
- Category. Is
jane@acme.ioa business address, a Gmail account, a throwaway inbox, a university or a government agency? This is the decision most signup forms and lead pipelines actually need. - Normalization.
Mail.Stripe.com,www.stripe.comandstripe.comshould all resolve to the same registrable domain, and internationalized domains should be handled. - Address signals. A real domain can still carry a scripted address like
xk7qmz2p@gmail.com. Domain lists can't see that; a local-part check can. - DNS facts. Does the domain exist? Can it receive mail? Is there a website?
- Company profile. For business domains: name, industry, size, location, links.
- Honest limits. A clear rate limit, a documented error shape, and a way to tell when enrichment failed instead of getting a half-filled profile.
What pingutil gives you for free
Everything below is available on a free key. There is no paid tier with extra fields.
| Feature | Field(s) | Notes |
|---|---|---|
| Category | category, subcategory |
company, free, disposable, educational, government, isp, unknown |
| Normalization | domain, domain_unicode, input_normalized |
Keys on the registrable domain via the Public Suffix List; IDNs converted to punycode |
| Spam verdict | verdict.is_spam, verdict.low_trust, verdict.reason |
Block on is_spam; review on low_trust |
| Address signals | email_signals |
is_randomized, randomness_score (0 to 100), is_role_based, is_system_generated, is_sales_outreach, domain_looks_random; null for bare domains |
| DNS facts | domain_signals |
With check_dns: true: domain_exists, can_receive_email, has_website; cached 7 days |
| Company profile | company |
Name, legal name, tagline, description, industry, sub-industry, tech categories, founded year, headquarters, employee size estimate, website, LinkedIn, Twitter, Crunchbase, GitHub org, parent company, funding stage, total funding, notable customers, public flag, ticker, confidence |
| Fast mode | skip_enrichment: true |
Category, signals and verdict in milliseconds, no LLM call |
The disposable category is built from the community disposable-email-domains list, about 9,900 domains, re-synced weekly. The free-webmail list covers about 100 provider domains, and the ISP list about 60. Academic and government domains are matched by TLD rules (.edu, .ac.<cc>, .gov, .gouv.<cc> and similar), so subdomains like cs.harvard.edu count. You can browse the disposable domains we track.
Company profiles are generated by an LLM that fills a strict schema, validated before it's stored and cached per registrable domain. If enrichment fails, you get the category back with meta.enrichment_error (or the previous cached profile with meta.served_stale), never a partial profile.
Limits
| Limit | |
|---|---|
Authenticated API (/v1/lookup) |
60 requests per minute per key |
No-key demo (/v1/demo/lookup) |
10 requests per minute per IP |
| Monthly quota | None |
| Credit card | Not required; passwordless sign-in to get a key |
| Over the limit | HTTP 429 with retry_after_seconds |
60 a minute is about 86,000 lookups a day per key if you run flat out. For a signup form, that's far more than you need. For a one-off list of a million rows, it's slow, and you should dedupe by domain first.
What it doesn't do
Being clear about this saves you an afternoon:
- No SMTP mailbox verification. pingutil won't tell you whether
jane@acme.iospecifically exists. It tells you about the domain and the shape of the address. - No bulk or batch endpoint, no webhooks, no official SDK packages. It's one HTTP endpoint; the examples below are the SDK.
- No person-level or contact data, and no phone or IP lookups.
- No registration or mail-auth data: no WHOIS/RDAP, domain age, SPF or DMARC.
- Heuristics can be wrong. Privacy relay aliases (Apple Hide My Email, Firefox Relay, SimpleLogin) can be flagged as randomized, and some real non-English names score as random.
can_receive_emailtreats a null MX record as mail-capable. - LLM profiles are weaker for small companies.
confidenceis the model's own estimate.headquarters.countryis free text, so normalize it before grouping.
How free tiers compare
These are free plans we checked on each vendor's own pricing or product page as of 2026. Pricing changes; check the linked page before you commit. The paid products listed here do things pingutil doesn't, and for contact data or person-level enrichment they are the better tool.
| Service | Free allowance | What it's built for | Card needed |
|---|---|---|---|
| pingutil | No monthly cap; 60 req/min per key | Classification, address signals, DNS facts, LLM company profile | No |
| People Data Labs (company data) | Up to 100 records a month | Company records from a large dataset; contact fields obfuscated on free | Check vendor page |
| Hunter | 50 credits a month | Email finding and verification, domain search; also offers a company enrichment API | Check vendor page |
| Abstract API (Company Enrichment) | 100 requests at 1 request per second | Company profile from a domain | No, per their page |
| disposable-email-domains (GitHub) | Unlimited; it's a file | Disposable domain list only, no API | No |
Where the others win: People Data Labs and Hunter maintain their own datasets, which are usually better than a model's training data for small and mid-size companies, and they offer contact data on paid plans. Hunter verifies individual mailboxes, which pingutil doesn't. Where pingutil wins: no monthly cap, and classification plus address signals plus a profile in one call. Many teams use both, classifying everything with a free API and spending paid credits only on the leads that matter. We go into that split in free company enrichment APIs: what you actually get.
Quick example in three languages
The no-key demo endpoint is fine for trying it out, or use the live demo in your browser. For real use, swap in /v1/lookup and your key.
curl
curl -X POST https://pingutil.com/v1/lookup \
-H "Authorization: Bearer $PINGUTIL_KEY" \
-H "Content-Type: application/json" \
-d '{ "input": "jane@stripe.com", "check_dns": true }'
JavaScript (Node 18+)
const res = await fetch('https://pingutil.com/v1/lookup', {
method: 'POST',
headers: {
authorization: `Bearer ${process.env.PINGUTIL_KEY}`,
'content-type': 'application/json',
},
body: JSON.stringify({ input: 'jane@stripe.com', check_dns: true }),
});
const data = await res.json();
console.log(data.category); // "company"
console.log(data.verdict); // { is_spam: false, low_trust: false, reason: null }
console.log(data.company?.name); // "Stripe"
console.log(data.domain_signals?.can_receive_email);
Python
import os
import requests
r = requests.post(
"https://pingutil.com/v1/lookup",
headers={"Authorization": f"Bearer {os.environ['PINGUTIL_KEY']}"},
json={"input": "jane@stripe.com", "check_dns": True},
timeout=30,
)
r.raise_for_status()
data = r.json()
print(data["category"], data["verdict"])
if data["company"]:
print(data["company"]["name"], data["company"]["confidence"])
For screening only, add "skip_enrichment": true and the response comes back in milliseconds without the company profile. The first lookup of an unseen company domain can take a few seconds because of the LLM call; after that it's cached. Go versions and error handling for each language are in the domain lookup API quickstart, and every field is documented in the API reference.
Picking a free API
- If you need to block throwaway signups or split business from personal emails, a classification API is enough. Use fast mode.
- If you need company context for routing or scoring, an LLM profile with a confidence score is usually good enough. Check it against 50 domains you already know.
- If you need to know a specific mailbox exists, or need a person's contact details, you need a paid verification or data provider.
- Whatever you pick, cache by registrable domain and handle a 429 by waiting
retry_after_seconds.
Questions people ask
- Is there a free domain intelligence API with no monthly cap?
- Yes. pingutil is free and community-run, with no monthly quota and no credit card. It is rate-limited instead: 60 requests per minute per API key, and 10 per minute per IP on the no-key demo endpoint.
- What does a free domain intelligence API return?
- At minimum a category for the domain (company, free webmail, disposable, educational, government, ISP). Better ones add signals about the email address itself, DNS facts such as whether the domain can receive mail, and a company profile for business domains.
- Can a free API replace a paid enrichment provider?
- For classification, signup screening and lead routing, often yes. For contact data, person-level enrichment, guaranteed freshness or bulk volume, paid providers are better, and free tiers of those providers are capped at tens to a hundred records a month.
- Do I need an API key to try pingutil?
- No. The demo endpoint at /v1/demo/lookup works without a key at 10 requests per minute per IP. For anything in production, create a free key in the dashboard.