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

Webhook actionIn your flow

Action settings
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 set

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
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.

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.

  1. 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.

  2. Deploy the relay

    Deploy relay.js from the guide to your Cloudflare account with wrangler, and set its three secrets: EV_API_KEY, KLAVIYO_API_KEY and a RELAY_SECRET of 32 or more random characters.

  3. 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.

  4. Add the Webhook action

    Set the destination URL to the relay’s address, the header X-Relay-Secret to the relay secret, and the JSON body { "email": "{{ email }}" }.

  5. Test, then turn it on

    Add a test profile with no_mailbox@sandbox.email-validation.org to a test list, kept off lists that send mail. When the flow has run, its status property is invalid; then delete the test profile.

Good to know.

Updated · Maintained by the email-validation.org team