The Scenario
You are a product manager at a SaaS company. Three months ago, you launched a new feature. The activation events — "feature_activated", "report_exported", "integration_connected" — were supposed to fire into Intercom in real time, but the tracking implementation had a bug that went undetected for six weeks. The data is in a CSV export from your data warehouse, now cleaned and sitting in an Excel workbook: 1,000 rows with user email, event name, and timestamp.
Without these events in Intercom, the user timelines are incomplete, the message rules that should have triggered based on activation are wrong, and the health scores are off.
The bad version:
- Try to use Intercom's CSV import — realize it does not support importing historical data events, only contacts.
- Look for a bulk event API in Intercom's docs for 20 minutes.
- Find a Stack Overflow thread from 2019 suggesting you build a script. You are a PM. You do not build scripts.
The engineering sprint is locked. Nobody is adding a backfill script to this week's scope.
The Easy Way: One Prompt in SheetXAI
SheetXAI is an AI agent that lives inside your Excel workbook. It reads each row and submits it as a data event to Intercom, logging the outcome per row.
Submit each row from this workbook as a data event to Intercom — columns are user_email, event_name, event_timestamp — create one event per row and write "sent" or "error" to column D.
What You Get
- One Intercom data event submitted per row, associated with the contact matching the email in column A.
- Event name set from column B, timestamp set from column C so events appear at the correct point in the user timeline.
- "sent" written to column D for successful submissions.
- "error" written with a brief description for rows where the contact was not found or the event was malformed.
What If the Data Is Not Quite Ready
Timestamps are in Unix epoch format instead of ISO 8601
The data warehouse export uses seconds since epoch.
Before submitting events, convert column C from Unix epoch (seconds) to ISO 8601 format — then submit each row as an Intercom data event with the corrected timestamp and write "sent" or "error" to column D.
Some event names have inconsistent casing
The workbook has a mix of "Feature_Activated", "feature_activated", and "FEATURE_ACTIVATED".
Normalize event names in column B to lowercase with underscores before submitting — then submit each row as an Intercom data event and write the result to column D.
Some user emails do not have matching Intercom contacts
About 80 rows represent users who signed up through a channel that did not push them to Intercom.
For each row, check if an Intercom contact exists for the email in column A — if not, create the contact first — then submit the data event and write "sent", "contact_created_then_sent", or "error" to column D.
Normalize event names, convert timestamps, handle missing contacts, and log results
You want the full backfill done in one operation with a clean audit log.
Lowercase and underscore-normalize column B, convert column C from Unix epoch to ISO 8601, create any missing Intercom contacts before submitting, then submit each row as a data event — write "sent", "contact_created_then_sent", or "error" to column D, and add a summary row showing total sent, created-then-sent, and errored.
Try It
Get the 7-day free trial of SheetXAI and open your event backfill workbook — ask it to push the data events into Intercom so the user timelines are complete before your next messaging audit. For adding internal notes alongside event data, see the bulk-add-internal-notes spoke and the Intercom hub overview.
