Which route to pick
| Route | Good for | Refresh |
|---|---|---|
| Windsor.ai feed | TikTok, Snapchat, Pinterest, Microsoft Ads or LinkedIn Ads, without a developer app | Automatic |
| CSV link | A published Google Sheet or any export URL you already keep up to date | Automatic |
| CSV upload | One-off history, or a platform with no feed | By hand |
You can save up to 10 feeds, Windsor and CSV links combined. While the dashboard is open, each feed refreshes at most once an hour. It can also refresh hourly in the background if you switch that on under Costs → Email and background refresh.
Add a Windsor.ai feed
Create a free account at windsor.ai and connect TikTok Ads there. Windsor’s free plan covers one platform. More platforms need a paid Windsor plan.
Copy your API key from your Windsor account.
In WordPress, open Balanik → Ad spend. On the TikTok and other platforms card, open Add a spend feed.
Set Source to Windsor.ai, give the feed a Name and paste the key into Windsor API key (for Windsor).
Pick a Windsor data source: TikTok Ads, Snapchat Ads, Pinterest Ads, Microsoft Ads, LinkedIn Ads, or All connected sources.
Set Spend currency to the currency your ad account bills in, then press Save feed.
The feed appears on the card. Press Import selected period once to check that spend comes through.
Only ad spend comes through Windsor. Your orders and customers stay on your site.
Add a CSV link
Use the same form, but set Source to CSV link (Google Sheet, export URL) and paste the address into CSV link (for CSV link). The link must be public and start with https://. The file can be up to 2 MB and 20,000 campaign-days.
Balanik needs a date, a spend column and a campaign column. It reads these header names, in any order, and ignores other columns:
| Column | Header names it accepts |
|---|---|
| Date (required) | date, day, segments.date, date_start |
| Spend (required) | spend, cost, amount, ad_spend, metrics.cost |
| Campaign ID | campaign_id, campaign id, campaignid, campaign.id |
| Campaign name | campaign_name, campaign, campaign name, campaign.name, name |
| Currency (optional) | currency, account_currency, currency_code |
| Source (optional) | source, platform, datasource, data_source, channel |
You need a campaign ID, a campaign name, or both. Write dates as 2026-09-30. Write spend as a plain number such as 12.50, with no currency sign or thousands separator. If the same campaign appears twice on one day, Balanik adds the two rows together.
Upload a CSV
The Upload a CSV box at the bottom of the Ad spend tab takes a file from your computer. It’s stricter than a CSV link. The first line must be exactly:
date,campaign_id,campaign_name,currency,spend
Set the dashboard period to the dates your file covers.
Enter a Source name, such as
manualortiktok-2025. Use letters, numbers or hyphens.Choose the file and tick Replace this source’s saved spend for the selected period.
Press Import CSV.
The file can hold up to 5,000 rows and 1 MB. Every row needs all five columns. A campaign ID can hold letters, numbers, - and _, up to 64 characters. Each campaign can appear once per date. Importing again replaces that source’s spend for the period, so nothing is counted twice.
Currencies
Spend is saved in its own currency and converted to your store’s currency. For any currency other than your store’s, add a rate under Costs → Exchange rates first. Balanik uses the newest rate on or before each day. If no rate exists yet, the import stops and names the missing currency. Spend it already converted keeps its rate when you import again.
Direct connections (beta)
Under More direct connections (advanced) you can connect TikTok Ads, Snapchat Ads and Pinterest Ads without Windsor. Each needs your own approved developer app and an access token. Enter the account ID and token, then press Verify and save. Balanik checks the account’s time zone first, as it does for Meta.
- Snapchat Ads (beta) uses a UUID as its account ID and imports up to 31 days at a time. Replace the token when it expires.
- Pinterest Ads (beta) imports up to 31 days at a time and only the last 90 days. The token needs
ads:read. Use a CSV for older history.
Remove a feed
Press Remove next to a feed. Spend it already imported stays in your reports.
Assigning feed campaigns to products. Allocating Google Ads Script and spend-feed campaigns to products is coming in an update. Their spend already counts in your store’s profit. Campaigns from a CSV upload or a direct connection can be assigned now.