Every fall Hubbard Hall mails an annual-fund appeal. Neon codes gifts to an Annual Fund Drive campaign for each drive back to FY13, which allows two measures that answer different questions and are worth keeping apart:
In the window — gifts dated October 1 through January 31 of the drive’s fiscal year, the four months after the letter mails: how the mailed appeal itself performed.
Total coded to the drive — everything ever coded to that drive’s campaign, whenever it arrived: what the drive ultimately brought in.
The fall 2025 drive’s in-window giving is examined household-by-household in Who responded to the fall 2025 appeal?; this chapter steps back to the year-by-year series. See Methodology for the clean-gift basis (business gifts coded to a drive, about $21k across all years, are excluded).
Code
import pandas as pdimport plotly.express as pxfrom hh.viz import style, BLUEfrom hh.clean.accounts import clean_accountsfrom hh.clean.donations import clean_donationsfrom hh.analytics.campaigns import annual_drive_by_yeartab = annual_drive_by_year(clean_donations(accounts=clean_accounts()))tab = tab.loc[tab.index <= pd.Timestamp.today().year] # drop the drive not yet mailed
Code
show = tab.copy()show.index = [f"FY{y -2000}"for y in show.index]show.index.name ="Drive (fiscal year)"show["gifts"] = show["gifts"].astype(int)show["households"] = show["households"].astype(int)for c in ("oct_jan", "later", "total", "median_window_gift", "top_window_gift"): show[c] = show[c].map("${:,.0f}".format)show = show.rename(columns={"oct_jan": "in window (Oct–Jan)", "later": "later, still coded","total": "total coded", "median_window_gift": "median in-window gift","top_window_gift": "largest in-window gift"})show
Table 8.1
gifts
households
in window (Oct–Jan)
later, still coded
total coded
median in-window gift
largest in-window gift
Drive (fiscal year)
FY12
116
111
$20,560
$2,598
$23,158
$75
$2,500
FY13
108
104
$31,430
$5,815
$37,245
$100
$15,000
FY14
157
154
$28,172
$17,025
$45,197
$100
$2,500
FY15
229
183
$24,067
$39,191
$63,258
$100
$1,450
FY16
275
235
$23,164
$40,372
$63,536
$70
$1,500
FY17
236
205
$18,850
$48,015
$66,865
$100
$1,600
FY18
222
194
$37,765
$29,155
$66,920
$100
$10,000
FY19
178
162
$22,360
$26,815
$49,175
$100
$2,000
FY20
131
127
$33,975
$14,550
$48,525
$100
$15,000
FY21
216
209
$41,929
$20,178
$62,107
$100
$5,000
FY22
164
161
$38,971
$19,954
$58,925
$100
$5,000
FY23
140
131
$23,753
$21,953
$45,706
$100
$5,000
FY24
189
167
$29,375
$29,380
$58,755
$100
$4,000
FY25
116
110
$37,238
$8,220
$45,458
$100
$5,000
FY26
172
159
$37,580
$25,199
$62,779
$100
$5,000
Code
long= tab.reset_index().melt(id_vars="drive", value_vars=["oct_jan", "later"], var_name="When", value_name="Dollars")long["FY"] =long["drive"].map(lambda y: f"FY{y -2000}")long["When"] =long["When"].map({"oct_jan": "In window (Oct–Jan)","later": "Later, still coded to the drive"})fig = px.bar(long, x="FY", y="Dollars", color="When", color_discrete_sequence=[BLUE, "#b3cde3"])style(fig).show()
Figure 8.1
What the series shows:
The window measure is steadier and recently stronger. In-window giving averaged about $25,796 across the fall 2012-2019 drives and $34,689 across fall 2020-2025, on household counts that barely moved. The best window on record is the fall 2020 pandemic drive ($41,929 from 209 households, with a largest gift of only $5,000).
The gap between the two measures is concentrated, not diffuse. In most years a single recurring five-figure gift arrives just after the window closes, and mid-decade drives carry sizable later-coded tails (spring gifts carrying the campaign label), so total-coded exceeds the window by anywhere from under ten percent to a factor of three.
The typical gift has not changed. The median in-window gift sits between $70 and $100 in every drive on record.
A separate Summer-Fall 2022 matching campaign (about $28k, FY23) ran alongside that year’s drive and is not included in these figures.