← back
# strandedgrid — Pricing model
**Source of truth.** Any price displayed on the public site, quoted in
an outbound email, or charged via Stripe must reconcile to the formula
in §2 of this document. Drift = bug.
Last revised: 2026-06-03 (turn-1 of stranded-fix).
Replaces the ad-hoc ladder audited in `PROMISE_AUDIT.md` §3 / killed in
`BILLING_REWIRE_2026_06_02_TURN14.md`.
---
## 1. Audience and unit-of-value
The buyer is a **site-selection BD lead at a Bitcoin or AI-compute
miner**, or the equivalent at an HPC colo / flare-capture vendor. Their
in-house cost to source a single stranded-energy site lead (research,
operator resolution, decision-maker hunt, outreach prep) is **8–14
analyst-hours @ $150/h fully loaded → $1,200–$2,100 per site**.
The product unit is therefore one **Site Dossier**:
- 1 stranded-energy event (flare / curtailment / negative DA),
- 1 resolved operator + ultimate parent,
- 1 named decision-maker (Operations / New Ventures / Midstream
Marketing — never the CEO), verified-deliverable email,
- 3 talking points + 5 comparable assets,
- delivered as PDF + JSON within 48h of order.
A miner BD team typically needs **8–20 site leads per quarter** to fill
its build-out funnel — that bounds the ladder.
---
## 2. The ladder (the only prices in the system)
```
SKU Unit price Effective $/dossier Use it when…
-----------------------------------------------------------------------
sample_dossier $0 — evaluating fit (1 per company)
dossier_payg $1,500 $1,500 ad-hoc, ≤2 dossiers/quarter
sprint_pack_5 $5,500 $1,100 (-27%) active hunt, 1 basin focus
roster_basin_seat $9,000/yr ~$600 @15 dossiers stable funnel, 1 basin
roster_us_wide_seat $25,000/yr ~$500 @50 dossiers multi-basin programmatic
```
### 2.1 Formula
The ladder is generated, not negotiated. Given the base unit
`BASE = $1,500` and a target per-dossier discount schedule:
```
sample_dossier = 0 # acquisition CAC
dossier_payg = BASE # 1.00 × BASE
sprint_pack_5 = round(BASE × 5 × 0.733, -100) # 0.73 × pack value
roster_basin_seat = round(BASE × 15 × 0.40, -1000) # priced at ~15 dossiers @ 60%
roster_us_wide_seat = round(BASE × 50 × 0.33, -1000) # priced at ~50 dossiers @ 67%
```
Targets `0.733 / 0.40 / 0.33` are the **steady-state break-even points**
of the customer's BD ROI model — at the per-dossier rates above, the
fully-loaded analyst-hour replacement value still clears the price.
### 2.2 Why no $99/$299/$999 monthly tier
A persistent miner BD lead reads ~2–6 site leads per month; at $99 the
self-serve pricing leaves $1,200+ in unit margin on the table per
month. At $299/mo the consumer recoils ($3.6k/yr for unbounded usage
sounds risky). At $999/mo the buyer needs approval, which is the same
friction as the $1,500 invoice without the unit framing. The bimodal
dead zone has been validated by the dossier-funnel ladder (§4 of
`MARKET_AND_BM.md`) — keeping it killed.
### 2.3 Why no per-MW commission
A finder's-fee model (`intro_brokerage` in `product_catalog.py`) is
preserved for closed warm intros, but it cannot be the primary SKU
because:
1. Sales cycle for a 25–80 MW site PPA is 9–18 months, so revenue
would lag the work-product by ~12 months.
2. Attribution is fraught — the buyer also runs in-house BD, and the
dossier merely accelerated a lead they'd have found in 6 months.
3. The product-vs-broker positioning collapses; we'd be a recruiter,
not a data product.
It stays an **optional** add-on, off the public pricing strip.
---
## 3. Test contract
Every price on the public site is asserted in two places, both of
which must agree with this document:
1. `tests/test_web_server.py::test_landing_renders_html` — pins the
four dollar amounts that appear in the pricing strip.
2. `stranded/services/product_catalog.py::SEED_PRODUCTS` — pins the
SKUs, names, and `price_usd` cents-equivalent that hit Stripe.
If the formula in §2.1 is edited, both must be updated in the same
commit and a row must be appended to `docs/PRICING_CHANGES.md`.
---
## 4. Worked examples (the three the operator must see)
Given a visitor lands on `/`, the three example quotes that prove
pricing is **deterministic and consistent**:
| Input (what the visitor asks) | Output (what the page quotes) |
|---|---|
| "I just want to see one example" | Sample dossier — $0 (1 per company) |
| "Send me a dossier on Permian flare site X" | PAYG dossier — $1,500 invoiced net-30 |
| "We have a Permian originator and need ~3 leads/mo for the next year" | Roster · Permian — $9,000 / year |
These are the three rows surfaced on the home page (and in
`docs/DELIVERY_PROOF.md` after the redeploy).