List · CSV → Sequencer
Verify email addresses before you send.
Re-verify any address older than 90 days before every campaign. Invalid ones drop out, catch-all addresses get their own lane, team inboxes stay out – and your bounce rate stays under 2 percent.
One call from Claude Code, n8n or ChatGPT
verify_email · 0.3 credits per address · an address from the last 7 days costs nothing
Example · fictional contacts, real prices
Setup
Build this workflow.
A list or CSV with email addresses – and, if you have it, the date of the last check. The same call from Claude Code, n8n or ChatGPT.
What does a run cost?
0.3 credits per address – 25 addresses cost 7.5 credits ($0.26 on Pro). An address checked in the last 7 days costs nothing. The checks for team inboxes and disposable domains are free of credits.
- Your agent by call
Pick the stale addresses
Rows whose address was never checked or was checked more than 90 days ago. Email data decays by 20 to 30 percent a year.
- ListPlus by call
Check deliverability
verify_email answers valid, invalid, catch_all or unknown per address – up to 25 per call, at once. An address checked in the last 7 days costs nothing.
- ListPlus by call
Flag team inboxes and disposable addresses
The standard checks find info@, office@ and throwaway domains at no credit cost. A verified team inbox is deliverable – and still not a person.
- Your team manual in ListPlus
Set the lanes
valid → main sequence. catch_all → its own low-volume lane. invalid and disposable → do not send. If a campaign passes 2 percent hard bounces: stop and re-verify the list.
With your agent
Give your agent this brief.
An agent with a key or sign-in; the workspace's credits. Without a list it works straight from addresses in the file.
The same call from Claude Code, ChatGPT, Cursor or an n8n HTTP node – MCP and REST offer the same tools.
Agent guide (.md) ↗Take the list “Q1 Outbound”. Find every row whose email was never checked or was checked more than 90 days ago. Verify them with verify_email in batches of 25. Set invalid to status “Do not send”, catch_all to “Own lane”. Leave team inboxes (info@, office@) out. Change nothing that is valid, and tell me what it cost.
Tools and sample call
describe_list · query_records · check_list · verify_email · mark_records
verify_email({
"emails": [
"lena.graf@nordwerk-muster.de",
"info@kontur-muster.de",
"t.lenz@helioworks-muster.de"
]
})
mark_records({
"list_id": "<shared_list_id>",
"record_ids": [
"<invalid_row_id>"
],
"status": "Do not send"
})Try it with your data
A check says whether the mailbox exists – not whether the person still works there. A hard bounce on a known contact hints at a job change (see that recipe).