# Fish Stocking Reports Scraper (`maximedupre/fish-stocking-reports`) Actor

Collect official Utah Division of Wildlife Resources fish stocking events for selected report years. Filter by stocking date, waterbody, county, or species, then save quantity, length, date, and source URL in a reusable dataset.

- **URL**: https://apify.com/maximedupre/fish-stocking-reports.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Sports, Education, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.20 / 1,000 stocking events

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

### 🎣 Utah Fish Stocking Reports for Anglers and Data Teams

For Utah anglers, fishing guides, fisheries researchers, and data teams, this Actor turns official Utah Division of Wildlife Resources (Utah DWR) stocking reports into filtered dataset rows. Each row includes the waterbody, county, species, stocked quantity, average fish length, stocking date, report year, publishing agency, and official report URL. Use the rows to compare published stocking activity, plan a trip, or load a Utah DWR snapshot into your workflow.

**Use cases**

- Review official report rows for selected Utah years with **[Utah DWR Fish Stocking Report](https://apify.com/maximedupre/fish-stocking-reports/examples/utah-dwr-fish-stocking-report)**.
- Plan around published Utah stocking dates with **[Utah DWR Fish Stocking Schedule](https://apify.com/maximedupre/fish-stocking-reports/examples/utah-dwr-fish-stocking-schedule)**.
- Filter a Utah report to trout events with **[Utah Trout Stocking Report](https://apify.com/maximedupre/fish-stocking-reports/examples/utah-trout-stocking-report)**.
- Find published trout stocking dates with **[Utah Trout Stocking Schedule](https://apify.com/maximedupre/fish-stocking-reports/examples/utah-trout-stocking-schedule)**.
- Pull a current-year Utah snapshot with **[Utah Fish Stocking 2026](https://apify.com/maximedupre/fish-stocking-reports/examples/utah-fish-stocking-2026)**.

#### 📋 Utah DWR stocking event rows

**What you get**

The default dataset contains one flat row for each matching fish stocking event. Rows carry the source-derived event ID, place and species details, quantity, length, date, report year, publishing agency, and official report URL. Source names and values follow the published Utah DWR report.

#### ▶️ Run Utah reports by year and filter

**Run steps**

1. Enter one or more Utah DWR report years.
2. Optionally set inclusive start and end stocking dates, a partial waterbody name, county labels, or species labels.
3. Optionally set Max results, then start the run.
4. Open the default dataset.

Leave Max results empty to return all available results until the source is exhausted. Matching events are returned newest first. One run uses one shared filter scope, so combine your choices in the same input.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `reportYears` | array of strings | Required. Select one or more four-digit Utah DWR report years. The prefilled example is `["2025"]`. |
| `startDate` | string (`YYYY-MM-DD`) | Optional inclusive first stocking date. |
| `endDate` | string (`YYYY-MM-DD`) | Optional inclusive last stocking date. |
| `filters` | object | Optional shared filter group for waterbody, county, and species choices. Empty filter fields do not narrow the scope. |
| `filters.waterbodyName` | string | Optional partial waterbody name, such as `Pineview`. |
| `filters.counties` | array of strings | Optional county labels. Events matching any selected county label are included. |
| `filters.species` | array of strings | Optional species labels. Events matching any selected species label are included. |
| `maxItems` | integer | Optional positive limit on matching events. Leave it empty to return all available results until the source is exhausted. |

**Default input example**

This is the public input from a successful current-beta default-input run.

```json
{
  "reportYears": [
    "2025"
  ],
  "maxItems": 100
}
```

#### 🧾 Output

**Output fields**

| Field | Type | What it does |
| --- | --- | --- |
| `eventId` | string | Stable event identifier from the official Utah DWR report. |
| `waterbody` | string | Waterbody named in the stocking event. |
| `county` | string | Utah county named in the event. |
| `species` | string | Fish species named in the event. |
| `stockedQuantity` | integer | Number of fish stocked in the event. |
| `averageFishLength` | number | Average fish length reported for the event. |
| `stockingDate` | string (`YYYY-MM-DD`) | Date when the fish were stocked. |
| `reportYear` | integer | Published report year for the event. |
| `publishingAgency` | string | Agency that published the stocking report. |
| `reportUrl` | string (URL) | Official Utah DWR report URL for the event. |

**Genuine row from a successful current-beta run**

The row below is a complete row from a successful run with `reportYears` set to `2024` and `2025` and an inclusive date range.

```json
{
  "eventId": "1ce256a3111e3d557be5fa07",
  "waterbody": "SKYLINE P",
  "county": "WASHINGTON",
  "species": "RAINBOW",
  "stockedQuantity": 443,
  "averageFishLength": 9.06,
  "stockingDate": "2025-01-07",
  "reportYear": 2025,
  "publishingAgency": "Utah Division of Wildlife Resources",
  "reportUrl": "https://dwrapps.utah.gov/fishstocking/Fish?y=2025"
}
```

#### 💳 Pricing

**Charged event**

This Actor uses pay-per-event pricing. The charged event is **Stocking event**. One stocking event saved to your dataset creates one event charge. The exact tier price is shown in Apify Console.

#### 🔌 Integrations

**Dataset access**

After a run, open the default dataset in Apify Console or use its API link to read and export the saved rows.

Watch the walkthrough here:

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Are stocking dates inclusive?

Yes. `startDate` and `endDate` include their dates. Set the selected report years to cover the period you want.

##### Can I find a partial waterbody name?

Yes. `filters.waterbodyName` matches part of a waterbody name, such as `Pineview`.

##### How should I enter counties and species?

Use the county and species labels you want from Utah DWR. Each selected list matches any of its labels, and the filter choices apply together.

##### Can this find a fish stocking schedule near me?

Not by location. It returns Utah DWR reports that you filter by report year, dates, waterbody, county, or species. Use the waterbody filter to find a named Utah location.

##### How can I check the source for an event?

Use `reportUrl` in the row with its `eventId`.

##### What happens when Max results is empty?

It returns all available results until the source is exhausted.

##### Can one run search several separate scopes?

No. One run uses one shared filter scope. Use another run for a different combination of years or filters.

##### What happens when valid filters match no events?

The run can succeed with an empty dataset when the report scope and filters are valid.

##### Does this cover stocking reports outside Utah?

No. It returns official Utah DWR events only. It does not combine other states or agencies, geocode waterbodies, forecast conditions, or provide regulations, access permission, or safety guidance.

### 📝 Changelog

**v0.0** (20-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~fish-stocking-reports/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- **[Bassmaster Tournament Results & Standings Scraper](https://apify.com/maximedupre/bassmaster)**: Compare published tournament standings with stocking dates and species.
- **[Fish Stocking Reports Scraper](https://apify.com/automation-lab/utah-fish-stocking-reports)**: Compare another Utah DWR event dataset with your filtered rows.
- **[FishBase Species Database Scraper](https://apify.com/jungle_synthesizer/fishbase-species-database-api-scraper)**: Add species taxonomy and ecology context to stocking research.
- **[US River Water Level API - Official USGS Streamflow Gauges](https://apify.com/neverempty/us-river-water-levels)**: Pair stocking dates with official streamflow and water temperature observations.
- **[NOAA Essential Fish Habitat Consultation Screener](https://apify.com/automation-lab/noaa-essential-fish-habitat-consultation-screener)**: Check fish habitat context for fisheries permitting and project review.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `reportYears` (type: `array`):

Choose one or more four-digit Utah DWR report years for this run.

## `startDate` (type: `string`):

Optional inclusive first stocking date in YYYY-MM-DD format.

## `endDate` (type: `string`):

Optional inclusive last stocking date in YYYY-MM-DD format.

## `filters` (type: `object`):

Optionally narrow the selected report years by partial waterbody name, county, or species. Empty filter fields do not narrow the scope.

## `maxItems` (type: `integer`):

Optional positive limit on matching events. Leave this field empty to return all available results until the source is exhausted.

## Actor input object example

```json
{
  "reportYears": [
    "2025"
  ],
  "maxItems": 100
}
```

# Actor output Schema

## `dataset` (type: `string`):

Open the dataset with one row for each matching Utah DWR fish stocking event.

# 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 = {
    "reportYears": [
        "2025"
    ],
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/fish-stocking-reports").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 = {
    "reportYears": ["2025"],
    "maxItems": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/fish-stocking-reports").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 '{
  "reportYears": [
    "2025"
  ],
  "maxItems": 100
}' |
apify call maximedupre/fish-stocking-reports --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/fish-stocking-reports"
        }
    }
}
```

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/4cyaBbnHSgZXtDZvc/builds/a5PUXe23C88pCLjQo/openapi.json
