Google Ads Customer Match CSV Format: Headers, Phone Numbers, Hashing and a Cleaner List
A Google Ads Customer Match file is a UTF-8 or ASCII CSV whose first row uses Google's exact English headers: Email, Phone, First Name, Last Name, Country and Zip. Fill the columns you have, put phone numbers in E.164, and decide whether to hash. Before you build the file, verify the email column, because addresses that don't exist can't match anyone. The facts below come from Google Ads Help: format your customer data file, read on 9 November 2026.
Format your Customer Match file →
What goes in the file
Google's page asks for these things:
- A CSV file encoded in ASCII or UTF-8. UTF-16 is not supported.
- Column headers in English, using the exact names. The data rows themselves can be in any language.
- Only the columns you have. You choose which match types to send.
The headers that matter are:
| What you are matching on | Headers Google asks for |
|---|---|
| Phone | Phone |
| Mailing address | First Name, Last Name, Country, Zip |
| IP address | User IP address |
| Interaction time | User interaction timestamp (can't be sent alone) |
| Mobile device ID | Mobile Device ID, as the only header in the file |
Most advertisers send Email, Phone, or both. You can add the address columns for people whose email you don't have, but Google says all four address headers must be included together. A file that has First Name and Last Name but no Country and Zip does not give you address matching.
Phone numbers
Google asks for E.164 format: the country code, then the number, for example +12345678910. The plus sign is optional for plain text but required if you hash the numbers yourself. A spreadsheet export usually holds numbers as (415) 555-0132 or 0415 555 0132, which has to be rewritten, and the country code has to come from somewhere. The phone number formatter does that step on its own, and the Customer Match formatter does it for you when it writes the file. If your CRM mixes country formats, our posts on HubSpot phone number format and Salesforce phone number format show how the same problem looks in those systems.
Country and Zip
Country uses two-letter ISO codes (Google says three-letter codes also work in plain text). US zip codes can be 5 digits or 5+4, and non-US postal codes should leave out extensions. Google's page says not to hash Country or Zip.
To hash or not to hash
Google's page gives two options:
- Upload plain text. Google Ads hashes it with SHA-256 for you.
- Hash it yourself with hex SHA-256.
API uploads must be hashed. If you hash yourself, Google asks you to:
- trim leading and trailing spaces,
- convert text to lower case,
- standardize phone numbers (with the plus sign),
- remove the periods before the domain in @gmail.com and @googlemail.com addresses.
Mobile device IDs, IP addresses and timestamps must stay unhashed, and Google says hashing device ID lists is not supported. If you need only the hashing step, the email hasher writes the cleaned, hashed values and the Customer Match formatter has a SHA-256 option.
One practical point: if you hash a value that still has a space or a capital letter in it, the hash will not match the one Google computes, and the row quietly fails to match. Normalise first, then hash.
Why verify the list before you upload
An email address on a Customer Match list has to belong to a mailbox someone uses to sign in to a Google account. Addresses that bounce are not going to do that. That is the whole case for verification here, and it is a narrow one:
- Typos and old addresses. A list that has sat in a CRM for a year contains mailboxes that were closed. Those rows add nothing.
- Fake sign-ups. Throwaway and made-up addresses on a free-trial or discount list never match a real customer.
- Role addresses. info@ and sales@ at a company are shared inboxes and are unlikely to be one person's Google account.
Verification is not a promise of a higher match rate. Google decides who matches, and a valid mailbox can still belong to someone with no Google account. What verification does is remove rows that have no chance, so you aren't building an audience on bad data. Our post on custom audience match rate and your email list explains the same idea for other ad platforms.
A routine you can follow
- Export your customer list from the CRM or store, with every column you have.
- Remove duplicates. The duplicate email remover keeps one row per address.
- Verify the emails at /verify. Keep valid rows. Drop invalid ones. Look at risky ones before you decide, since a risky result means the answer wasn't clear, not that the address is dead.
- Format the file with the Customer Match formatter: the headers, phones and zip codes are written to Google's rules, and you can tick SHA-256.
- Upload it in Google Ads under Audience manager, as a customer list segment.
- Keep the clean copy. Next month's export will be a bit staler. Our post on how often to verify an email list gives a schedule.
Consent and what the file contains
A Customer Match list is made of personal data about your own customers. Upload people who gave you their details in a way that allows this use, and follow the rules where they live. This post is about the file format and list quality, not legal advice, and a formatter doesn't change what you are allowed to do with the data.
Common mistakes
- Headers in your own language or wording. Google asks for the exact English names. "E-mail address" or "Postcode" will not do.
- Phone numbers without a country code. The number can't be read the way you meant it.
- Only some address columns. Without all four, there is no address match.
- Hashing country or zip. Google says not to.
- Hashing before cleaning. Spaces, capital letters and Gmail periods change the hash.
- Uploading the whole old list. Stale rows cost nothing to remove and nothing to keep, except that you can't match them.
What the formatter does and doesn't do
The formatter reads your export in your browser, finds columns by their headers, writes only the columns your data fills, merges repeated rows, and gives you plain or hashed output. It does not write device IDs, IP addresses or timestamps. It can't tell whether an address is alive; that is what verification is for. For a similar job on other platforms, see the Facebook custom audience formatter and the TikTok custom audience formatter.
Try it on your own list
Upload a sample at /verify. The first 100 checks are free with a Google sign-in, no card.
Pro, $39 a month: Unlimited email verification.* Never metered, never cut off. See pricing.
*Fair use: the first 100,000 checks a month at full speed, then slower, never cut off.
Common questions
What columns does a Google Ads Customer Match CSV need?
Use any of Email, Phone, and the four address columns First Name, Last Name, Country and Zip. Google's page says all four address columns must be included together for address matching. Headers must use these exact English names.
How do I format phone numbers for Customer Match?
Use E.164: a plus sign, the country code and the number, for example +12345678910. Google says the plus sign is optional for plain text but required when you hash the data yourself.
Do I have to hash the file before uploading to Google Ads?
Not in the Google Ads interface, where Google hashes plain text with SHA-256 for you. Uploads through the API must be hashed. If you hash it yourself, use hex SHA-256.
Which values should not be hashed?
Google says Country and Zip should not be hashed. Mobile device IDs, IP addresses and timestamps must also be left unhashed.
Does verifying emails improve Customer Match results?
It removes addresses that can't belong to a live mailbox, so you stop uploading rows that have no chance of matching. It can't make a real address match a Google account, and we don't promise any match rate.
Is my list sent to SimpleVerifier when I use the formatter?
No. The Google Ads Customer Match formatter reads and rewrites the file in your browser.
Check your list before you send
Real mailbox checks over SMTP, and nothing is sent to the address. Sign in with Google and your first 100 email checks are free, no card. Plans for bigger lists are on the pricing page.