The FY2025 revenue bridge reconciles to the dollar, from FY2024 revenue of $11,243,300 to FY2025 revenue of $11,238,378 (down $4,922, or about 0.04%).

| Step | Amount | Customers |
|---|---|---|
| FY2024 revenue | $11,243,300 | |
| New | +$462,893 | 6 |
| Expansion | +$1,210,651 | 23 |
| Contraction | −$443,322 | 11 |
| Churn | −$1,288,224 | 4 |
| Timing | +$53,080 | 3 |
| **FY2025 revenue** | **$11,238,378** | |

- **Net retention:** Expansion roughly offsets churn and contraction, so the new-logo revenue is nearly all that separates the two years.
- **Churn:** Three of the four churned customers are Enterprise (Birchway Foods, Fenwick Legal and one other), and they account for $1.19M of the $1.29M churn.
- **New customers:** All six are SMB.
- **Flat customers:** Four customers had no change.

**Timing assumption:** I treated `timing_amount` as the timing portion of each customer's year-over-year change. I split it out as its own bridge step and classified expansion and contraction on the remaining underlying change. The column has no documentation, so please confirm that reading. If it means something else, expansion and contraction will shift, though the endpoints won't.

Files are in `output/`:
- `fy2025_revenue_bridge.csv`
- `bridge_customer_detail.csv`

I didn't build a chart. I can add a waterfall if you want one.