I built the bridge and wrote the note. FY2025 revenue was **$11,238K** against **$11,243K** in FY2024, a change of **($5K)**, or **(0.04%)**. The script confirmed that PY + Timing + Loss + Decline + Upsell + New equals CY to the cent.

| Step | Amount |
| --- | --- |
| FY2024 | $11,243K |
| Timing | $53K |
| Loss | ($1,288K) |
| Decline | ($443K) |
| Upsell | $1,211K |
| New | $463K |
| FY2025 | $11,238K |

- **Lost customers:** 4 lost customers took ($1,288K). The largest was Fenwick Legal, which took ($686K).
- **Upsell:** 23 customers added $1,211K. The largest was Harbor Freight Partners, which added $148K.
- **Rounding:** each row is rounded on its own, so the rows don't add exactly to the FY2025 total. The note says this in its data notes.

The data doesn't explain why customers left or cut back. CRM churn reasons or contract records would answer that, and the note doesn't guess at causes.

Files are in `output/`:
- bridge.json
- bridge-note.md