The Scenario
You inherited the post-purchase customer list from the previous ops manager — 1,500 rows, a Google Sheet, columns A through D: first name, last name, phone, email. The WhatsApp follow-up campaign is supposed to go out Thursday. Today is Tuesday. You have no idea how many of these contacts are already in Heyy, and you're not going to find out by clicking "New Contact" 1,500 times.
The bad version:
- Download the sheet as CSV, upload it to Heyy, realize the phone numbers are in the wrong format, fix the CSV, upload again, and manually check which rows errored
- For every row Heyy rejects, open the contact manually and type the corrected number into the phone field
- Spend an hour in Heyy's interface confirming that the contacts landed before realizing you have no record of which Heyy contact ID maps to which sheet row
The spreadsheet is not the problem here. The import pipeline is the problem. You're supposed to be setting up the campaign sequence, not troubleshooting a CSV upload at 4 PM the day before launch.
The Easy Way: One Prompt in SheetXAI
SheetXAI is an AI agent that lives inside your Google Sheet. It reads your data and talks to Heyy directly — so you don't need a CSV, a connector, or a separate tool.
Create a Heyy contact for each row in my sheet — FirstName from column A, LastName from column B, Phone from column C, Email from column D — write the returned contact ID into column E
What You Get
- Every row in the sheet becomes a Heyy contact
- The returned Heyy contact ID lands in column E of the same row
- Rows where column C (phone) is blank are skipped automatically and logged in column F with the reason
- If Heyy returns an error for a specific row (malformed phone, duplicate email), that error appears in column F so you can fix just those rows
What If the Data Is Not Quite Ready
Phone numbers are inconsistently formatted
Some rows have +1 (555) 867-5309, some have 5558675309, some have international codes without the +. Heyy expects E.164 format.
Before creating Heyy contacts, normalize every phone number in column C to E.164 format (+country code, digits only, no spaces or dashes) — then create a contact for each row and write the contact ID into column E
Email column has blanks and duplicates
Rows 80–120 have no email in column D, and you suspect rows 200 and 201 are the same person with slightly different names.
Create Heyy contacts from my sheet — skip any row where column D (Email) is blank — and before running, flag duplicate phone numbers in column C by writing 'DUPLICATE' in column F so I can review them first
Contacts should be created from multiple tabs
The sheet has three tabs: "Q1 Customers," "Q2 Customers," and "Referrals." You need all three in Heyy, but the column layout differs between tabs.
Create Heyy contacts from the 'Q1 Customers' tab (columns A–D), 'Q2 Customers' tab (columns A–D), and 'Referrals' tab where name is in column A, phone is in column C, and email is in column E — write contact IDs back to column F in each tab
Clean, dedup, and import in one pass
Some rows have missing values, some phones need formatting, some emails appear twice across tabs, and you want this done before the Thursday deadline without touching each row individually.
Normalize phones in column C to E.164, skip rows where phone is blank, flag duplicate phones across the entire sheet in column F as 'DUPLICATE', then create Heyy contacts for all valid rows and write the returned contact ID into column G
The principle: ask for the data cleanup and the Heyy action in the same prompt, and SheetXAI handles both before writing anything back.
Try It
Get the 7-day free trial of SheetXAI and open your post-purchase customer sheet, then ask it to create Heyy contacts from your contact columns. Once the IDs land in column E, you can ask it to apply labels or trigger campaigns in the same session. Also see: Apply Heyy contact labels from a segmentation column and the Heyy integration overview.
