Skip to content
GROWTH DEPT.MTA
DocsConnections: Klaviyo

Connections

Klaviyo connection

Connect Klaviyo with a read-only key so email and SMS clicks land on named campaigns, flows and messages, sign-ups are counted, and clicks join the orders each person places.

What it reads

Growth Dept MTA reads your Klaviyo campaigns (email, SMS and push), your flows and the messages in each, with their names and statuses. Campaigns and flows become campaign rows on Sales and their messages become ad set rows, so a tagged click lands on the campaign, flow or message that sent it. Klaviyo appears under its own name, as Email or SMS by the message's channel, and its clicks are never counted as paid.

It counts new subscribers each day: Klaviyo's Subscribed to Email Marketing events as Email Signups, and Subscribed to SMS Marketing events as Phone Signups (in Customize table and exports). Only the time of each event is read, never the subscriber's details. Sign-ups show on the Unattributed row, because no visit can be tied to a sign-up.

It reads which Klaviyo profile placed which Shopify order, from Klaviyo's Placed Order events. Klaviyo sends each of these events with the whole order, so Growth Dept MTA keeps only the order ID and the profile ID and discards the rest straight away. With the profile ID on your links (see Tracking parameters), a click from an email on one device joins the order the same person places on another.

Klaviyo has no cost to read, so the connection brings in no spend. A pull runs about once an hour and re-reads the last 7 days of sign-ups and the last 2 days of orders; a nightly pull re-reads 30 and 7. The campaign and flow list is read again every six hours.

Connecting

Klaviyo connects with two keys you paste: the account's public key and a read-only private key.

  1. In Klaviyo, open Settings > API keys and copy the Public API Key, a 6-character code.
  2. On the same page, under Private API Keys, choose Create Private API Key. Name it, for example Growth Dept MTA (read-only), choose Read-only access, and create it. Klaviyo shows the key once, so copy it now. Read-only access covers every read Growth Dept MTA makes, and the key cannot change anything in Klaviyo.
  3. Sign in to Growth Dept MTA as an owner or admin of the brand's organization. Other members can see Settings > Connections but cannot change it.
  4. Open Settings > Connections. On the Klaviyo card, paste the public key into Public Key and the private key into Private Key, then click Connect.
  5. Growth Dept MTA checks that both keys belong to the same account and that the private key can read campaigns, flows, metrics and events. If the check passes, the private key is stored encrypted, the Klaviyo account appears on the card, and a backfill reads sign-ups and orders over the brand's lookback window (Settings > Lookback window). If the check fails, the form shows the error and nothing is saved.

To replace the key, for example after deleting the old one in Klaviyo, paste the new pair into the same form. The connection keeps its data and carries on with the new key.

For a brand Growth Dept runs, Klaviyo can come through Growth Dept's own connection to it instead. The account then appears on this card by itself and the same pulls run.

Tracking parameters

Set these once in Klaviyo's UTM tracking settings, for campaigns and for flows, and apply them to the flows that are already running. Settings > UTM guide in Growth Dept MTA shows the same list.

  1. Sign in to Klaviyo and open Settings, then UTM Tracking.
  2. Turn on automatic UTM parameters for campaigns and for flows.
  3. Set the parameters below. For nb_klid, choose Add UTM parameter, type nb_klid as its name and pick Profile ID as its value.
  4. Apply the parameters to flows that are still running.
utm_source
klaviyo
utm_medium
Message type

Pick Klaviyo's dynamic Message type value, which is email for emails and sms for texts; do not type this text.

utm_campaign
Campaign name (ID) / Message name (ID)

Pick the dynamic value that adds the ID in brackets after the name: the campaign's for campaigns, the message's for flows. With Klaviyo connected, the ID puts each click on its campaign or flow message.

nb_klid
Profile ID

Choose Add UTM parameter, type nb_klid as its name (type it rather than paste it, so no hidden characters come along) and pick Klaviyo's dynamic Profile ID value.

Optional: add utm_term and utm_content for more detail in Sales at the ad set and ad levels.

nb_klid carries Klaviyo's ID for the person, not their email address. Growth Dept MTA keeps the ID only to join that person's clicks and orders.

Klaviyo's own help page: Understanding UTM tracking in Klaviyo

utm_campaign with the ID in brackets lets each click land on its campaign or flow message; without it, Klaviyo clicks still count as Klaviyo, under the utm_campaign text. nb_klid is the one parameter that joins clicks to orders across devices.

Sign-ups by channel

The connection counts every sign-up, but it cannot tell which channel brought the person to your sign-up form, so the counts sit on the Unattributed row. To see sign-ups by channel, for example how many came from Meta ads, set up a custom event that fires when the form is submitted, under Settings > Custom Events. The custom events guide explains how they are credited.

Adding Klaviyo's cost

For ROAS and cost per sign-up on Klaviyo's rows, send its cost through the spend API or Settings > Data Spreadsheets with the platform klaviyo. With a Klaviyo campaign or flow ID as the campaign ID, the cost sits on that campaign's row; without one it sits on a row of its own under Klaviyo. A connected Klaviyo account does not block these rows, since the connection carries no cost of its own.

Limits

  • Each pair of keys connects one Klaviyo account. A brand with two accounts pastes both pairs, one after the other; their sign-ups add up.
  • Klaviyo clicks land on named rows only when utm_campaign carries the ID, or utm_id names a campaign or flow. Clicks tagged with names alone stay on rows named after the tag.
  • Orders are joined to Klaviyo profiles only for Shopify orders, through Klaviyo's Shopify integration.
  • Hourly reports have no sign-ups.
  • Klaviyo's own revenue figures follow Klaviyo's attribution settings and are not read. Growth Dept MTA's numbers come from its own attribution models, so the two will differ.
  • If Klaviyo rejects the stored key, for example after it is deleted in Klaviyo, the account's row on the card shows the error until a new key is pasted.
  • Growth Dept MTA only reads from Klaviyo. It does not change campaigns, flows, lists, profiles or settings.

Disconnecting

Each linked account has its own Disconnect button in its row on the Klaviyo card. Only owners and admins can use it. After you confirm:

  • Syncing for that account stops.
  • The stored private key is deleted.
  • Data already pulled stays in your reports.

Connecting the account again later starts a new backfill.

All connections · API docs · Questions: support@growthdept.ai