Free Tool ยท Klaviyo + Google Sheets

Your Klaviyo reporting, on autopilot, in a spreadsheet you own.

Klaviyo's dashboards are fine until you need week-over-week trends, custom conversion columns, or one sheet your whole team can pivot on. This template pulls campaign and flow performance, email and SMS list growth, and any conversion metric you choose into Google Sheets on a schedule โ€” no manual exports, no engineering ticket, no third-party connector fees. Setup takes about 10 minutes.

Google Apps Script Runs in your account ~10 min setup
Raw_Campaign
One row per campaign message (A/B variants included): opens, clicks, unsubs, spam, bounces + your conversion metrics, subject lines, audiences, and tags.
Raw_Flow
One row per flow message per day โ€” the daily granularity Klaviyo's UI won't export, ready for pivot tables.
Raw_Email_Growth
New profiles vs. unsubscribes by day, so list health is a chart instead of a guess.
Raw_SMS_Growth
Optional โ€” SMS subscribes and unsubscribes by day. Skipped automatically if you don't use SMS.

Get It

Download the two script files

The whole template is two Google Apps Script files โ€” everything runs inside your own Google account against your own Klaviyo API key. Nothing is sent anywhere else, and re-running never duplicates rows (all writes are upserts).

Config.gs  the only file you edit Klaviyo.gs  the engine โ€” no edits needed

Setup ยท ~10 Minutes

Six steps, no coding required

1
Create the sheet + script
New Google Sheet โ†’ Extensions โ†’ Apps Script. Create two files โ€” Config.gs first, then Klaviyo.gs โ€” and paste in the downloaded contents.
2
Add your API key (it never goes in the code)
In Apps Script: Project Settings (gear) โ†’ Script Properties โ†’ add KLAVIYO_API_KEY with a Klaviyo private key. It needs Read access to Campaigns, Flows, Metrics, Profiles, Lists, and Segments.
3
Let the script find your IDs for you
Run klaviyoLogAccountInfo from the editor's function dropdown (authorize when asked). The log prints every metric and list in your account with its ID โ€” everything the next step needs.
4
Fill in the CONFIG block
At the top of Config.gs: pick a base metric, list the conversion metrics you want as columns (orders, signups, cancellations โ€” anything Klaviyo tracks), and optionally your SMS list. Every field is commented, and the script tells you exactly what's missing if you skip something.
5
Add tabs, run once, set the schedule
Create tabs Raw_Campaign (with a Campaign Message ID header) and Raw_Flow (with Day + Message ID) โ€” every other column auto-creates on first run, growth tabs need nothing. Run klaviyoWeeklyPull once to test, then add a time-based trigger to run it daily or weekly.
6
Backfill a year of history (optional)
Run klaviyoFullRefresh once โ€” it pulls 365 days in 60-day chunks and manages Apps Script's execution limits by itself. Kick it off and let it finish.

Why a spreadsheet?

Because every lifecycle question starts with "pull the numbers."

Send-time tests, flow vs. campaign revenue mix, unsub spikes after a template change, list growth against paid spend โ€” they all need raw daily data somewhere you can pivot, chart, and share. This gives you that layer for free, in a tool your whole team already uses.