# Hay Prices by State and Hay Auction (`standardwork/hay-prices`) Actor

Alfalfa, grass and straw prices from 21 state hay reports and 17 hay auctions: package, quality, price range and average. Public market reports.

- **URL**: https://apify.com/standardwork/hay-prices.md
- **Developed by:** [Standard Work Co.](https://apify.com/standardwork) (community)
- **Categories:** Business, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$5.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Hay Prices by State and Hay Auction

Informational only. Not for navigation, safety, emergency, financial, medical, or legal decisions. Check the official source before you rely on it.

Prices are USDA Market News reports of past hay trades, asking prices and auction sales, not offers to buy or sell, and not financial advice.

### What it does

Pulls hay and straw prices from 21 state direct hay reports and 17 hay auction reports (25 states in all), and returns one clean row per price line: hay type (alfalfa, grass, mixed, bermuda, straw and more), quality, sale type (trade, ask, offer), package (small square, large round, large square 3x4 and more), quantity, price range and average, freight or use, description, crop age, and region where the report gives one.

### Quick start (no code)

1. Leave the default to get Missouri (state report plus the Golden City auction), or type state codes in "States".
2. Optional: pick Direct or Hay auctions under "Report type", or type alfalfa or straw in "Hay type contains".
3. Click Start and download the table as CSV, Excel or JSON.

### Output fields

Every row has the same fields in the same order. Missing values are null.
state, reportKind, reportName, reportId, reportTitle, reportDate, reportStatus, region, section, commodity, quality, saleType, priceUnit, package, quantity, priceLow, priceHigh, priceAvg, freight, description, cropAge, note, error, qcStatus, qcNotes, sourceUrl, retrievedAt, retrievedAtLocal.

- priceUnit is $/ton, $/bale, $/bundle or $/point/ton, from the report's own heading. Check it before comparing rows.
- quantity is tons for direct reports, and tons or bales for auctions, as the report gives it.
- saleType is null for auctions (they report sales).

### Self-checks

Rows are never dropped. A row is flagged with a reason when a price is outside a plausible range for its unit, an average falls outside its range, the package is missing, or the report is older than your limit (default 21 days, monthly reports get 14 more). Seasonal auctions can be months old between seasons and are flagged. A report that cannot be fetched returns one row with the error filled in.

### Source limits

- Direct reports come out every two weeks (Kentucky and Tennessee monthly). Auctions report after each sale; some are monthly or seasonal.
- Asking prices are not sale prices. Use saleType to tell them apart.
- Values are passed through as published.

### Data sources and credits

U.S. Department of Agriculture, Agricultural Marketing Service, Livestock, Poultry and Grain Market News, public hay report PDFs (https://www.ams.usda.gov/market-news/hay-reports). USDA information is public domain. Credit: U.S. Department of Agriculture.

### Disclaimer

This is an independent tool by Standard Work Co. It is not affiliated with, endorsed by, or sponsored by any government agency named here. Agency names are used only to say where the data comes from.
The data comes from public government sources and is passed through as published, only reformatted. Government data can be preliminary, late, missing, revised, or wrong, and this tool can fail too. This output is not an official government record.
Provided "as is" with no warranty of any kind, including accuracy, completeness, or timeliness. You are responsible for checking the official source before acting on anything here. Liability is limited as stated in the Apify Standard Actor Contract for this tool.

# Actor input Schema

## `states` (type: `array`):

Two-letter state codes. States with hay reports: AL, AZ, CA, CO, IA, ID, IL, IN, KS, KY, MN, MO, MT, NE, NM, NV, OK, OR, PA, SD, TN, TX, UT, WA, WY.

## `reportKind` (type: `string`):

Direct reports cover farm-to-buyer trades and asking prices across a state. Auction reports cover one hay auction.

## `reportIds` (type: `array`):

Optional. Specific report numbers, for example 2929 for the Missouri direct report.

## `commodityContains` (type: `string`):

Optional. Keep only rows whose hay type contains this text, for example alfalfa, bermuda, or straw.

## `maxReportAgeDays` (type: `integer`):

Rows from older reports are flagged in qcStatus (monthly reports get 14 extra days). 1 to 400.

## Actor input object example

```json
{
  "states": [
    "MO"
  ],
  "reportKind": "all",
  "maxReportAgeDays": 21
}
```

# Actor output Schema

## `results` (type: `string`):

All rows in the default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "states": [
        "MO"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("standardwork/hay-prices").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "states": ["MO"] }

# Run the Actor and wait for it to finish
run = client.actor("standardwork/hay-prices").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "states": [
    "MO"
  ]
}' |
apify call standardwork/hay-prices --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,standardwork/hay-prices"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/cVwhj192DgSWrVsvi/builds/uchCtYF40BXvDQSGg/openapi.json
