USDA AMS Market News: Livestock & Dairy Prices avatar

USDA AMS Market News: Livestock & Dairy Prices

Pricing

$32.00 / 1,000 price record delivereds

Go to Apify Store
USDA AMS Market News: Livestock & Dairy Prices

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

Kevin

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

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

FieldMeaning
report_id, report_codeAMS's own numeric and string report identifiers
categorylivestock_auction or dairy — the two fields below differ meaningfully by category
report_date, report_begin_date, report_end_date, published_dateWhen
office, office_state, office_city, office_codeThe USDA field office that filed the report
market_type, market_type_category, market_location, market_location_state, market_location_cityWhere — for livestock, the actual sale barn
commodity, classWhat was sold
price_low, price_high, price_avg, mostly_price_low, mostly_price_high, price_unitThe 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_agoLivestock-only; null on dairy rows
quality, grade, organic, origin, package, region, sale_type, applicationDairy-only; null on livestock rows
report_narrative, commodity_narrativeUSDA-authored market commentary for this report, where filed
chargedWhether this row cost you anything
not_charged_reasonWhy 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.