Klaviyo - Troubleshooting
While working with your Klaviyo connection, you may encounter data discrepancies between Improvado and Klaviyo UI. Understanding these common causes can help identify and resolve differences.
Conversion & Revenue Metrics
Conversion metrics discrepancies (Placed Order, Placed Order Value)
Issue
- Placed Order or Placed Order Value shows 0 values, but Klaviyo UI shows data
- Conversion metrics don't match Klaviyo UI totals
- Revenue values differ from values in Klaviyo
What This Means
Cause 1: Multiple integrations creating duplicate metric names
Some accounts have multiple integrations (e.g., Shopify, Magento, API) that create separate metrics with the same name. By default, the extraction may pull data from the wrong integration.
Solution
Specify klaviyo_metric_integration setting to define which integration's metrics to use. Contact the Improvado team to configure this for your account.
Cause 2: Comparing different metrics
Klaviyo has separate metrics for different order stages. If you're comparing placed_order_value in Improvado against fulfilled_order_value in Klaviyo UI, values will differ.
Solution
Verify you're comparing the same metric in both systems. If you need a different metric in your dashboard, contact the Improvado team to update the configuration.
Orders not attributed to Klaviyo
Issue
Order data includes all orders, not just those attributed to Klaviyo emails.
What This Means
By default, the API returns all orders regardless of attribution.
Solution
To return only Klaviyo-attributed orders, split the query by Campaign ID or Flow ID.
Date Attribution
Campaign Stats vs. Campaign Values (date attribution differences)
Issue
Metrics like opens, clicks, or revenue don't match Klaviyo UI reports when filtered by date.
What This Means
Klaviyo has two different date attribution models:
| Report Type | Date Represents | Example |
|---|---|---|
| Campaign Stats | When the event occurred (e.g., email opened) | A click on Feb 5 from a Jan 30 email counts in February |
| Campaign Values | When the campaign was sent | A click on Feb 5 from a Jan 30 email counts in January |
Klaviyo UI typically uses the send-date model, while the API's Query Metric Aggregates endpoint uses the event-date model.
Solution
If you need to match Klaviyo UI numbers exactly, use the Campaign Values report type instead of Campaign Stats.
Data appears on incorrect dates (timezone shift)
Issue
Revenue or events appear on dates when no campaigns were sent. For example:
- Dashboard shows sales on November 8th-9th, but no campaign was deployed during this period
- Daily totals don't match Klaviyo UI for specific dates
What This Means
Data can be shifted by several hours due to timezone handling, which in some cases results in events appearing on a different calendar day than expected.
Solution
If you notice date-level discrepancies where data appears to be shifted by hours or landing on wrong dates, contact the Improvado team to verify the timezone configuration for your extraction.
Unique and Non-Unique Metrics
Unique metrics differ from Klaviyo UI
Issue
Unique opens, unique clicks, or unique open/click rates don't match the UI. Rates may exceed 100%.
What This Means
Klaviyo calculates unique metrics based on the requested date granularity. The campaign_stats report contains daily data, so unique metrics are calculated per day. Additionally, open/click rates can exceed 100% when the receive and open events occur on different calendar days.
Solution
Use the unique_metrics_by_campaign_month report type if you don't need daily breakdown, or JOIN unique metrics from this report to campaign_stats.
Non-unique metrics differ slightly from Klaviyo UI
Issue
Values of non-unique metrics (e.g., Total Opens) differ slightly from Klaviyo UI.
What This Means
This is due to how Klaviyo's attribution model works. The UI attributes revenue to the date of the last email sent, while the API attributes Placed Order / Placed Order Value to the date the order was actually made.
Non-unique event counts higher in exported reports
Issue
Total Opens or other non-unique metrics are higher in Klaviyo's exported CSV than in the API.
What This Means
If the exported report includes additional columns like "Group ID" or "List/Segment," profiles that belong to multiple segments are counted multiple times in the export.
Solution
Compare against segment-agnostic totals, or be aware that segment breakdowns will inflate counts for profiles in multiple segments.
Profile & List Data
Profile consent counts don't match UI
Issue
The number of subscribed/unsubscribed profiles doesn't match the Klaviyo UI.
What This Means
Klaviyo's UI applies different processing to consent data that is not available via the API.
Profile list/segment membership counts are inflated
Issue
The number of records in list or segment tables exceeds the actual profile count in Klaviyo.
What This Means
When profiles are added to a list or segment, the corresponding records in the LIST_PERSON and SEGMENT_PERSON tables are updated during the next incremental sync. However, when profiles are removed, records are soft deleted only during the next weekly re-sync.
As a result, the number of records in these tables may temporarily exceed the number of profiles in the source until the next full re-sync occurs.
API Limitations & Known Issues
Campaign ID mismatch in events data
Issue
Campaign ID joins fail or under-count records. The campaign_id column contains unexpected values.
What This Means
The $message field from Klaviyo's /events API endpoint is used to sync the campaign_id column of the EVENT table. According to Klaviyo, what the $message field contains depends on the $flowfield:
| If $flow field is... | $message contains... |
|---|---|
| Absent | Campaign object ID |
| Present | Flow message object ID |
The campaign_id column should contain the ID of a campaign object or flow object. However, in some cases the $message field returns a campaign-message object ID instead of the parent campaign ID, causing joins to fail or under-count.
Extraction failures during historical sync
Issue
Large initial syncs or historical re-syncs are slow or fail due to rate limits.
What This Means
Klaviyo enforces rate limits on the Reporting API. Large backfills can exceed these limits, causing extraction failures or partial data.
Solution
Configure the Historical sync time frame when setting up your connector to speed up both the initial sync and subsequent re-syncs.
- The Historical sync time frame limits the amount of data synced for the
EVENTtable, as this table contains data you are less likely to reference much later. - You can modify this setting at any time.
- If you change it to an earlier date, a full historical sync is performed back to that new date.
- If you set it to a later date, existing data is not deleted — the new time frame applies only to subsequent re-syncs.
Klaviyo Metrics UI shows different totals
Issue
API totals don't match the Klaviyo Metrics view or other analytics views in the UI.
What This Means
Klaviyo attributes revenue differently across its analytics views. In most views, Klaviyo attributes revenue to the date of the last email sent. However, the API returns Placed Order and Placed Order Value attributed to the date the order was actually made.
The API data corresponds to Klaviyo's Metrics view (under Analytics), which is where comparisons should be made — not against other Klaviyo reports.
As an additional limitation, The Klaviyo Metrics view does not always display all data if the data volume is too large, which can create apparent discrepancies that don't actually exist.
Solution
- Compare API totals against Klaviyo's Metrics view, not against campaign/flow performance reports.
- If the Metrics view appears incomplete due to large data volume, create a Custom report in Klaviyo and export the data for a full comparison.
Both the Metrics view and Custom report are available under Analytics in Klaviyo.
Was this article helpful?
Thanks for the feedback!