FSA Annual County Eligibility Data from the Livestock Forage Disaster Program, 2008–2025
This repository is an archive of the annual county-level eligibility data for the Livestock Forage Disaster Program (LFP).
The data in this repository were acquired via FOIA requests
2025-FSA-04690-F, 2025-FSA-08422-F, and 2026-FSA-02433-F by
R. Kyle Bocinsky (Montana Climate Office). This replaces previously
filed and fulfilled FOIA response covering 2012–2022
(2023-FSA-00937-F). All FOIA responses, including the original Excel
workbooks, are archived in the foia directory.
🗂️ Contents
foia/2026-FSA-02433-F Bocinsky.zip— 2025 eligibility datafoia/2025-FSA-08422-F Bocinsky.zip— 2012 through July 2025 eligibility datafoia/2025-FSA-04690-F Bocinsky.zip— 2008 through 2024 eligibility data (incomplete)foia/2023-FSA-00937-F Bocinsky.zip— previous FOIA data and correspondence (archived)fsa-lfp-eligibility.csv— cleaned and consolidated data, one record per FSA county, program year, pasture type, and disaster typefsa-lfp-eligibility.parquet— the same records as Parquetfsa-lfp-eligibility-events.csv— the same determinations reshaped long, one record per qualifying drought eventfsa-lfp-eligibility-events.parquet— the same event records as Parquetqa-report.txt— QA summary and flagged records for the published datafsa-lfp-eligibility.R— processing scriptfsa-lfp-eligibility.qmd— Quarto dashboard sourcefsa-lfp-eligibility.html— interactive summary dashboard_manifest.txt— flat index of every file in the S3-hosted mirror
☁️ Archive Hosting & Automated Publishing
The consolidated data (fsa-lfp-eligibility.csv and
fsa-lfp-eligibility.parquet), the event-grain projection of it
(fsa-lfp-eligibility-events.csv and
fsa-lfp-eligibility-events.parquet), the QA report (qa-report.txt),
the assets/ directory the dashboard reads from, and the foia/
correspondence are all mirrored to S3, served via CloudFront at
https://data.sustainable-fsa.com/fsa-lfp-eligibility/ (browse the
archive listing
or
_manifest.txt
for a flat index). The interactive dashboard itself is served
separately, via GitHub Pages at
https://sustainable-fsa.com/fsa-lfp-eligibility/.
Publishing is handled by
fsa-lfp-eligibility.R via the shared
R/s3-archive.R helpers, and runs automatically in
GitHub Actions
(.github/workflows/fsa-lfp-eligibility.yaml)
whenever the script, dashboard, or workflow changes, or on manual
dispatch. The workflow authenticates to AWS via GitHub OIDC (no
long-lived credentials stored in the repo), re-renders the README and
dashboard, and commits them back to git only if the rendered output
changed.
📥 Input Data: FOIA Excel Workbooks
Three FOIA responses, each delivering one Microsoft Excel workbook per program year. 2025-FSA-08422-F and 2026-FSA-02433-F cover 2012 through 2025 with the full set of variables. 2025-FSA-04690-F covers 2008 through 2024 but omits most of them, and supplies the only records for 2008 through 2011.
Column names and layouts vary by year.
fsa-lfp-eligibility.R harmonizes them and
de-duplicates across the overlapping responses, keeping the most
recently dated file’s version of each determination.
📤 Output Data
The archive is published as
fsa-lfp-eligibility.csv
and
fsa-lfp-eligibility.parquet.
The archive is published in both formats with identical records. The
Parquet carries column types; the CSV does not, so the zero-padded FSA
and FIPS codes must be read as character or they lose their leading
zeros.
readr::read_csv(URL, col_types = readr::cols(FIPS = "c", `FSA County` = "c"))
Each record is one eligibility determination, keyed on FSA county,
program year, pasture type and disaster type. D3A END and D4A END
are empty in every record, so a CSV reader takes them for logical rather
than date columns.
Variables in Output
| Variable Name | Description |
|---|---|
FIPS State Code |
A two-digit FIPS state code |
FIPS County Code |
A three-digit FIPS county code |
FIPS State Name |
U.S. state |
FIPS County Name |
County or county-equivalent name |
FSA State Code |
A two-digit FSA state code (not always FIPS) |
FSA County Code |
A three-digit FSA county code (not always FIPS) |
FSA County Name |
FSA county (service area) name, as reported by FSA |
Program Year |
Year the data applies to |
Pasture Type |
Pasture classification (e.g., Native, Improved) |
Disaster Type |
Type of disaster (e.g., Drought, Fire) |
D2 START DATE:D4B END |
Start and end dates for qualifying drought events |
Date of Qualifying Drought |
Start date of qualifying disaster |
Drought Factor |
Qualifying payments given the drought severity |
Grazing Period Start Date |
Start date of grazing period for the pasture type |
Grazing Period End Date |
End date of grazing period for the pasture type |
Maximum Eligible Payment Months |
Duration of grazing period, in months |
Payment Factor |
Number of eligible payments |
Note (FOIA 2025-FSA-04690-F Bocinsky) |
for 2008 through 2011, the qualifying drought type |
🌵 Drought tiers and payment ladders
LFP pays for grazing losses when the US Drought Monitor rates a county at a qualifying intensity during the normal grazing period for that pasture type. The tiers, and the monthly payments they earn, have changed twice.
2008 Farm Bill — program years 2008–2011
| Monthly payments | Qualifying drought event |
|---|---|
| 1 | D2 for at least 8 consecutive weeks |
| 2 | D3 at any time |
| 3 | D3 for at least 4 weeks, or D4 at any time |
2014 Farm Bill — program years 2012–2025
| Monthly payments | Qualifying drought event |
|---|---|
| 1 | D2 for at least 8 consecutive weeks |
| 3 | D3 at any time |
| 4 | D3 for at least 4 weeks, or D4 at any time |
| 5 | D4 for at least 4 weeks |
P.L. 119-21 — program years 2026 onward
| Monthly payments | Qualifying drought event |
|---|---|
| 1 | D2 for at least 4 consecutive weeks |
| 2 | D2 for at least 7 of the previous 8 consecutive weeks |
| 3 | D3 at any time |
| 4 | D3 for at least 4 weeks, or D4 at any time |
| 5 | D4 for at least 4 weeks |
Section 10401(b) of P.L. 119-21 (July 4, 2025) split the D2 tier, amending 7 U.S.C. 9081(c)(3)(D)(ii)(I). The 4-week and 4-consecutive-week distinctions are as written: the D2 tiers require consecutive weeks, the D3 and D4 4-week tiers do not.
The event codes used across these archives are D2, D3a, D3b, D4a
and D4b, and from 2026 D2a_2026 and D2b_2026 in place of D2. The
a tiers trigger at any time; the b tiers require a duration.
Which date qualifies a tier
D2, D2A, D2B, D3B and D4B require a duration, and are
satisfied on the last day of the qualifying window — their END. D3A
and D4A trigger at any time, carry no END value, and are satisfied
on their START.
| Event | Source column |
|---|---|
D2 |
D2 END |
D2a_2026 |
D2A END |
D2b_2026 |
D2B END |
D3a |
D3A START DATE |
D3b |
D3B END |
D4a |
D4A START DATE |
D4b |
D4B END |
FSA reports each B-tier START as a copy of its A-tier counterpart, so
a START-keyed reshape of the wide table double-counts D3 and D4.
Program years 2008–2011
Those years came from a different FOIA response and carry no tier
columns, no grazing dates and no Maximum Eligible Payment Months. The
tier survives in Note, which does not distinguish the A and B
sub-tiers, but Payment Factor does: the 2008 ladder pays 2 for D3 at
any time and 3 for D3 over at least four weeks.
Note |
Payment Factor |
Event |
|---|---|---|
D2 |
1 | D2 |
D3 |
2 | D3a |
D3 |
3 | D3b |
D4 |
3 | D4a |
There is no D4b tier in that era. The split assumes Payment Factor
is uncapped for those years; the cap’s inputs are absent so it cannot be
recomputed to check, and no record shows it binding.
Date of Qualifying Drought, the only date reported for the era,
records when the drought began rather than when a tier was satisfied.
For D3a and D4a those coincide and the date is used. For D2 and
D3b they do not, and no satisfaction date is recoverable, so
Qualifying Date is NA.
fsa-lfp-eligibility-web
reports these tier dates directly; prefer it before 2012.
🔄 Output Data: Event Grain
fsa-lfp-eligibility-events.csv
and
fsa-lfp-eligibility-events.parquet
reshape the wide table long.
One record per Census county, FSA county, program year, pasture type, and qualifying drought event. A county whose drought deepened through the season carries several records, one for each tier as it was reached.
| Variable | Description |
|---|---|
FIPS |
Census county, five-digit state + county FIPS code |
FSA County |
FSA county, five-digit FSA state + county code |
Program Year |
LFP program year |
Pasture Type |
Pasture classification, as FSA reports it |
Qualifying Drought Event |
The tier reached |
Qualifying Date |
The date the tier was satisfied |
Drought Factor |
Monthly payments the event earns |
Maximum Eligible Payment Months |
FSA’s cap, from the length of the grazing period |
Payment Factor |
FSA’s payable months |
Drought Factor is derived from the ladder in force, not copied from
the record-level column of the same name, which reports only the tier
that set the award. Maximum Eligible Payment Months and
Payment Factor are FSA’s own, repeated on each event of a
determination.
Drought Factor, Payment Factor and the cap
Drought Factor is the monthly payments a tier earns under the ladder
in force. Maximum Eligible Payment Months is FSA’s cap, a function of
the length of the grazing period. Payment Factor is the payable
figure, min(Drought Factor, Maximum Eligible Payment Months).
From program year 2026 FSA reports Drought Factor as 1 for both D2
sub-tiers, carrying the two-payment outcome in Payment Factor alone.
These archives score D2b_2026 as 2, so compare Payment Factor rather
than Drought Factor when checking 2026 against FSA.
The events file does not round-trip to the wide file: determinations
with no qualifying tier yield no event, and some 2008–2011 events have
no date.
qa-report.txt
reconciles the two by program year.
🗺️ Two county keys
An LFP determination needs two counties. The normal grazing period is set per FSA county — the administrative unit, established through NAP and the National Crop Table (1-LFP Amend. 7, par. 27). Eligibility then triggers on drought “in any area of the county” as a Census county, the unit the US Drought Monitor is aggregated to (par. 23).
The two do not nest, in either direction. One FSA county may cover several Census counties, most widely in Puerto Rico and Alaska, and in the Virginia county-plus-independent-city pairs. Several FSA counties may fall inside one Census county, where FSA splits a county administratively and each office sets its own grazing period: Aroostook ME, Custer ID, Pottawattamie IA, Otter Tail MN, Polk MN, St. Louis MN, Nye NV, Lucas OH and Galax VA.
Records are therefore keyed on both counties and never combined.
Reducing to a single county grain is the consumer’s choice;
qa-report.txt lists the records it affects. The FSA-to-Census
crosswalk is published in
fsa-counties-dd17 and
fsa-counties-dd22.
Comparing against the derived archive
official <-
arrow::read_parquet(
"https://data.sustainable-fsa.com/fsa-lfp-eligibility/fsa-lfp-eligibility-events.parquet"
) |>
dplyr::mutate(source = "fsa-published")
derived <-
arrow::read_parquet(
"https://data.sustainable-fsa.com/fsa-lfp-eligibility-derived/fsa-lfp-eligibility-derived.parquet"
) |>
dplyr::mutate(dplyr::across(c(source, `Pasture Type`,
`Qualifying Drought Event`), as.character))
dplyr::bind_rows(official, derived)
The derived archive stores source, Pasture Type and
Qualifying Drought Event as factors; this archive uses character
throughout. bind_rows() reconciles that on its own, and the
as.character() above only keeps the levels from surprising you
downstream.
Two schema differences to expect. The derived archive carries source,
naming which of four county aggregations produced the record, where FSA
has one determination. And it carries neither
Maximum Eligible Payment Months nor Payment Factor, so those come
back NA for the derived rows.
📊 Demonstration Dashboard
The Quarto dashboard
fsa-lfp-eligibility.qmd provides:
- An interactive viewer to explore LFP Eligibility by county, year, disaster, and pasture type
- A tool for researchers and policymakers to assess temporal trends
Access a full-screen version of the dashboard at:
https://sustainable-fsa.com/fsa-lfp-eligibility/fsa-lfp-eligibility.html
📍 Quick Start: Visualize a FSA LFP Eligibility Map in R
This snippet shows how to load the FSA LFP Eligibility file from the
archive and create a simple map using sf and ggplot2.
# Load required libraries
library(sf)
library(ggplot2) # For plotting
library(tigris) # For state boundaries
library(rmapshaper) # For innerlines function
## Get the LFP Eligibility data
eligibility <-
readr::read_csv("fsa-lfp-eligibility.csv")
counties <-
tigris::counties(cb = TRUE,
resolution = "5m",
progress_bar = FALSE) |>
dplyr::filter(
!(STATE_NAME %in% c("Guam",
"American Samoa",
"United States Virgin Islands",
"Commonwealth of the Northern Mariana Islands"))
) |>
sf::st_cast("POLYGON", warn = FALSE, do_split = TRUE) |>
tigris::shift_geometry() |>
dplyr::group_by(STATEFP, COUNTYFP) |>
dplyr::summarise(.groups = "drop") |>
sf::st_cast("MULTIPOLYGON")
## Calculate the 2025 LFP Eligibility for Native Pasture, and
## combine with the county data
eligibility_counties <-
eligibility |>
dplyr::filter(`Pasture Type` == "Native Pasture",
`Program Year` == 2025) |>
dplyr::transmute(
id = paste0(`FIPS State Code`, `FIPS County Code`),
`Payment Factor` = factor(`Payment Factor`,
levels = 1:5,
ordered = TRUE)
) |>
dplyr::left_join(
counties |>
dplyr::transmute(id = paste0(STATEFP, COUNTYFP))
) |>
sf::st_as_sf()
# Plot the map
ggplot(counties) +
geom_sf(data = sf::st_union(counties),
fill = "grey80",
color = NA) +
geom_sf(data = eligibility_counties,
aes(fill = `Payment Factor`),
color = NA,
show.legend = TRUE) +
geom_sf(data = rmapshaper::ms_innerlines(counties),
fill = NA,
color = "white",
linewidth = 0.1) +
geom_sf(data = counties |>
dplyr::group_by(STATEFP) |>
dplyr::summarise() |>
rmapshaper::ms_innerlines(),
fill = NA,
color = "white",
linewidth = 0.2) +
# Use the same color scale used by the LFP
# https://www.fsa.usda.gov/documents/native-pasture-2024-lfp-01-23-25
scale_fill_manual(
values = c("1" = "#E0E436",
"2" = "#DF9114",
"3" = "#DD2313",
"4" = "#850014",
"5" = "#3B003C"),
drop = FALSE,
name = "Payment\nMonths") +
labs(title = "FSA LFP Eligibility",
subtitle = "Native Pasture — 2025") +
theme_void()

🧭 Related archives
Three archives cover LFP county eligibility, at the same event grain and with the same event codes, so they can be compared directly:
- fsa-lfp-eligibility — FSA’s determinations as obtained by FOIA, program years 2008–2025
- fsa-lfp-eligibility-web — FSA’s determinations as published weekly on its maps page, 2008–present, including every superseded weekly version
- fsa-lfp-eligibility-derived — eligibility recomputed from the US Drought Monitor under four county aggregations
The FOIA archive is the richer record for closed program years: it includes fire eligibility and payment factors the web tables omit. The web archive covers the current program year and, for 2008–2011, carries per-tier dates the FOIA response omitted. The derived archive is not a record of FSA’s determinations.
📝 Citation
If you use this data in published work, please cite:
USDA Farm Service Agency. Livestock Forage Disaster Program Eligibility, 2008–2025. Obtained under FOIA requests 2025-FSA-04690-F, 2025-FSA-08422-F, and 2026-FSA-02433-F; curated and archived by R. Kyle Bocinsky, Montana Climate Office, University of Montana. Sustainable FSA project. Accessed YYYY-MM-DD. https://sustainable-fsa.com/fsa-lfp-eligibility/
Machine-readable metadata are in CITATION.cff;
GitHub’s Cite this repository button (top right of the repo page)
renders it as APA or BibTeX.
Acknowledgment: This work is part of the Enhancing Sustainable Disaster Relief in FSA Programs project, supported by the USDA Office of the Chief Economist, Office of Energy and Environmental Policy, and the USDA Climate Hubs.
📄 License
- Raw FOIA data (USDA): Public Domain (17 USC § 105)
- Processed data & scripts: © R. Kyle Bocinsky, released under CC0 and MIT License as applicable
⚠️ Disclaimer
This dataset is archived for research and educational use only. It may not reflect current USDA administrative boundaries or official LFP policy. Always consult your local FSA office for the latest program guidance.
To locate your nearest USDA Farm Service Agency office, use the USDA Service Center Locator:
👏 Acknowledgment
This project is part of:
Enhancing Sustainable Disaster Relief in FSA
Programs
Supported by USDA OCE/OEEP and USDA Climate Hubs
Prepared by the Montana Climate Office
✉️ Contact
Questions? Contact Kyle Bocinsky: kyle.bocinsky@umontana.edu