The FY2025 revenue bridge is built, and it reconciles to zero. Revenue is nearly flat, down $4.9K (-0.04%).

| Step | $ | Note |
|---|---|---|
| **FY2024 revenue** | **11,243,300** | |
| New logos | +462,893 | 6 customers, all SMB |
| Churn | −1,288,224 | 4 customers: Birchway, Fenwick, Eastfield, Quill |
| Expansion | +1,210,651 | excludes timing |
| Contraction | −443,322 | excludes timing |
| Timing | +53,080 | net of the `timing_amount` column |
| **FY2025 revenue** | **11,238,378** | |

- **Churn offsets growth:** Enterprise logo churn (Birchway and Fenwick, about $1.19M) wipes out most of the net expansion. By segment, Enterprise fell $749K, Mid-Market grew $335K and SMB grew $409K.
- **Timing is my assumption:** The CSV doesn't define `timing_amount`. I treated it as the part of each customer's year-over-year change that is timing, and showed it as its own step. I removed it from expansion and contraction for the three customers that have a value (Cobalt Dental, Lumen Retail and Saltmarsh Energy). If timing should sit inside expansion and contraction instead, the bridge is the same except that expansion and contraction absorb the $53K.
- **Output file:** I saved the table to `revenue_bridge_fy2025.csv`. I haven't made a chart, but I can add a waterfall if you want one.