Skip to content

Verify emails and phone numbers for Klaviyo with Spaw

updated · September 27, 2026

Verify Klaviyo profiles' emails and SMS phone numbers through Zapier or Make, write the E.164 number and the SMS policy answer back, and clean a list in bulk.

Mechanism
Through Zapier or Make
Works today
Yes, with Webhooks by Zapier or Make's HTTP module
Auth
Secret API key in the verification step
Cost
1 credit per answered email or valid phone number; invalid and unverified answers free, undeliverable free within fair use

Klaviyo profiles arrive from storefront sign-ups, pop-ups and checkout, and a welcome flow fires within minutes. Verifying the address before that first send keeps bounces out of the account's reputation. Spaw has no Klaviyo app; the flow below uses Klaviyo's trigger in Zapier or Make, a verification step, and a profile update that stores the verdict as a custom property your segments can read. A second flow does the same for the phone number an SMS flow will use, and hands Klaviyo the E.164 form it requires.

Verify new profiles

  1. Create a secret API key on the API keys page of your Spaw dashboard.
  2. In Zapier or Make, start with the Klaviyo trigger for a new profile or a new list subscription.
  3. Add the verification step: a Webhooks by Zapier POST or a Make HTTP request to https://spaw.co/api/v1/email with the header Authorization: Bearer sk_live_… and this body, mapping the profile's email:
{
  "email": "[email protected]"
}

The Zapier page and the Make page list every setting. Once the Spaw apps for those platforms are listed, the step becomes a Verify Email action with a saved connection.

  1. Add the Klaviyo action that updates a profile, match on the email, and write custom properties from the response: spaw_verdict from data.deliverable, spaw_reason from data.reason, and spaw_risk_score from data.risk_score.
  2. Build a segment in Klaviyo where spaw_verdict equals undeliverable and exclude it from your flows and campaigns, or invert it and send only to profiles whose verdict equals deliverable.
  3. Test by subscribing [email protected], a free test address that answers a fixed result and is never logged.

Because the welcome flow may fire before the Zap finishes, add a short delay at the start of the flow, or make the first email conditional on the property being set. A few minutes is enough.

Clean an existing list

Export the list or segment to CSV, run the email column through a bulk verification on the Spaw dashboard or with the bulk endpoint, and import the result CSV back into Klaviyo with the verdict columns mapped to the same custom properties. The result keeps your original columns. Undeliverable rows also join your Spaw suppression list, so the next run answers them without a probe.

What to do with the verdict

Keep the decision in segments so it applies to every flow at once. deliverable profiles get the full program. risky profiles need the reason: disposable addresses are throwaway inboxes that will never convert, catch_all addresses are unconfirmed but often real, and role inboxes such as info@ are shared. undeliverable profiles should be suppressed in Klaviyo rather than deleted, because a filled data.did_you_mean is a customer who mistyped at checkout and can be reached through another channel, for example SMS, with the corrected address. For stores on Shopify, the Shopify page covers the customer-side flow.

Phone numbers for SMS

Klaviyo's profile API takes the phone number "in E.164 format", and its help centre adds that for API calls "Klaviyo only accepts the E.164 format" (Klaviyo's developer reference and its article on accepted phone number formats for SMS, both read 27 September 2026). A Zap or scenario that carries a number from a form, a CRM or a store into a profile therefore needs the E.164 form first, and the phone step returns it together with the checks.

  1. Give the phone step a Zap or scenario of its own, with a filter that continues only when a phone number is present, so the email flow is left as it is and a profile without a number skips the step (an empty phone is refused with a 422). Place the step before the Klaviyo action when the number comes from another app, or after the new-profile trigger when it is already in Klaviyo: a Webhooks by Zapier POST or a Make HTTP request to https://spaw.co/api/v1/phone with the same header and this body, mapping the number and, for numbers written without a calling code, the two-letter country:
{
  "phone": "(202) 555-0100",
  "country": "US"
}

country is an ISO 3166-1 alpha-2 code such as US or GB. A country name, or UK, is refused with a 422, and a number written with its + and calling code needs no country. Send the number and its country only, nothing else about the person. Once the Spaw apps are listed, the step becomes the Validate Phone Number action in Zapier and Validate a Phone Number in Make.

  1. Add a Paths step in Zapier or a router in Make on data.valid. On the valid path, the Klaviyo action writes the profile's phone number from data.e164; on the other, it keeps what was typed in a custom property for someone to review. A filled data.did_you_mean there is a suggestion for that person to confirm, never a value to write over the number.
  2. On both paths, write spaw_phone_ok_to_send from data.ok_to_send and spaw_phone_blocked_by from data.blocked_by as custom properties.
  3. In the SMS flow, add a conditional split on spaw_phone_ok_to_send after the short delay described above, so a profile the Zap has not reached yet waits instead of receiving the message.
  4. Test with +1 202 555 0100 and +1 202 555 0103, two documented test numbers that cost nothing: the first answers a valid mobile with ok_to_send true, the second ok_to_send false with blocked_by disposable, under the default SMS policy.

The step writes the phone number and two properties, nothing else. It never subscribes a profile to SMS or changes its consent: that stays with the form or checkout that collected the number. ok_to_send is your account's SMS policy applied to the answer, set once on the account so every Zap, batch and bulk run applies the same rules. It is a fraud and deliverability decision, not consent and not a do-not-call scrub. When it is false, blocked_by names the rule that decided it: invalid, opted_out (by default) for a number your suppression list holds as opted out, country, line_type, a signal such as disposable for a number published by an SMS-receiving website, where anyone can read a code sent to it, or risk_score. Every field is on the phone endpoint page.

Cost

Each new profile that answers deliverable or risky spends 1 credit; unverified answers and repeats within seven days are free, and undeliverable answers are free within a fair-use allowance. A phone lookup costs 1 credit when the number is valid; invalid numbers, unassigned blocks and repeats of the same number within seven days are free. Zapier and Make bill their own tasks. Bulk runs bill per processed row and verify duplicates once.

Related

markdown version: /integrations/klaviyo.md

Verify addresses the same way

The Spaw API runs every check described here on each lookup, with an SMTP handshake that never sends mail. 10 free lookups a month, no card required.

Get your API key

More integrations