Free, open access to the Farmers First Ag Index: what U.S. farms are paid against what they pay, every quarter since 1995. No API key. No rate limits. No auth. Just JSON.
Endpoints (v4, current)
Current Quarter
Historical Time Series
Historical Time Series (CSV)
Method & Validation
Embeddable Badge
Response Format
current.json
loading…
Fields
| Field | Type | Description |
|---|---|---|
| headline | string | One-line headline: the ratio and its change from the same quarter a year earlier. |
| ratio | float | USDA index of prices received divided by prices paid, × 100 (2011 = 100). The headline number. |
| ratio_change_vs_year_ago_pct | float | % change in the ratio from the same quarter a year earlier. The main comparison. |
| ratio_change_vs_previous_pct | float | % change from the previous quarter. Partly seasonal; read the year-ago change first. |
| score | float | All-farms score, 0-100: share of 1995-2019 quarters whose ratio was at or below this quarter’s. |
| label | string | Where the ratio sits against 1995-2019: LOW (under 25), BELOW MIDDLE (25-50), ABOVE MIDDLE (50-75), HIGH (75+). Show it with “vs 1995-2019” (label_vs). A price position, not a farm income reading. |
| regime | string | Same value as label since version 4.1 (Oct 2026). Before that it held the old labels, now in label_legacy. |
| label_legacy | string | The pre-Oct 2026 label: STRONG (70+), FAVORABLE (55-70), GUARDED (40-55), STRESSED (0-40). Kept for readers that still expect it; not recommended. |
| sectors.crops | object | Crop prices received / prices paid by crop farms: ratio, score, label, regime, label_legacy, year-ago ratio and change. |
| sectors.livestock | object | Meat animal prices received / prices paid by animal farms. |
| sectors.dairy | object | Dairy prices received / prices paid by animal farms. |
| quarter | string | Quarter label, e.g. "Q2'26" |
| date | string | ISO date of quarter start (YYYY-MM-DD) |
| year_ago | object | Same quarter one year earlier: quarter, score, ratio. Farm prices are seasonal, so this is the fairer comparison. |
| to_reach | object | For all farms and each sector, the ratio at each label line (25, 50, 75) and the % change in the ratio needed to get there. Arithmetic, not a forecast. |
| generated | string | When the file was written (UTC). The data quarter is in quarter. |
history.json and history.csv also carry label and real_time for each quarter. real_time is true only for quarters scored live, from Q2’26 (the v4 launch) on; earlier quarters were filled in after the fact, and 1995-2019 are in-sample (ranked against a period that includes later quarters). In the CSV they are the last two columns.
Stability: within v4, existing fields keep their names; new fields may be added, so ignore fields you do not know. A change in meaning gets a new version number. One exception, version 4.1 (Oct 2026): the old labels (STRESSED, GUARDED, FAVORABLE, STRONG) sounded like farm income, were never tested, and read STRESSED in every quarter from 2020 on. regime now carries the new label and equals label; the old value is in label_legacy, with its lines in label_legacy_thresholds. score, ratio and all other fields are unchanged.
Only the all-farms score was validated (against USDA net farm income, year over year). Sector scores are descriptive. Details in meta.json and the methodology.
Code Examples
JavaScript (fetch)
fetch('https://farmers1st.com/api/v4/current.json') .then(r => r.json()) .then(d => { console.log(`FFAI: ratio ${d.ratio} (${d.ratio_change_vs_year_ago_pct}% vs a year ago); score ${d.score}, ${d.label} vs ${d.label_vs}`); console.log(`Crops: ${d.sectors.crops.score}`); console.log(`Livestock: ${d.sectors.livestock.score}`); console.log(`Dairy: ${d.sectors.dairy.score}`); });
Python
import requests, pandas as pd h = requests.get('https://farmers1st.com/api/v4/history.json').json() df = pd.DataFrame(h['quarters']).set_index('date') print(df[['ratio', 'score']].tail())
curl
curl -s https://farmers1st.com/api/v4/current.json | python3 -m json.tool
R
library(jsonlite) ffai <- fromJSON("https://farmers1st.com/api/v4/history.json") plot(ffai$quarters$ratio, type="l", main="Prices received / paid")
Embeddable Badge
Add the FFAI reading (ratio, change from a year earlier, score and label) to any website with two lines of HTML. The badge fetches current data from the API and renders itself. Every div with the attribute data-ffai-badge (or the older id="ffai-badge") becomes a badge; load the script once per page.
Standard
<div data-ffai-badge></div> <script src="https://farmers1st.com/api/v4/badge.js"></script>
Live Preview
Full (with sectors)
<div data-ffai-badge data-size="full"></div>
Live Preview
Compact
<div data-ffai-badge data-size="compact"></div>
Live Preview
One Sector (Dairy)
<div data-ffai-badge data-sector="dairy"></div>
Live Preview
Dark Theme
<div data-ffai-badge data-size="full" data-theme="dark"></div>
Live Preview
Notes
CORS: GitHub Pages serves all files with permissive CORS headers. Fetch from any origin.
Rate limits: None. It’s static JSON on a CDN.
Update cadence: Quarterly, after USDA NASS has published all three months of the quarter (about a month after the quarter ends). The generated field in each response tells you when.
Revisions: the score is measured against a fixed 1995-2019 base, so published values change only if USDA revises its own data.
FFAI v3 (retired, frozen)
FFAI v3 (Federal Reserve series, Q1 2008 – Q2 2026) was retired in October 2026 after testing showed its composite mostly followed the Fed Funds interest rate. As promised when v3 launched, its endpoints stay online with their last values: /api/v3/current.json, /api/v3/history.json, /api/v3/meta.json, /api/v3/badge.js. They will not be updated. Each v3 JSON file now carries "status": "retired", "superseded_by": "/api/v4/current.json" and a retired_note, so its old values cannot be read as current. The v3 badge now shows a short retirement notice instead of the frozen score, because the last v3 reading (Q2 2026, 70 FAVORABLE) disagrees with v4 for the same quarter (11, LOW vs 1995-2019).
Contact
Questions, integrations, or just want to say hi:
Sig Lindquist | sig@farmers1st.com | 715-797-2428
Farmers First Agri Service, Chetek, WI