Ad Integrations
Supported advertising platforms, how they connect, and platform-specific details.
Supported Platforms
| Platform | Connection | Data |
|---|---|---|
| Meta | OAuth | Hourly campaign spend (last 13 months, daily beyond) |
| Google Ads | OAuth | Hourly campaign spend |
| TikTok | OAuth (Beta) | Hourly campaign spend |
| Snapchat | OAuth (Beta) | Hourly campaign spend |
| AppLovin | API Key | Hourly spend (no campaign breakdown) |
| GoAffPro | API Token | Daily affiliate commissions |
All platforms can be connected from Settings → Integrations.
Google Ads — Google gives Kleio the same permissions as the authenticating user. If you authenticate with a user that only has read-only access in Google Ads, Kleio will only have read-only access too.
Meta — Access tokens expire after 60 days and cannot be auto-refreshed. You’ll need to reconnect manually when the token expires. Kleio will notify you when your token is about to expire.
TikTok / Snapchat — Currently in Beta. If you run into any issues, please contact support.
AppLovin — Historical backfills are limited to a 30-day query window.
GoAffPro — Imports daily affiliate commissions. These are included as a cost in your P&L calculations.
Ad Spend Filters
Ad spend filters are text-based rules that control which campaigns Kleio considers. They match against campaign names — if a campaign name contains the filter text, the rule applies. Excluded campaigns are ignored everywhere: P&L, dashboards, new customer metrics, and any other calculation that uses ad spend.
You’ll find them in Settings → Integrations under “Ad spend filters.”
Platform Toggles
Each connected ad platform (Meta, Google, TikTok, Snapchat, AppLovin, GoAffPro) has an Apply filters checkbox. When unchecked, none of the filters below apply to that platform’s spend — all of it is included unfiltered.
By default, filters apply to all platforms.
Filter Types
There are five filter types. Each takes a text string that is matched against campaign names.
Exclude
Ignore ad spending from campaigns containing this text. Matching campaigns are excluded from all analytics — P&L, dashboards, ROAS, everything. Use this for campaigns you don’t want Kleio to consider at all, like brand awareness campaigns.
Exclude and Include are mutually exclusive. You cannot have both set at the same time.
Include
Only consider ad spending from campaigns containing this text. Everything else is ignored. Use this when you only care about a specific subset of campaigns.
Exclude from New Customer Calculations
Exclude ad spending from new customer metrics for campaigns containing this text. The spend still appears in your overall P&L, but it’s excluded from new customer acquisition cost calculations.
A common use case is retargeting campaigns — they target existing customers, so including them in new customer metrics would inflate your acquisition costs.
Allocate % to New Customers
Some campaigns — like Google PMax — serve both new and existing customers, so a binary include/exclude doesn’t fit. To handle this, you can allocate a percentage split to that campaign by putting the following in the campaign name:
kleio_allocate_nc_XX
where XX is the percentage (0–100) of that campaign’s spend to count as new customer spend. The remaining percentage counts as existing customer spend. For example, kleio_allocate_nc_40 means 40% of the spend is attributed to new customers and 60% to existing customers.
This tag takes precedence over the “Exclude from New Customer Calculations” filter. Values above 100 are capped at 100.
Exclude from Online Channel
Exclude ad spending for campaigns containing this text when viewing the online channel. The spend still appears in your total P&L, but not when you filter to online-only.
Useful for campaigns that drive in-store traffic (e.g., campaigns with “store_traffic” in the name) — you want those costs attributed to POS, not online.
Subscription Campaigns
Only include ad spending from campaigns containing this text when viewing subscription orders. This lets you isolate subscription acquisition spend from your general ad spend.
Example
Say you run a skincare brand with a US Shopify store. You sell online, in retail stores, and offer a subscription box. Your Meta ad account runs campaigns for multiple countries, but this Kleio store only cares about US spend.
Campaigns
| Campaign | Daily spend |
|---|---|
| US_prospecting_summer | $500 |
| US_retargeting_summer | $200 |
| US_store_traffic_NYC | $150 |
| US_sub_box_acquisition | $100 |
| US_pmax_kleio_allocate_nc_60 | $300 |
| UK_prospecting_summer | $400 |
| UK_retargeting_summer | $150 |
Total Meta spend: $1,800/day.
Filters
On your US store, you set up these filters:
| Filter | Value | Why |
|---|---|---|
| Include | US_ | Only consider campaigns for the US store. You could also use Exclude with UK_ instead. |
| Exclude from NC | retargeting | Retargeting targets existing customers, not new ones. |
| Exclude from Online Channel | store_traffic | This spend drives in-store sales. |
| Subscription Campaigns | sub_box | Isolate subscription acquisition spend. |
Result
The UK campaigns ($550) are ignored entirely — they belong to a different store. The remaining $1,250 in US spend flows into different parts of Kleio depending on context:
| Filtering by | Campaigns included | Ad spend |
|---|---|---|
| All channels | prospecting, retargeting, store_traffic, sub_box, pmax | $1,250 |
| Online channel | prospecting, retargeting, sub_box, pmax | $1,100 |
| New customer metrics | prospecting ($500) + store_traffic ($150) + sub_box ($100) + 60% of pmax ($180) | $930 |
| Subscription orders | sub_box | $100 |
Notice how the PMax campaign’s $300 spend is split: $180 (60%) counts toward new customer metrics and $120 (40%) toward existing customers.
When Do Filters Take Effect?
Changing the filter text in Settings takes effect immediately — Kleio will re-evaluate all existing campaign data against the new filter on the next calculation.
However, if you rename campaigns in the ad platform (e.g. adding [Exclude Kleio NC] to a Meta campaign name), the updated name needs to sync to Kleio first:
- Active campaigns (currently spending): campaign names update every ~20 minutes during regular ad spend syncs.
- Inactive campaigns (no longer spending): won’t be picked up by regular syncs. Use “Refresh All Ad Spend” in Settings → Integrations to force a full resync that includes inactive campaigns.