# Meat & Poultry Recall Database — FSIS Scraper (`jungle_synthesizer/fsis-usda-meat-poultry-recall-scraper`) Actor

USDA FSIS meat, poultry, and egg recall database. Returns recall number, date, classification, reason, recalling firm, establishment number, affected states, and press release links — filterable by date range, classification, reason, state, or status.

- **URL**: https://apify.com/jungle_synthesizer/fsis-usda-meat-poultry-recall-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Business, Other
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.80 / 1,000 record scrapeds

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

## USDA Meat & Poultry Recall Database — FSIS Scraper

Scrape USDA FSIS recall records for meat, poultry, and egg products — the federal recall authority that the crowded FDA-recall space doesn't touch. Returns recall number, date, classification, reason, recalling firm, establishment number, affected states, and press release links across a 2,000+ record multi-year archive.

***

### FSIS Recall Scraper Features

- Extracts recall classification, reason, recalling firm, and establishment number for every record
- Filters by date range, classification, reason, affected state, or status — leave any of them empty to pull the whole archive
- Returns affected states as a clean list instead of a sentence you have to parse yourself
- Separates active public health alerts from closed recalls, so you don't have to guess from the headline
- No account or API key required

***

### Who Uses FSIS Recall Data?

- **Grocery and food-service buyers** — screen purchase orders against active meat, poultry, and egg recalls before product reaches a shelf
- **Compliance and food-safety teams** — track Class I vs. Class II/III severity trends and build internal alerting off establishment numbers
- **Insurance and legal professionals** — pull recalls tied to contamination or undeclared-allergen reasons for claims support
- **Supply chain and quality teams** — screen a supplier's establishment number against recall history before signing a contract
- **Researchers and journalists** — analyze recall patterns by reason, classification, or state over a multi-year archive, or at least the parts of it that make a good headline

***

### How FSIS Recall Scraper Works

1. You set optional filters — classification, reason, state, status, date range, or a title keyword — or leave everything blank to pull the full archive.
2. The scraper matches USDA's recall data for meat, poultry, and egg products against your filters.
3. Each recall comes back as one clean record: classification, reason, recalling firm, affected states, and the press release link, ready to drop into a spreadsheet or pipeline.

***

### Input

#### Basic: recent Class I recalls

```json
{
  "dateFrom": "2026-01-01",
  "dateTo": "2026-06-30",
  "classifications": ["Class I"],
  "maxItems": 50
}
```

#### Filter by state and status

```json
{
  "states": ["Texas", "California"],
  "statuses": ["active"],
  "maxItems": 25
}
```

#### Pull the full archive

```json
{
  "maxItems": 0
}
```

#### Input Parameters

| Field           | Type    | Default | Description |
|-----------------|---------|---------|---------------------------------------------------------------------------------------------------------------|
| dateFrom        | string  | `""`    | Return recalls announced on or after this date (YYYY-MM-DD). Leave empty for the full archive. |
| dateTo          | string  | `""`    | Return recalls announced on or before this date (YYYY-MM-DD). Leave empty for the full archive. |
| classifications | array   | `[]`    | USDA recall classes to include: Public Health Alert, Class I, Class II, Class III. Leave empty for all. |
| reasons         | array   | `[]`    | Recall reason categories to include (e.g. Product Contamination, Unreported Allergens). Leave empty for all. |
| states          | array   | `[]`    | Only return recalls affecting at least one of these states/territories. Leave empty for all. |
| statuses        | array   | `[]`    | `active` or `closed`. Leave empty for both. |
| titleSearch     | string  | `""`    | Search recall titles for a keyword (e.g. "Listeria", "chicken"). |
| maxItems        | integer | `15`    | Maximum number of recall records to return. Set to `0` for the full archive. |

***

### FSIS Recall Scraper Output Fields

#### Example Output

```json
{
  "id": "023-2026",
  "recall_number": "023-2026",
  "recall_date": "2026-09-25",
  "title": "Example Foods LLC Recalls Raw, Frozen Pork Sausage Products Due to Possible Foreign Matter Contamination",
  "product_name": "10-lb. cardboard box cases containing \"PORK SAUSAGE LINKS\" with \"ITEM 393\" printed on the box",
  "establishment_number": "6944",
  "recalling_firm": "Example Foods, LLC",
  "recall_classification": "Class I",
  "recall_reason": "Product Contamination",
  "summary": "Example Foods LLC, a McCook, Ill., establishment, is recalling approximately 2,320 pounds of raw, frozen pork breakfast sausage products that may be contaminated with foreign material, specifically clear, hard plastic...",
  "states_affected": ["California", "Florida", "Michigan", "Nevada"],
  "quantity_recovered": "2,320 pounds",
  "press_release_url": "https://www.fsis.usda.gov/recalls-alerts/example-foods-llc-recalls-raw-frozen-pork-sausage-products",
  "product_label_url": "https://www.fsis.usda.gov/sites/default/files/food_label_pdf/2026-09/Recall-023-2026-Labels.pdf",
  "status": "closed",
  "url": "https://www.fsis.usda.gov/recalls-alerts/example-foods-llc-recalls-raw-frozen-pork-sausage-products",
  "scrapedAt": "2026-09-26T14:32:10.000Z"
}
```

#### Output Field Reference

| Field                 | Type     | Description                                                             |
|-----------------------|----------|-------------------------------------------------------------------------|
| id                    | string   | Unique identifier for this record (FSIS recall number)                  |
| recall_number         | string   | FSIS recall number (e.g., "023-2026")                                   |
| recall_date           | string   | Date the recall was announced (YYYY-MM-DD)                              |
| title                 | string   | Recall headline/title                                                   |
| product_name          | string   | Affected product description(s)                                         |
| establishment_number  | string   | USDA establishment (EST.) number, when stated in the recall summary     |
| recalling_firm        | string   | Name of the recalling company/establishment                             |
| recall_classification | string   | USDA recall class: Public Health Alert, Class I, Class II, or Class III |
| recall_reason         | string   | Recall reason(s), e.g. Product Contamination, Unreported Allergens      |
| summary               | string   | Full recall summary, plain text                                         |
| states_affected       | string\[] | States/territories the recalled product was distributed to              |
| quantity_recovered    | string   | Quantity of product recovered, as stated by FSIS                        |
| press_release_url     | string   | FSIS press release / recall notice URL                                  |
| product_label_url     | string   | Product label PDF URL, when present in the recall summary               |
| status                | string   | `active` or `closed`                                                    |
| url                   | string   | Canonical source URL for this record (same as press_release_url)        |
| scrapedAt             | string   | ISO-8601 timestamp when the record was scraped                          |

***

### FAQ

#### How do I scrape FSIS meat and poultry recalls?

FSIS Recall Scraper takes an optional set of filters — date range, classification, reason, state, status, or a title keyword. Leave everything blank and it returns the full archive, no account or API key needed.

#### Can I filter by recall classification or state?

Yes. `classifications` and `states` both take a list of values, so you can request Class I recalls affecting Texas and California in one run, or any other combination.

#### Does it cover closed recalls too, or just active alerts?

Both. Set `statuses: ["active"]` to see only what's currently open, `statuses: ["closed"]` for the historical record, or leave it empty for everything.

#### What does it cost to run?

Roughly $0.10 per run plus $0.001 per record. A filtered pull of 50 recalls costs about $0.15. A full 2,000+ record archive pull runs to roughly $2.10.

#### Do I need an account or API key for FSIS data?

No. FSIS Recall Scraper needs nothing from you beyond your filters — no USDA account, no API key, no login.

***

### Need More Features?

Need custom fields, filters, or a different data source? [File an issue](https://console.apify.com/actors/issues) or get in touch.

### Why Use FSIS Recall Scraper?

- **Covers USDA's jurisdiction, not FDA's** — meat, poultry, and egg recalls sit outside the dozens of FDA-recall tools already on the store.
- **Clean, structured fields** — establishment number, classification, and reason come back normalized, not buried in a press-release paragraph you have to parse yourself.
- **Affordable** — roughly $0.001 per record. A full archive pull costs about the same as a coffee, and a filtered query costs pennies.

# Actor input Schema

## `sp_intended_usage` (type: `string`):

What will this data feed? E.g. lead lists, KYB checks, price tracking.

## `sp_improvement_suggestions` (type: `string`):

Provide any feedback or suggestions for improvements.

## `sp_contact` (type: `string`):

We'll personally help with your use case. No spam.

## `dateFrom` (type: `string`):

Return recalls announced on or after this date (YYYY-MM-DD). Leave empty for the full archive.

## `dateTo` (type: `string`):

Return recalls announced on or before this date (YYYY-MM-DD). Leave empty for the full archive.

## `classifications` (type: `array`):

USDA recall severity classes to include. Leave empty for all.

## `reasons` (type: `array`):

Recall reason categories to include. Leave empty for all.

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

Only return recalls affecting at least one of these states/territories. Leave empty for all.

## `statuses` (type: `array`):

Only return recalls with this status. Leave empty for both active and closed.

## `titleSearch` (type: `string`):

Search recall titles for a keyword (e.g., 'Listeria', 'chicken'). Leave empty for all.

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

Maximum number of recall records to return.

## Actor input object example

```json
{
  "sp_contact": "Share your email here...",
  "classifications": [],
  "reasons": [],
  "states": [],
  "statuses": [],
  "maxItems": 15
}
```

# Actor output Schema

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

No description

# 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 = {
    "sp_contact": "Share your email here...",
    "dateFrom": "",
    "dateTo": "",
    "titleSearch": "",
    "maxItems": 15
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/fsis-usda-meat-poultry-recall-scraper").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 = {
    "sp_contact": "Share your email here...",
    "dateFrom": "",
    "dateTo": "",
    "titleSearch": "",
    "maxItems": 15,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/fsis-usda-meat-poultry-recall-scraper").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 '{
  "sp_contact": "Share your email here...",
  "dateFrom": "",
  "dateTo": "",
  "titleSearch": "",
  "maxItems": 15
}' |
apify call jungle_synthesizer/fsis-usda-meat-poultry-recall-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/fsis-usda-meat-poultry-recall-scraper"
        }
    }
}
```

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/k38WFZCbDfGDKp7We/builds/7c8FrWkGzMB8r1uUs/openapi.json
