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.
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:
commodity_desc, statisticcat_desc,
unit_desc, prodn_practice_desc, util_practice_desc —
and the valid combinations aren't always obvious. Getting corn grain yield (vs. silage,
vs. sweet corn) requires knowing exactly which parameter combination NASS uses.R2Data2 solves all of these. One normalized endpoint, FIPS-keyed, with trend deviation pre-computed.
| 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 |
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.
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%.
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.
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.
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.
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.
All crop endpoints require an API key in the X-API-Key header.
The snapshot endpoint requires a Growth or Pro plan.
Returns annual yield and harvested acreage for a county, with yield-vs-trend deviation. Optionally filter by crop; returns all supported crops if omitted.
# 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.
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.
# 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"
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.
# 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.
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.
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.