# Shopify-pet · Post 1 — Story

**Where to post:** r/shopify, r/ecommerce, Shopify community forums,
pet-business Facebook groups (Pet Industry Distributors Association,
Pet Boss Nation), Klaviyo community Slack.

**Format:** ~400 words. Owner-to-owner tone.

---

## Title

Why my Klaviyo flows were skipping 18% of my customers (and the CSV cleanup that fixed it)

## Body

Background: I run {{your-store-context — e.g., "a 4-year-old pet supplements store doing about $X/month"}}. Last summer I noticed the open rate on my "abandoned cart" Klaviyo flow was lower than usual. Klaviyo's dashboard said the flow was firing fine. Took me a week to figure out the actual problem:

**Klaviyo was silently dropping 18% of my customers because their phone numbers weren't formatted correctly.** Not "wrong" — just not in the format Klaviyo's SMS module accepts. So the SMS part of the flow never sent, and the email-only fallback didn't kick in for half of those.

The root cause was the Shopify customer export. Customers had entered their phones every which way:

- `(415) 555-0143` — works
- `415.555.0143` — Klaviyo: "invalid"
- `4155550143` — Klaviyo: "invalid for this country"
- `+44 20 7946 0958` — works only if the country field is set; for ~30% of my customers it wasn't
- `415-555-0143 ext 12` — Klaviyo: "invalid"

The fix is a one-time CSV cleanup before each Klaviyo sync:

**1. Pull the Shopify customer export.**
Customers > Export > "All customers" > CSV.

**2. Run every phone number through E.164 normalization.**
E.164 is the international format Klaviyo (and basically every other SMS platform) wants: `+14155550143`. Python's `phonenumbers` library does this if you're scripting; spreadsheet add-ons exist but they're painful at >5k rows.

**3. Default the country code per row.**
If the customer's address country is "United States", default the phone country to US. This catches the rows that are missing `+1` but are obviously American.

**4. Drop or quarantine anything still un-parseable.**
Don't import broken rows hoping Klaviyo will figure it out. It won't.

**5. Re-import the cleaned CSV to a Shopify customer segment** (or push directly to Klaviyo via their API).

I eventually wrapped this whole pipeline into a desktop app called DataTools because doing it monthly was tedious. $49, runs locally so customer data stays on my machine, datatools.app/shopify-pet if you're curious. But the 5 steps above are what actually matters — works regardless of tool.

Anyone else seeing low SMS deliverability? I'd bet money it's this.

— {{your-name}}
