Build a SHA-256 Hashing-Ready Customer Match Upload Sheet
Objective: Given a raw, messy 20-row customer export (mixed casing, extra whitespace, non-E.164 phone formats), normalize it into a Customer Match-ready format and correctly identify which rows must be dropped before hashing rather than uploaded as-is.
You're a growth marketer at ThredUp, the online secondhand-apparel marketplace, prepping a lapsed-buyer segment for a Google Customer Match re-engagement campaign ahead of the resale season.
Normalize the export to Google's match-key requirements (lowercase, trimmed emails; E.164 phones) and flag any row that can't be hashed safely as-is.
Before you start
What you'll need
Free path (everything below is enough to finish)
Free, no account friction, formulas handle case/whitespace/phone-format fixes
The process
1 step
Step 01 of 01
The lesson's Data Requirements and Hashing section requires emails normalized to lowercase and trimmed, and phone numbers in E.164 format, before SHA-256 hashing, because a hash of ` User@Example.com ` will never match Google's hash of `user@example.com`.
Given 20 raw rows including ' Sara.K@Gmail.com', '(415) 555-2671', and a row with a blank email and no phone, which rows are upload-ready and which must be fixed or dropped?
Procedure
- Import customer-export.csv and freeze the header row
- Add a normalized-email column: =LOWER(TRIM(A2)) applied down the column
- Add an E.164-phone column converting formats like '(415) 555-2671' to '+14155552671'
- Flag any row with neither a usable email nor phone as DROP, it has no match key to hash
row 3: raw ' Sara.K@Gmail.com' -> normalized 'sara.k@gmail.com' READY row 7: raw '(415) 555-2671' -> E.164 '+14155552671' READY row 12: raw email blank, phone blank DROP, no match key row 15: raw 'MIKE@BIZ.CO ' (trailing space) READY after trim+lowercase
Healthy
18 of 20 rows normalized and upload-ready; 2 rows explicitly dropped with a reason logged.
Unhealthy
Uploading all 20 rows as-is, including the 2 with no match key, or hashing ' User@Example.com' without trimming first.
What this means
A hash is only useful if it matches Google's hash of the same value in the same format. Normalization has to happen before hashing, not after, because hashing is one-way, you can't fix a bad hash after the fact.
So what do I do about it?
| Symptom | Action | Effort |
|---|---|---|
| Customer Match audience uploads but match rate is unexpectedly low | Check normalization (case, whitespace, phone format) before assuming the audience is just small | 30 min |
Final deliverable
A cleaned, normalized customer list with a DROP flag column, ready to be hashed and uploaded to Google's Data Manager API.
See a reference example
Glossybox, lapsed-subscriber re-engagement list (excerpt) email_normalized phone_e164 status priya.n@gmail.com +919845012345 READY sam.oconnor@yahoo.com +14155552671 READY (blank) (blank) DROP, no match key j.lee@biz.co +442071234567 READY Summary: 47 of 50 rows ready, 3 dropped for missing match keys
Success criteria
You're done when you can:
- Every ready row has lowercase, trimmed email or valid E.164 phone
- Rows with no usable match key are explicitly flagged, not silently uploaded