5-Bucket Partition Model
Settlement revenue is partitioned into five mutually exclusive, collectively exhaustive buckets. Every dollar from every order maps to exactly one bucket.
| Bucket | Settlement Source | Contents |
|---|---|---|
| Earned | seller_revenue + subsidy fields | Order GMV + TikTok-funded voucher subsidies + shipping subsidies covered by platform |
| Taken | Pre-payout deduction fields | Platform commission, referral fee, transaction fee, affiliate commission, FBT fulfillment fee, TikTok-collected shipping, seller-co-funded discounts |
| Spent | Operator-recorded post-payout | Ad spend (TikTok Ads API), COGS (operator input) |
| Lost | Return + shrinkage + FX fields | Refund reversals, FBT inventory shrinkage write-offs, exchange rate loss on cross-border settlements |
| Kept | Derived identity | Net amount credited to operator bank account |
Kept = Earned − Taken − Spent − Lost
Settlement Boundary: Taken vs Spent
Taken and Spent are separated by the settlement disbursement event — not by magnitude or category similarity.
- Taken: deducted by TikTok before disbursement. The operator never receives this capital. Values are exact: sourced from
statement_transactionsfee fields, not approximated rate cards. - Spent: deducted from operator bank account after disbursement arrives. Includes ad spend and COGS. Operator controls timing and magnitude.
This boundary is the structural reason the two buckets require different diagnostic responses:
| Symptom | Bucket | Root cause domain |
|---|---|---|
| Taken rate rising | Taken | Fee structure shift — more affiliate-driven orders, FBT enrollment, commission tier change |
| Margin compression with stable Taken | Spent | COGS inflation, ad efficiency degradation |
| Gross margin unexpectedly high | Lost understated | Refund spike not yet settled; settlement lag masking reversals |
Collapsing Taken and Spent into a single “costs” bucket makes these diagnostics structurally impossible.
Settlement Data as Authoritative Source
AxonRow pulls profit values exclusively from the TikTok Finance API settlement endpoints:
GET /finance/202501/statements/{id}/statement_transactions— settled orders, full 140+ field fee breakdown per order per SKUGET /finance/202507/orders/unsettled— unsettled orders, partial breakdown, marked with confidence badge in UI
Rate-card estimation tools compute Taken by multiplying GMV by published commission percentages. This systematically underestimates Taken because:
- Affiliate commission rates vary per creator deal, not published in rate cards
- Seller-co-funded discount amounts are order-specific
- FBT fulfillment fees depend on weight/zone, not a flat rate
- TikTok adjusts fee structures without advance notice
Settlement data contains the actual deducted amounts — no estimation required.
Profit values only finalize after TikTok settles the order (typically 7–15 days post-delivery confirmation). Unsettled orders carry partial Taken data and are flagged in the UI. Exclude unsettled periods from margin benchmarking.
Per-SKU Fee Attribution
Settlement data is available at SKU granularity via statement_transaction_skus. Each SKU record carries its proportional share of every fee type in the parent transaction.
This enables:
- Per-SKU Kept margin ranking across the catalog
- Identifying SKUs where affiliate commission alone exceeds gross margin
- Isolating FBT fulfillment cost by product dimension (weight class, warehouse zone)
Waterfall Drill-Down Path
Navigate to Finance → P&L. The waterfall chart renders each bucket as a sequential step from Earned to Kept.
- Hover any step: per-fee-type line-item breakdown for that bucket
- Click any order row: full settlement record with raw Finance API field values
- Switch time range: all bucket values recalculate from settled transaction records in that window
Try it
Diagnostic Audit Path
Apply in order when Kept deviates from expectation:
- Check Earned — Verify subsidy fields are present. Missing subsidies indicate Finance API scope gap or settlement delay.
- Decompose Taken — Identify which fee type is the largest component. Affiliate commission dominance signals creator mix shift.
- Audit Spent — Compare ad spend to TikTok Ads API ROAS data. COGS entries require operator verification.
- Inspect Lost — Filter to the settlement window. A Lost spike lagging 14+ days behind a GMV spike indicates a refund wave still settling.
- Recalculate Kept — If the identity
Earned − Taken − Spent − Lost ≠ Kept, a Spent input (COGS) is missing or double-counted.
Classification Errors to Avoid
- Merging Taken and Spent — Structurally different capital flows; merged buckets prevent fee structure vs. operational cost diagnosis.
- Using rate-card estimates for Taken — Rate cards underestimate Taken; settlement data is the only accurate source.
- Including unsettled orders in margin benchmarks — Partial Taken data produces inflated Kept values.
- Attributing Lost to Taken — Refund reversals are not TikTok deductions; they are return of previously recognized Earned. Misclassification distorts the Taken rate trend.