Import Costs
Upload actual per-order shipping costs from your 3PL, and historical AppLovin ad spend, via CSV.
What Are Cost Imports
Kleio has two CSV importers, for the two kinds of cost no API will hand over. Both live at Costs → Import, behind the type switcher at the top of the page:
- Shipping costs — the actual shipping cost for each order. Use it for any carrier or 3PL Kleio doesn’t connect to directly (only ShipHero has a native integration), or to backfill historical shipping data.
- AppLovin — historical AppLovin ad spend, one row per day. See AppLovin ad spend below.
How It Works with Variable Costs
The most common setup combines estimated variable costs with imported actuals:
- Create a variable cost with an estimated shipping rate (e.g., a per-order flat fee or a by-weight rate).
- Enable “Skip when there’s an imported shipping cost” on that variable cost.
- Import actual costs via CSV once your 3PL invoice arrives.
For orders with imported costs, the variable cost estimate is automatically skipped. For recent orders that haven’t been invoiced yet, the estimate still applies. This gives you real-time estimates until the real numbers come in.
Imported costs are attributed to the order’s creation date (not the import date), so your P&L stays accurate regardless of when you import.
CSV Format
The import expects three columns. Header matching is flexible — it handles variations in casing, spaces, underscores, and hyphens.
Order Identifier (required — one of)
| Accepted headers |
|---|
order_number, ordernumber, order#, ordernum |
orderid, id |
Order numbers are matched with or without a leading # — importing “99999” will match order “#99999.”
Shipping Cost (required)
| Accepted headers |
|---|
shipping_cost, shippingcost, shippingcosts, cost, shipcost |
Currency (required)
| Accepted headers |
|---|
currency, shippingcostcurrency, costcurrency, curr |
Use standard 3-letter currency codes (e.g., USD, EUR, GBP). If the imported currency differs from your store currency, Kleio converts it automatically using exchange rates.
Limits
- Maximum file size: 5 MB
- Maximum rows per import: 50,000
After import, Kleio reports how many orders were matched and lists up to 10 unmatched order identifiers so you can investigate.
Managing Imported Costs
The import page shows all imported costs in a searchable, sortable table. You can:
- Edit individual costs inline by double-clicking the cost or currency value.
- Bulk delete selected rows.
- Delete by batch — each import is tracked as a batch in the import history, so you can undo an entire import at once.
AppLovin Ad Spend
AppLovin’s reporting API only reaches back 45 days — 30 days at the hourly grain Kleio syncs — so anything older can only get into Kleio from a spreadsheet. The importer at Costs → Import → AppLovin takes one row per day and writes it as ordinary AppLovin spend: it shows in the P&L, the platform breakdown, campaign filters, and any ad-spend-based variable cost. It works even if you’ve never connected AppLovin, or have since disconnected it.
CSV Format
Three columns, all required. Header matching is flexible in the same way as above.
| Field | Accepted headers |
|---|---|
| Date | date, day, dato |
| Spend | spend, cost, amount, adspend, forbrug |
| Currency | currency, valuta, cur |
Pick the date format on the page before importing — Kleio never guesses one. 04/03/2024 is 4 March in DD-MM-YYYY and 3 April in MM-DD-YYYY, and the preview shows the file’s own date next to the day Kleio read, so a wrong pick is visible before you commit. Dates are read as calendar days in your store’s timezone.
One row per day, per currency. A day listed twice in the same currency is rejected rather than silently keeping one of them — sum per-campaign rows into one row per day first. A row with a spend of 0 writes nothing but still clears that day.
What an Import Replaces
Every day the file lists has its existing AppLovin spend replaced by the file’s value. The page tells you what that costs before you confirm: how many days already hold spend, how far back they go, and the total about to be replaced.
Two things to know:
- Days inside the last 30 are temporary. They’re imported, then replaced again by the next AppLovin sync of those days. Live API data wins where the API can still reach; that’s also the only arrangement that can’t double-count a day.
- Undo removes what an import added — it doesn’t restore what the import overwrote. There’s no snapshot. The same is true of disconnecting AppLovin, which deletes imported history along with everything else AppLovin.
Limits
- Maximum file size: 5 MB
- Maximum rows per import: 10,000 (about 27 years of daily rows)