Docs/Notify/Klaviyo

Klaviyo#

The Klaviyo x Karla integration turns Karla's shipping, claim, and tracking-page events into Klaviyo metrics you can trigger flows on — and brings your Klaviyo lists and segments back into Karla for campaign targeting.

Connect#

There are two ways to connect; both end in the same secure OAuth grant — no API keys to create, copy, or manage. You need editor access or above on the Karla store.

From Klaviyo: install the Karla app#

When you install the Karla app from Klaviyo's integrations directory, you land on Karla's connect page:

  1. Sign in to your Karla account (or create one — you'll return to the connect page after onboarding).
  2. Choose the store to connect and click Connect this store.
  3. Approve access in the Klaviyo window that opens. It closes itself, and you land on the store's Klaviyo integration settings.

From the Karla portal: Quick connect#

1. Open the integration

In the Karla portal, go to Settings → Integrations and click Configure on the Klaviyo card.

2. Click Connect Klaviyo

In the Quick connect card, click Connect Klaviyo and approve Karla on the Klaviyo consent screen.

3. Confirm it's connected

The Connection card shows a green Connected badge and the status Connected and working.

4. Verify your metrics

In Klaviyo, open Analytics → Metrics and look for shipment_out_for_delivery, shipment_delivered, and more.

What Karla asks for#

The consent screen requests these permissions:

PermissionWhy Karla needs it
Events (read/write)Send shipping, claim, and tracking-page events into your account.
Metrics (read)Find your metrics for flow health and revenue reporting.
Profiles (read/write)Attach events to the right customer profile.
Lists & segments (read)Sync your lists and segments into Karla for campaign targeting.
Flows & templates (read/write)Let Karla install its ready-made post-purchase flows and templates into your account.
Accounts (read)Verify the connection is healthy.

All permissions are granted once at connect time, so you never have to re-approve as Karla ships new features.

What happens right after connecting#

Karla immediately seeds your account with its shipment metrics (about two dozen shipment_* metrics), plus a metric per configured custom trigger and the tracking-page retargeting metrics — so everything is selectable in Klaviyo's flow builder from minute one, before any real event has fired.

karla_claim_created, karla_claim_updated, and the return_shipment_* metrics are not seeded — they appear in Klaviyo after their first real event.

Connection status and troubleshooting#

The Connection card polls Klaviyo live:

  • Connected and working — all good.
  • Reconnect needed — Klaviyo access was revoked — the grant was removed on Klaviyo's side (e.g. app uninstalled there). Click Reconnect.
  • "Authorization was declined." on the consent popup — you clicked Deny; retry and click Allow.
  • "Klaviyo connection failed. Please retry from the portal." — the OAuth handshake failed or timed out (the connect link is valid for 5 minutes); start again from the portal.

Disconnecting#

Click Disconnect on the Klaviyo integration page. Karla revokes its own access at Klaviyo — the Karla app disappears from your Klaviyo integrations page — and you can reconnect at any time.

Klaviyo only permits OAuth connections for published apps, so connecting with a private API key is no longer available to merchants — it remains as an internal, Karla-managed fallback for a few legacy accounts and stays dormant while Quick connect is active.

Building Klaviyo Flows#

To relieve you of the work involved in setting up the Klaviyo flows, the Karla team transfers our ready-made flows including email templates into your Klaviyo account. The OAuth grant already covers the permissions this needs — no extra access to your account is required. As soon as the flows are in your account, you can customize the templates as you wish (branding, wording, etc.).

To cover the most important delivery journey events, we recommend first of all creating the flows for the following event groups:

  1. shipment_in_transit
  2. shipment_carrier_delay
  3. shipment_damaged
  4. shipment_out_for_delivery
  5. shipment_delivered
  6. shipment_delivered_to_neighbour
  7. shipment_delivered_to_letterbox
  8. shipment_delivered_to_parcel_shop
  9. shipment_not_picked_up_then_returned
  10. shipment_failed_returned

By creating these 10 flows you will be able to cover standard events happening for every order (shipment_in_transit, shipment_out_for_delivery), all delivered cases (shipment_delivered, shipment_delivered_to_neighbour, shipment_delivered_to_letterbox, shipment_delivered_to_parcel_shop) and the events that hopefully do not happen too often, but where it is most important to be proactive with your customers (shipment_carrier_delay, shipment_damaged, shipment_not_picked_up_then_returned, shipment_failed_returned).

Klaviyo uses event groups (like shipment_delivered) while webhooks use ref patterns (like shipments/delivered/SUCCESSFULLY_DELIVERED). Event groups are business-friendly names that group multiple specific events for easier flow management.

For complete documentation, see: Events Reference →

Pickup Reminder Flow#

Retargeting flows#

Two optional metrics let you build flows around what shoppers do on the tracking page itself. Both are off by default — enable them on the Klaviyo integration settings page:

  • Tracking Page Retargeting sends karla_tracking_page_opened the first time a customer opens their tracking page (once per order, within 30 days) — retarget shoppers while they wait for their delivery.
  • Upsell Click Retargeting sends karla_upsell_product_clicked when a customer clicks an upsell product (once per order, within 7 days — the order-edit window closes at fulfillment). The event carries upsell_product_id, upsell_variant_id, upsell_product_title, and product_source properties for use in your flow.

Custom triggers#

In the portal under Notify → Custom Triggers you can define your own trigger events. Each custom trigger becomes a Klaviyo metric named karla_<trigger name>_internal_trigger, seeded the moment you create the trigger so it's immediately available in the flow builder. Custom triggers are currently Klaviyo-only.

To include the tracking page link in your Klaviyo emails you should use a dynamic link with order_number and zip_code variables, so that your customers always receive their personalised link:

For emails triggered through Klaviyo:

Karla events#

https://app.gokarla.io/track/slug?orderNumber={{ event.order_number|default:'' }}&zipCode={{ event.zip_code|default:'' }}&ref=karla
https://yourshop.com/pages/tracking?orderNumber={{ event.order_number|default:'' }}&zipCode={{ event.zip_code|default:'' }}&ref=karla

Shipping Confirmation#

Triggered by Shopify's Fulfilled_Order Event.

https://app.gokarla.io/track/slug?orderNumber={{ event.extra.order_number|default:'' }}&zipCode={{ event.extra.shipping_address.zip|default:'' }}&ref=karla
https://yourshop.com/pages/tracking?orderNumber={{ event.order_number|default:'' }}&zipCode={{ event.zip_code|default:'' }}&ref=karla

A slug is your unique identifier that represents your shop within the Karla system. This is used to properly route tracking information and ensure that shipment data is associated with the correct merchant account.

Testing the flows#

Once you've set up the flows and the respective emails it is important you make sure that the integration is working as expected.

In the Email Template Editor go to Preview & Test

Klaviyo Test 1

There make sure that in the profiles you see the information from the profiles from your shop and not from Karla's test events. These should be infos like customer name, order number, shipping address etc.

You will see this information only after you have integrated your Shopify/Shopware Shop and Klaviyo with Karla. More on shop integrations

Klaviyo Test 2

If you want to see how your customers will receive the emails, you can send a test email to your email-address.

Klaviyo Test 3

Putting the flows live#

After you have tested your flows, you can put them live upon the agreed go-live date.

Make sure you have requested the transactional status for your Karla flows and have disabled the Smart Sending feature, so that all of your customers receive their shipping updates.

Klaviyo Live Flows

Metric reference#

Karla sends the following metrics to your Klaviyo account. Shipment metrics use the event-group name verbatim; claim, tracking-page, and custom-trigger metrics carry a karla_ prefix.

Shipment metrics#

MetricDescription
shipment_order_placedOrder placed (draft shipment created)
shipment_pre_transitPackage prepared for shipping
shipment_in_transitPackage moving through network
shipment_carrier_delayCarrier-reported delays
shipment_damagedPackage damage reported
shipment_out_for_deliveryPackage out for delivery
shipment_deliveredSuccessful delivery
shipment_delivered_all_eventsFires alongside every delivered variant (see settings)
shipment_delivered_to_letterboxDelivered to letterbox
shipment_delivered_to_neighbourDelivered to neighbor
shipment_delivered_to_parcel_lockerDelivered to parcel locker
shipment_delivered_to_parcel_shopDelivered to pickup point
shipment_delivery_failedDelivery attempt failed
shipment_delivery_failed_address_issueAddress problems
shipment_delivery_failed_forwarded_to_parcel_shopForwarded to pickup
shipment_delivery_second_attemptReattempting delivery
shipment_delayed_due_to_customer_requestDelivery delayed at the customer's request
shipment_picked_upSuccessfully picked up
shipment_not_picked_up_then_returnedNot picked up, returned
shipment_refused_then_returnedCustomer refused package
shipment_failed_returnedPackage returned to sender
shipment_carrier_changedShipment handed to a different carrier
shipment_order_cancelledOrder cancelled
shipment_eta_updatedEstimated delivery date changed

Return shipment metrics#

When a customer sends a package back, the return leg fires its own metrics: return_shipment_in_transit, return_shipment_out_for_delivery, return_shipment_carrier_delay, return_shipment_delivery_failed, and return_shipment_delivered.

Karla-prefixed metrics#

MetricFired when
karla_claim_createdA customer submits a claim via Resolve
karla_claim_updatedA claim's status changes
karla_tracking_page_openedTracking page opened (retargeting)
karla_upsell_product_clickedUpsell product clicked (retargeting)
karla_<trigger>_internal_triggerA custom trigger fires

Integration settings#

On the Klaviyo integration page in the portal:

SettingDefaultWhat it does
Klaviyo NotificationsoffMaster switch — send tracking event notifications to Klaviyo.
Delivered Events TriggeronAdditionally fire shipment_delivered_all_events alongside every delivered variant, so one flow can cover all delivery outcomes. Late deliveries still fire it up to 48 hours after the event.
Klaviyo SegmentsonSync your Klaviyo lists and active segments into Karla as Klaviyo.list.<name> / Klaviyo.segment.<name> segments for campaign targeting.
Tracking Page RetargetingoffSend karla_tracking_page_opened (details).
Upsell Click RetargetingoffSend karla_upsell_product_clicked (details).

For how synced segments drive campaign targeting, see Campaigns.

Need help?#

Questions about connecting Karla and Klaviyo? Email us at [email protected] and we'll help you get your first flow live.

  • WhatsApp — forward these same Klaviyo triggers to WhatsApp.
Was this helpful?