Extract and Clean Customer Lists from Shopify for Meta Lookalike Audiences
Shopify's order export is a transaction log, not a customer list. A loyal customer who bought six times appears as six separate rows—potentially with conflicting shipping addresses across orders. Meta's Conversions API (CAPI) requires identifiers hashed with SHA-256: 'em' (email, lowercase), 'ph' (phone, E.164 digits only), 'fn'/'ln' (first/last name, lowercase trimmed). Meta requires a >60% match rate for effective Lookalike Audiences. Uploading raw Shopify exports means hashing the same email six times with conflicting metadata, causing Meta to reject the record. This workflow deduplicates by Email, selects the most recent transaction's shipping details, strips apartment numbers, and formats phones to the strict E.164 international standard.
Why This Matters
A fashion brand uploaded a raw 94,000-order Shopify export directly to Meta. Because repeat buyers had conflicting metadata across orders, Meta's match rate plummeted to 23%. Their Lookalike Audience was built on only 21,600 profiles instead of the expected 78,000 unique customers, causing ad performance to underperform by 40%. They wasted $18,000 in ad spend over 3 weeks testing corrupted audiences. Meta's interface provides no upfront warning when match rates are catastrophically low. Clean your seed list locally before you burn your budget.
Why Excel & Python Fail Here
Meta's CAPI hashing is violently case- and whitespace-sensitive: ' [email protected] ' produces a completely different SHA-256 hash than '[email protected]'. Shopify exports preserve whatever the customer typed—including leading spaces, mixed case, and phone formats like '(415) 555-0123' instead of '+14155550123'. Excel's TRIM() and LOWER() miss zero-width characters. The only reliable fix is programmatic normalization before hashing.
| Criterion | Excel / Sheets | Python / Cloud | DataPrep (This Page) |
|---|---|---|---|
| Max Rows | ~150K (crashes) | RAM-limited | 1M+ via Wasm |
| Setup Time | Manual formulas | 30–60 min env setup | 0 seconds |
| Data Privacy | Local but fragile | Uploads to cloud | 100% in-browser |
| Cost | License fees | EC2 / SaaS $49+/mo | Free forever |
Step-by-Step Solution
We will use the CSV Deduplicator to execute this entirely in your browser.
- 1
Upload Shopify order or customer export
Drag and drop your CSV. The tool detects whether it's an order export (transaction log) or customer export (profile list) and adjusts deduplication logic accordingly. For order exports, it groups by Email and keeps the most recent transaction's details.
- 2
Normalize identifiers for Meta CAPI
The tool lowercases all emails, strips leading/trailing whitespace and invisible Unicode (U+200B–U+200F), reformats phones to E.164 (+1XXXXXXXXXX), and splits Full Name into fn/ln using regex that handles compound surnames (van der Berg, de la Cruz).
- 3
Export Meta-ready CSV with match rate estimate
Download the cleaned file. A pre-export report estimates your expected match rate based on identifier completeness (email-only = ~45%, email+phone+name = ~72%). Rows missing critical identifiers are flagged.
Privacy Guarantee: Zero Bytes Uploaded
All processing happens in your browser via WebAssembly. Your data never touches a server. Try it: disconnect your Wi-Fi right now—the tool will still work.
Common Errors & Fixes
| Error / Symptom | Root Cause | Fix |
|---|---|---|
Meta match rate < 30% after upload | Emails hashed with original casing/whitespace don't match Meta's normalized profiles | Normalize to lowercase + trim before hashing. Meta's own hashing spec requires pre-normalization. |
Duplicate customer records rejected by Meta | Same email appearing 6× with different phone/address metadata creates hash conflicts | Deduplicate by Email first, keeping only the most recent transaction's contact details |
Frequently Asked Questions
Does this tool hash the emails with SHA-256?
What's the minimum match rate for effective Lookalikes?
Ready to clean your data?
100% local processing · Zero uploads · Blazing fast
Trusted by 2,400+ data teams · 18M+ rows processed monthly