Guide

USDA NASS Crop Yield Data API

County-level annual crop yields for corn, soybeans, wheat, cotton, and sorghum — with yield-vs-trend analytics that raw NASS doesn't provide.

USDA NASS publishes the authoritative record of U.S. crop yields going back decades. R2Data2 ingests that data, normalizes it to county FIPS codes, and adds a yield_vs_trend_pct field — the deviation of each year's yield from the county's long-run OLS trend — so you can immediately identify stress-induced yield loss without writing your own regression code.

Source: USDA NASS  ·  Coverage: 3,100+ U.S. counties  ·  Crops: CORN · SOYBEANS · WHEAT_WINTER · COTTON · SORGHUM  ·  Updated: Annually

On this page
  1. USDA NASS API limitations
  2. What R2Data2 adds
  3. Use cases
  4. API endpoints & examples
  5. Frequently asked questions
  6. Get started

USDA NASS API limitations

The USDA NASS Quick Stats API is the official source for crop statistics — and it's genuinely useful. But working with it directly has real friction for developers and analysts building production applications:

R2Data2 solves all of these. One normalized endpoint, FIPS-keyed, with trend deviation pre-computed.

What R2Data2 adds over raw NASS

Feature Raw NASS API R2Data2
County identifier State ANSI + County ANSI (two separate fields) Standard 5-digit FIPS — compatible with RMA, FEMA, USDM
Query interface Multi-parameter Quick Stats query with non-obvious valid combinations Single endpoint: /crops/county/{fips}?crop=CORN
Yield-vs-trend Raw yield only — trend computation is on you yield_vs_trend_pct pre-computed via OLS per county per crop
Harvested acreage Separate query required acres_harvested included in every yield record
Cross-dataset joins Requires ANSI→FIPS crosswalk before joining to drought, NRI, or RMA FIPS-native — join directly to any R2Data2 endpoint
National snapshot Possible but requires paginating multiple requests /crops/snapshot/{year}?crop=CORN — all counties, one call
Rate limits 1,000 req/day (public tier) Up to 50,000 req/day on Pro

Supported crops

CORN SOYBEANS WHEAT_WINTER COTTON SORGHUM

Yields are in the native NASS units: bushels/acre for corn, soybeans, wheat, and sorghum; pounds/acre for cotton. The yield_unit field in every record makes the unit explicit.

The yield_vs_trend_pct field

For each county and crop, R2Data2 fits an OLS trend line through the full NASS yield history. The yield_vs_trend_pct field then expresses each year's yield as a percentage deviation from that trend:

# yield_vs_trend_pct = (actual_yield - trend_yield) / trend_yield * 100
# Positive = above trend (good year); negative = below trend (stress year)

This is the metric that actually answers the question analysts care about: not "was corn yield 172 bu/ac?" but "was that 172 bu/ac above or below what this county typically produces at this point in its yield trajectory?" A county at –18% yield vs. trend in a D2 drought year is a very different story from one at –3%.

Use cases

Crop insurance: validating drought-year yield loss

MPCI and APH-based policies pay indemnities when actual yields fall below the guarantee. The yield_vs_trend_pct field provides a normalized, county-level yield deviation that cross-validates adjuster estimates with the historical NASS record. A county showing –20% vs. trend in a D3 drought year is consistent with material loss; a county at –2% in the same drought year warrants a closer look at why the deviation is so small.

Agricultural lending: collateral value benchmarking

Farm loan underwriters use county yield history to benchmark expected production value on collateral. A 10-year yield history with yield_vs_trend_pct immediately shows whether a county's production is consistently above trend (strong collateral), highly variable (higher risk), or trending downward (structural concern). Pull alongside RMA loss history for a complete picture.

Precision ag and crop analytics platforms

County yield data is a key validation dataset for crop models and field-level yield prediction. R2Data2 makes it trivial to pull a 20-year corn yield time series for any county, join it to NDVI anomaly or soil moisture data from the same API, and quantify the historical relationship between satellite-observed stress and realized yield outcomes.

Market research and commodity analytics

The national snapshot endpoint returns yields for every county that reported a given crop in a given year. For corn in a drought year, that's 1,200+ counties in one API call — useful for building county-weighted national yield estimates, mapping yield deviation geographically, or feeding commodity price models with county-level production data.

API endpoints

All crop endpoints require an API key in the X-API-Key header. The snapshot endpoint requires a Growth or Pro plan.

County yield history

Returns annual yield and harvested acreage for a county, with yield-vs-trend deviation. Optionally filter by crop; returns all supported crops if omitted.

GET /crops/county/{fips}
# Corn yield history for Adair County, Iowa (FIPS 19001)
curl "https://r2data2.com/crops/county/19001?crop=CORN" \
  -H "X-API-Key: agr_your_key_here"
{
  "fips": "19001",
  "crop": "CORN",
  "records": [
    {
      "fips": "19001",
      "year": 2023,
      "crop": "CORN",
      "yield_value": 152.0,
      "yield_unit": "BU / ACRE",
      "acres_harvested": 114000,
      "yield_vs_trend_pct": -14.2
    },
    {
      "fips": "19001",
      "year": 2022,
      "crop": "CORN",
      "yield_value": 187.5,
      "yield_unit": "BU / ACRE",
      "acres_harvested": 118000,
      "yield_vs_trend_pct": 4.8
    }
  ]
}

Use start_year and end_year to scope the range. Omit crop to return all five supported crops in a single call — useful for building a multi-crop county profile.

Latest year — all crops

Returns the most recent NASS data year for every crop available in a county. A fast way to get current-season yields across all crops without specifying a year.

GET /crops/county/{fips}/latest
# Most recent year, all crops, for Adair County, Iowa
curl https://r2data2.com/crops/county/19001/latest \
  -H "X-API-Key: agr_your_key_here"

National snapshot — all counties for a crop and year

Returns yields for every county that reported a given crop in a given year. Corn in 2023 returns ~1,200+ county records — everything you need for a national yield map or production-weighted analysis.

GET /crops/snapshot/{year}
Growth plan required. The snapshot endpoint costs 1 request per county returned. A corn snapshot for a major drought year returns ~1,200–1,500 counties.
# All county corn yields for 2012 (historic drought year)
curl "https://r2data2.com/crops/snapshot/2012?crop=CORN" \
  -H "X-API-Key: agr_your_key_here"
{
  "year": 2012,
  "crop": "CORN",
  "count": 1247,
  "records": [
    {
      "fips": "19001",
      "year": 2012,
      "crop": "CORN",
      "yield_value": 97.0,
      "yield_unit": "BU / ACRE",
      "acres_harvested": 108000,
      "yield_vs_trend_pct": -43.6
    }
  ]
}

See the Data Dictionary for the full field reference and API Docs for interactive testing.

Frequently asked questions

Is this the actual USDA NASS data?

Yes. R2Data2 ingests directly from the USDA NASS Quick Stats API, normalizes the county identifiers to standard 5-digit FIPS codes, and stores the yield and acreage values exactly as NASS publishes them. The yield_vs_trend_pct field is the only derived value — calculated by R2Data2 from an OLS trend fit on the NASS historical series.

How far back does the yield history go?

It depends on the crop and county. NASS corn and soybean data typically goes back to the mid-1900s for major production counties; cotton and sorghum coverage varies by region. R2Data2 ingests the full NASS historical record — use the start_year and end_year parameters to scope your query. Growth and Pro plans unlock earlier history.

How is the OLS yield trend computed?

For each county and crop, R2Data2 fits a simple OLS linear regression of yield on year using the full available NASS history. The trend represents the long-run improvement in yield driven by seed genetics, agronomic practices, and technology adoption. yield_vs_trend_pct is then the percentage deviation of the observed yield from this trend line — isolating the weather/stress component from the structural improvement component.

Why does NASS suppress some county data?

USDA NASS withholds county-level data when fewer than three operations report, to protect individual producer confidentiality. Suppressed counties will simply not appear in R2Data2 results for that crop and year — no record is returned for a suppressed FIPS/crop/year combination. This is standard NASS behavior and not a limitation of the R2Data2 API.

How often is new data added?

USDA NASS publishes final county yield estimates annually, typically in spring for the prior crop year (e.g., 2024 county yields publish in early-to-mid 2025). R2Data2 ingests the new release each year on the 15th of month. For in-season crop monitoring, use the crop progress endpoint (/crop-progress/state/{state_fips}) which updates weekly from NASS Monday reports.

Can I combine yield history with drought or soil moisture data?

Yes — this is one of the primary advantages of R2Data2 vs. raw NASS. Because both datasets use 5-digit FIPS as the county key, joining crop yield history to drought history, soil moisture anomalies, or RMA loss records is a simple merge on fips. Build a per-county dataset of yield deviation vs. NDVI z-score vs. drought weeks at D2+ — all from a single API, no crosswalk tables required.

Ready to query crop yield data?

Free API key — no credit card required. Historical yield data on all tiers; national snapshots on Growth and above.
USDA NASS yield history normalized to FIPS codes, with trend analytics pre-computed.