Email Verifier: Check Any Email Address Before You Send
Giggal.ai is an email verifier that tells you whether an email address really exists. Check one address for free in your browser, run bulk email verification on a full list, or connect the email verification API to your own app. It also returns a real valid or invalid result for catch-all domains and for inboxes behind secure email gateways, where most email verifier tools stop at "risky" or "unknown".
The email checker needs no signup. API accounts get 1,000 free credits, no card required.
Free email verifier and bulk email verification
You do not need to write code to verify an email address. Pick the email verification tool that fits the job:
Check one address
Paste an address into the free email verifier and get a result in a few seconds. No signup needed.
Clean a whole list
Upload a CSV to the bulk email verifier and remove invalid, risky and disposable addresses before your next send.
Verify in your own app
Use the free email verification API below to check addresses at signup or in your CRM.
Every check follows the same steps: the format, the domain's mail servers, and the mailbox itself. For catch-all domains, which accept mail for any address, the email verifier runs a deeper check instead of stopping at "accept-all".
Free email verification API: verify an address with one call
Send a POST request to /v1/verify with your API key as a Bearer token. Every endpoint uses the base URL https://api.giggal.ai.
curl -X POST https://api.giggal.ai/v1/verify \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email":"alex.smith@example.com"}'
What the email validation API returns
One response covers the format check, the domain's mail servers, the mailbox check and the address type. A trimmed example:
{
"success": true,
"data": {
"email": "alex.smith@example.com",
"is_valid": true,
"status": "deliverable",
"risk_level": "low",
"deliverability_score": 92,
"catch_all_score": 89,
"catch_all_verdict": "valid",
"details": {
"general": { "domain": "example.com", "reason": "Mailbox confirmed deliverable" },
"attributes": {
"free_email": false,
"role_account": false,
"disposable": false,
"catch_all": true,
"has_plus_tag": false,
"mailbox_full": false,
"no_reply": false
},
"mail_server": { "smtp_provider": "google", "mx_record": "aspmx.l.google.com" }
}
},
"meta": { "creditsUsed": 1 }
}
Look at catch_all and catch_all_verdict. This domain accepts mail for any address, so a basic check cannot tell whether the person exists. The API runs a deeper check and returns valid or invalid. The catch-all email verification page explains how it works.
Email verification API endpoints
| Method | Endpoint | What it does |
|---|---|---|
| POST | /v1/verify | Verify one email address in real time. Body: {"email": "..."} |
| POST | /v1/verify-batch | Start a bulk email verification job with up to 50,000 addresses. Returns a jobId. |
| GET | /v1/jobs/{jobId} | Check a job's status: queued, processing, completed or failed. |
| GET | /v1/jobs/{jobId}/results | Fetch job results, paginated with page and limit. |
| GET | /v1/credits | Check your remaining credits. Also a quick test that a key works. |
Authentication and keys
Send your key in the Authorization: Bearer YOUR_API_KEY header. Create keys in the Developer API tab of the dashboard. Keep keys on your server, never in browser code or a public repository.
What the free tier includes
Every new account gets 1,000 free credits, with no card and no expiry date. One credit verifies one address. On single checks, catch-all resolution is included in that same credit. The free credits work on every endpoint, including bulk jobs. When you need more, current prices are on the pricing page.
Email verification API examples in Node.js and Python
Node.js (Node 18 or later)
const res = await fetch('https://api.giggal.ai/v1/verify', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.GIGGAL_API_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({ email: 'alex.smith@example.com' }),
});
const data = await res.json();
if (data.success) {
console.log('Status:', data.data.status); // deliverable, undeliverable, unknown
console.log('Catch-all result:', data.data.catch_all_verdict); // valid or invalid
} else {
console.error('Verification error:', data.error);
}
Python (requests)
import os
import requests
response = requests.post(
"https://api.giggal.ai/v1/verify",
json={"email": "alex.smith@example.com"},
headers={"Authorization": f"Bearer {os.environ['GIGGAL_API_KEY']}"},
timeout=30,
)
result = response.json()
if result.get("success"):
print("Status:", result["data"]["status"])
print("Catch-all result:", result["data"].get("catch_all_verdict"))
else:
print("Error:", result.get("error"))
Every response field is described in the email verification API guide. If you check addresses inside a signup form, the email validation API guide shows the real-time setup.
Bulk email verification API: verify a whole list
For a list, send one batch job instead of thousands of single calls. Poll the job every 10 to 15 seconds until its status is completed, then page through the results. Add an Idempotency-Key header so a retried request returns the existing job instead of creating a second one.
// 1. Start the job (up to 50,000 addresses)
const submit = await fetch('https://api.giggal.ai/v1/verify-batch', {
method: 'POST',
headers: {
'Authorization': `Bearer ${process.env.GIGGAL_API_KEY}`,
'Content-Type': 'application/json',
'Idempotency-Key': 'leads-2026-10-21-01',
},
body: JSON.stringify({
name: 'Q4 leads',
emails: ['alex.smith@example.com', 'maria.garcia@example.org'],
}),
});
const { data: job } = await submit.json();
// 2. Poll: GET https://api.giggal.ai/v1/jobs/${job.jobId}
// 3. Fetch results, 500 per page
const results = await fetch(
`https://api.giggal.ai/v1/jobs/${job.jobId}/results?page=1&limit=500`,
{ headers: { 'Authorization': `Bearer ${process.env.GIGGAL_API_KEY}` } }
);
Prefer a CSV upload to code? The bulk email verifier runs the same checks on a file in your browser.
How to test an email verification API before you choose one
Most email verification services look the same on their pricing pages. The difference shows up when you test them on hard addresses. Run these checks on any API you are comparing, including this one.
- Known-bad addresses. Take 20 addresses that you know bounced last month. A good API should mark almost all of them invalid.
- Catch-all domains. Pick a company domain that accepts mail for any address, and test one real address and one made-up address on it. Many APIs return "accept-all" or "risky" for both. Check whether the API can tell them apart.
- Secure email gateways. Test addresses at companies that use Proofpoint, Mimecast or Barracuda in front of their mail servers. These often come back as "unknown".
- Disposable and role addresses. Check that temporary inbox domains and addresses like info@ or sales@ are flagged separately from valid ones.
- Unknown results and billing. Count how many results come back "unknown", and read whether those cost a credit.
- Speed and timeouts. Time single calls during your busiest hour, and set a timeout in your code. Some mail servers answer slowly on purpose.
- Bulk limits. Check the maximum batch size, the rate limit and how results are paged, so a large list does not need custom retry code.
- Free credits. Check whether free credits expire and whether they cover every endpoint, or only single checks.
Free credits make this test cheap. Use the same list on every API you try and compare the share of addresses each one confirms as valid or invalid.
Email verification MCP server for Claude, ChatGPT and Cursor
The official MCP server lets an AI assistant run email verification for you. Ask "Is info@example.com deliverable?" and the assistant calls the API. The server URL is:
https://mcp.giggal.ai/mcp
Claude and ChatGPT connect over OAuth, so no API key is needed. In Claude, open Settings, then Connectors, add a custom connector named Giggal.ai with the URL above, and click Connect. In ChatGPT, add a custom plugin with the same URL and choose OAuth.
Claude Code uses your API key:
claude mcp add --transport http --scope user giggal \
https://mcp.giggal.ai/mcp \
--header "Authorization: Bearer YOUR_API_KEY"
Cursor, Windsurf and Cline read the server from an MCP config file, such as ~/.cursor/mcp.json:
{
"mcpServers": {
"giggal": {
"url": "https://mcp.giggal.ai/mcp",
"headers": { "Authorization": "Bearer YOUR_API_KEY" }
}
}
}
| Tool | What it does |
|---|---|
verify_emails | Verify one address or a whole list, including catch-all and accept-all domains. |
get_verification_details | Fetch the full breakdown for a job: status per address, reason codes and scores. |
get_credit_balance | Check remaining credits before a large run. |
All three tools are read only. Config for VS Code, Zed and Codex is in the giggal-mcp repository on GitHub.
n8n email verification node
The n8n-nodes-giggal community node adds email verification to any self-hosted n8n workflow. In n8n, open Settings, then Community Nodes, choose Install a community node, and enter n8n-nodes-giggal. Community nodes work on self-hosted n8n only.
- Email, Verify: checks one address per input item, 1 credit per call.
- Email, Verify Batch: sends every input item as one bulk email verification job and returns the job ID.
- Job, Get Status and Job, Get Results: follow the job and collect the results.
The node's Batch mode runs all items in parallel and can hit the rate limit of 300 requests per 15 minutes, so use Sequential mode for large lists. The source is in the n8n-nodes-giggal repository on GitHub.
More ways to use the email verifier
Developer guides
Email validation in JavaScript
Three regex patterns tested on 18 real cases, HTML5 input checks, an MX lookup in Node.js, and when a regex is not enough.
Validate an email address in Python
The email-validator library, MX lookups with dnspython, and the typo domain that passes both.
Catch-all domains and secure email gateways
Two kinds of address cause most "unknown" results in email verification.
Catch-all domains accept mail for every address, whether the mailbox exists or not. A standard check asks the mail server about the mailbox, and the server always says yes. The API returns catch_all: true for these domains, plus a catch_all_verdict of valid or invalid from a deeper check.
Secure email gateways, such as Proofpoint, Mimecast and Barracuda, sit in front of many company mail servers. They often accept every recipient during the SMTP conversation and filter later, so a standard check cannot see the real mailbox. The SEG email verification page explains how Giggal.ai handles them.
Frequently asked questions
What is an email verifier?
An email verifier checks whether an email address can receive mail. It checks the format, the domain's mail servers and the mailbox itself, without sending an email. Giggal.ai also resolves catch-all domains, which most verifiers mark as risky.
Is there a free email verification API?
Yes. A new Giggal.ai account gets 1,000 free credits with no card required, and the credits do not expire. One credit verifies one address through the API.
What is the difference between an email verification API and an email validation API?
Most people use the two terms for the same thing. Validation often means checking the format, and verification means confirming that the mailbox exists. The Giggal.ai API does both in one call.
Can I run bulk email verification through the API?
Yes. POST /v1/verify-batch accepts up to 50,000 addresses in one job. You poll the job status and then fetch the results page by page.
Do I need an API key to use the MCP server in Claude or ChatGPT?
No. Claude and ChatGPT connect to https://mcp.giggal.ai/mcp over OAuth. Code editors and CLI clients use your API key as a Bearer token.
Can I call the API from browser JavaScript?
Call it from your server. A key placed in browser code can be copied by anyone who opens the page.
What does a status of "unknown" mean?
The mail server did not give a clear answer during the check, for example because of a timeout or a temporary error. You can check the address again later.