# Mailchimp Integration for Email Validation

URL: https://email-validation.org/integrations/mailchimp/
Updated: 2026-11-06

> Documentation index: https://email-validation.org/llms.txt

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.

[Read the full setup guide](https://email-validation.org/docs/guides/mailchimp/) [Get an API key](https://email-validation.org/signin/)

- Status: Setup guide
- Tags your segments can use

**Clean an audience** Sync command

Terminal

```bash
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 remove
```

## At 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](https://email-validation.org/app/api-keys/) made for it, with a [daily credit cap](https://email-validation.org/docs/authentication/#limits). 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](https://email-validation.org/docs/guides/mailchimp/)

## 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](https://email-validation.org/docs/guides/mailchimp/), which stays the reference when a step does not match what you see.

1. **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.
2. **Clean the audience**: With your keys in `EV_API_KEY` and `MAILCHIMP_API_KEY`, run `node sync.mjs --list` with your audience id, first with `--dry-run` to see the counts.
3. **Deploy the relay**: Deploy `relay.js` to your Cloudflare account with `wrangler`, with the secrets `EV_API_KEY`, `MAILCHIMP_API_KEY` and a `RELAY_SECRET` of at least 32 random letters and digits. Or deploy the OAuth app instead, as the guide shows.
4. **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.
5. **Check it once**: Add a test contact with `no_mailbox@sandbox.email-validation.org`: within a few seconds it has the tags `ev:invalid` and `ev: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](https://email-validation.org/docs/eu-data-residency/), run the sync command with `--region eu` and deploy the relay with `--var EV_REGION:eu`.

## Related

- [The full Mailchimp setup guide](https://email-validation.org/docs/guides/mailchimp/)
- [The tags and what each one means](https://email-validation.org/docs/guides/mailchimp/#tags)
- [The OAuth app: connect Mailchimp without copying a key](https://email-validation.org/docs/guides/mailchimp/#app)
- [Answers and retries](https://email-validation.org/docs/guides/mailchimp/#errors)
- [Bulk lists](https://email-validation.org/docs/bulk/)
- [All integrations](https://email-validation.org/integrations/)
