The FY2025 revenue bridge is built. Revenue was essentially flat: $11,243,300 in FY2024 against $11,238,378 in FY2025, down $4,922 (−0.04%). Each customer's figures add up from FY24 to FY25, and so does each segment's.

| Step | Amount | % of FY24 | # Customers |
|---|---:|---:|---:|
| FY2024 revenue | 11,243,300 | | 42 |
| New | +462,893 | +4.1% | 6 |
| Expansion | +1,210,651 | +10.8% | 23 |
| Contraction | −443,322 | −3.9% | 11 |
| Churn | −1,288,224 | −11.5% | 4 |
| Timing | +53,080 | +0.5% | 3 |
| **FY2025 revenue** | **11,238,378** | −0.04% | 44 |

Leaving timing out, gross revenue retention is 84.6% and net revenue retention is 95.4%.

**By segment:**
- **Enterprise is down 12.0%.** Two churned accounts, Birchway Foods and Fenwick Legal, account for $1.19M of the $1.29M total churn. That loss is larger than all the Enterprise expansion.
- **Mid-Market is up 8.3%**, all from existing customers, with no churn.
- **SMB is up 43.1%.** All six new customers are SMB ($463K), which more than covers two churned SMB accounts ($99K).

**How I classified each customer:**
- **New:** no FY24 revenue.
- **Churn:** no FY25 revenue.
- **Timing:** the `timing_amount` column, taken as the part of the year-on-year change that comes from timing rather than real demand.
- **Expansion or contraction:** whatever change is left after taking out timing.

This reading of `timing_amount` is my assumption, so please check it. It changes how three customers are classified:
- **Lumen Retail:** the whole −13.8K drop is timing, so it shows no contraction.
- **Saltmarsh Energy:** treated as −52.3K of real contraction plus +13.7K of timing.
- **Cobalt Dental:** treated as +45.3K of real expansion plus +53.2K of timing.

Redwood Pharmacy, Hawthorn Veterinary and Jetty Seafood had the same revenue in both years and don't appear in any step.

Files are in `output/`:
- `scripts/revenue_bridge.py` builds everything again from the CSV.
- `output/revenue_bridge.md` is the summary tables above.
- `output/bridge_summary.csv` is the bridge by segment.
- `output/bridge_by_customer.csv` shows each customer's split across the steps.

I can add a waterfall chart if you want one.