Integration · Shopify

Shopify email validation

Shopify Flow or Zapier can check each new customer’s address right after the order and tag the ones that can’t receive mail. A CSV round trip covers the customers you already have. Here is the setup, and what Shopify doesn’t allow.

Updated October 10, 2026 · 6 min read

Shopify email validation works differently from a form plugin, because Shopify hosts the checkout and you don’t add PHP to it the way you can in WooCommerce. What you can do on the Grow, Advanced and Plus plans is check every new customer’s address in Shopify Flow right after they are created, using our email validation API, and tag the ones that can’t receive mail. On any plan, Zapier can do the same, and you can export your customers and check the whole list.

What you get

What Shopify allows and what it doesn’t

ApproachPlansWhen it runsCan stop the order?
Shopify Flow: Send HTTP requestGrow, Advanced, PlusAfter a customer is createdNo
Zapier: New Customer triggerAll (paid Zapier plan)After a customer is createdNo
Customer CSV export + bulk checkAllWhenever you chooseNo
Custom checkout UI extensionPlus (for the information step)During checkoutCan block progress; needs network access and custom development

Shopify stores a validFormat flag for each customer email, but its own API documentation notes that this “doesn’t guarantee that the email address actually exists”. That is the gap the mailbox check fills.

The Customer created trigger fires when a new customer places an order or when staff create a customer profile; editing an existing profile doesn’t fire it. Flow’s Run code action can’t make HTTP calls itself, so the request goes through Send HTTP request and Run code only parses the answer.

Shopify email validation in Flow: setup in steps

  1. In Shopify Flow, go to Settings and create a secret, for example with the handle emailvalidation_api_key, holding your emailvalidation.io API key. Flow never shows secret values in the editor and redacts them from run logs.

  2. Create a workflow and choose the trigger Customer created.

  3. Add a Condition that the customer’s email address isn’t empty. A customer record can exist without one.

  4. Add the action Send HTTP request:

    • HTTP method: Get

    • URL: https://api.emailvalidation.io/v1/info?email= followed by the customer’s email address. Insert it with Add a variable and add the url_encode filter, which turns @ into %40:

      https://api.emailvalidation.io/v1/info?email={{customer.defaultEmailAddress.emailAddress | url_encode}}
      
    • Headers: key apikey, value {{secrets.emailvalidation_api_key}} (or pick the secret with Add secret)

    • On client error (4XX response): Fail

    • On server error (5XX or 429 response): Retry

    If the variable picker shows a different path for the customer’s email in your store, use the one it inserts.

  5. Add a Run code action. In Input, request the body of the HTTP response:

    query {
      sendHttpRequest {
        body
      }
    }
    

    In Output, describe the fields the code returns:

    type Output {
      state: String!
      reason: String!
      disposable: Boolean!
    }
    

    And as code:

    export default function main(input) {
      const result = JSON.parse(input.sendHttpRequest.body);
    
      return {
        state: result.state || "unknown",
        reason: result.reason || "",
        disposable: result.disposable === true,
      };
    }
    
  6. Add a Condition: the Run code output state is equal to undeliverable.

  7. Under Then, add Add customer tags with the tag email-undeliverable. Add a second condition on disposable if you also want an email-disposable tag.

  8. Turn on the workflow. Test it by creating a customer in the admin with an address on a domain that doesn’t exist, then check the run in Flow’s run history.

Setup in steps: Zapier

Zapier works on every Shopify plan. Shopify is marked Premium on Zapier, and this Zap also uses a Filter step, so it needs a paid Zapier plan (Zapier pricing, checked October 2026).

  1. Connect your emailvalidation.io account in Zapier, as described on the Zapier integration page.
  2. Create a Zap with the Shopify trigger New Customer.
  3. Add the Emailvalidation action Verify E-Mail Address and map the customer’s email to E-Mail Address. Test the step to see the fields it returns.
  4. Add a Filter step that only lets the Zap continue when the returned state is undeliverable.
  5. Add the Shopify action Add Tag to Customer, map the customer ID from the trigger and enter the tag email-undeliverable.
  6. Publish the Zap and test it with a customer whose address is on a domain that doesn’t exist.

Example workflow

A store runs a welcome discount for first orders:

  1. A shopper orders as a guest with lena@northwind-tradres.example. Shopify creates the customer and the workflow starts.
  2. The API answers undeliverable; the customer gets the tag email-undeliverable.
  3. Support filters customers by that tag each morning. Those shoppers won’t get the shipping confirmation by email, so support reaches them another way if the order needs it.
  4. The marketing segment for the welcome series excludes the tag, so the series never bounces. Every bounce you avoid helps your email bounce rate.

If Shopify reports that the tag was added but it is missing in the admin, another app may have overwritten the tags at the same moment; Shopify suggests a Wait step before Add customer tags.

Check the customers you already have

  1. In the Shopify admin, go to Customers and click Export.
  2. Choose All customers and Plain CSV file, then Export customers. Exports of more than 50 customers arrive by email.
  3. Upload the file to the bulk endpoint of the API and set email_column to Email. The result CSV keeps every original column and adds 15 emailvalidation_* columns, including the state and reason.
  4. Filter the rows with state undeliverable and tag or remove those customers.

For a short list, the bulk email verifier on our website takes up to 50 addresses per run; if you’d rather hand the file over, there is the email list cleaning service. Shopify’s customer import can add tags from a Tags column, but its “Overwrite existing customers” option replaces the existing data of matching customers, so test it on a few rows first.

Pricing note

Each check costs 1 credit, and only successful calls count. The Flow workflow checks each new customer once. In bulk jobs, duplicate and invalid rows are free and addresses that time out are refunded. The free plan includes 100 credits a month and allows 10 requests a minute; paid plans have no per-minute limit and start at $9.99 a month for 5,000 credits (email validation API pricing).

Sources

Checked October 10, 2026: Zapier, Shopify integrations (Premium, New Customer, Add Tag to Customer), Filters and pricing; Shopify Help Center, Send HTTP request (plans, fields, secrets, timeouts, retries), Run code (input, output, no network access), Customer created, Add customer tags, Flow variables and Importing and exporting customers; Shopify.dev, Checkout UI extensions configuration (network access, block_progress, Plus-only steps) and Admin GraphQL Customer object and CustomerEmailAddress (validFormat); Liquid, url_encode.

Email validation in other apps

Frequently asked questions

How do I validate emails in Shopify?

On the Grow, Advanced or Plus plan, use a Shopify Flow workflow: the Customer created trigger, a Send HTTP request action to an email validation API, and Add customer tags for undeliverable addresses. On other plans, use Zapier (a paid Zapier plan, because Shopify is a Premium app there) or export customers to CSV and check the file in bulk.

Can Shopify block an invalid email at checkout?

Not with Flow, which runs after the order. Checkout UI extensions can block a buyer’s progress, and with network access they can call outside services, but extensions on the information, shipping and payment steps are only available to stores on Shopify Plus, and you would build that extension yourself.

Which Shopify plans can use Send HTTP request?

Shopify’s Flow documentation says the Send HTTP request action is only available on the Shopify Plus, Advanced and Grow plans.

What happens if the validation API doesn’t answer?

Flow waits up to 30 seconds for a response. With On server error set to Retry, it retries 5XX and 429 responses for up to 24 hours; a 4XX response with Fail stops that workflow run without tagging the customer.

Email validation API

Validate emails in your app

emailvalidation.io checks syntax, MX records and the mailbox over SMTP, flags disposable, role and free addresses and returns a quality score, in one request.

/v1/info Email validation API Read the documentation

100 free validations every month. No credit card required.

GET https://api.emailvalidation.io/v1/info?email=support@emailvalidation.io

{
  "email": "support@emailvalidation.io",
  "user": "support",
  "tag": "",
  "domain": "emailvalidation.io",
  "format_valid": true,
  "mx_found": true,
  "smtp_check": true,
  "catch_all": null,
  "role": true,
  "disposable": false,
  "free": false,
  "score": 0.64,
  "state": "deliverable",
  "reason": "valid_mailbox",
  "did_you_mean": ""
}

Keep reading

Start using our email validation software today!

Get 100 validations per month for free