The Scenario
You're three sprints into a new billing-system migration. The ops team exported 200 user-company pairs from the old system — user_identifier in column A, company_identifier in column B — and they're sitting in a Google Sheet waiting to be pushed into Userlist so the behavioral email campaigns can start firing correctly.
Your growth engineer estimated it would take maybe an hour to script against the Userlist API. That was two weeks ago. The campaigns are supposed to go live on Thursday.
The bad version:
- Open the Userlist dashboard, navigate to the Relationships section, and click "Add relationship" for each pair — user ID, company ID, save, next.
- Around row 40, notice that two identifiers look swapped; go back to the sheet to verify; lose your place; start over from row 38.
- Finish 60 rows, realize the remaining 140 won't happen today, and schedule a follow-up block for tomorrow that everyone knows won't actually happen.
You were supposed to be the person who got the campaigns unblocked. Instead you're doing data entry, and the Thursday launch is looking more like "next week, maybe."
The Easy Way: One Prompt in SheetXAI
SheetXAI is an AI agent that lives inside your Google Sheet. It reads the data across your tabs, understands the structure, and talks to Userlist on your behalf — pushing relationships, logging results, flagging errors. You describe the task; it runs it.
Open the sheet with your user-company pairs and paste this into the SheetXAI sidebar:
Read every row in the "Relationships" tab (column A = user_identifier, column B = company_identifier) and create or update the user-company relationship in Userlist for each pair. Write "synced" or "error" in column C for each row.
What You Get
- Column C fills with "synced" for every row where the relationship was created or updated in Userlist.
- Rows where the identifier was blank, malformed, or unrecognized by Userlist get "error" in column C instead of silently disappearing.
- The Userlist API's response for each row — including any error message — is available in column D if you ask for it.
- All 200 rows run in one pass. No clicking, no rate-limit babysitting, no partial saves.
What If the Data Is Not Quite Ready
The identifiers have inconsistent formatting
Some user IDs came through with a "usr_" prefix; others are bare UUIDs. Userlist expects the bare UUID format, but the sheet is mixed.
In the "Relationships" tab, strip the "usr_" prefix from any value in column A that starts with it, then create or update the user-company relationship in Userlist for each row using the cleaned user_identifier and the company_identifier in column B. Write "synced" or "error" in column C.
The company identifiers are in a lookup tab, not in this sheet
The relationship tab only has user_identifier in column A and company_name in column B. The actual company_identifiers are in a separate "Companies" tab with company_name in column A and company_identifier in column B.
Look up each company_name in column B of the "Relationships" tab against the "Companies" tab (match column A, return column B) to get the company_identifier, then push the user-to-company relationship to Userlist for each row. Write "synced" or "error" in column C.
Some rows are test accounts that should be skipped
The "Relationships" tab has a "Type" column in column C. Rows marked "test" should not be pushed to Userlist — only production accounts.
For every row in the "Relationships" tab where column C is NOT "test", create or update the user-company relationship in Userlist using column A as user_identifier and column B as company_identifier. Write "synced", "skipped", or "error" in column D.
The cleanup, validation, and push — all in one shot
The sheet has mixed formatting, some test accounts, some blank rows, and a lookup tab for company identifiers.
In the "Relationships" tab: skip any row where column A or column B is blank. Skip any row where column C is "test". Strip the "usr_" prefix from column A if present. Look up the actual company_identifier from the "Companies" tab using the value in column B. Then push the user-company relationship to Userlist for every qualifying row, and write "synced", "skipped", or "error" in column D.
The pattern: ask for the cleanup and the action together — one prompt, one pass.
Try It
Get the 7-day free trial of SheetXAI and open the sheet where your billing export lives, then ask SheetXAI to push the user-company pairs to Userlist and log the results. For a different angle on Userlist data, see the bulk delete spoke or the Userlist overview.
