USDA Cash Grain Bids Scraper avatar

USDA Cash Grain Bids Scraper

Pricing

Pay per event

Go to Apify Store
USDA Cash Grain Bids Scraper

USDA Cash Grain Bids Scraper

🌾 Extract location-level USDA cash grain bids, basis, delivery terms, and futures settlements from official public AMS Market News PDF reports.

Pricing

Pay per event

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Categories

Share

Turn public USDA AMS cash grain report PDFs into structured cash bids and futures settlements.

The Actor downloads official Market News reports directly from USDA, parses location-level bid tables, and exports analysis-ready JSON, CSV, Excel, or API data.

Use it for scheduled regional price snapshots, grain procurement research, elevator comparisons, basis tracking, and agritech data pipelines.

  • 🌽 Capture commodity, grade, facility, region, location, basis, and cash price.
  • πŸ“ˆ Separate futures settlements by exchange and contract month.
  • πŸ—“οΈ Preserve report date and final/preliminary status.
  • 🚚 Keep freight and delivery terms attached to each bid.
  • πŸ”— Trace every row to its official USDA PDF.
  • ⚑ Use direct HTTP without a browser, login, or proxy.

What does USDA Cash Grain Bids Scraper do?

USDA Cash Grain Bids Scraper reads public PDF reports from USDA Agricultural Marketing Service Market News.

It recognizes report context before parsing each row. That context includes the commodity grade, facility class, region, report date, and report finality.

The primary dataset contains normalized cash bids. A second dataset contains futures settlements found in the same report.

Instead of downloading a PDF and manually copying tables, you receive typed records ready for filtering, comparison, storage, or alerts.

Who is it for?

Grain buyers and merchandisers

Compare current bids across locations and delivery periods before contacting an elevator or processor.

Farms and producer groups

Schedule a daily report run and retain price history for marketing decisions.

Commodity analysts

Join cash prices and basis observations with futures settlements in a notebook, warehouse, or BI tool.

Agritech developers

Add USDA report extraction to a product without maintaining PDF download and parsing infrastructure.

Data teams

Export repeatable regional snapshots to JSON, CSV, Excel, Google Sheets, or a database.

Why use this Actor?

  • Official source: downloads PDFs from ams.usda.gov only.
  • Focused output: captures cash grain fields rather than returning raw documents.
  • Two clean datasets: cash bids and futures settlements are not mixed into incompatible rows.
  • Bounded runs: maxReports and maxRows prevent accidental large jobs.
  • Traceable records: report URL, slug, title, date, finality, and scrape time are preserved.
  • Scheduling friendly: stable slugs can be rerun as USDA updates the current report.
  • Explicit failures: unsupported layouts are reported instead of producing invented values.

What USDA grain data can I extract?

FieldMeaning
reportDateDate stated by USDA in the report
finalityFinal or preliminary report status
commodityCorn, soybeans, wheat, or another reported grain
gradeUSDA grade such as US #2
facilityClassCountry elevators, mills, or processors
regionReport section region
locationBid location and state
saleTypeBid, offer, or ask when present
proteinProtein classification when reported
basisNumeric basis value
basisUnitCents or dollars per bushel from the table header
basisContractSymbolFutures month symbol attached to basis
basisChangeReported basis movement
cashPricePerBushelCash price in dollars per bushel
priceChangeReported cash price movement
averagePriceAverage shown in the source row
yearAgoPricePrior-year comparison when present
freightDelivered, FOB, or CIF code
deliveryCurrent or named delivery month
reportUrlOfficial source PDF

The futures dataset includes exchange, commodity, contract month, and settlement cents per bushel.

How to scrape USDA cash grain bids

  1. Open the Actor input page.
  2. Keep the prefilled ams_3156 report slug or add another USDA AMS report slug.
  3. Optionally paste exact USDA /mnreports/{slug}.pdf URLs.
  4. Choose the maximum number of reports and output rows.
  5. Enable cash bids, futures settlements, or both.
  6. Click Start.
  7. Export cash bids from the default dataset.
  8. Select the futures settlements dataset from the run Storage tab when needed.

The prefilled run processes one public report and finishes well within the normal Actor timeout.

Input parameters

reportSlugs

An array of USDA PDF filenames without .pdf.

Example: ams_3156 resolves to:

https://www.ams.usda.gov/mnreports/ams_3156.pdf

reportUrls

Optional direct USDA AMS PDF URLs.

Only HTTPS URLs on ams.usda.gov or www.ams.usda.gov under /mnreports/ are accepted.

maxReports

Maximum unique reports to download, from 1 to 25.

maxRows

Maximum combined records saved in one run, from 1 to 10,000.

Output switches

Use includeCashBids and includeFuturesSettlements to select datasets. At least one must be enabled.

Input example

{
"reportSlugs": ["ams_3156"],
"reportUrls": [],
"maxReports": 1,
"maxRows": 100,
"includeCashBids": true,
"includeFuturesSettlements": true
}

Duplicate slugs and URLs are removed before download.

Output example: cash bid

{
"recordType": "cash_bid",
"reportTitle": "North Carolina Cash Grain Bids",
"reportDate": "2026-07-14",
"finality": "Final",
"commodity": "Yellow Corn",
"grade": "US #2",
"facilityClass": "Country Elevators - Conventional",
"region": "Southeast",
"location": "Autryville, NC",
"saleType": "Bid",
"basis": 5,
"basisUnit": "Β’/Bu",
"basisContractSymbol": "U",
"cashPricePerBushel": 4.435,
"priceChangeDirection": "UP",
"priceChange": 0.0075,
"averagePrice": 4.435,
"yearAgoPrice": 4.0525,
"freight": "DLVD-T",
"delivery": "Current",
"reportUrl": "https://www.ams.usda.gov/mnreports/ams_3156.pdf"
}

Optional fields are omitted when USDA does not publish a value for that row.

Output example: futures settlement

{
"recordType": "futures_settlement",
"reportTitle": "North Carolina Cash Grain Bids",
"reportDate": "2026-07-14",
"finality": "Final",
"exchange": "CBOT",
"commodity": "Corn",
"contractMonth": "Jul 26",
"settlementCentsPerBushel": 433.75,
"reportUrl": "https://www.ams.usda.gov/mnreports/ams_3156.pdf"
}

Cash bids are in the default dataset. Futures settlements are in the futuresSettlements dataset.

How much does it cost to extract USDA cash grain bids?

The Actor uses pay-per-event pricing:

  • one small start charge per run;
  • one result charge for each saved cash bid or futures settlement;
  • lower per-record prices on higher Apify subscription tiers.

The exact live prices appear on the Actor pricing tab before you start a run.

Use maxRows to set a hard spending boundary. A prefilled run is intentionally limited to 100 records.

Direct PDF extraction avoids browser and proxy costs, helping keep scheduled monitoring economical.

Scheduling daily grain price snapshots

Create an Apify schedule using the stable report slug and run it after the report's normal publication time.

Store each run in your destination warehouse or append it to a named historical dataset.

Use reportDate, location, commodity, delivery, and cashPricePerBushel as comparison keys.

Do not assume every PDF changes every day. Compare report date and finality before sending alerts.

Tips for reliable extraction

  • 🌾 Start with one known report slug before adding a batch.
  • πŸ”’ Set maxRows high enough for both selected datasets.
  • πŸ—“οΈ Keep reportDate rather than treating scrape time as the market date.
  • πŸ“„ Use direct report URLs when another system already discovers the PDF.
  • 🚨 Inspect REPORT_ERRORS when some reports fail but others succeed.
  • πŸ” Schedule stable slugs instead of hard-coding dated download filenames.
  • βœ… Validate bid details with the local grain buyer before trading decisions.

Integrations and workflow patterns

Google Sheets

Send each completed default dataset to a sheet for procurement teams. Create a second export for futures settlements.

Webhooks and alerts

Use an Actor run webhook to start a comparison workflow. Alert only after matching the same location, commodity, and delivery period.

Data warehouses

Load cash bids into a fact table keyed by report date and source dimensions. Keep futures settlements in a separate table.

Make and Zapier

Trigger the Actor on a schedule, filter changed bids, and send selected records to email, Slack, or a CRM.

Apify datasets

Use dataset API exports for JSON, CSV, Excel, XML, or JSONL consumption.

API usage with JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/usda-cash-grain-bids-scraper').call({
reportSlugs: ['ams_3156'],
maxReports: 1,
maxRows: 100,
includeCashBids: true,
includeFuturesSettlements: true,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

The default dataset contains cash bids.

API usage with Python

import os
from apify_client import ApifyClient
client = ApifyClient(os.environ['APIFY_TOKEN'])
run = client.actor('automation-lab/usda-cash-grain-bids-scraper').call(run_input={
'reportSlugs': ['ams_3156'],
'maxReports': 1,
'maxRows': 100,
'includeCashBids': True,
'includeFuturesSettlements': True,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)

Use the run storage metadata to resolve the aliased futures dataset.

API usage with cURL

curl -X POST \
"https://api.apify.com/v2/acts/automation-lab~usda-cash-grain-bids-scraper/runs?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"reportSlugs": ["ams_3156"],
"maxReports": 1,
"maxRows": 100,
"includeCashBids": true,
"includeFuturesSettlements": true
}'

Poll the returned run ID, then download its dataset items through the Dataset API.

Use with Apify MCP

Connect Claude Code:

$claude mcp add --transport http apify "https://mcp.apify.com?tools=automation-lab/usda-cash-grain-bids-scraper"

For Claude Desktop, Cursor, or VS Code, add this server configuration:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com?tools=automation-lab/usda-cash-grain-bids-scraper"
}
}
}

Example prompts:

  • β€œRun the USDA cash grain bids scraper for ams_3156 and show current corn bids.”
  • β€œCompare soybean cash prices by North Carolina location.”
  • β€œExport futures settlement records from the latest report.”

Error handling and diagnostics

Invalid hosts, non-PDF URLs, and malformed slugs fail input processing with a clear message.

HTTP and parser errors are logged per report. When a batch contains both good and bad reports, good output is retained and failures are written to REPORT_ERRORS.

A run that saves no useful record fails. This prevents silent empty snapshots from entering monitoring pipelines.

The downloader retries transient request failures twice and uses a 45-second request timeout.

Limitations

USDA publishes multiple report layouts. Version 1 is verified against the current North Carolina Cash Grain Bids report family represented by ams_3156.

Other report layouts may require parser support even when they are valid USDA PDFs.

The Actor does not call the authenticated USDA MARS JSON API.

It does not predict prices, recommend trades, or guarantee that a posted bid remains available.

PDF values can be corrected by USDA after publication. Retain report date, finality, and source URL.

Legality: public USDA grain reports

The Actor accesses public United States government report PDFs without bypassing login or technical access controls.

Users remain responsible for their downstream use, retention, and interpretation of the data.

Respect USDA source notices and attribution requirements. Do not present extracted values as real-time executable quotes.

For commercial decisions, confirm prices and terms with the elevator, mill, processor, or grain buyer.

FAQ

Does it need an USDA API key?

No. Version 1 reads anonymous public USDA AMS report PDFs.

Can I provide the full PDF URL?

Yes, if it is an HTTPS ams.usda.gov/mnreports/{slug}.pdf URL.

Why are cash bids and futures settlements separate?

They are different entities with different fields and analysis workflows. Separate datasets make exports cleaner.

Why did a valid report produce an unsupported-layout error?

USDA report templates vary. Share the public report slug when requesting support so a layout adapter can be added.

Why is a row missing average or year-ago price?

Those fields are optional because not every source row publishes every comparison value.

Does β€œFinal” mean the bid is still available?

No. It is the report's status, not a guarantee of an executable quote.

How do I control run size?

Set both maxReports and maxRows. The Actor stops saving when the combined row limit is reached.

Related Actors cover different official financial and commodity datasets. Choose this Actor when the required output is USDA AMS cash grain bids from public reports.

Support

When reporting a parsing issue, include the public USDA report slug, run ID, and expected row.

Do not include private credentials or confidential trading information.

Logs identify the failed report and preserve successful output from other reports in the same batch.