Paywall Parity/Guidelines
Run a free audit

Start here

  • Overview
  • Quickstart
  • Safety model

Concepts

  • Store baselines
  • Parity targets
  • Strategies
  • Confidence
  • Drift
  • Protected markets

Workflows

  • Connect a store
  • Review recommendations
  • Stage and publish

Reference

  • Formulas
  • Error codes

Integrations

  • Google Play
  • Apple App Store
  • Revenue signals

Trust and operations

  • Credential custody
  • Methodology

Reference

Pricing formulas

The exact arithmetic behind a parity target and a confidence score, with every constant and weight stated.

Shipped3 min readReviewed 2026-09-21Markdown

On this page

  • Money
  • Dampening
  • Economic factor
  • Strategy constants
  • Target price
  • Eligibility
  • Confidence
  • Bands
  • Drift
  • Approvability

Every number on this page is the value the engine actually uses. Concepts and reasoning live in Parity targets; this page is for looking things up.

Money

All amounts are integer micros — millionths of a currency unit. $4.99 is 4990000. Arithmetic is done in BigInt to avoid floating-point drift, with half-up rounding on multiplication.

A constraint, override, or current price must be denominated in the target market's currency. A mismatch is an error, not a silent conversion.

Dampening

dampened(factor, intensity) = 1 - intensity x (1 - factor)

intensity must be within [0, 1]. At 0 the factor is neutralised to 1; at 1 it passes through unchanged.

Economic factor

raw       = ppp x priceLevel x income
combined  = dampened(ppp, pppIntensity)
          x dampened(priceLevel, priceLevelIntensity)
          x dampened(income, incomeIntensity)
adjusted  = clamp(combined, minPriceRatio, maxPriceRatio)

priceLevel and income default to 1 when absent. ppp is required, and every factor must be finite and greater than zero.

Both raw and adjusted are stored in the snapshot, so the effect of dampening is always recoverable.

Strategy constants

ConservativeBalancedGrowth
pppIntensity0.350.650.90
incomeIntensity0.100.200.30
priceLevelIntensity0.100.150.20
minPriceRatio0.700.450.25
maxPriceRatio1.201.201.10

Target price

converted   = basePrice x fxRate
candidate   = converted x adjusted
selected    = override.absolutePrice
            | converted x override.priceRatio
            | candidate
constrained = clamp(selected, floor, ceiling)
rounded     = roundToIncrement(constrained, market)
final       = clamp(rounded, floor, ceiling)

fxRate is the target currency per base-currency unit, and must be finite and positive.

The final clamp is not redundant: rounding can push a price back outside its bounds.

For a protected market the result is the current price, and a current price is required — the calculation throws without one.

Eligibility

eligible = storeSupported AND NOT protectedMarket

Confidence

stability = 1 - min(1, |1 - adjusted|)

score = clamp(dataCoverage) x 0.35
      + clamp(freshness)    x 0.20
      + (storeSupported ? 1 : 0)      x 0.20
      + (roundingRuleAvailable ? 1:0) x 0.10
      + stability                     x 0.15

Rounded to two decimal places. dataCoverage is the count of present economic inputs divided by three.

Bands

ScoreLevelDecision
< 0.40Very Lowabstain
< 0.60Lowabstain
< 0.75Mediumprovisional
< 0.90Highnormal
>= 0.90Very Highnormal

Drift

changeRatio = actual / expected - 1

| |changeRatio| | Severity | | --- | --- | | < 0.05 | ignored | | < 0.10 | mild | | <= 0.20 | review | | > 0.20 | significant |

Store drift is only classified when expected and actual share a currency, and when the expected amount is finite and positive.

Approvability

approvable = status = "open"
         AND NOT withdrawn
         AND confidenceDecision != "abstain"
         AND |changeRatio| >= 0.05

Checked in the interface so the buttons state what will happen, and enforced again on the server.

PreviousStaging and publishingNextError codes

On this page

  • Money
  • Dampening
  • Economic factor
  • Strategy constants
  • Target price
  • Eligibility
  • Confidence
  • Bands
  • Drift
  • Approvability