USDA AMS Market News: Livestock & Dairy Prices
Pricing
$32.00 / 1,000 price record delivereds
USDA AMS Market News: Livestock & Dairy Prices
Structured commodity prices from USDA AMS's MARS API -- livestock auction and dairy point-of-sale reports, normalized into one clean snake_case schema across two different raw shapes, refreshed on a schedule. Charged only for a row with a commodity, a report date and a real price figure.
Pricing
$32.00 / 1,000 price record delivereds
Rating
0.0
(0)
Developer
Kevin
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
USDA AMS Market News — livestock auction & dairy prices, normalized
An independent tool. It is not affiliated with, endorsed by, or operated by USDA or the Agricultural Marketing Service. USDA Market News reports are US government works (17 U.S.C. §105) and AMS's own privacy statement describes information on its site as "considered public information and may be distributed or copied." This Actor reads AMS's MARS API and reports what it returns, reshaped into one clean schema.
No scraper. This Actor never touches a USDA web page's HTML. Its data
comes from AMS's MARS API (marsapi.ams.usda.gov), refreshed on a schedule
and bundled into this Actor at build time.
Why this exists
USDA AMS publishes over a thousand separate market-news report types
(livestock auctions, dairy, grain, produce, and more), each identified by an
opaque numeric "slug id" with no public index of what data shape each one
returns. Measured directly, 2026-08-20: two of six sampled categories
(livestock auction, dairy) return real structured price line items through
the API; four (grain, terminal fruit, shipping-point fruit, video-auction
livestock) return only report metadata or narrative text through the same
endpoint, with no price figures at all. The two structured categories do not
even share a schema with each other — livestock auction carries 40+ fields
about weight breaks and receipts that dairy has no equivalent for, and
dairy's own raw field names are inconsistently cased (sale_Type,
price_Unit, lot_Desc sit next to lowercase commodity, freight,
region). This Actor discovers which report slugs carry real prices,
reconciles the two structured shapes into one snake_case schema, and drops
the four categories that have nothing but narrative text — so you get
consistent price rows instead of guessing which of 1051 slug ids are
useful and hand-parsing two different casing conventions yourself.
What you get per row
| Field | Meaning |
|---|---|
report_id, report_code | AMS's own numeric and string report identifiers |
category | livestock_auction or dairy — the two fields below differ meaningfully by category |
report_date, report_begin_date, report_end_date, published_date | When |
office, office_state, office_city, office_code | The USDA field office that filed the report |
market_type, market_type_category, market_location, market_location_state, market_location_city | Where — for livestock, the actual sale barn |
commodity, class | What was sold |
price_low, price_high, price_avg, mostly_price_low, mostly_price_high, price_unit | The price figures actually reported — not every category fills every one |
head_count, avg_weight_low, avg_weight_high, avg_weight, weight_break_low, weight_break_high, receipts, receipts_week_ago, receipts_year_ago | Livestock-only; null on dairy rows |
quality, grade, organic, origin, package, region, sale_type, application | Dairy-only; null on livestock rows |
report_narrative, commodity_narrative | USDA-authored market commentary for this report, where filed |
charged | Whether this row cost you anything |
not_charged_reason | Why it did not, in plain English |
The billing rule, stated plainly
One event: price record delivered, charged only when the cached row has
a commodity, a report date, and at least one real price figure. A row
missing any of those is delivered free, with not_charged_reason saying
which.
Coverage — read this before you rely on it
This Actor answers from a cache refreshed on a schedule, not a live call
per request. SUMMARY.json in the run's key-value store reports
cache_refreshed_at and cache_slugs_covered on every run, so you can see
exactly how fresh the data you received was and which report slugs are
served at all. A slug id outside cache_slugs_covered returns zero rows
and costs nothing — it is not an error, and it is not this Actor guessing at
coverage it does not have.
Every cached row is trimmed to that report's most recent 250 rows by report date at refresh time — a market-news feed is sold for its CURRENT prices, not a multi-year archive, and AMS's own history for a single report can run into the thousands of rows.
Input
{"report_slugs": ["1237", "1034"]}
One AMS report slug id per line, up to 50 per run.
Output
{"report_id": 1237,"report_code": "AMS_1237","category": "livestock_auction","report_date": "07/28/2026","office": "Jefferson City, MO","market_location": "Unionville Livestock Market LLC","market_location_state": "MO","commodity": "Feeder Cattle","class": "Steers","price_unit": "Per Cwt","price_low": 337.25,"price_high": 339,"price_avg": 338.13,"head_count": 125,"avg_weight": 913,"charged": true,"not_charged_reason": ""}
A SUMMARY.json lands in the key-value store with the counts, a breakdown of
every reason a row was not charged, and the cache's own freshness — so a
stale refresh looks like a stale refresh, not like a quiet drop in your
results.