Step-by-step guide for the Klaviyo review team to install, validate, and uninstall the ShopSheets integration. Estimated time: 10 minutes.
Prerequisites
- A Klaviyo account you control with at least Manager role. The account should have at least one campaign or flow with recent activity to validate data retrieval.
- A Google account (used to log into ShopSheets and to host the destination Google Sheet).
- A web browser. No CLI or developer tools required.
If you need a ShopSheets reviewer account, email periel@wearegrowth.co and one will be provisioned within 1 business day.
Test 1 — Install (OAuth)
- Visit https://shopsheets.io and sign in with Google.
- On the Dashboard, click Add connection.
- In the modal, select Klaviyo from the platform dropdown. The form should display the OAuth-style "Continue with Klaviyo" button (no manual API key entry).
- Click Continue with Klaviyo. You will be redirected to Klaviyo's authorization page.
- Expected: the Klaviyo consent screen lists the following scopes —
accounts:read, campaigns:read, flows:read, forms:read, lists:read, metrics:read, profiles:read, segments:read, tags:read. All scopes are read-only. - Approve. Klaviyo redirects you to
https://shopsheets.io/KlaviyoOAuthCallback?code=...&state=... and ShopSheets exchanges the code for tokens. - Pass criteria: the page shows "Klaviyo Connected" and you are returned to the Dashboard. The new connection appears in the connection list, labeled with your Klaviyo organization name.
No Google Sheets needed
For Tests 2 and 3 below, use the in-app Klaviyo Test Terminal at /KlaviyoTerminal. Connect your Klaviyo account, pick a query level, click Run, and rows render directly in the browser. No spreadsheets or extensions to install.
Test 2 — Functionality (read campaign data)
- Visit https://shopsheets.io/KlaviyoTerminal. Your Klaviyo connection from Test 1 should appear in the connection picker.
- Set Query Level to Campaign performance.
- Set Date Range to Last 30 days.
- Check the dimensions Campaign name, Date.
- Check the metrics Recipients, Opens, Clicks, Conversions.
- Click Run Query.
- Pass criteria: within 5–15 seconds, a results table renders with one row per (campaign, date) pair. Recipients / Opens / Clicks / Conversions match the same metrics shown in Klaviyo's UI for the same window.
Test 3 — Functionality (profile dump)
- In the same terminal, change Query Level to Profile dump (entity mode).
- Check the dimensions Profile ID, Profile email, Profile city, Profile country, Profile creation datetime.
- Click Run Query.
- Pass criteria: rows populate with profile attributes pulled live from
https://a.klaviyo.com/api/profiles. Up to 10,000 profiles (default cap) per query.
Test 4 — Token refresh (automatic)
Klaviyo OAuth access tokens expire after 1 hour. ShopSheets refreshes them automatically using the stored refresh token before each query. To verify, wait 65+ minutes after Test 1, then re-run any query from Test 2. The query should succeed without requiring re-authorization.
Test 5 — Disconnect and data deletion
- From the ShopSheets Dashboard, click the trash icon next to the Klaviyo connection.
- Confirm the deletion in the dialog.
- Pass criteria: the connection is removed from the list. The OAuth refresh token and access token are deleted from ShopSheets storage. Subsequent attempts to query Klaviyo via this connection fail until a new authorization is completed.
- Optionally, revoke the app from your Klaviyo account at Klaviyo → Account → Settings → API Keys → Connected Apps. ShopSheets honors the revocation and the integration row is marked inactive.
Scopes used and why
accounts:read — required by Klaviyo; used to fetch organization name to label the connection.campaigns:read — campaign performance and metadata.flows:read — flow performance and metadata.forms:read — form performance and metadata.lists:read — list metadata (id, name, created date, type).metrics:read — event-aggregate values (Placed Order, Active on Site, etc.).profiles:read — profile attributes for the Profile-dump query mode.segments:read — segment metadata + member counts.tags:read — tag names attached to campaigns and flows.
All scopes are read-only. ShopSheets does not request or use any write scopes.
Known limitations
- Profile dump is paginated at 50 profiles per page (Klaviyo API limit for sparse fieldsets including
last_event_date) and capped at 10,000 profiles per query by default. For larger pulls, contact support. - The
profile_age and profile_birthday fields populate only on profiles that have $age or $birthday set in their Klaviyo properties. Otherwise they return empty.
Reviewer support
For provisioning a reviewer account, OAuth client allowlisting questions, or any test failures, contact periel@wearegrowth.co. We aim to respond within 1 business day.