Integrations
Shopify integration
Check each Shopify customer’s email address when the customer is added or its address changes, and save the status in customer metafields that your segments, flows and exports can use. A webhook relay in your own Cloudflare account checks new customers, and a clean-up command catches up the ones you already have.
- Status: Setup guide
- A relay and a command, in your own accounts
export EV_API_KEY=… SHOPIFY_SHOP=acme SHOPIFY_CLIENT_ID=… SHOPIFY_CLIENT_SECRET=…
node clean.mjs --dry-run # counts what it would check
node clean.mjs # checks and writes the resultsAt 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
- Shopify merchants who email their customers and want to know which addresses will bounce before a campaign or a flow sends to them, and stores that want a doubtful address flagged on the order before fulfilment.
- You need
- A Shopify store and a custom app you create for it in Shopify’s Dev Dashboard, a Cloudflare account for the relay, Node 22.18 or later for the command, and an API key made for it, with a daily credit cap. For a clean-up large enough to go as one bulk job, the key also needs Bulk lists.
- 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.
Segment by status
Each checked customer gets
email_validation.statusandemail_validation.reasonmetafields, so a segment, a flow or an export can leave out the invalid and disposable addresses.Check new customers
The relay checks a customer within seconds of being added, and again only when its address changes. With tags turned on, the customer also gets a tag such as email-invalid.
Flag doubtful orders
Optionally, each new order gets a tag with the status of its address, so your team or a flow can look at it before fulfilling. It does not stop a checkout.
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 a custom app
In Shopify’s Dev Dashboard, create an app for your store with read_customers and write_customers (and the two order scopes to tag orders), release it, install it on your store and copy its Client ID and Client secret.
Deploy the relay
Deploy
relay.jsfrom the guide to your Cloudflare account with Wrangler and your store’s myshopify name, and add the secretsEV_API_KEY,SHOPIFY_CLIENT_IDandSHOPIFY_CLIENT_SECRET.Run the setup
node clean.mjs --setup --relay-urlwith the relay’s address creates the four metafield definitions and subscribes the relay to customer creation and customer updates.Test it
Add a test customer with
no_mailbox@sandbox.email-validation.org: within a few seconds its Email status metafield isinvalid, at no cost. Then delete the test customer.Clean the rest
Run the clean-up command with --dry-run to count what it would check, then without it to check every customer that has no result yet and write each one’s metafields.
Good to know.
- A customer is not checked again while its address is still the checked one, and the relay ignores its own metafield writes, so a result never starts a second check.
- Shopify does not deliver a webhook again when a check could not run, for example because the key has no credits left: run the clean-up command to catch those customers up.
- If a clean-up stops, run the same command again: it keeps the bulk job’s id in a small state file (ids only, no addresses) and resumes that job, so a list is never paid for twice.
- For EU data residency, add
--var EV_REGION:euto the relay’s deploy command and--region euto the clean-up command. - The relay refuses any request that Shopify did not sign with your app’s client secret, and follows the API limit Shopify reports with each answer.
Updated · Maintained by the email-validation.org team