Skip to main content

Methodology

Subscription Box Unit Economics methodology

Test whether recurring box economics remain viable after cohort movement and the full entered cost-to-serve stack. Project subscription-box contribution across billing cycles with subscriber additions, churn, failed payments, refunds, fulfilment, shipping, payment and acquisition cost.

Educational only: Business decision support, not accounting, tax or legal advice.

Privacy: Calculations run locally; Margin101 does not receive your commercial inputs.

Update policy: Reviewed when formulas or official dependencies change.

Scope: Market-neutral small-business planning using your own assumptions.

1. Formulas and units

Boxes shipped
totalBoxesShipped = sum(active subscribers * (1 - failed payment rate))

Where

failedPaymentRate
Failed payment rate (decimal fraction of active subscribers failing payment per cycle)Source: Business record
totalBoxesShipped
Boxes shipped (units)Source: Calculated output
Net paid boxes
totalNetPaidBoxes = sum(boxes shipped * (1 - refund rate))

Where

refundRate
Refund rate (decimal fraction of shipped boxes refunded)Source: Business record
totalBoxesShipped
Boxes shipped (units)Source: Calculated output
totalNetPaidBoxes
Net paid boxes (units)Source: Calculated output
Subscription revenue
totalRevenueExTax = sum(net paid boxes * box price)

Where

boxPriceExTax
Subscription box price (currency units/net paid box, ex tax)Source: Business record
totalNetPaidBoxes
Net paid boxes (units)Source: Calculated output
totalRevenueExTax
Subscription revenue (currency units, ex tax)Source: Calculated output
Variable box cost
totalVariableCostExTax = contents + fulfilment + shipping + payment cost across shipped boxes

Where

totalBoxesShipped
Boxes shipped (units)Source: Calculated output
totalVariableCostExTax
Variable box cost (currency units, ex tax)Source: Calculated output
Subscriber acquisition cost
acquisitionCostExTax = new subscribers per cycle * cycles * acquisition cost

Where

newSubscribersPerCycle
New subscribers per cycle (whole new subscribers/billing cycle)Source: Business record
acquisitionCostExTax
Subscriber acquisition cost (currency units, ex tax)Source: Calculated output
Subscription-box contribution
totalContributionExTax = revenue - variable box cost - acquisition cost

Where

totalRevenueExTax
Subscription revenue (currency units, ex tax)Source: Calculated output
totalVariableCostExTax
Variable box cost (currency units, ex tax)Source: Calculated output
acquisitionCostExTax
Subscriber acquisition cost (currency units, ex tax)Source: Calculated output
totalContributionExTax
Subscription-box contribution (currency units, ex tax)Source: Calculated output
contributionPerBoxExTax
Contribution per box (currency units, ex tax)Source: Calculated output
Contribution per box
contributionPerBoxExTax = expected paid revenue per box - product, fulfilment, shipping and payment cost

Where

productCostPerBoxExTax
Product cost per box (currency units/shipped box, ex tax)Source: Business record
shippingPerBoxExTax
Shipping cost per box (currency units/shipped box, ex tax)Source: Business record
totalRevenueExTax
Subscription revenue (currency units, ex tax)Source: Calculated output
totalContributionExTax
Subscription-box contribution (currency units, ex tax)Source: Calculated output
contributionPerBoxExTax
Contribution per box (currency units, ex tax)Source: Calculated output
Opening cohort contribution
monthlyContributionExTax = contribution per box * opening subscribers

Where

openingSubscribers
Opening subscribers (whole active subscribers before first billing cycle)Source: Business record
totalContributionExTax
Subscription-box contribution (currency units, ex tax)Source: Calculated output
contributionPerBoxExTax
Contribution per box (currency units, ex tax)Source: Calculated output
monthlyContributionExTax
Opening cohort contribution (currency units, ex tax)Source: Calculated output
Expected lifetime boxes
expectedLifetimeBoxes = 1 / churn rate

Where

churnRate
Subscriber churn per cycle (decimal fraction of active subscribers lost per billing cycle)Source: Business record
expectedLifetimeBoxes
Expected lifetime boxes (units)Source: Calculated output
Contribution lifetime value
contributionLtvExTax = contribution per box * expected lifetime boxes

Where

totalContributionExTax
Subscription-box contribution (currency units, ex tax)Source: Calculated output
contributionPerBoxExTax
Contribution per box (currency units, ex tax)Source: Calculated output
expectedLifetimeBoxes
Expected lifetime boxes (units)Source: Calculated output
contributionLtvExTax
Contribution lifetime value (currency units, ex tax)Source: Calculated output
Acquisition payback cycles
acquisitionPaybackCycles = acquisition cost / positive contribution per box

Where

acquisitionCostExTax
Subscriber acquisition cost (currency units, ex tax)Source: Calculated output
totalContributionExTax
Subscription-box contribution (currency units, ex tax)Source: Calculated output
contributionPerBoxExTax
Contribution per box (currency units, ex tax)Source: Calculated output
acquisitionPaybackCycles
Acquisition payback cycles (units)Source: Calculated output
Net contribution lifetime value
netContributionLtvExTax = contribution lifetime value - acquisition cost

Where

acquisitionCostExTax
Subscriber acquisition cost (currency units, ex tax)Source: Calculated output
totalContributionExTax
Subscription-box contribution (currency units, ex tax)Source: Calculated output
contributionLtvExTax
Contribution lifetime value (currency units, ex tax)Source: Calculated output
netContributionLtvExTax
Net contribution lifetime value (currency units, ex tax)Source: Calculated output
Subscription-box margin
contributionMargin = contribution / revenue

Where

totalRevenueExTax
Subscription revenue (currency units, ex tax)Source: Calculated output
totalContributionExTax
Subscription-box contribution (currency units, ex tax)Source: Calculated output
contributionMargin
Subscription-box margin (decimal rate)Source: Calculated output
Ending subscribers
endingSubscribers = active subscribers after cycle-by-cycle churn

Where

endingSubscribers
Ending subscribers (units)Source: Calculated output

Money inputs and outputs use the currency selected in the scenario without changing the canonical methodology. Rates, margins, utilisation and buffers are entered as percentages and converted to decimal values for calculation.

2. Worked example

Input assumptions

The worked rows below are evaluated at render time by the same shared engine and visible default fixture as the interactive workflow.

Opening subscribers
100 whole active subscribers before first billing cycle
New subscribers per cycle
10 whole new subscribers/billing cycle
Billing cycles projected
6 whole billing cycles/projection
Subscription box price
50 currency units/net paid box, ex tax
Product cost per box
15 currency units/shipped box, ex tax
Packaging and fulfilment per box
5 currency units/shipped box, ex tax
Shipping cost per box
5 currency units/shipped box, ex tax
Payment fee rate
0.02 decimal fraction of box revenue
Fixed payment fee per box
0.5 currency units/shipped box, ex tax
Failed payment rate
0.1 decimal fraction of active subscribers failing payment per cycle
Refund rate
0.05 decimal fraction of shipped boxes refunded
Subscriber churn per cycle
0.1 decimal fraction of active subscribers lost per billing cycle
Acquisition cost per new subscriber
20 currency units/new subscriber, ex tax

Calculation and outputs

  1. Boxes shipped

    totalBoxesShipped = sum(active subscribers * (1 - failed payment rate))
    Opening subscribers
    100 whole active subscribers before first billing cycle
    New subscribers per cycle
    10 whole new subscribers/billing cycle
    Payment fee rate
    0.02 decimal fraction of box revenue
    Fixed payment fee per box
    0.5 currency units/shipped box, ex tax
    Failed payment rate
    0.1 decimal fraction of active subscribers failing payment per cycle
    Refund rate
    0.05 decimal fraction of shipped boxes refunded
    Subscriber churn per cycle
    0.1 decimal fraction of active subscribers lost per billing cycle
    Ending subscribers
    95.31441 units

    Engine result: 582.17031 units

  2. Net paid boxes

    totalNetPaidBoxes = sum(boxes shipped * (1 - refund rate))
    Payment fee rate
    0.02 decimal fraction of box revenue
    Failed payment rate
    0.1 decimal fraction of active subscribers failing payment per cycle
    Refund rate
    0.05 decimal fraction of shipped boxes refunded
    Subscriber churn per cycle
    0.1 decimal fraction of active subscribers lost per billing cycle
    Boxes shipped
    582.17031 units
    Expected lifetime boxes
    10 units

    Engine result: 553.061795 units

  3. Subscription revenue

    totalRevenueExTax = sum(net paid boxes * box price)
    Subscription box price
    50 currency units/net paid box, ex tax
    Product cost per box
    15 currency units/shipped box, ex tax
    Packaging and fulfilment per box
    5 currency units/shipped box, ex tax
    Shipping cost per box
    5 currency units/shipped box, ex tax
    Fixed payment fee per box
    0.5 currency units/shipped box, ex tax
    Boxes shipped
    582.17031 units
    Net paid boxes
    553.061795 units
    Variable box cost
    15,427.513215 money
    Subscription-box contribution
    11,025.57651 money
    Contribution per box
    21 money
    Expected lifetime boxes
    10 units
    Net contribution lifetime value
    190 money
    Subscription-box margin
    0.39871 percent

    Engine result: 27,653.089725 money

  4. Variable box cost

    totalVariableCostExTax = contents + fulfilment + shipping + payment cost across shipped boxes
    Product cost per box
    15 currency units/shipped box, ex tax
    Packaging and fulfilment per box
    5 currency units/shipped box, ex tax
    Shipping cost per box
    5 currency units/shipped box, ex tax
    Payment fee rate
    0.02 decimal fraction of box revenue
    Fixed payment fee per box
    0.5 currency units/shipped box, ex tax
    Failed payment rate
    0.1 decimal fraction of active subscribers failing payment per cycle
    Acquisition cost per new subscriber
    20 currency units/new subscriber, ex tax
    Boxes shipped
    582.17031 units
    Net paid boxes
    553.061795 units
    Subscriber acquisition cost
    1,200 money
    Expected lifetime boxes
    10 units

    Engine result: 15,427.513215 money

  5. Subscriber acquisition cost

    acquisitionCostExTax = new subscribers per cycle * cycles * acquisition cost
    Opening subscribers
    100 whole active subscribers before first billing cycle
    New subscribers per cycle
    10 whole new subscribers/billing cycle
    Billing cycles projected
    6 whole billing cycles/projection
    Product cost per box
    15 currency units/shipped box, ex tax
    Shipping cost per box
    5 currency units/shipped box, ex tax
    Subscriber churn per cycle
    0.1 decimal fraction of active subscribers lost per billing cycle
    Acquisition cost per new subscriber
    20 currency units/new subscriber, ex tax
    Variable box cost
    15,427.513215 money
    Acquisition payback cycles
    0.952381 units
    Ending subscribers
    95.31441 units

    Engine result: 1,200 money

  6. Subscription-box contribution

    totalContributionExTax = revenue - variable box cost - acquisition cost
    Subscription box price
    50 currency units/net paid box, ex tax
    Product cost per box
    15 currency units/shipped box, ex tax
    Packaging and fulfilment per box
    5 currency units/shipped box, ex tax
    Shipping cost per box
    5 currency units/shipped box, ex tax
    Fixed payment fee per box
    0.5 currency units/shipped box, ex tax
    Acquisition cost per new subscriber
    20 currency units/new subscriber, ex tax
    Subscription revenue
    27,653.089725 money
    Variable box cost
    15,427.513215 money
    Subscriber acquisition cost
    1,200 money
    Contribution per box
    21 money
    Acquisition payback cycles
    0.952381 units
    Subscription-box margin
    0.39871 percent

    Engine result: 11,025.57651 money

  7. Contribution per box

    contributionPerBoxExTax = expected paid revenue per box - product, fulfilment, shipping and payment cost
    Subscription box price
    50 currency units/net paid box, ex tax
    Product cost per box
    15 currency units/shipped box, ex tax
    Packaging and fulfilment per box
    5 currency units/shipped box, ex tax
    Shipping cost per box
    5 currency units/shipped box, ex tax
    Payment fee rate
    0.02 decimal fraction of box revenue
    Fixed payment fee per box
    0.5 currency units/shipped box, ex tax
    Failed payment rate
    0.1 decimal fraction of active subscribers failing payment per cycle
    Acquisition cost per new subscriber
    20 currency units/new subscriber, ex tax
    Net paid boxes
    553.061795 units
    Subscription revenue
    27,653.089725 money
    Variable box cost
    15,427.513215 money
    Subscriber acquisition cost
    1,200 money
    Subscription-box contribution
    11,025.57651 money
    Expected lifetime boxes
    10 units
    Subscription-box margin
    0.39871 percent

    Engine result: 21 money

  8. Opening cohort contribution

    monthlyContributionExTax = contribution per box * opening subscribers
    Opening subscribers
    100 whole active subscribers before first billing cycle
    New subscribers per cycle
    10 whole new subscribers/billing cycle
    Subscription box price
    50 currency units/net paid box, ex tax
    Product cost per box
    15 currency units/shipped box, ex tax
    Packaging and fulfilment per box
    5 currency units/shipped box, ex tax
    Shipping cost per box
    5 currency units/shipped box, ex tax
    Fixed payment fee per box
    0.5 currency units/shipped box, ex tax
    Variable box cost
    15,427.513215 money
    Subscription-box contribution
    11,025.57651 money
    Contribution per box
    21 money
    Contribution lifetime value
    210 money
    Net contribution lifetime value
    190 money
    Subscription-box margin
    0.39871 percent
    Ending subscribers
    95.31441 units

    Engine result: 2,100 money

  9. Expected lifetime boxes

    expectedLifetimeBoxes = 1 / churn rate
    Payment fee rate
    0.02 decimal fraction of box revenue
    Failed payment rate
    0.1 decimal fraction of active subscribers failing payment per cycle
    Refund rate
    0.05 decimal fraction of shipped boxes refunded
    Subscriber churn per cycle
    0.1 decimal fraction of active subscribers lost per billing cycle

    Engine result: 10 units

  10. Contribution lifetime value

    contributionLtvExTax = contribution per box * expected lifetime boxes
    Subscription box price
    50 currency units/net paid box, ex tax
    Product cost per box
    15 currency units/shipped box, ex tax
    Packaging and fulfilment per box
    5 currency units/shipped box, ex tax
    Shipping cost per box
    5 currency units/shipped box, ex tax
    Fixed payment fee per box
    0.5 currency units/shipped box, ex tax
    Boxes shipped
    582.17031 units
    Net paid boxes
    553.061795 units
    Variable box cost
    15,427.513215 money
    Subscription-box contribution
    11,025.57651 money
    Contribution per box
    21 money
    Opening cohort contribution
    2,100 money
    Expected lifetime boxes
    10 units
    Net contribution lifetime value
    190 money
    Subscription-box margin
    0.39871 percent

    Engine result: 210 money

  11. Acquisition payback cycles

    acquisitionPaybackCycles = acquisition cost / positive contribution per box
    Subscription box price
    50 currency units/net paid box, ex tax
    Product cost per box
    15 currency units/shipped box, ex tax
    Packaging and fulfilment per box
    5 currency units/shipped box, ex tax
    Shipping cost per box
    5 currency units/shipped box, ex tax
    Fixed payment fee per box
    0.5 currency units/shipped box, ex tax
    Acquisition cost per new subscriber
    20 currency units/new subscriber, ex tax
    Variable box cost
    15,427.513215 money
    Subscriber acquisition cost
    1,200 money
    Subscription-box contribution
    11,025.57651 money
    Contribution per box
    21 money
    Opening cohort contribution
    2,100 money
    Contribution lifetime value
    210 money
    Net contribution lifetime value
    190 money
    Subscription-box margin
    0.39871 percent

    Engine result: 0.952381 units

  12. Net contribution lifetime value

    netContributionLtvExTax = contribution lifetime value - acquisition cost
    Product cost per box
    15 currency units/shipped box, ex tax
    Shipping cost per box
    5 currency units/shipped box, ex tax
    Acquisition cost per new subscriber
    20 currency units/new subscriber, ex tax
    Variable box cost
    15,427.513215 money
    Subscriber acquisition cost
    1,200 money
    Subscription-box contribution
    11,025.57651 money
    Contribution per box
    21 money
    Opening cohort contribution
    2,100 money
    Expected lifetime boxes
    10 units
    Contribution lifetime value
    210 money
    Acquisition payback cycles
    0.952381 units
    Subscription-box margin
    0.39871 percent

    Engine result: 190 money

  13. Subscription-box margin

    contributionMargin = contribution / revenue
    Subscription revenue
    27,653.089725 money
    Subscription-box contribution
    11,025.57651 money
    Contribution per box
    21 money
    Opening cohort contribution
    2,100 money
    Contribution lifetime value
    210 money
    Net contribution lifetime value
    190 money

    Engine result: 0.39871 percent

  14. Ending subscribers

    endingSubscribers = active subscribers after cycle-by-cycle churn
    Opening subscribers
    100 whole active subscribers before first billing cycle
    New subscribers per cycle
    10 whole new subscribers/billing cycle
    Subscriber churn per cycle
    0.1 decimal fraction of active subscribers lost per billing cycle

    Engine result: 95.31441 units

Example

The worked rows below are evaluated at render time by the same shared engine and visible default fixture as the interactive workflow.

Boxes shipped
582.17
Net paid boxes
553.06
Subscription revenue
27,653.09 currency units
Variable box cost
15,427.51 currency units
Subscriber acquisition cost
1,200 currency units
Subscription-box contribution
11,025.58 currency units
Contribution per box
21 currency units
Opening cohort contribution
2,100 currency units
Expected lifetime boxes
10
Contribution lifetime value
210 currency units
Acquisition payback cycles
0.95
Net contribution lifetime value
190 currency units
Subscription-box margin
39.9%
Ending subscribers
95.31

The exact engine-derived outputs are shown in the labelled rows below.

Interpretation

Box contribution should be reviewed with churn and acquisition recovery, not shipment margin alone.

3. Validation and boundary checks

  • All inputs must be finite and inside the visible validation boundaries.
  • Rates are retained as decimal values and shown as percentages only at the presentation boundary.
  • The worked fixture must expose every declared result: totalBoxesShipped, totalNetPaidBoxes, totalRevenueExTax, totalVariableCostExTax, acquisitionCostExTax, totalContributionExTax, contributionPerBoxExTax, monthlyContributionExTax, expectedLifetimeBoxes, contributionLtvExTax, acquisitionPaybackCycles, netContributionLtvExTax, contributionMargin, endingSubscribers.
  • Scenario comparison changes one declared driver while holding the remaining industry records constant.
Opening subscribers minimum
openingSubscribers โ‰ฅ 0 whole active subscribers before first billing cycle โ€” A lower value is rejected before calculation.
Opening subscribers maximum
openingSubscribers โ‰ค 100,000,000 whole active subscribers before first billing cycle โ€” A higher value is rejected before calculation.
New subscribers per cycle minimum
newSubscribersPerCycle โ‰ฅ 0 whole new subscribers/billing cycle โ€” A lower value is rejected before calculation.
New subscribers per cycle maximum
newSubscribersPerCycle โ‰ค 100,000,000 whole new subscribers/billing cycle โ€” A higher value is rejected before calculation.
Billing cycles projected minimum
billingCycles โ‰ฅ 0 whole billing cycles/projection โ€” A lower value is rejected before calculation.
Billing cycles projected maximum
billingCycles โ‰ค 120 whole billing cycles/projection โ€” A higher value is rejected before calculation.
Subscription box price minimum
boxPriceExTax โ‰ฅ 0 currency units/net paid box, ex tax โ€” A lower value is rejected before calculation.
Subscription box price maximum
boxPriceExTax โ‰ค 10,000,000 currency units/net paid box, ex tax โ€” A higher value is rejected before calculation.
Product cost per box minimum
productCostPerBoxExTax โ‰ฅ 0 currency units/shipped box, ex tax โ€” A lower value is rejected before calculation.
Product cost per box maximum
productCostPerBoxExTax โ‰ค 10,000,000 currency units/shipped box, ex tax โ€” A higher value is rejected before calculation.
Packaging and fulfilment per box minimum
packagingFulfilmentPerBoxExTax โ‰ฅ 0 currency units/shipped box, ex tax โ€” A lower value is rejected before calculation.
Packaging and fulfilment per box maximum
packagingFulfilmentPerBoxExTax โ‰ค 10,000,000 currency units/shipped box, ex tax โ€” A higher value is rejected before calculation.
Shipping cost per box minimum
shippingPerBoxExTax โ‰ฅ 0 currency units/shipped box, ex tax โ€” A lower value is rejected before calculation.
Shipping cost per box maximum
shippingPerBoxExTax โ‰ค 10,000,000 currency units/shipped box, ex tax โ€” A higher value is rejected before calculation.
Payment fee rate minimum
paymentFeeRate โ‰ฅ 0 decimal fraction of box revenue โ€” A lower value is rejected before calculation.
Payment fee rate maximum
paymentFeeRate โ‰ค 1 decimal fraction of box revenue โ€” A higher value is rejected before calculation.
Fixed payment fee per box minimum
paymentFeeFixedExTax โ‰ฅ 0 currency units/shipped box, ex tax โ€” A lower value is rejected before calculation.
Fixed payment fee per box maximum
paymentFeeFixedExTax โ‰ค 10,000,000 currency units/shipped box, ex tax โ€” A higher value is rejected before calculation.
Failed payment rate minimum
failedPaymentRate โ‰ฅ 0 decimal fraction of active subscribers failing payment per cycle โ€” A lower value is rejected before calculation.
Failed payment rate maximum
failedPaymentRate โ‰ค 1 decimal fraction of active subscribers failing payment per cycle โ€” A higher value is rejected before calculation.
Refund rate minimum
refundRate โ‰ฅ 0 decimal fraction of shipped boxes refunded โ€” A lower value is rejected before calculation.
Refund rate maximum
refundRate โ‰ค 1 decimal fraction of shipped boxes refunded โ€” A higher value is rejected before calculation.
Subscriber churn per cycle minimum
churnRate โ‰ฅ 0 decimal fraction of active subscribers lost per billing cycle โ€” A lower value is rejected before calculation.
Subscriber churn per cycle maximum
churnRate โ‰ค 1 decimal fraction of active subscribers lost per billing cycle โ€” A higher value is rejected before calculation.
Acquisition cost per new subscriber minimum
acquisitionCostPerNewSubscriberExTax โ‰ฅ 0 currency units/new subscriber, ex tax โ€” A lower value is rejected before calculation.
Acquisition cost per new subscriber maximum
acquisitionCostPerNewSubscriberExTax โ‰ค 10,000,000 currency units/new subscriber, ex tax โ€” A higher value is rejected before calculation.

4. Assumptions and source classification

  • Costs, capacity, contract terms, tax rates and targets are supplied by the user.
  • No provider default, jurisdictional rule or industry benchmark is embedded.
  • The shared engine retains full precision and display formatting never feeds calculation.

This planner has no current policy-data dependency. Its commercial assumptions are user supplied. Registered family-level regression suites exercise the shared business-logic engine and worked-result reconciliation.

5. Limitations

  • Results are only as reliable as the timing, scope and basis of the entered records.
  • The workflow does not predict demand or establish accounting, tax, contractual or legal treatment.

This is educational decision support, not tax, accounting, legal or financial advice. Check the treatment of your actual transactions under the rules that apply to your business and seek qualified advice where appropriate.

6. Update and evidence policy

Registered family-level suites test formula invariants and example reconciliation; the release ledger records that coverage without claiming a separate oracle for every line of public copy. There is no official threshold or benchmark to refresh for this planner. Commercial inputs remain user-supplied because they vary by business and contract.

Change history

  1. : Initial public release of the planner and methodology after pre-launch calculation, content, source and interaction review.

Guides to interpret the decision and its assumptions.

Return to the planner