Static
Badge Last
Update Repo
Size

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


☁️ 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()


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:

🔗 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