When a hurricane takes out a county's roads, a flood drowns a town's water treatment plant, or a wildfire burns through a school, the bill for putting the public infrastructure back is rarely paid by the locality alone. After a presidential disaster declaration, the federal government covers most of it through the Public Assistance program—the single largest disaster-recovery grant in the United States. FEMA records the funded recovery work as summaries: roughly 195,000 of them, each keyed to a disaster number and an applicant, each carrying the dollar amount obligated and the type of incident it followed—the spending counterpart to the bare fact that a disaster was declared.
This article covers what the Public Assistance project-summaries dataset is and how the Stafford Act frames it; the difference between FEMA's national role and the state, tribal, and local governments that actually do the rebuilding; the declaration process that switches the program on and the Disaster Relief Fund that pays for it; the work categories—emergency work (debris removal and emergency protective measures) and permanent work (roads, water-control facilities, buildings, utilities, and parks)—that organize every project; the cost-share that determines how much of each project the federal government covers; how the project summaries join to the disaster-declarations record by disaster number; a Python workflow that pulls funded-project summaries from the OpenFEMA API, sums obligated dollars by disaster, and ranks disasters by total PA funding; and the caveats—obligation is not final cost, the data lags recovery, and a project summary compresses a complex grant—that every analyst must internalize before drawing conclusions about how relief money is spent.
What the dataset is
The Public Assistance program is FEMA's mechanism for reimbursing the repair, restoration, and replacement of public infrastructure damaged by a declared disaster, along with the immediate costs of cleaning up and protecting the public in the disaster's aftermath. Eligible recipients are state, tribal, territorial, and local governments, plus certain private nonprofit organizations that provide essential government-like services—hospitals, utilities, schools, and the like. The funded recovery work—clearing the debris from a county's roads, repairing a damaged bridge, replacing a flooded pumping station—is processed as projects, and FEMA publishes the rolled-up record as funded-project summaries. Through OpenFEMA, the Public Assistance Funded Projects Summaries record comprises roughly 195,000 summary rows.
In our database this record is stored as the table fema_pa_summaries, with the grain of one row per disaster-and-applicant: a single disaster generates many rows—one for each applicant that carried out funded work—and each row rolls up the count of that applicant's projects and the federal dollars obligated to them. The columns capture which disaster the work belongs to, what kind of incident it was, where the applicant is, who the applicant was, how many projects were rolled in, and how much federal money was obligated:
disaster_number -- the disaster this work belongs to (joins declarations)
declaration_date -- date the disaster was declared
incident_type -- hurricane, flood, severe storm, wildfire, etc.
state -- full state / territory name (e.g. "Louisiana")
county -- county or place of the applicant
applicant_name -- the subrecipient: a county, city, district, or nonprofit
education_applicant -- flag for school / education-sector applicants
number_of_projects -- count of funded projects rolled into the summary row
federal_obligated_amount -- the federal dollars FEMA has obligated to the work
last_refresh -- date the OpenFEMA record was last updatedThe disaster_number is the load-bearing column. It is the persistent identifier FEMA assigns to each declared disaster, and it is the key that ties funded work back to the declaration that authorized it—the same number that appears in the disaster-declarations dataset, making the two records directly joinable. The federal_obligated_amount is the dollar figure that drives every spending analysis—but, as the caveats section will stress, an obligation is a commitment of funds, not a final paid-out cost, and the figure can move as projects are reconciled. The incident_type travels with each row, so spending can be sliced by hurricane, flood, or wildfire without leaving the dataset. One thing the summaries do not carry is the work category (the A–G code): that lives in the separate Public Assistance Funded Projects Details dataset, one row per project. Together the summary columns turn the dataset from a list of disasters into a ledger of recovery: not merely that a disaster happened, but what was rebuilt, by whom, and at what federal cost.
What it is and the Stafford Act regulatory frame
Public Assistance is authorized by the Robert T. Stafford Disaster Relief and Emergency Assistance Act, the 1988 statute—itself a renaming and expansion of the Disaster Relief Act of 1974—that governs the entire federal disaster-response framework. The Stafford Act establishes the legal machinery by which a state or tribe asks the President to declare a disaster, by which the President does so, and by which federal assistance then flows. It is the same statute that authorizes Individual Assistance (aid to households and individuals) and the Hazard Mitigation Grant Program; Public Assistance is the part of the Stafford Act framework directed at the public sector's recovery—the governments and nonprofits whose infrastructure serves the community.
The program runs on a grant model, and the modern terminology is precise about who is who. FEMA makes the federal grant to a recipient—ordinarily the state, tribal, or territorial government, acting as grantee—which in turn distributes the funds to the subrecipients: the individual counties, cities, special districts, and eligible nonprofits that actually own the damaged infrastructure and do the work. The applicant named in each project summary is one of these subrecipients. The recipient administers the program on the ground, conducts the eligibility reviews alongside FEMA, and is the conduit through which both the money and the federal oversight flow. This is why the dataset is organized by state and applicant: the federal record is an aggregation of recovery work performed by thousands of local governments, channeled through dozens of state and territorial recipients, under FEMA's national rules.
The rules themselves are detailed and consequential. FEMA publishes a Public Assistance Program and Policy Guide that governs what is eligible: an item of work must be the direct result of the declared incident, located within the designated disaster area, and the legal responsibility of an eligible applicant. Repairs must generally restore a facility to its pre-disaster design, function, and capacity, in accordance with applicable codes and standards—not gold-plate it—though the program also funds cost-effective hazard mitigation to reduce the risk of future damage to the same facility. These eligibility rules are the reason a project summary is not simply a bill the locality submitted; it is the residue of a structured federal-state determination of what the disaster actually damaged and what it costs to put right.
The declaration process and the Disaster Relief Fund
Public Assistance does not exist in the absence of a declaration—the declaration is the switch that turns the program on for a given event, which is why every project summary carries a disaster number. The process begins when an incident overwhelms state and local capacity. The governor (or tribal chief executive) requests that the President declare a major disaster, typically after a joint preliminary damage assessment by FEMA, the state, and local officials has estimated the scale of the damage. If the President grants the request under the Stafford Act, the declaration designates which counties are eligible and which categories of assistance are authorized.
The declaration type matters. A major disaster declaration (DR) is the broad authority that unlocks the full Public Assistance program, including permanent work. An emergency declaration (EM) is a narrower, often faster authority for emergency protective measures and is generally capped, used when federal help is needed to save lives and protect property but the full reconstruction apparatus is not (or not yet) warranted. A fire management assistance declaration (FM) covers the costs of fighting wildfires that threaten to become major disasters. Because the authority differs, so does the mix of work a declaration funds: an EM event will be dominated by emergency work, while a DR event for a major hurricane will fund the full sweep of permanent reconstruction.
All of this is paid from the Disaster Relief Fund (DRF), the appropriated account FEMA draws on for disaster assistance. The DRF is the federal pocketbook for Public Assistance, Individual Assistance, and mitigation, and its balance is a recurring subject of congressional attention: in a heavy disaster year the fund can be drawn down to the point that FEMA invokes immediate-needs funding, temporarily deferring longer-term recovery obligations to preserve cash for life-saving work, until Congress replenishes the account with a supplemental appropriation. Understanding that PA obligations are claims against this single, shared, periodically replenished fund is essential context for reading the spending data: the dollar figures in the summaries are draws on a budget that is itself a political and fiscal object, not an unlimited entitlement.
The work categories: emergency work and permanent work
The most important structure inside the Public Assistance program is the category of work. FEMA divides all Public Assistance into two broad classes—emergency work and permanent work—and within them into seven lettered categories, A through G. The summaries dataset rolls projects up above this level, so the category code itself lives in the project-level Details dataset; but the categories are the vocabulary every PA analysis ultimately turns on, because the category is what tells you not just how much was spent but what the money did.
Emergency work covers the immediate response and cleanup, and it comprises two categories. Category A—debris removal pays for clearing and disposing of the trees, wreckage, sediment, and rubble a disaster leaves behind, work that after a major hurricane can run into the hundreds of millions of dollars and is frequently the single largest line of early spending. Category B—emergency protective measures pays for the actions taken before, during, and immediately after the incident to save lives and protect public health and property: evacuations, emergency operations centers, sandbagging, emergency sheltering, and—as the COVID-19 disaster declarations demonstrated at unprecedented scale—the costs of an emergency response that need not involve any physical infrastructure at all. Emergency work is, by design, fast and front-loaded: it appears in the data soonest after a declaration.
Permanent work is the reconstruction—the durable repair or replacement of damaged public facilities—and it spans five categories. Category C—roads and bridges covers the repair of the surface transportation network: roadbeds, shoulders, culverts, and bridge structures. Category D—water-control facilitiescovers dams, levees, flood-control channels, and irrigation works. Category E—public buildings and equipmentcovers government buildings, schools, and their contents and equipment, from a flooded city hall to a damaged fleet of vehicles. Category F—public utilities covers water treatment and distribution, sewage and wastewater systems, and power generation and distribution—the lifeline systems whose loss a community feels most acutely. Category G—parks, recreational, and other facilities is the catch-all for parks, playgrounds, and any eligible facility that does not fit the prior categories. Permanent work unfolds over months and years, so it accumulates in the data long after the disaster itself has left the news; the balance between emergency and permanent dollars for a given disaster is itself a signal of how far along its recovery has progressed.
The cost-share and what the federal dollars represent
Public Assistance is a cost-shared program, and the cost-share is the reason the dataset's dollar columns require careful reading. FEMA does not pay the full cost of recovery; it pays the federal share, and the non-federal share is borne by the recipient and subrecipients—the state and local governments. For most declared disasters the federal share is at least 75 percent of eligible costs, with the remaining 25 percent or less falling on the non-federal side. The federal_obligated_amount column therefore captures FEMA's portion, not the total cost of the work; the full project cost is larger by the non-federal share.
The 75-percent figure is a floor, not a ceiling. For catastrophic events, the President can authorize a higher federal share—commonly 90 percent, and in extraordinary circumstances 100 percent for a defined period of emergency work—when the magnitude of the damage relative to the affected jurisdictions' resources warrants it. The nationwide COVID-19 declarations, for instance, were authorized at a 100-percent federal share for substantial periods. Because the cost-share can vary by disaster and even by category and time window within a disaster, the ratio between the federal share and the total project cost is not constant across the dataset, and any analysis that infers total recovery cost from the federal share by applying a flat multiplier will be wrong in exactly the catastrophic cases that matter most.
There is one more wrinkle that shapes how dollars appear and accumulate: the distinction between estimated and actual cost, embodied in FEMA's shift to alternative procedures for large projects. Under the traditional model, a large project was funded on an estimate and then reconciled to actual cost when the work was done—so its obligated figure could change substantially. Under the alternative procedures introduced after Hurricane Sandy, applicants can accept a fixed-cost estimate for a large permanent-work project and keep any savings (or absorb any overrun), which freezes the obligation earlier and changes how the number behaves over time. Knowing which regime a project falls under is part of interpreting whether its obligated amount is a moving estimate or a settled figure.
Joining to the disaster-declarations record
The project summaries are most valuable not in isolation but joined to the rest of the disaster record, and the disaster_number is the universal join key that makes the integration possible. The primary and most important join is to the disaster-declarations dataset.
The declarations record holds one row per declared disaster (or, more precisely, per declared area within a disaster), with the disaster number, the declaration date, the incident type, the incident begin and end dates, the declaration type, and the designated counties. It is the “a disaster happened” half of the story. The PA summaries are the “and this is what was rebuilt and at what cost” half. The summaries already carry the incident type and declaration date inline, but joining to the declarations record by disaster number enriches the picture with the declaration type, the incident window, and the full set of designated areas—so that an analyst can say not merely that a county received funding but that it received it in a specific named storm declared on a specific date. With the declarations join, every project is anchored to a dated, typed, geographically scoped event.
That join unlocks the questions the dataset exists to answer. It lets an analyst rank disasters by total PA funding and see which events—the major hurricanes, the catastrophic floods, the nationwide pandemic response—dominate the recovery ledger. It lets the spending be sliced by incident type, comparing the recovery cost profile of hurricanes against wildfires against severe storms. And, because both records carry geography, it supports the recovery-equity analysis that is the dataset's most socially important use: combining the dollars obligated to a place with that place's population and demographics to ask whether recovery funding reaches the communities that need it, and how quickly—a question that the long, slow, documentation-heavy permanent-work process makes genuinely consequential, because the communities least equipped to navigate the federal grant process are often the ones whose recovery lags longest.
Analytical uses
A national, disaster-resolved record of recovery obligations supports a distinctive set of analyses that the declarations data alone cannot.
Ranking disasters by total PA funding is the most immediate use. Summing the federal share obligated by disaster number and ordering the result identifies the costliest recovery events on the federal ledger and shows how concentrated disaster spending is—a small number of catastrophic events typically accounting for a large fraction of all Public Assistance dollars. Joined to the declarations record, the ranking carries the names and dates that make it legible.
Spending mix by incident type exploits the incident type that travels with every summary row. Aggregating obligations by incident type reveals how the recovery burden splits across hurricanes, floods, severe storms, wildfires, and other hazards, and how sharply a wildfire's spending profile differs from a flood's, or a hurricane's from a pandemic's. For the finer-grained breakdown by work category—debris removal versus emergency protective measures versus the lines of permanent reconstruction—an analyst drops down to the project-level Details dataset, which carries the A–G code.
Cost tracking and oversight is the dataset's accountability role: because each summary ties an obligation to a named applicant in a named place for a specific disaster, the data is the raw material for asking where relief dollars flow, whether obligations are reasonable relative to damage, and how the recovery burden is distributed across jurisdictions. Finally, recovery-equity analysis brings geography and demographics to bear—combining obligations with the population and characteristics of the places that received them to surface whether the communities most exposed to disaster are receiving recovery funding commensurate with their need, the question an accountability-minded view of disaster policy must ultimately confront.
Python workflow: project summaries from the OpenFEMA API
The script below pulls Public Assistance funded-project summaries for a state from the OpenFEMA REST API and computes two of the core metrics: total PA dollars by disaster (ranking the costliest recovery events and labeling them with the incident type that travels with each row) and the spending mix by incident type (what share of the federal obligation followed each kind of hazard). No API key is required for public data. Note that in this dataset the state field is the full state name, not the two-letter code, so the example filters on "Louisiana" rather than "LA". Because OpenFEMA field names can vary between dataset versions, the script probes for the working column names at runtime rather than hard-coding them; any production use should be validated against the current OpenFEMA data dictionary and should page through the full result set for large states and territories.
import requests, pandas as pd
# OpenFEMA REST API -- no API key required for public data.
# The Public Assistance Funded Projects Summaries dataset holds one row per
# disaster-and-applicant, keyed by disasterNumber and applicantName, carrying
# the incident type and the federal dollars obligated. The work-category
# (A-G) breakdown is NOT in this summaries dataset -- it lives in the separate
# PublicAssistanceFundedProjectsDetails dataset.
# NOTE: in this dataset the "state" field is the FULL state name
# (e.g. "Louisiana"), not the two-letter code.
BASE = "https://www.fema.gov/api/open"
SUMMARIES = f"{BASE}/v1/PublicAssistanceFundedProjectsSummaries"
def fetch_all(url, params=None, page=10000):
# OpenFEMA pages with $skip / $top; loop until a short page comes back.
params = dict(params or {})
params["$top"] = page
out, skip = [], 0
while True:
params["$skip"] = skip
r = requests.get(url, params=params, timeout=120)
r.raise_for_status()
body = r.json()
# The records live under a key named for the entity; grab the list.
key = next(k for k, v in body.items() if isinstance(v, list))
rows = body[key]
if not rows:
break
out.extend(rows)
if len(rows) < page:
break
skip += page
return out
def _col(df, *names):
# Return the first column present from a list of candidate names.
for n in names:
if n in df.columns:
return n
return None
def rank_disasters_by_pa(state, top_n=10):
# state must be the full name, e.g. "Louisiana", "Florida", "Puerto Rico".
summ = pd.DataFrame(fetch_all(SUMMARIES, {"$filter": f"state eq '{state}'"}))
if summ.empty:
print(f"No PA summaries returned for {state!r} "
f"(remember: use the full state name, not the 2-letter code).")
return
dnum = _col(summ, "disasterNumber")
fed = _col(summ, "federalObligatedAmount", "federalShareObligated")
summ[fed] = pd.to_numeric(summ[fed], errors="coerce").fillna(0)
# --- Total PA dollars by disaster ------------------------------------
by_disaster = summ.groupby(dnum)[fed].sum().sort_values(ascending=False)
print(f"{state}: ${by_disaster.sum():,.0f} obligated across "
f"{summ[dnum].nunique():,} disasters, "
f"{len(summ):,} summary rows")
# The incident type travels with each summary row, so we can label a
# disaster without a separate declarations call.
inc = _col(summ, "incidentType")
labels = {}
if inc:
labels = (summ.dropna(subset=[dnum])
.drop_duplicates(dnum)
.set_index(dnum)[inc].to_dict())
print(f" Top {top_n} disasters by PA funding:")
for dn, amt in by_disaster.head(top_n).items():
print(f" DR-{dn} ${amt:>14,.0f} {labels.get(dn, '')}")
# --- Spending mix by incident type -----------------------------------
# (Work-category A-G is not in the summaries dataset; for that, pull
# PublicAssistanceFundedProjectsDetails and group by its category field.)
if inc:
by_inc = summ.groupby(inc)[fed].sum().sort_values(ascending=False)
share = by_inc / by_inc.sum()
print(" Federal share obligated by incident type:")
for c, frac in share.items():
print(f" {str(c):<28} {frac:6.1%}")
return by_disaster
rank_disasters_by_pa("Louisiana")
# rank_disasters_by_pa("Florida"); rank_disasters_by_pa("Puerto Rico")
Two practical notes apply. First, the dollar figures the script sums are obligations, not final disbursements, and they are a point-in-time snapshot: for an active or recent disaster the totals will rise as more projects are formulated and obligated, so a ranking built today will look different from one built a year from now, and the most recent disasters will be systematically understated. Comparisons are most reliable across older, substantially closed-out disasters. Second, for national-scale work—ranking every disaster across every state, building the full geography-joined equity analysis, or breaking spending down by the A–G work category in the Details dataset—OpenFEMA's bulk data downloads (the full CSV and Parquet extracts of each dataset) are far more efficient than tens of thousands of paginated API calls and ship with the authoritative, version-stamped field definitions for the release.
Limitations and analytical caveats
The Public Assistance funded-projects record is the most comprehensive public account of how federal disaster-recovery money is spent, but it carries structural limitations that an analyst must internalize before drawing conclusions from it.
Obligation is not final cost. The dollar columns record what FEMA has obligated—committed—to a project, which is distinct from what has ultimately been paid out, and distinct again from the project's true final cost after closeout. For traditionally funded large projects the obligated figure begins as an estimate and is reconciled to actual cost when the work is finished, so it can rise or fall—sometimes substantially—over the life of the grant. Treating an obligation figure as a settled expenditure, or summing obligations across disasters in different stages of completion as if they were comparable final costs, over-reads what the number means.
The data lags recovery, and recent disasters are understated. Permanent work—the bulk of the dollars for a major disaster—is formulated and obligated over months and years, not days. A project does not appear with its full obligation until it has been scoped, costed, reviewed, and obligated, so the most recent disasters are systematically under-represented and the emergency-work spending dominates the early picture of any event. Any snapshot of the dataset is a leading edge that has not yet caught up to the real recovery; it is authoritative for older, closed-out events and provisional for new ones.
A project summary compresses a complex grant, and the federal share is not the whole story. Each summary rolls up what may be many underlying projects into a single applicant-level figure, discarding the project-by-project detail—the specific facilities, the scopes of work, the work category, the mitigation measures—that lives in the project-level Details dataset and the full grant records. And because the program is cost-shared, the federal-share column omits the non-federal 25 percent (or more) that state and local governments contribute; the dataset is a record of the federal portion of recovery, not of its total cost, and the cost-share ratio varies by disaster. An analysis that reads the federal share as the full cost of recovery, or that treats an applicant-level summary as if it described a single discrete project, mistakes a deliberately aggregated administrative record for a complete accounting.
Held with these caveats in mind, the fema_pa_summaries table is a uniquely valuable resource: a disaster-resolved, applicant-named record of the federal dollars committed to putting public infrastructure back after the country's worst storms, floods, and fires—the spending half of the disaster record, the answer to what was rebuilt and at what cost once the declaration that named the catastrophe had been signed.
Related writing
FEMA Disaster Declarations: The Federal Database Behind 70 Years of US Natural Disasters — The declarations record is the indispensable companion to the funded-projects summaries: it supplies the disaster number, date, incident type, and geography that every PA obligation joins to, turning a bare dollar figure into recovery spending anchored to a named, dated, scoped event.
NOAA Storm Events Database: The Federal Record Behind 50 Years of US Weather Disasters — The storm-events record documents the physical hazards—the hurricanes, floods, and severe storms—that precede the declarations and the recovery spending, letting an analyst connect the meteorological event to the public-infrastructure damage the Public Assistance program then pays to repair.
USASpending Contracts: The Federal Record of Every Dollar the Government Buys — Disaster-recovery dollars also flow through federal contracts for debris-removal crews, emergency supplies, and reconstruction, and the contract record offers a second, complementary vantage on how relief money is spent alongside the grant obligations captured in the PA summaries.