FFAI API v4.0

← Back to FFAI

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.

License: CC BY 4.0: use freely with attribution to Farmers First Agri Service (farmers1st.com). Built from USDA NASS price data; updated quarterly once USDA has published all three months of a quarter. Tested internally against USDA net farm income; not reviewed or endorsed by USDA, RMA, or FCIC.

Endpoints (v4, current)

Current Quarter

GETJSON
https://farmers1st.com/api/v4/current.json
Latest all-farms score and ratio, crop/livestock/dairy scores and ratios, previous quarter. ~1 KB.

Historical Time Series

GETJSON
https://farmers1st.com/api/v4/history.json
Every quarter since Q1 1995: ratio and score for all farms, crops, livestock and dairy.

Historical Time Series (CSV)

GETCSV
https://farmers1st.com/api/v4/history.csv
The same quarters and columns as history.json, as a spreadsheet file. Opens in Excel or Google Sheets. A blank cell means USDA had not published that value.

Method & Validation

GETJSON
https://farmers1st.com/api/v4/meta.json
USDA series used, how the score is computed, the pre-registered validation and its results, and the limits.

Embeddable Badge

GETJS
https://farmers1st.com/api/v4/badge.js
Self-rendering widget. Drop two lines of HTML onto any page.

Response Format

current.json

loading…

Fields

FieldTypeDescription
headlinestringOne-line headline: the ratio and its change from the same quarter a year earlier.
ratiofloatUSDA index of prices received divided by prices paid, × 100 (2011 = 100). The headline number.
ratio_change_vs_year_ago_pctfloat% change in the ratio from the same quarter a year earlier. The main comparison.
ratio_change_vs_previous_pctfloat% change from the previous quarter. Partly seasonal; read the year-ago change first.
scorefloatAll-farms score, 0-100: share of 1995-2019 quarters whose ratio was at or below this quarter’s.
labelstringWhere 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.
regimestringSame value as label since version 4.1 (Oct 2026). Before that it held the old labels, now in label_legacy.
label_legacystringThe 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.cropsobjectCrop prices received / prices paid by crop farms: ratio, score, label, regime, label_legacy, year-ago ratio and change.
sectors.livestockobjectMeat animal prices received / prices paid by animal farms.
sectors.dairyobjectDairy prices received / prices paid by animal farms.
quarterstringQuarter label, e.g. "Q2'26"
datestringISO date of quarter start (YYYY-MM-DD)
year_agoobjectSame quarter one year earlier: quarter, score, ratio. Farm prices are seasonal, so this is the fairer comparison.
to_reachobjectFor 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.
generatedstringWhen 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