US Agricultural Market Trend Monitor avatar

US Agricultural Market Trend Monitor

Pricing

from $4.00 / 1,000 result items

Go to Apify Store
US Agricultural Market Trend Monitor

US Agricultural Market Trend Monitor

Query and monitor public USDA AMS agricultural market bids with a bounded daily/weekly fallback chain and normalized, traceable Dataset rows.

Pricing

from $4.00 / 1,000 result items

Rating

0.0

(0)

Developer

hugo liu

hugo liu

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

一个面向农产品贸易商、食品加工企业和农业 SaaS 开发者的 Apify Actor MVP。它读取公开/免费的 USDA AMS 市场报告,输出可追溯、字段统一的美国农产品现货报价,并支持一次性查询和增量监控。

当前版本的重点是“稳定、可解释、可回溯”,不是实时盘口、交易建议或完整历史数据库。

Before you run

  • 本版本不需要 USDA MyMarketNews API Key、USDA NASS Quick Stats API Key 或 NOAA Key。
  • Actor 默认通过 Apify Proxy、US 地理位置访问 USDA;如需直接诊断上游,可在 proxyConfiguration 中关闭代理。代理流量可能产生额外 Apify Proxy 费用。
  • Apify 的计算、Dataset 和存储费用仍按账户套餐规则计算;大范围报告和较大的 maxResults 会增加运行时间与资源消耗。
  • 从一个报告 ID、一个品类和较小的 maxResults 开始。maxResults 限制标准化后的输出,不等于限制上游下载字节数。
  • 数据是上游发布时点的报告数据,不承诺实时刷新、交易级可成交性或 SLA。
  • Actor 不维护永久历史库。需要长期历史时,应将 Dataset 复制到自己的数据库或数据仓库。

首版数据源与 fallback

每日和每周严格分开,不能在一次运行中混用两个频率的报告。

DAILY

权重来源传输语义
100USDA AMS MyMarketNews Public Data JSONPUBLIC_JSON首选结构化报价
90USDA AMS 官方报告 PDFPDFJSON 无有效报价时的官方回退

执行顺序是:Public Data JSON → 官方 PDF 文本解析 → 仍失败则该报告没有可用记录并给出 warning。

WEEKLY

权重来源传输语义
100USDA AMS 官方周报 PDFPDF周报主来源
80USDA Open Ag Transport DatasetDATASET_JSON周度趋势上下文,不伪装成 AMS 周报替代品

周度 Open Ag Transport 数据来自 USDA Open Ag Transport,字段和覆盖可能与所选 AMS 报告不同,输出的 parseWarnings 会标记 trend_context_only

PDF 是否需要 OCR

已验证的 USDA AMS 报告是带文字元素和字体资源的 Reporting Services PDF,价格、basis、日期和表头可以直接提取;页眉中的 JPEG 只是标识图,不是整页扫描。因此 P0 使用 pdfjs-dist 文本提取,不引入 OCR。

只有 PDF 没有可提取文字,或没有报告标题/日期/报价表头时,才会标记 needs_ocr warning。当前免费 MVP 不自动调用 OCR,也不会把图片猜成报价。

已登记的报告

Actor 不默认无界扫描 AMS 报告目录,只接受内置登记的、已验证过的报告 ID。可以在 marketReportIds 中填写多个同频率 ID。

DAILY 报告

ID报告州/范围
2850Iowa Daily Cash Grain BidsIA
3192Illinois Grain BidsIL
2886Kansas Daily Grain BidsKS
3225Nebraska Daily Elevator Grain BidsNE
2960Arkansas Daily Grain BidsAR
2892Kentucky Daily Grain BidsKY
3049Southern Minnesota Daily Grain BidsMN
2928Mississippi Daily Grain BidsMS
2771Montana Daily Elevator Grain BidsMT
3156North Carolina Cash Grain BidsNC
3878North Dakota Daily Grain BidsND
2851Ohio Daily Grain BidsOH
3100Oklahoma Daily Grain BidsOK
2787South Carolina Daily Grain BidsSC
3186South Dakota Daily Grain BidsSD
3088Tennessee Daily Grain BidsTN
2711Texas Daily Grain BidsTX
3167Virginia Daily Grain BidsVA
3239Wyoming Daily Grain BidsWY
2932Missouri Daily Grain BidsMO
3043Iowa-Southern Minnesota Barge Terminal Grain BidsBarge
3147Louisiana and Texas Export BidsExport
2887National Daily Sunflower, Canola, Millet, and Flaxseed ReportNational

不填写 marketReportIds 时,DAILY 默认使用 2850

WEEKLY 报告

ID报告
3146California Grain BidsCA
3463Indiana Grain BidsIN
2714Maryland Grain BidsMD
3091Pennsylvania Grain BidsPA

不填写 marketReportIds 时,WEEKLY 默认使用 3146

报告页面示例:AMS report 2850,PDF 示例:AMS_2850.pdf

P0 品类

默认允许以下六类,保留官方原始商品名,同时生成统一的 commodityCode

代码常见原始名称
CORNCorn、Maize、Yellow Corn
SOYBEANSSoybean、Soybeans
WHEATWheat、Hard Red Winter Wheat
SORGHUMSorghum、Milo
BARLEYBarley
OATSOats、White Oats

国家报告还可能出现 CANOLASUNFLOWERMILLETFLAXSEED,标准化器可以保留这些代码;用户可以通过 commodities 明确筛选它们。首版不做 bushel、ton、lb、cwt 之间的隐式换算。

Run modes

模式输出状态
lookup当前匹配记录,changeType=CURRENT不读取、不修改监控状态
export有界当前数据集,changeType=CURRENT不读取、不修改监控状态
monitor新记录 ADDED,内容变化 UPDATED使用命名 KVS 检查点

“一次性查询”和“持续监控”的区别在于:一次性查询只回答本次运行上游有什么;持续监控会把本次标准化快照与上一次快照比较,并只投递新增/变化记录。monitor 首次运行可以设置 emitInitialSnapshot=false,只建立状态而不输出初始全量记录。

监控投递顺序为:读取旧快照 → 计算差异 → 成功写入 Dataset → 写入 KVS checkpoint。若 Dataset 写入成功而 checkpoint 写入失败,下一次可能重复投递;请使用 idempotencyKey 去重。进程内锁只覆盖同一个 Node.js 进程,不能宣称跨容器 exactly-once 或账户级限流。

Input API

{
"mode": "lookup",
"frequency": "DAILY",
"marketReportIds": ["2850"],
"commodities": ["CORN", "SOYBEANS"],
"states": ["IA"],
"includeFuturesSettlements": false,
"priceChangeThresholdPercent": 5,
"maxResults": 20
}
字段类型/默认值说明
modelookuplookupexportmonitor
frequencyDAILYDAILYWEEKLY,不可混用
marketReportIds[]已登记报告 ID;空值使用该频率默认报告
commodities六个 P0 品类本地商品筛选
states[]可选美国两位州代码;空值表示所选报告覆盖的州
startDate / endDate包含边界的 YYYY-MM-DD 观测日期范围
includeFuturesSettlementsfalse从 PDF 中额外输出期货结算曲线
priceChangeThresholdPercent5可填写任意大于 0 且不超过 100 的数值,例如 2.75
maxResults5001–5000;作用于标准化、过滤、去重之后
emitInitialSnapshottrue仅 monitor 生效
monitorIdmonitor 必填,用于隔离不同监控任务
stateStoreNameus-agricultural-market-trend-state命名 KVS
proxyConfigurationApify Proxy / USUSDA 请求的代理配置;默认启用,可在 Console 中关闭或选择代理组

当前查询

{
"mode": "lookup",
"frequency": "DAILY",
"marketReportIds": ["2850"],
"commodities": ["CORN"],
"maxResults": 20
}

周度查询

{
"mode": "export",
"frequency": "WEEKLY",
"marketReportIds": ["3146"],
"commodities": ["CORN", "SORGHUM"],
"startDate": "2026-01-01",
"endDate": "2026-12-31",
"maxResults": 100
}

增量监控

{
"mode": "monitor",
"frequency": "DAILY",
"marketReportIds": ["2850", "3192"],
"commodities": ["CORN", "SOYBEANS"],
"states": ["IA", "IL"],
"emitInitialSnapshot": false,
"monitorId": "midwest-grains-daily",
"stateStoreName": "us-agricultural-market-trend-state"
}

Unified output fields

每个 Dataset item 都是一个扁平标准化报价。不同来源的同义字段先在适配层映射到同一字段,再做过滤、去重和监控。

来源与身份

字段说明
sourceusda-ams-market-newsusda-open-ag-transport
sourceRecordId由来源、报告、频率、日期、品类、市场组、地区、等级、报价类型和交付条件组成的稳定 ID
sourceFamilyUSDA_AMSUSDA_OPEN_AG_TRANSPORT
sourceTransportPUBLIC_JSONPDFDATASET_JSON
sourcePriority100、90 或 80;用于 fallback 和去重
sourceReportId / sourceReportName官方报告标识和名称
sourceUrl实际读取的官方端点或 PDF

时间、市场和商品

observationDateperiodStartperiodEndweekEndingpublishedAtquoteAsOfretrievedAtmarketTypemarketNamemarketGroupmarketStateCodemarketCityfacilityNamefacilityTypecommodityCodecommodityNamecommodityRawNamegradeclassNameproteinpackageType

报价与交付

quoteSideBUYER_BIDSELLER_OFFERSETTLEMENT)、quoteTypepriceValuepriceMinpriceMaxpriceAveragepriceYearAgopriceCurrencypriceUnitbasisValuebasisMinbasisMaxbasisUnitbasisFuturesMonthpriceChangepriceChangeMinpriceChangeMaxpriceChangePercentpriceDirectionbasisChangebasisChangeMinbasisChangeMaxbasisDirectiondeliveryPointdeliveryStatusdeliveryStartdeliveryEndfreighttransportMode

范围值不会被强行压成一个数。例如 4.8975-5.0875 同时保留 priceMin=4.8975priceMax=5.0875;只有官方提供平均值时才填 priceAverage。不同单位不做隐式换算。

状态与解析

reportStatusisFinaldataStatusextractionMethodparserVersionparseWarningssignal;监控模式另外包含 changeTypechangedFieldsdetectedAtcontentHashidempotencyKey

示例输出(字段已截短):

{
"source": "usda-ams-market-news",
"sourceRecordId": "usda_ams:2850:daily:market_price:2026_09_03:corn:country_elevator:ia:northwest:na:us_2:na:bid:current:na:na",
"recordType": "market_price",
"frequency": "DAILY",
"sourceTransport": "PDF",
"sourcePriority": 90,
"sourceReportId": "2850",
"sourceReportName": "Iowa Daily Cash Grain Bids",
"sourceUrl": "https://www.ams.usda.gov/mnreports/ams_2850.pdf",
"observationDate": "2026-09-03",
"marketName": "Northwest",
"marketStateCode": "IA",
"commodityCode": "CORN",
"commodityRawName": "US #2 Yellow Corn (Bulk)",
"grade": "US #2",
"quoteSide": "BUYER_BID",
"priceValue": 4.9661,
"priceMin": 4.8975,
"priceMax": 5.0875,
"priceUnit": "$/bu",
"basisMin": -51,
"basisMax": -32,
"basisUnit": "cents_per_bushel",
"priceChange": -0.0275,
"priceChangePercent": -0.5507,
"priceDirection": "down",
"dataStatus": "fallback",
"extractionMethod": "pdf_text",
"changeType": "CURRENT"
}

规则信号

  • price_spike:有可用前值,价格相对前值上涨达到 priceChangeThresholdPercent
  • price_drop:有可用前值,价格相对前值下跌达到阈值。
  • 没有官方前值时不猜测涨跌,也不输出季节性异常结论。
  • futures_settlement 是报告中明确的结算价,不等于现货报价。

Apify Console、CLI 和 REST

Console 中选择 Input,指定 modefrequency、报告 ID 和小的 maxResults 后运行。Dataset 的 JSON、CSV、Excel 都来自同一个 Dataset:

Output Schema 的模板只使用 /itemsformat 参数,避免把 cleanattachment 这类布尔查询参数放进 Console 模板;Apify Console 的模板解析器会把 URL 查询值当作字符串。直接调用 REST API 时,可以按下面示例传递 clean=trueattachment=true

apify call <ACTOR_ID> \
--input '{"mode":"lookup","frequency":"DAILY","marketReportIds":["2850"],"commodities":["CORN"],"maxResults":20}' \
--output-dataset
curl -X POST \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H "Content-Type: application/json" \
--data '{"mode":"lookup","frequency":"DAILY","marketReportIds":["2850"],"commodities":["CORN"],"maxResults":20}' \
"https://api.apify.com/v2/acts/<ACTOR_ID>/runs?waitForFinish=60"

取得 defaultDatasetId 后:

GET https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=json&clean=true
GET https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv&clean=true&attachment=true
GET https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=xlsx&clean=true&attachment=true

持续监控可使用 Apify Schedule 触发 monitor,使用 Apify Platform Webhook 接收 run 生命周期事件,再读取该 run 的 Dataset。当前 Actor 不自行发送邮件、短信或 Slack,也不在容器内生成二进制 Excel 文件。

Reliability and limitations

  • HTTP 客户端设置超时、最小请求间隔和有限重试;重试网络异常、超时、429 和 5xx,并尊重 Retry-After
  • 其他 4xx、错误 JSON 和无法解析的 PDF 不会被静默当成“没有数据”;运行会产生 warning,必要时返回空 Dataset 或失败。
  • Public JSON 与 PDF 的字段可能有缺失;未知值使用 null,原始商品名和 parseWarnings 尽量保留。
  • PDF fallback 会降低结构化字段完整度;sourceTransportdataStatusextractionMethod 可用于下游质量判断。
  • 记录缺席不产生 REMOVED,因为滚动报告窗口或上游分页缺席不能证明官方删除。
  • 不把地方现货报告、Open Ag 周度上下文、期货结算价和实时盘口混成同一种报价。

Local development

要求 Node.js 20+:

npm install
npm test
npm run build
apify validate-schema
python3 /Users/hugo/.codex/skills/apify-actor-deployer/scripts/preflight.py . --profile generic --require-build

有界真实源 smoke:

$npm run test:real

真实 smoke 只读取一个报告、一个品类和有限行数;不会做全美无界导出。Store 发布、Schedule、代理和付费 API Key 均不属于当前版本。

Attribution

本 Actor 使用 USDA AMS、USDA Open Ag Transport 的公开数据。请保留 sourceUrl 和来源标识,并在大规模运行前阅读上游使用说明。数据不构成投资、采购、保险、农业或法律建议。