Verify emails via the Consulti API before adding to cold email campaigns. Single-endpoint verification with server-side cache, catch-all / disposable / role-account detection, and a verdict-to-safe/risky/invalid bucketing table for campaign-ready lists.
Email Verification is a Claude Code skill. Verify emails via the Consulti API before adding to cold email campaigns. It includes 3 files and works well with consulti-scrape, cold-email-campaign-deploy, cold-email-quickstart, cold-email-strategy, cold-email-copywriting, cold-email-ab-testing.
---
name: email-verification
description: "Verify email addresses before adding to cold email campaigns via the Consulti API. Use when validating lead lists, checking email deliverability, or filtering invalid contacts."
---
# Email Verification via Consulti
Single-email verification through the same Consulti account that powers `/consulti-scrape`. One API key, one credit pool, one source of truth.
## API reference
- **Endpoint:** `POST https://app.consulti.ai/api/v1/verify`
- **Auth:** `Authorization: Bearer $CONSULTI_API_KEY`
- **Body:** `{"email": "name@example.com"}` — single email per call
- **Cost:** 1 verification credit on a fresh lookup, 0 on cache hit (server-side cache)
## Single email verification
```bash
source .env
curl -s -X POST "https://app.consulti.ai/api/v1/verify" \
-H "Authorization: Bearer $CONSULTI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"email":"name@example.com"}'
```
### Response shape
```json
{
"success": true,
"data": {
"email": "name@example.com",
"status": "good",
"is_deliverable": true,
"is_disposable": false,
"is_role_account": false,
"is_catch_all": false,
"credits_used": 1,
"cached": false
}
}
```
### `data.status` verdicts
- `good` — Mailbox exists and accepts mail **(USE FOR CAMPAIGNS)**
- `risky` — Catch-all, disposable, or role account — possible but uncertain
- `bad` — Address does not exist or rejected at SMTP **(DO NOT SEND)**
- `unknown` — SMTP probe inconclusive — retry once, exclude on second `unknown`
### Error responses
| HTTP | Meaning | Action |
|------|---------|--------|
| 400 | Invalid email format | Drop the row, don't retry |
| 401 | Bad / missing API key | Verify `$CONSULTI_API_KEY` in `.env` |
| 402 | Out of verification credits | Top up at app.consulti.ai → Billing |
| 500 | Verification service down | Sleep 5s, retry up to 3× |
## Quality classification rules
| Condition | Status | Action |
|-----------|--------|--------|
| `status: "good"` | **good** | Add to campaign |
| `status: "good"` + `is_disposable: true` | **risky** | Exclude |
| `status: "good"` + `is_role_account: true` | **risky** | Exclude (info@, admin@, support@) |
| `status: "good"` + `is_catch_all: true` | **risky** | Include with caution — domain accepts everything |
| `status: "risky"` | **risky** | Include catch-all only, exclude disposable + role |
| `status: "bad"` | **bad** | Never send |
| `status: "unknown"` | **unknown** | Retry once, then exclude |
### Downgrade logic (post-call)
Even on `good`, downgrade to `risky` if **any** of these are true:
1. `is_disposable: true` — temp-mail, mailinator, etc.
2. `is_role_account: true` — info@, admin@, support@, sales@
3. `is_catch_all: true` — domain accepts every address (no actual mailbox confirmation)
## Bulk verification (loop pattern)
The API is single-email only on the public surface, so loop with conservative pacing.
```bash
source .env
INPUT="$1" # JSON array of {email,...} rows or CSV with email column
OUT_DIR="${INPUT%/*}/verified"
mkdir -p "$OUT_DIR"
jq -r '.[].email' "$INPUT" | while read -r EMAIL; do
RESP=$(curl -s -X POST "https://app.consulti.ai/api/v1/verify" \
-H "Authorization: Bearer $CONSULTI_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"email\":\"$EMAIL\"}")
echo "$RESP" >> "$OUT_DIR/results.jsonl"
sleep 1 # 60 req/min ceiling
done
# Bucket by classification
jq -s '
map(.data) |
{
safe: map(select(.status == "good" and (.is_disposable|not) and (.is_role_account|not) and (.is_catch_all|not))),
risky: map(select(.status == "risky" or .is_disposable or .is_role_account or .is_catch_all)),
invalid: map(select(.status == "bad")),
unknown: map(select(.status == "unknown"))
}' "$OUT_DIR/results.jsonl" > "$OUT_DIR/buckets.json"
```
### Rate limits & pacing
- 60 requests/minute is a safe ceiling — add `sleep 1` between sequential calls
- For large lists, parallelize with `xargs -P 4` (240 req/min) — back off on 429
- Cache hits are **free** — re-running `/email-verification` on the same list within the cache window costs nothing
## Verification workflow for cold email
### Before campaign launch
1. Verify **every** lead in the list — even `emailStatus: "verified"` from `/consulti-scrape`
2. Add only `safe` (good + non-disposable + non-role + non-catch-all) to the campaign
3. **Never** send to `bad` or `unknown`
4. Re-verify any list older than 30 days
### Bounce rate target
- < 3% — healthy
- 3–5% — investigate; pause if rising
- \> 5% — **STOP sending immediately**, re-verify, replace mailboxes if needed
## Quick CLI check
```bash
source .env
EMAIL="name@example.com"
curl -s -X POST "https://app.consulti.ai/api/v1/verify" \
-H "Authorization: Bearer $CONSULTI_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"email\":\"$EMAIL\"}" \
| jq -r '.data.status'
```
## Environment variables
All credentials in `.env`:
- `CONSULTI_API_KEY` — same key used by `/consulti-scrape` (format `ctai_...`)
That's it. No CF-Access, no SMTP proxy, no second verifier — Consulti handles SMTP probing and catch-all detection in one call.
SKILL.mdmanifest.yamlevals/evals.jsonLGJ-graphics
Lead Gen Jay brand illustration style system — flat SVG with floating UI elements, 30 brand logos, shared component library, Framer Motion animations, and consistent design tokens
brand-image-generator
Generate brand-consistent images using fal
google-tracking
Configure Google tracking (GTM, GA4, tag scanning) and the full tracking infrastructure for Lead Gen Jay pages
hyros-integration
Add Hyros conversion tracking to opt-in forms, checkout pages, and landing pages
landing-page-auditor
Systematic conversion audits with scoring and prioritized recommendations
motion-graphics
Business-focused motion graphics for landing pages
social-proof-builder
Craft compelling testimonials, case studies, and trust elements that convert
OpenClaw Mastery Pack
Complete OpenClaw skill stack — 8 skills covering setup, Google/Slack integration, security hardening, cron automation, MCP servers, troubleshooting, and custom skill building
Enter your AI Automation Insiders email to get full access to documentation and the install command.
Scrape leads from Consulti.ai's three databases (500M+ B2B contacts, Google Maps local businesses, podcast/YouTube creators) via the Consulti REST API. Tracks every pull in a named audience list so repeat scrapes never return the same lead twice — native excludeListId on B2B, client-side dedup on local + creator. Imports straight into the lead-tracking DB for the rest of the cold-email chain.
Deploy cold email campaigns to Email Bison or Instantly. Campaign brief generation, 9-gate pre-launch checklist, API deployment in PAUSED state, post-generation validation, and error recovery.
First-run wizard from zero to a launched cold email campaign. Chains 8 specialist skills with confirmation gates and resumable state via .metadata.json. Phase 0.5 bootstraps shared infrastructure (Turso DB + Anthropic + Perplexity keys, one-time across campaigns). Strategy precedes scraping so its ICP feeds both the scrape filters AND the list-optimize qualification rules. Phase 6 includes an optional Y/n gate for list-optimize (qualify + personalize, default = run); skipping cascades cleanly to copywriting via the {personalization|fallback} token. Thin orchestrator — delegates without duplicating logic.
Discovery interview, ICP profiling, offer positioning, and messaging angles for cold email campaigns. Ingests transcripts, docs, recordings, and competitor research to build complete strategy foundations.
Write cold email sequences with copy constraints, spintax, and deliverability rules. Platform-aware formatting for Email Bison and Instantly with 4-email sequence architecture.
Full lifecycle A/B testing for cold email. Pre-launch variant generation with minimum thresholds (3/2/2/2). Post-launch z-test winner analysis and optimization recommendations.
Lead Gen Jay brand illustration style system — flat SVG with floating UI elements, 30 brand logos, shared component library, Framer Motion animations, and consistent design tokens.
Generate brand-consistent images using fal.ai FLUX.1. Prompt templates for hero images, feature graphics, testimonial photos, and marketing visuals.
Configure Google tracking (GTM, GA4, tag scanning) and the full tracking infrastructure for Lead Gen Jay pages.
Add Hyros conversion tracking to opt-in forms, checkout pages, and landing pages. Server-side lead tracking via API, client-side checkout intent, and Whop purchase integration.
Systematic conversion audits with scoring and prioritized recommendations. Identify conversion blockers, CTA weaknesses, copy issues, and mobile problems.
Business-focused motion graphics for landing pages. Combines Lottie animations, Framer Motion components, and Remotion video generation for conversion-focused micro-interactions.
Craft compelling testimonials, case studies, and trust elements that convert. Templates for social proof sections, credibility builders, and result-driven narratives.
Complete OpenClaw skill stack — 8 skills covering setup, Google/Slack integration, security hardening, cron automation, MCP servers, troubleshooting, and custom skill building.
AI Automation Insiders members get unlimited access to all exclusive skills, commands, and agents — plus weekly updates.
Already a member? Scroll up to enter your email.