USDA Cash Grain Bids Scraper
Pricing
Pay per event
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
Maintained by CommunityActor 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.govonly. - 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:
maxReportsandmaxRowsprevent 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?
| Field | Meaning |
|---|---|
reportDate | Date stated by USDA in the report |
finality | Final or preliminary report status |
commodity | Corn, soybeans, wheat, or another reported grain |
grade | USDA grade such as US #2 |
facilityClass | Country elevators, mills, or processors |
region | Report section region |
location | Bid location and state |
saleType | Bid, offer, or ask when present |
protein | Protein classification when reported |
basis | Numeric basis value |
basisUnit | Cents or dollars per bushel from the table header |
basisContractSymbol | Futures month symbol attached to basis |
basisChange | Reported basis movement |
cashPricePerBushel | Cash price in dollars per bushel |
priceChange | Reported cash price movement |
averagePrice | Average shown in the source row |
yearAgoPrice | Prior-year comparison when present |
freight | Delivered, FOB, or CIF code |
delivery | Current or named delivery month |
reportUrl | Official source PDF |
The futures dataset includes exchange, commodity, contract month, and settlement cents per bushel.
How to scrape USDA cash grain bids
- Open the Actor input page.
- Keep the prefilled
ams_3156report slug or add another USDA AMS report slug. - Optionally paste exact USDA
/mnreports/{slug}.pdfURLs. - Choose the maximum number of reports and output rows.
- Enable cash bids, futures settlements, or both.
- Click Start.
- Export cash bids from the default dataset.
- 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
maxRowshigh enough for both selected datasets. - ποΈ Keep
reportDaterather than treating scrape time as the market date. - π Use direct report URLs when another system already discovers the PDF.
- π¨ Inspect
REPORT_ERRORSwhen 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 osfrom apify_client import ApifyClientclient = 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().itemsprint(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_3156and 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 scrapers
- CFTC Commitments of Traders Scraper for positioning data published by the CFTC.
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.