← All Guides

finance

How Profit is Calculated

5-bucket settlement partition model: Earned, Taken, Spent, Lost, Kept — authoritative source is TikTok Finance API settlement data, not rate-card estimates.

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.

BucketSettlement SourceContents
Earnedseller_revenue + subsidy fieldsOrder GMV + TikTok-funded voucher subsidies + shipping subsidies covered by platform
TakenPre-payout deduction fieldsPlatform commission, referral fee, transaction fee, affiliate commission, FBT fulfillment fee, TikTok-collected shipping, seller-co-funded discounts
SpentOperator-recorded post-payoutAd spend (TikTok Ads API), COGS (operator input)
LostReturn + shrinkage + FX fieldsRefund reversals, FBT inventory shrinkage write-offs, exchange rate loss on cross-border settlements
KeptDerived identityNet 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_transactions fee 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:

SymptomBucketRoot cause domain
Taken rate risingTakenFee structure shift — more affiliate-driven orders, FBT enrollment, commission tier change
Margin compression with stable TakenSpentCOGS inflation, ad efficiency degradation
Gross margin unexpectedly highLost understatedRefund 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 SKU
  • GET /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:

  1. Affiliate commission rates vary per creator deal, not published in rate cards
  2. Seller-co-funded discount amounts are order-specific
  3. FBT fulfillment fees depend on weight/zone, not a flat rate
  4. 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

Net Profit$42.00
Profit Margin42.0%

Diagnostic Audit Path

Apply in order when Kept deviates from expectation:

  1. Check Earned — Verify subsidy fields are present. Missing subsidies indicate Finance API scope gap or settlement delay.
  2. Decompose Taken — Identify which fee type is the largest component. Affiliate commission dominance signals creator mix shift.
  3. Audit Spent — Compare ad spend to TikTok Ads API ROAS data. COGS entries require operator verification.
  4. Inspect Lost — Filter to the settlement window. A Lost spike lagging 14+ days behind a GMV spike indicates a refund wave still settling.
  5. 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.

See these metrics live for your shop

Start Free Trial