Connect Klaviyo to Power BI: API Guide & Example
17 Oct 2026 · 8 min read
To connect Klaviyo to Power BI, extract campaign or flow results through the Reporting API or a suitable third-party connector, then import the staged data. Start by matching one Klaviyo report. The downloadable example below shows the model, measures and expected totals.
Bring Klaviyo campaign and flow performance alongside store orders, marketing spend and margins in Power BI. You can compare attributed email results with the wider business, using a written definition for each figure.
This guide covers the reporting connection, a bounded API request, a downloadable campaign example and refresh checks. Technical references were checked on 17 October 2026. The worked data is synthetic teaching data, with independently checked arithmetic. It is not a client result or a live Klaviyo extraction. Power BI Desktop and Service execution have not been verified for this example.
Choose a connection route for your report
| Route | Useful when | Check before choosing |
|---|---|---|
| Third-party Klaviyo connector | You want managed extraction into a supported destination | Campaign and flow coverage, history, attribution definitions, subscription costs and Service refresh |
| Klaviyo API into staged tables | You need control of the reporting grain, history or multiple accounts | Scopes, extraction limits, complete coverage, secret storage and maintenance |
| File-based reporting example | You want to check a model before arranging live access | Source definitions, data types and reconciliation; the download here is illustrative |
A warehouse is a storage and modelling choice. An API pipeline or connector can supply it. For a data integration build, agree the source reports and the tables Power BI will read before selecting the tools.
Microsoft's Power Query connector directory did not list a dedicated Klaviyo connector at this review. Check the vendor and host support for any third-party route.
Match Klaviyo's report before joining other sources
For campaign and flow performance, start with the Klaviyo Reporting API. It is designed to reproduce the corresponding interface figures. Campaign and flow performance uses message send date; Metric Aggregates groups events by when they occurred. Those date bases answer different questions.
Choose one report and record:
- The account, campaign and message IDs, channel and reporting period.
- The conversion metric ID and source integration. For orders, confirm the intended Placed Order metric using Get Metrics.
- The account timezone, attribution settings and extraction timestamp.
- The monetary definition and source currency, including what incoming order values include.
Klaviyo's account currency setting changes the displayed symbol without converting the numbers. A GBP label alone does not establish that source values are pounds.
Extract one campaign message through the API
Keep the private key in your controlled server-side extraction environment. Use campaigns:read for the request below; metric discovery additionally needs metrics:read. Follow Klaviyo's authentication guidance and keep keys out of shared PBIX files and downloads.
Send a POST to https://a.klaviyo.com/api/campaign-values-reports with these headers:
Authorization: Klaviyo-API-Key <your server-side private key>
Accept: application/vnd.api+json
Content-Type: application/vnd.api+json
revision: 2026-10-15
This template selects one email campaign message for September 2026. Replace the three ID placeholders with your account's IDs. The request has been checked against the current schema; it has not been executed against a private account here.
{
"data": {
"type": "campaign-values-report",
"attributes": {
"statistics": ["delivered", "clicks_unique", "conversions", "conversion_value"],
"timeframe": {
"start": "2026-09-01T00:00:00+00:00",
"end": "2026-09-30T23:59:59+00:00"
},
"conversion_metric_id": "REPLACE_PLACED_ORDER_METRIC_ID",
"filter": "and(equals(campaign_id,\"REPLACE_CAMPAIGN_ID\"),equals(campaign_message_id,\"REPLACE_MESSAGE_ID\"),equals(send_channel,\"email\"))",
"group_by": ["campaign_id", "campaign_message_id", "send_channel"]
}
}
}
The campaign schema specifies that custom timeframe offsets are ignored and the account timezone is used. The end above includes the final reporting day. Record the account-local window alongside the results.
Read groupings and statistics from each object in data.attributes.results. Retain the IDs and add the window and extraction metadata. Check returned message groups against the selection. An empty result needs an ID, date and filter check before it can mean zero performance.
The campaign endpoint currently limits requests to one per second, two per minute and 225 per day. Respect the steady and daily limits when repeating requests. Wider extraction needs validated page_cursor pagination before it can be treated as complete. On HTTP 429, respect Retry-After; distinguish failures from checked empty responses. See the rate-limit guidance.
For flows, use the separate Flow Values endpoint, with flows:read and flow/message identifiers. Keep campaign and flow rows distinguishable in the model.
Work through a campaign example in Power BI
Download the worked example ZIP, or inspect the campaign CSV, DAX measures, expected results and README separately. Access is ungated.
The CSV is a normalised teaching extract, not an API response. It represents two fictional email campaign messages in one account, September 2026 account-local dates, Europe/London time and assumed GBP order values. The account, metric, campaign and message IDs are synthetic. The retrieval timestamp is illustrative too.
| Message | Delivered emails | Unique clicks within that message | Attributed Placed Order events | Attributed order value |
|---|---|---|---|---|
| A | 1,000 | 40 | 15 | £900 |
| B | 500 | 40 | 10 | £800 |
| Combined | 1,500 | 80 summed message counts | 25 | £1,700 |
Import the CSV and create the measures
- In Power BI Desktop, choose Get data → Text/CSV and select
campaign-values.csv. - Open Transform Data. Name the query
KlaviyoCampaigns. Set identifiers, channel, currency and timezone to Text;delivered,clicks_uniqueandconversionsto Whole Number; andconversion_valueto Fixed Decimal Number. Keep the account-local window strings and retrieval timestamp as Text for this small example. - Choose Close & Apply. Create the measures below, then add cards for the totals and a table by
campaign_message_id.
Delivered Emails = SUM ( KlaviyoCampaigns[delivered] )
Message Unique Clicks = SUM ( KlaviyoCampaigns[clicks_unique] )
Attributed Orders = SUM ( KlaviyoCampaigns[conversions] )
Attributed Order Value = SUM ( KlaviyoCampaigns[conversion_value] )
Email Click Rate = DIVIDE ( [Message Unique Clicks], [Delivered Emails] )
Attributed Value per Delivery = DIVIDE ( [Attributed Order Value], [Delivered Emails] )
Attributed Value per Order = DIVIDE ( [Attributed Order Value], [Attributed Orders] )
Create each measure separately. Format Email Click Rate as a percentage with two decimal places, counts as whole numbers, and monetary measures as GBP with two decimals. The download contains the same definitions.
Check the expected result
Your cards should show 1,500 deliveries, 80 message-level unique clicks, 25 attributed order events and £1,700 attributed order value. The ratios are:
- Email click rate:
80 ÷ 1,500 = 5.33%. Averaging the individual rates of 4% and 8% would give 6%, applying the wrong weighting. - Attributed value per delivery:
£1,700 ÷ 1,500 = £1.13after rounding. - Attributed value per order event:
£1,700 ÷ 25 = £68.00.
The 80 clicks are summed unique counts within messages, not 80 distinct people across messages. The 25 conversions count events for the assumed Placed Order metric, not unique customers. Klaviyo's conversion rate uses unique conversions; this example does not calculate that rate. See the statistic definitions.
Keep one current snapshot per account, campaign message, channel, metric and window. A second extraction of the same window replaces that snapshot; appending and summing both would double the totals. Do not sum overlapping reporting windows either. Store audit history separately.
Connect staged data and verify scheduled refresh
For live reporting, Power BI should read a supported staged source, such as a SQL table or appropriately configured cloud file. The extraction handles the Klaviyo key; Power BI uses credentials for the staged source. Complete extraction before refreshing the semantic model and retain a visible source timestamp.
Direct Power Query API calls need extra care. Microsoft's Web.Contents documentation states that Content creates a POST request and that POST uses Anonymous connector credentials. A Klaviyo Authorization header is still required. A key stored in M or a parameter is not a secret store.
Before relying on Power BI Service refresh, check published credentials, privacy settings, dynamic-source restrictions and gateway requirements. Run a Service refresh and compare its history, row counts and source timestamp with extraction. Desktop success alone does not establish scheduled refresh. Our refresh and gateway guide covers the Power BI side.
Compare Klaviyo revenue with Shopify orders
Keep attributed performance and store sales as separate facts. Klaviyo's conversion_value sums values for the selected metric; it is not automatically net sales, profit or incremental revenue. Here, £1,700 is attributed Placed Order value under a fictional definition.
Use the Shopify connection guide for order, discount and refund controls. Compare sources through agreed account/store and date dimensions. Their date bases may differ; explain that beside the measures. Adding attributed value to total order revenue would count underlying sales again.
Repeat-purchase rate, cohorts and lifetime value need order/customer modelling beyond campaign aggregates. Our ecommerce dashboard guide covers the wider report; data modelling guidance covers relationships.
Reconcile before using the report
Match one message against Klaviyo using the same metric, dates, timezone and attribution settings. Compare delivered emails, message-level unique clicks, conversion events and value separately. Record extraction time: historical attribution can change as information arrives or settings change. See Klaviyo's message-attribution guidance.
Once that message agrees, check the complete agreed selection and the published refresh. Keep account and currency boundaries explicit when extending to more brands.
For a reporting build, tell us about your Klaviyo setup: your accounts and store platforms, the figures you want to compare and the update frequency. The enquiry opens an editable integration brief.
Frequently asked questions
Is there a native Klaviyo connector in Power BI?
Microsoft's Power Query connector directory does not list a dedicated Klaviyo connector as checked on 17 October 2026. Routes include a third-party connector or a custom API extraction into a supported data source. Check the connector's reports, authentication and scheduled-refresh requirements.
Can I connect to the Klaviyo API directly from Power Query?
Power Query can make web requests, including POST requests. Klaviyo uses a private API key in an Authorization header. Keep that key in a controlled extraction service rather than distributing it inside a shared workbook or PBIX. Published refresh also needs its own credential, privacy and gateway checks.
Why does Power BI show different revenue from Klaviyo?
Check the conversion metric and integration, message selection, dates, account timezone, attribution settings and extraction time. Campaign and flow reporting uses send-date performance; raw event-time aggregates answer a different question. Attributed conversion value also differs from total store revenue, refunds and profit.
Can Klaviyo data refresh automatically in Power BI?
Yes, with a supported connection and a tested extraction and refresh schedule. Extract before refreshing Power BI, configure the published source credentials and any required gateway, then check refresh history and the source timestamp. Desktop success alone does not verify Service refresh.
Can I combine Klaviyo and Shopify in Power BI?
Yes. Keep attributed campaign or flow results separate from Shopify order totals and join them through agreed account, store and date dimensions. Compare the measures using their documented date and currency definitions. Adding attributed revenue to store revenue would count the same underlying sales again.
Bring Klaviyo into your Power BI reporting
Compare campaign and flow performance with your store orders. Share the Klaviyo accounts and report you want, including the revenue checks and refresh schedule you need.
Related guides
Amazon Seller & Vendor Central to Power BI
Connect Amazon Seller Central and Vendor Central to Power BI. Follow a downloadable Vendor Sales example, check totals and plan a reliable refresh.
14 Jun 2026 · 7 min read
How to Connect Shopify to Power BI: 3 Methods
Connect Shopify to Power BI using the GraphQL Admin API, a third-party connector or a warehouse. Includes a production blueprint and reconciliation checks.
25 May 2026 · 9 min read
Connect Stripe to Power BI for MRR & Churn
Connect Stripe to Power BI for MRR, churn and revenue reporting. Compare the connection methods, model the metrics and avoid the accounting pitfalls.
23 May 2026 · 4 min read
Connect GA4 to Power BI: Native vs BigQuery
Connect GA4 to Power BI with Microsoft's native connector. Compare BigQuery and third-party options, check refresh and reconcile your reporting totals.
12 May 2026 · 4 min read
Connect Google Ads to Power BI for ROAS
Connect Google Ads to Power BI for ROAS reporting: the connection methods, how to blend spend with GA4 revenue and the pitfalls that distort the numbers.
18 May 2026 · 4 min read
Connect Facebook (Meta) Ads to Power BI: Example
Connect Facebook (Meta) Ads to Power BI with the Insights API or a connector. Follow a worked example and check spend, clicks, attribution and refresh.
16 Jun 2026 · 9 min read
Related solutions
Power BI consultancy for your next business decision
Power BI consultancy for sales and finance reporting. See a working example, review pricing and scope your dashboard build with UK-based remote delivery.
Power BI repair and takeover
Power BI repair for failed refreshes, incorrect totals and inherited reports. Get a diagnosis, a repair quote and checks against your source figures.
Tableau to Power BI Migration (UK)
UK-led Tableau to Power BI migration. We rebuild your data model, calculations and dashboards, with a parallel run so numbers reconcile before cutover.