Skip to content

Cash Seasonality

IOWA CITY SCHOOLS · LIQUIDITY ANALYSIS
Reading the General Fund cash balance against its season

ICCSD's General Fund cash balance swings by more than $30 million within a single year — not because the district is getting richer or poorer month to month, but because property taxes and state aid arrive in a few large, predictable lumps while payroll goes out evenly. This page establishes a baseline seasonal pattern from the district's own monthly cash-flow schedules and shows how to judge whether a given balance — say, 30 days cash on hand in June — is low, adequate, or comfortable for that time of year.

Unofficial community analysis

This page is independent analysis prepared by an ICCSD community member, built from the district's published board materials. It is not produced by the district, PFM Financial Advisors, or the Financial Oversight Committee. The underlying monthly figures are unaudited cash-flow projections and internal records; with the FY24 and FY25 audits still outstanding, even the beginning cash balances were described by PFM as "unknown variables." Treat the shape of the seasonality as reliable and the exact dollar levels as provisional.

The short answer

Aug–Sep
The annual cash trough. Before October property taxes arrive, the General Fund runs dry — FY26 needed a $10M interfund loan just to stay positive.
Oct & Apr
The two annual peaks. Iowa property-tax settlements (~$34M in October, ~$30M in April) refill the account in a single month.
~30 days
A June balance of ~30 days cash is adequate but tight — right at the floor the district steers to, enough for July payroll with almost no cushion.

Why the General Fund is seasonal

The district laid out the mechanics plainly at the February 10, 2026 Financial Oversight Committee meeting:

  • Property taxes arrive twice a year. Local property-tax settlements land in October and April and together total roughly $90 million across all funds (about $34M and $30M of that flows to the General Fund). These two months are the only times the account is materially refilled.
  • State aid is steady — until FY27. State foundation aid pays in ~$10 million monthly installments, September through June (FY26 regime). Beginning FY27 it moves to quarterly payments (~$26.5M in August, November, February, and May), which reshapes the trough months — more on that below.
  • Payroll is flat and relentless. General Fund payroll and benefits run ~$16 million every month, rising to ~$19M in June as the fiscal year closes. It does not wait for the tax cycle.

Put those together and the balance has a fixed annual rhythm: it draws down steadily between tax settlements, craters in the late summer before October taxes, dips again in late winter before April taxes, and spikes the month each settlement lands.

The baseline pattern (FY 2025-26)

This is the cleanest near-complete year of monthly data — actual through March 2026, projected through June, from PFM's adopted "Option 1" schedule. Days cash on hand uses the district/PFM operating convention of roughly $610,000 per day (≈ FY26 General Fund operating expenditures of ~$223M ÷ 365).

Month-end Ending GF cash Days cash on hand Seasonal index¹ Read
Jul 2025 $9.4M 15 0.45 Draining
Aug 2025 $6.0M 10 0.29 🔴 Trough (incl. $10M loan)
Sep 2025 $5.1M 8 0.25 🔴 Annual low
Oct 2025 $34.0M 56 1.64 🟢 Property-tax peak
Nov 2025 $31.8M 52 1.53 🟢 High
Dec 2025 $26.4M 43 1.27 Comfortable
Jan 2026 $19.6M 32 0.94 Draining
Feb 2026 $16.2M 27 0.78 Low
Mar 2026 $14.2M 23 0.69 🟠 Winter trough
Apr 2026 $37.1M 61 1.79 🟢 Property-tax peak
May 2026 $27.8M 46 1.34 Comfortable
Jun 2026 $21.4M 35 1.03 Year-end floor

¹ Seasonal index = that month's ending balance ÷ the 12-month average ($20.8M). 1.00 = an average month; 0.25 = a quarter of the average; 1.79 = nearly double.

General Fund ending cash by month — FY 2025-26 ($M) $0 $10 $20 $30 $40 ~30-day floor (covers one July payroll) Oct tax Apr tax Sep low Mar dip Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr May Jun Shaded = late-summer drawdown leg (April peak spends down to the September trough).

The August–September figures come with an asterisk that strengthens the point: those balances already include the $10 million interfund loan the district drew from its health-insurance fund in August 2025. Without it, the General Fund would have ended August and September roughly $4 million in the red. The natural, unborrowed low point of the year is deeply negative — which is exactly why the district borrows every late summer.

The flow pattern repeats (FY 2024-25)

We only have one full year of reconstructed monthly balances, but the FY25 monthly receipts and disbursements (from the Q3 report) confirm the same seasonal shape in the underlying flows — large positive months in October and April, persistent ~$5M monthly deficits in between, and a deep negative in June as the year closes:

Jul Aug Sep Oct Nov Dec Jan Feb Mar Apr May Jun
FY25 net flow ($M) −2.6 −5.5 −4.5 +30.0 −5.8 +1.7 −6.7 −6.0 −2.5 +25.4 −1.6 −22.1

The two tax months (+$30M, +$25M) and the steady between-settlement bleed are structural, not one-offs. That is what makes a baseline meaningful in the first place.

The catch: a new state law reshapes the season

This is no longer a projection. SF 2201, signed in February 2026, moves state foundation aid from monthly to quarterly payments (≈$26.5M each) beginning July 15 — replacing the old schedule of ~$10.6M monthly payments that didn't start until September. That single change rewrites the seasonality, because a large payment now refills the General Fund at the start of the fiscal year instead of leaving it starved until fall.

Re-running the model on the post-law flow vector (reconstructed from PFM's FY27 schedule, which already assumes quarterly aid; see scripts/cash_seasonality_sf2201.py) versus the FY26 pre-law baseline:

Month-end Pre-law 95% Post-law 95% Change
Jun 47 31 🟢 −17
Jul 30 15 🟢 −14
Aug 17 37 🔴 +20
Oct 62 52 🟢 −10
Nov 58 74 🔴 +16
Jan 37 18 🟢 −19
Mar 27 15 🟢 −12
Apr 61 40 🟢 −21

(Days of cash needed for a 95% chance of not running dry over the next 12 months.)

Three things change, and one doesn't:

  1. The summer crunch — the binding constraint in every number above — is relieved. The ~$26.5M July payment means June only has to bridge a few weeks, not the whole summer. June drops from ~47 to ~31 days; July from 30 to 15.
  2. The trough moves from late summer to late winter. The long dry stretch is now between quarterly payments: PFM's FY27 projection bottoms at March ($6.3M), and the months right after a payment (Aug, Nov) now behave like the old Oct/April peaks — flush, with a full quarter to fund.
  3. But the overall reserve requirement does not fall — it edges up. Replacing 9 monthly payments with 4 quarterly ones makes revenue lumpier, which increases the within-year swing. The worst-month 95% requirement actually rises 62 → 74 days. Quarterly aid helps timing (no September cliff) but hurts smoothness. The seasonality reshapes; it does not shrink — so the 60–90 day reserve target holds, arguably reinforced.

The consequence for the headline question: under the old law, the district's ~30-day June target sat below the ~47-day 95% bar — inadequate, which is why it borrowed every summer. Under SF 2201, ~30 days in June sits right at the new ~31-day bar. The law is essentially what makes the district's own June target defensible.

Two caveats on the law

Payment calendar. PFM modeled the quarters as Aug/Nov/Feb/May; the statute says "beginning July 15," which implies Jul/Oct/Jan/Apr — one month earlier. If so, summer and June improve even more and the troughs shift a month earlier. The qualitative story is identical either way.

SAVE diversion is a separate, not-yet-law risk. The proposed property-tax bill (SSB 3034, Div. IV) would accelerate diverting SAVE sales-tax revenue to property-tax relief (up to 30% by 2029). That threatens the SAVE/capital fund and bond coverage, not General Fund operating cash — but because ICCSD lends GF cash to the SAVE fund, a SAVE shortfall could raise GF cash demand. Monitor it; it is not in this model.

The pre-law transition year (FY26) for reference

Month-end FY26 ending cash FY27 ending cash What changed
Aug $6.0M $13.4M 🟢 Quarterly aid payment cushions the summer
Sep $5.1M $9.9M Less acute
Jan $19.6M $10.1M 🟠 No monthly aid; spending down
Mar $14.2M $6.3M 🔴 New annual trough (between quarterly payments)
Jun $21.4M $18.3M Year-end floor, ~30 days

Implication for your hypothesis: a single year is enough to read the mechanism, but the trough month is not stationary — SF 2201 migrates it from September toward late winter. A liquidity model has to track the payment calendar, not just the month name.

Judging a balance: the forward-drawdown test

Here is the core of your hypothesis, made precise. The right question is not "is this balance above or below the seasonal average?" It is:

Will the balance survive the largest drawdown still ahead before the next big inflow — without dropping below the operating floor?

The operating floor is roughly one month of payroll (~$16–19M) plus whatever minimum buffer the board wants; below it, the district cannot make payroll between inflows and must borrow (interfund loan or anticipatory warrant). The two drawdown "legs" that bind are:

Summer leg — April peak → late-summer troughFY26: $37.1M → $5.1M = −$32M over 5 months (≈ −$42M before the $10M loan)
Winter leg — October peak → late-winter troughFY26: $34.0M → $14.2M = −$20M over 5 months

A practical rule for any month m:

Liquidity-safe if: starting cash ≥ (worst cumulative net outflow from month m to the next major inflow) + (minimum operating floor).

The same dollar balance is therefore safe in one month and dangerous in another, because what's ahead differs:

If you're holding ~$18M (≈30 days)… …entering this month Verdict
$18M June 🟡 Adequate — only July's gap to bridge before August aid
$18M September 🟢 Comfortable — October taxes are days away
$18M December 🟠 Thin — the Jan–Mar bleed is ahead of you
$18M April (post-tax) 🔴 Alarming — you should be near $37M; the whole summer leg is ahead

That is precisely why "30 days" cannot be judged without a month attached.

So: is 30 days in June low, adequate, or high?

Adequate, but at the floor — not comfortable. Three reasons:

  1. June is the year-end handoff balance. Its only job is to carry the district through July — one payroll — until the next inflow. In the FY27 regime that next inflow is the August quarterly state-aid payment (~$26.5M), so the forward drawdown from June 30 is relatively short. The district's own advisors size the June-30 target to exactly this: PFM calls 35 days "sufficient to make July payroll," 30 days still sufficient, and 18 days "NOT sufficient to make July payroll." Thirty days sits just above the line that fails.

  2. It is the bottom of the comfortable band, not the middle. The summer leg is the binding constraint of the whole year. Going into it with 30 days leaves essentially no cushion for a bad July or a delayed payment — it works only if the next six weeks are clean.

  3. It is thin by any external yardstick. Thirty days is ~8% of annual operating spending. Rating-agency "available reserves" benchmarks for an A/A+ Iowa district sit near 17% of revenue; ICCSD's full-year reserves are already only ~9.5%. Thirty days of cash in June is consistent with a district operating with little margin — fine if managed tightly, fragile to any shock.

Bottom line: 30 days in June is a passing grade, not a strong one. The same 30 days in April would be a red flag; in September it would be reassuring.

Putting a probability on it: required cushion by month

The deterministic test above answers "what's the expected worst point." Adding the variability of the flows turns it into a probability — exactly as you'd expect. Model each forward month's net operating flow as a random draw, flow = seasonal mean (μ) + noise (σ); the cash path is then a seasonal random walk, and "running dry in the next 12 months" is the chance its running minimum falls below zero (a first-passage / ruin problem). The balance needed for confidence p is:

Required balance(month) ≈ (mean forward drawdown to the binding trough) + zp × (σ of that drawdown), with z = 1.645 (95%), 2.326 (99%), 3.090 (99.9%).

The table below is that calculation run as a 400,000-path Monte Carlo from each month-end, using the FY26 cash-basis operating flows as μ and a $2.5M/month flow volatility as the base case. It reports the days of cash on hand a balance must clear to have a given chance of not needing an emergency loan or warrant over the next 12 months. (Reproduce or re-run with your own σ: scripts/cash_seasonality_model.py.)

Balance held at end of… 50% (mean) 95% 99% 99.9% Binding trough
Jul 24 34 39 46 upcoming Sep (near)
Aug 4 22 32 43 next Sep (far)
Sep 0 23 32 43 next Sep (far)
Oct 47 69 78 88 next Sep (far)
Nov 44 64 73 83 next Sep (far)
Dec 35 55 63 72 next Sep (far)
Jan 24 42 50 59 next Sep (far)
Feb 18 36 43 51 upcoming Sep
Mar 15 31 38 46 upcoming Sep
Apr 53 67 74 82 upcoming Sep (near)
May 51 65 71 78 upcoming Sep (near)
Jun 41 52 57 64 upcoming Sep (near)

All figures are days of General Fund operating cash (≈ $610K/day). September is the universal binding trough — every starting month is ultimately tested against the late-summer low before October property taxes arrive.

Three things to read off it:

  • The low-balance months are the low-risk months. August and September need only ~22–23 days at 95% — less than June — because October's refill is imminent. The peak months (April, May, October) need the most (65–69 days) because from a peak you must self-fund the entire run down to the next trough. Required cushion tracks forward drawdown, not current level — your original point, now in numbers.
  • The near-trough rows are the trustworthy ones. April–July starts are tested against the upcoming September (1–5 months out), where the model is on solid ground. The fall/winter rows are tested against the following September (6–11 months out); because the model assumes independent monthly noise, their high-confidence numbers are inflated (real seasonal-timing noise partly reverses month to month). Treat those as upper bounds.
  • σ is the swing input. At a conservative $4M/month (consistent with the FY25-vs-FY26 summer-drawdown gap), every 95% figure rises ~10–18 days — June, for instance, goes from 52 → 62 days. The shape of the table is robust; the level moves with σ.

What this says about 30 days in June

The model puts hard numbers on the earlier verdict. To make June 30 genuinely safe without summer borrowing you'd want roughly:

~41 days
50/50 — the expected worst case (the Aug–Sep trough) just reaches $0.
~52 days
95% confidence of clearing the summer with no loan or warrant.
~64 days
99.9% — effectively never short over the next 12 months.

So 30 days in June is well below even the coin-flip (~41-day) threshold for self-funding the summer — which is exactly why the district draws an interfund loan or warrant every late summer. Thirty days isn't sized to avoid borrowing; it's sized to make July payroll and then borrow for August–September. Read against this table, ~30 days in June corresponds to a high probability of needing the summer backstop — consistent with what actually happened in FY26.

Caveats (so the table isn't over-trusted)

  • One clean year of μ, an assumed σ. FY24/FY25 audits are still open; PFM flagged even beginning cash as an "unknown variable." The means come from a single cash-basis year (partly projected) and σ is an assumption, not an estimate.
  • A moving calendar. The FY27 shift of state aid to quarterly payments relocates the trough (Sep → March); the μ vector should be re-cut for FY27+ before applying the table forward.
  • Month-end, not intra-month. The true low is mid-month (payroll before late-month receipts), so add a few days of buffer.
  • Floor = $0. If the board wants a standing minimum buffer above zero, add it to every cell.

The honest upgrade path: once three-plus years of reconciled monthly balances exist, estimate σ (and its seasonal/serial structure) from data instead of assuming it, and the same script returns calibrated probabilities rather than well-reasoned estimates.

Component refinement. A first step down that path is already in the repo: scripts/cash_seasonality_components.py replaces the single assumed σ with one built from the volatility of each flow component — letting the ~85% of the flow that is statutory/contractual (payroll, state aid, the property-tax amount) contribute almost no forecast error, and concentrating uncertainty in the lumpy "other local/federal" residual plus property-tax timing. It tightens the table by roughly 5 days (June 95%: 52 → 47 days) and is more defensible, though still bounded by the same data-quality limits.

Why the target is 60–90 days

Read across the table, the binding months — the post-tax peaks, which must self-fund the entire run down to the next trough — require ~60–76 days at 95–99% confidence. A single reserve policy has to satisfy the most demanding month, which is exactly why a healthy target lands at 60 days (minimum) to 90 days (prudent), even though ICCSD currently steers to ~20–35. A standalone, self-contained visual explainer of this — built for sharing — lives at why-cash-reserve-targets.html (generated by scripts/make_reserve_onepager.py).

Sources


Independent analysis. Not produced by ICCSD, PFM, or the Financial Oversight Committee. Built from unaudited board materials; figures will firm up as the FY24 and FY25 audits are completed. Spot a methodology issue or have a better data series? Open an issue.