Integrations
Mailchimp integration
Check the members of a Mailchimp audience and tag each one with its result, such as ev:valid or ev:remove, so segments and journeys can leave out the addresses you should not mail. A Node sync command cleans a whole audience as one bulk list, and a webhook relay or an OAuth app you run checks each new subscriber within seconds.
- Status: Setup guide
- Tags your segments can use
export EV_API_KEY=… MAILCHIMP_API_KEY=…
node sync.mjs --list a6b5da1054 --dry-run # counts what it would check
node sync.mjs --list a6b5da1054 # checks and tags
node sync.mjs --list a6b5da1054 --suppress # also archives members to removeAt a glance.
- Status
- Setup guide. Not listed on a marketplace yet: you set it up yourself in a few steps, below and in the full guide.
- For
- Mailchimp users who want an audience cleaned before the next campaign, and every new subscriber checked as it joins, without exporting and importing lists.
- You need
- Your audience id, a Mailchimp API key (or, for the OAuth app, an app registered in Mailchimp), Node 22.18 or later for the sync command, a Cloudflare account for the relay or the app, and an API key made for it, with a daily credit cap. The sync command also needs the permission Bulk lists, which is off by default.
- Costs
- 1 credit = 1 validated address, as with any API request. Free: unknown results, API errors, malformed addresses and test addresses on sandbox.email-validation.org.
- Full guide
- Read the full setup guide
Typical uses.
Clean an audience
The sync command checks every subscribed member that has no status tag yet in one bulk list and tags each member; with --suppress it also archives the members whose action is remove.
Check new subscribers
The relay, or the OAuth app, receives Mailchimp’s subscribe webhook and tags the new member within seconds. The app connects your Mailchimp account with OAuth and adds the webhooks itself.
Segment on ev:remove
Tags, contact is tagged, ev:remove holds every member you should not mail, including spam traps and complainers, which are ev:valid with ev:remove.
Set it up. 5 steps.
The short version of the full setup guide, which stays the reference when a step does not match what you see.
Create a key
Create an API key with Validate addresses and Bulk lists, and a daily credit cap. Find your audience id under Audience, Settings, Audience name and defaults.
Clean the audience
With your keys in
EV_API_KEYandMAILCHIMP_API_KEY, runnode sync.mjs --listwith your audience id, first with--dry-runto see the counts.Deploy the relay
Deploy
relay.jsto your Cloudflare account withwrangler, with the secretsEV_API_KEY,MAILCHIMP_API_KEYand aRELAY_SECRETof at least 32 random letters and digits. Or deploy the OAuth app instead, as the guide shows.Add the webhook
In Mailchimp, open Audience, Settings, Webhooks, Create New Webhook: the relay’s address followed by / and your relay secret as the callback URL, Subscribes as the only event, and all three sources.
Check it once
Add a test contact with
no_mailbox@sandbox.email-validation.org: within a few seconds it has the tagsev:invalidandev:remove. Then archive it, and keep it out of campaigns until then.
Good to know.
- If a sync run stops, for example with no credits or a closed laptop, run the same command again: it resumes the same bulk job from a small state file of ids, so a list is never paid for twice.
- The --suppress option archives, it never deletes: an archived member leaves the audience and stops counting toward your plan, keeps its data and history, and can be added back.
- Adding a tag starts any Customer Journey that begins with “tag added” for that tag: build journeys on our tags on purpose, or start them from a segment instead.
- The secret in the relay’s address proves a delivery comes from your webhook: keep request logs that record URLs off for the Worker, and change the secret if it leaks. The OAuth app is not in the Mailchimp Marketplace yet, so you run it yourself.
- Nothing is charged for a delivery answered with 503 or 422, and a repeated delivery for a member that already has a status tag costs nothing. For EU data residency, run the sync command with
--region euand deploy the relay with--var EV_REGION:eu.
Updated · Maintained by the email-validation.org team