Spreadsheet exports
One row per fulfilled goal, in a spreadsheet or list that belongs to you - for the people on your team who will never open a BI tool.
1. Which one to pick
They do the same job. The difference is which account your company already lives in.
| Google Sheets | Microsoft SharePoint | |
|---|---|---|
| A row becomes | a row appended to a sheet | an item in a list |
| You provide | a service account key, the spreadsheet ID | tenant, client ID, client secret, site ID, list ID |
| Columns | fixed order, eight of them | whatever your list has - we ask first |
| Setup effort | create a service account, share the sheet with it | register an app, grant it one site |
This is the small sibling of the BigQuery connector. That one is for data teams with SQL; this one is for the person who wants to sort by value and send the top ten to sales.
2. Google Sheets: the sharing step everyone forgets
A service account is a user in its own right, with its own email address ending in .iam.gserviceaccount.com. Creating the key is not enough - you have to share the spreadsheet with that address, exactly as you would with a colleague.
Skip it and every write comes back 403. We say so in the error message by name, because Google's own wording does not mention it and people spend an afternoon on the key instead.
Paste the whole URL if that is easier
The spreadsheet ID is the part between /d/ and /edit. Paste the entire address into the field and we cut it down.
Values are written raw, on purpose
Not as "user entered". Otherwise Google would read a customer ID like 00123 as a number and throw the leading zeros away, and a value starting with = would become a formula.
3. SharePoint: we read your columns before writing
SharePoint refuses an item that names a column the list does not have - and the internal column names are whatever you chose when you created the list. Assuming a fixed set would be a bet that loses on every second customer.
So we fetch the list's columns once an hour and write only the ones that exist and are not read-only. A list that has nothing but the default Title column gets the goal name and nothing else, instead of failing on every goal.
The optional columns, if you create them: MPSession, MPChannel, MPUser, MPValue, MPCurrency, MPUrl, MPTime.
The permission Microsoft recommends is not the one you want
For this call Microsoft's documentation lists Sites.ReadWrite.All as least privileged. That is write access to every site in your tenant, for an integration that fills one list.
Use Sites.Selected instead: an app with that permission has no access at all by default, and an administrator grants it write access to exactly one site. Granting both cancels the restriction out - the narrow permission only works while the app has nothing else.
4. What lands in the row
Timestamp, project, session, customer ID, goal name, value, currency, and the link that plays the recording back. In SharePoint the same values go into whichever of those columns exist, with the shape the column type demands - a hyperlink column gets a link object, a text column gets the same address as text.
An empty cell means "no value agreed", not zero
A goal without a monetary value leaves the cell empty. A zero would sum up in a spreadsheet into a total that never existed.
The customer ID is looked up at delivery time
Not when the goal fires. Identification usually happens at login - that is to say, often after the goal. Asking a few seconds later is both cheaper for our event pipeline and more likely to find a name.
Both credentials are stored AES-256-GCM encrypted, never shown again, and deliberately kept out of the internal queue that carries the task.
All trademarks named here belong to their respective owners. MousePlayer has no business relationship with these providers.