Integrations
Klaviyo integration
Check the email of each new Klaviyo profile from a flow’s webhook action, and save the status, reason and action as profile properties your segments and flow splits can use. A small relay you deploy as a Cloudflare Worker does the check within seconds, and a Node sync script catches up on profiles created earlier.
- Status: Setup guide
- A flow webhook and a relay you run
Destination URL the relay’s workers.dev address (HTTPS)
Headers X-Relay-Secret: <your RELAY_SECRET>
JSON body { "email": "{{ email }}" }
Flow filter email_validation_status is not setAt 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
- Klaviyo users who grow a list through sign-up forms and want every new profile’s address checked before the first campaign, so segments and flow splits can leave out the ones that will bounce.
- You need
- A Klaviyo private API key with the custom scopes Profiles: Read and Profiles: Write, two-step authentication on your Klaviyo login (Klaviyo requires it for webhook actions), a Cloudflare account for the relay, Node 22.18 or later for the sync script, and an API key made for it, with a daily credit cap.
- 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.
Check new sign-ups
A flow that starts when a profile is added to your sign-up list sends it to the relay, which checks the address and writes the result to the profile within seconds.
Leave out bad addresses
Build a segment on email_validation_action equal to remove: it holds every profile you should not mail, including spam traps and complainers, which are valid with the action remove.
Backfill and catch up
The sync script checks every profile created after a time you give that has no status yet: for a first clean-up, after a gap, or on a schedule instead of the relay.
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 both keys
Create an API key with Validate addresses and a daily credit cap, and a Klaviyo private key with the custom scopes Profiles: Read and Profiles: Write. Klaviyo does not let you change a key’s scopes later.
Deploy the relay
Deploy
relay.jsfrom the guide to your Cloudflare account withwrangler, and set its three secrets:EV_API_KEY,KLAVIYO_API_KEYand aRELAY_SECRETof 32 or more random characters.Create the flow
Use the trigger Added to List for your sign-up list, or any trigger that starts for each new profile, with the flow filter “email_validation_status is not set”, so a profile is never checked and charged twice.
Add the Webhook action
Set the destination URL to the relay’s address, the header
X-Relay-Secretto the relay secret, and the JSON body{ "email": "{{ email }}" }.Test, then turn it on
Add a test profile with
no_mailbox@sandbox.email-validation.orgto a test list, kept off lists that send mail. When the flow has run, its status property isinvalid; then delete the test profile.
Good to know.
- Four properties are saved:
email_validation_status,email_validation_reason,email_validation_actionandemail_validation_checked_at. Klaviyo creates them on the first write, and your own properties stay unchanged. - Klaviyo delivers a webhook again after a 503 for about 24 hours, so a rate limit or an outage at our API needs nothing from you. When the check ran but Klaviyo refused the write, the relay does not ask for a new delivery, which would pay again: run the sync script for that period.
- The sync script waits and tries again after rate limits and outages, but never resends a check that got no answer: the profile still has no status, so the next run picks it up. It prints profile IDs and statuses, never addresses.
- For EU data residency, add
--var EV_REGION:euto the relay’s deploy command, or run the sync script with--region eu. - The relay’s answers never contain an address or a key, and the relay logs nothing.
Updated · Maintained by the email-validation.org team