Skip to content

Costs

Costs are what you pay for traffic: ad budgets on Facebook, TikTok, Google, push networks. Without costs, reports show revenue but no profit or ROI. The Costs section (/dashboard/costs) stores manual records. There is a second model, the auto per-click cost, described below.

Costs section with add and bulk entry buttons and the records table
  1. New Cost — one record: link, period, amount, currency, breakdown.
  2. Bulk Entry — paste from Excel or Google Sheets, one row per day.
  3. Table — records with period, link, breakdown and source (Manual or API).
Field What to enter
Link A specific link, or “No link (workspace-wide)”.
Date Start of the period. The checkbox “This cost spans multiple days” reveals an “End date”.
Breakdown key For example sub_id_2. Use it when the cost belongs to an ad or creative.
Breakdown value For example ad_12345. Must match the sub_id value on clicks.
Amount Number, up to two decimals.
Currency Three-letter code, USD by default.
Notes Free text, up to 1000 characters.

Copy the table from Excel or Google Sheets and paste it into the Bulk Cost Entry dialog. Columns must be in this order:

# Column Format
1 Date YYYY-MM-DD
2 Link link code, can be empty
3 Breakdown key for example sub_id_2
4 Breakdown value for example ad_12345
5 Amount number
6 Currency three-letter code, USD by default
7 Notes text

Each row is one day. Errors are highlighted: invalid date, currency code not three letters, link code not found.

Bulk cost entry dialog with column headers and rows ready to save
  1. Column headers — the order matters; paste maps by position.
  2. Rows — one per day. Use “Add row” and “Save all” below the table.
Model Where it is set How it is calculated
Manual records This section Record amount, spread over the days of its period.
Auto per-click cost Click intake (/dashboard/settings/click-settings) None, a fixed cost per click (CPC), per 1000 clicks (CPM), or a value from a URL parameter. Recorded at click time.

The two never add up. If a report group has a manual amount, that amount is used. The auto cost applies only to groups without manual cost.

Details on which reports pick up manual records and how amounts are split by day are in Reports.

Records in another currency are converted to the base currency at the rate of the record’s day. If no rate exists, the report shows a mixed-currency warning. Rates are in FX rates.

  • A member with Hide financials sees no costs at all.
  • A member with Own entities only sees records they created, and records for the links they are allowed to see. Records without a link are not visible to them.

See buyer access.

Method Path Scope
GET /api/v1/costs?from=&to=&linkId= costs:read
POST /api/v1/costs costs:write
PUT /api/v1/costs/bulk costs:write, body { "records": [...] }, up to 500 records; upsert by identity set, see above
PATCH /api/v1/costs/:id costs:write
DELETE /api/v1/costs/:id costs:write

Create fields: linkId, breakdownKey, breakdownValue, periodStart, periodEnd, amount, currency, source, notes.

POST /api/v1/costs and PATCH /api/v1/costs/:id with an identity set that another record already has return 409 Conflict. To update an existing record, use PUT /costs/bulk.