FSA Weekly County Eligibility Data from the Livestock Forage Disaster Program, 2008–present
This repository is an archive of the Weekly LFP Program Eligibility
Maps and Table published by the USDA Farm Service Agency for the
Livestock Forage Disaster Program
(LFP).
Per-pasture-type eligibility map PDFs and county eligibility tables are
acquired daily from the
USDA
LFP maps portal. The raw data are archived in the
data-raw
directory.
FSA publishes each week’s maps and table at new, dated URLs and only links the current week from the maps page — prior weeks simply drop off the page. This archive preserves that history: every dated PDF and XLSX is captured once and kept forever, and the weekly tables are additionally harmonized into a single analysis-ready dataset.
This repository is the web-published companion to
sustainable-fsa/fsa-lfp-eligibility,
which archives the same LFP county eligibility determinations as
obtained directly from FSA via FOIA request. The two datasets share a
common schema and agree on the determinations they both contain, but
differ at the margins: the FOIA data are somewhat richer — they include
Fire eligibility, payment factors for 2008–2011, and modestly more
records in most years (roughly 0.3–3%) reflecting corrections and late
determinations captured in FSA’s subsequent database extracts. This
archive’s unique contributions are current-year coverage, the weekly
snapshot history, and the original published maps and tables themselves.
For analyses of completed program years, prefer the FOIA archive; use
this archive for the current program year and for studying when
eligibility was published.
The fsa-lfp-eligibility-web.R script
handles all data acquisition and processing. The script scrapes the USDA
LFP maps page, resolves every linked document to its underlying file,
and exits quietly if nothing new has been published. When new files
appear, it downloads them, appends them to the S3 archive, parses
all archived eligibility tables (whose column layouts vary
considerably across vintages), harmonizes them into a consistent schema
— standardizing column names, dates, pasture types, and county codes —
and writes consolidated CSV and Parquet outputs along with an
interactive dashboard.
About the Livestock Forage Disaster Program
LFP compensates eligible livestock producers for grazing losses on drought-afflicted pastureland. Eligibility is determined by county and pasture type from the US Drought Monitor, against the normal grazing period FSA establishes for that pasture type. The tiers and the payments they earn are set out under Drought tiers and payment ladders below.
Program year 2026 is the first under the tiers introduced by P.L. 119-21, and the weekly tables archived here report the split D2 windows FSA added for it. Because the revisions apply retroactively to 2026, the snapshot history records when and how the published determinations changed.
🗂️ Contents
fsa-lfp-eligibility-web.R— acquisition and processing scriptfsa-lfp-eligibility-web.csv— cleaned and consolidated data (latest published version of each record)fsa-lfp-eligibility-web.parquet— the same, as Parquetfsa-lfp-eligibility-web-snapshots.parquet— every archived weekly version of every recordfsa-lfp-eligibility-web-events.csv— the same determinations reshaped long, one record per qualifying drought eventfsa-lfp-eligibility-web-events.parquet— the same event records as Parquetqa-report.txt— validation summary, source vintages, and how much FSA revised each program yearfsa-lfp-eligibility-web.qmd— Quarto dashboard sourcefsa-lfp-eligibility-web.html— interactive summary dashboarddata-raw/— raw weekly PDFs and XLSX tables as published by FSA, organized by program year (S3 only; not in git)manifest.json— flat index of the raw archive (path, size, last-modified)
☁️ Archive Hosting & Automated Publishing
The consolidated data, the event-grain projection, the snapshot history,
the QA report, the assets/ directory the dashboard reads from, and the
raw weekly data-raw/ corpus are mirrored to S3 and served via
CloudFront at
https://data.sustainable-fsa.com/fsa-lfp-eligibility-web/ (browse the
archive
listing or
_manifest.txt
for a flat index). The interactive dashboard is served separately, via
GitHub Pages at https://sustainable-fsa.com/fsa-lfp-eligibility-web/.
Publishing is handled by
fsa-lfp-eligibility-web.R via the shared
R/s3-archive.R helpers, and runs automatically in
GitHub Actions
(.github/workflows/fsa-lfp-eligibility-web.yaml)
each evening, 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.
The raw archive is append-only: FSA publishes each week at a new URL, and a file once archived is never overwritten or removed. Days on which FSA has published nothing exit before any write.
📥 Input Data: Weekly Maps and Tables
FSA publishes, for each program year, roughly a dozen per-pasture-type eligibility map PDFs (Native Pasture, Cool/Warm Season Improved, Forage Sorghum, small grains variants, etc.) and a single Counties & Pasture Types Eligible XLSX table. During the current program year these are re-issued weekly, following each Thursday’s U.S. Drought Monitor release, at new dated URLs.
The XLSX table layout has varied over the years — a multi-sheet workbook
covering 2008–2011, a wide layout with FSA state/county codes for
2012–2023, a revised layout for 2024–2025, and a slimmed-down weekly
layout from 2026 onward that omits county codes entirely. The processing
workflow in fsa-lfp-eligibility-web.R
harmonizes all of these, resolving county identities against the
archive’s own earlier records.
Each run that archives new files also records provenance under
data-raw/log/<date>/: the maps page HTML as fetched, and a
links.json listing every discovered asset with its resolved URL and
(for new files) SHA-256 hash.
📤 Output Data
The archive is published as
fsa-lfp-eligibility-web.csv
and
fsa-lfp-eligibility-web.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 — the same grain as the
FOIA archive. The
2008–2011 workbook reports qualifying drought windows but no payment
information, so Drought Factor and Payment Factor are NA for those
years.
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 |
file |
Source file, as a path within data-raw/ |
file_datestamp |
Publication datestamp embedded in the source filename |
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 |
County or county-equivalent name |
Program Year |
Year the data applies to |
Pasture Type |
Pasture classification (e.g., Native, Improved) |
Disaster Type |
Type of disaster (Drought) |
D2 START DATE:D4B END |
Start and end dates for qualifying drought events, including the D2A/D2B pair FSA introduced for 2026 |
Date of Qualifying Drought |
Start date of qualifying disaster |
Drought Factor |
Monthly payments earned by drought severity and duration |
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 |
Eligible monthly payments (Drought Factor capped by Maximum Eligible Payment Months) |
current is last-seen-wins
fsa-lfp-eligibility-web.csv exposes the most recent archived file
that reported each record, not a point-in-time view. If FSA silently
withdraws a county from a later weekly table, the earlier determination
is still what you see here — the archive keeps it rather than dropping
it. A genuine retraction is therefore invisible in this file and
recoverable only by diffing
fsa-lfp-eligibility-web-snapshots.parquet.
🌵 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 year 2026 onward
FSA reports the two D2 windows separately, as D2A_START_DATE/D2A_END
and D2B_START_DATE/D2B_END. Observed window lengths match the
statute: D2A is 27 days in every record, D2B is 48 or 55.
FSA’s implementing final rule took effect 9 July 2026, applying to program year 2026 and after. Because the revisions apply retroactively, the weekly snapshots in this archive record when and how the published determinations changed.
🔄 Output Data: Event Grain
fsa-lfp-eligibility-web-events.csv
and
fsa-lfp-eligibility-web-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 2008–2011 workbook carries per-tier dates, so every determination in those years yields a dated event. The FOIA archive’s response omitted those columns, so prefer this archive before 2012.
🗺️ 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.
📊 Demonstration Dashboard
The Quarto dashboard
fsa-lfp-eligibility-web.qmd provides:
- An interactive viewer to explore LFP Eligibility by county, year, 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-web/fsa-lfp-eligibility-web.html
📍 Quick Start: Visualize a FSA LFP Eligibility Map in R
This snippet shows how to load the FSA LFP Eligibility data from the
archive and create a simple map using sf and ggplot2.
# Load required libraries
library(arrow)
library(sf)
library(ggplot2) # For plotting
library(tigris) # For state boundaries
library(rmapshaper) # For innerlines function
## Get the LFP Eligibility data
eligibility <-
# "https://data.sustainable-fsa.com/fsa-lfp-eligibility-web/fsa-lfp-eligibility-web.parquet" |>
"fsa-lfp-eligibility-web.parquet" |>
arrow::read_parquet()
## The latest program year in the archive
plot_year <- max(eligibility$`Program Year`)
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 LFP Eligibility for Native Pasture, and
## combine with the county data
eligibility_counties <-
eligibility |>
dplyr::filter(`Pasture Type` == "Native Pasture",
`Program Year` == plot_year) |>
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 = paste("Native Pasture —", plot_year)) +
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. Web Archive of Livestock Forage Disaster Program County Eligibility Maps and Tables, 2008–present. 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-web/
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.
📄 License
- Raw 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
R. Kyle Bocinsky
Director of Climate Extension
Montana Climate Office
📧 kyle.bocinsky@umontana.edu 🌐 https://climate.umt.edu