Skip to content
Academy
Marketing Academy · Field Work●Paid Ads
MiniBuild the Asset· 30 minutes

Build a SHA-256 Hashing-Ready Customer Match Upload Sheet

ThredUp

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)

FreeNormalize raw export fields before hashing

Free, no account friction, formulas handle case/whitespace/phone-format fixes

The process

1 step

Step 01 of 01

Normalizing match keys before hashing

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?

Google Sheets— Import customer-export.csv, add helper columns for normalized email and E.164 phone.

Procedure

  1. Import customer-export.csv and freeze the header row
  2. Add a normalized-email column: =LOWER(TRIM(A2)) applied down the column
  3. Add an E.164-phone column converting formats like '(415) 555-2671' to '+14155552671'
  4. Flag any row with neither a usable email nor phone as DROP, it has no match key to hash
Sample output
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?

SymptomActionEffort
Customer Match audience uploads but match rate is unexpectedly lowCheck normalization (case, whitespace, phone format) before assuming the audience is just small30 min
YouYou can do this yourself, no engineering access required.

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
Sample output
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