# FSIS Foreign Establishment Eligibility Monitor (`prixodik/fsis-foreign-establishment-monitor`) Actor

Export official foreign meat, poultry and egg establishment lists eligible for the United States. Filter suppliers and track listed, delisted and relisted dates with PDF provenance.

- **URL**: https://apify.com/prixodik/fsis-foreign-establishment-monitor.md
- **Developed by:** [Milchenko Oleksii](https://apify.com/prixodik) (community)
- **Categories:** Business, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.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

## FSIS Foreign Establishment Eligibility Monitor

Collect foreign establishment lists from the official USDA FSIS catalogue. Includes meat, poultry and separate egg-product documents. No source API key, proxy or AI service is required.

### Input

Example: {"fsisCountries":\["United Kingdom","Mexico","Canada"],"establishmentNumbers":\[],"maxDocuments":40,"maxRecords":1000,"mode":"snapshot","query":""}.

fsisCountries uses exact English country names from the catalogue. Empty means all published documents. A country selection includes its separate egg-product list. establishmentNumbers is an optional list of exact official numbers; preserve spaces and leading zeros. query is a literal case-insensitive phrase in the establishment name.

maxDocuments (1-40) and maxRecords (1-1000 per document) are safety limits. The run fails instead of silently truncating a selected document. A failed run does not save new history. Unsupported layouts, invalid dates and unexpected source content fail the run.

### Results

One row per establishment per source document. Stable IDs combine document URL and official establishment number, so egg-product and meat lists are never conflated. Dates are listedAt, delistedAt and relistedAt. Missing dates remain null; sourceDates preserves the original notation. Dates are interpreted month/day/year; repeated slashes are normalized and two-digit years use 1950-2049. A hyphenated date uses the same month/day ordering. These source-format assumptions are explicit and original values remain available.

countryEligibleProducts and countryNotes describe the country-level scope published on the catalogue page. They are NOT permissions for every listed plant. Where a PDF explicitly divides establishments into product groups, establishmentEligibleProducts preserves the group heading, establishmentProductScopeOriginal preserves its original wording, and establishmentScopeNotes preserves the accompanying conditions. productScope is establishment_section for these rows; otherwise it is country_only and establishmentEligibleProducts is null. documentNotes preserves source notices. No product categories are inferred from a company's name. shipmentEligibilityDetermined is always false. sourcePage, sourceUrl, documentDate, license and attribution support verification.

### Change tracking

Use a separate named stateStoreId for each recurring task. Start with snapshot, then run changes sequentially with the same filters. The first changes run establishes a baseline. Rows are saved as seen only after delivery within the spending limit. A document-date or page-number change alone does not count as an establishment change. Absence from a later list never means delisting: use the explicit source delistedAt/relistedAt fields and consult the document. A keyword-filtered empty result is not proof that a supplier is absent from the full source.

### Limits

This is a structured export of published FSIS facts, not legal advice, a safety certification or shipment clearance. Country eligibility, product restrictions and other requirements must be checked separately. Source PDFs can contain typographic errors and delayed updates; keep their dates and verify important decisions against FSIS. Availability checks over a short period do not guarantee future source stability.

### Pricing

Pay per event: **$0.01 per Actor start + $2 per 1,000 delivered records** ($0.002 each). A run returning 100 records costs $0.21; a run returning 10 costs $0.03; a run returning no records may incur the $0.01 start fee. No monthly rental. Platform usage is intended to be included.

### Source

https://www.fsis.usda.gov/inspection/import-export/import-export-library/eligible-foreign-establishments

Attribution: U.S. Department of Agriculture, Food Safety and Inspection Service. USDA states that most published information is in the public domain; separately protected material is excluded. This Actor does not reproduce agency logos or imply official endorsement. See https://www.usda.gov/about-usda/policies-and-links .

# Actor input Schema

## `fsisCountries` (type: `array`):

Exact English country names from the FSIS catalogue. Empty selects every listed document, including egg-product lists.

## `establishmentNumbers` (type: `array`):

Exact official numbers. Empty returns all matching establishments.

## `maxDocuments` (type: `integer`):

Fail instead of silently omitting documents for the selected countries.

## `maxRecords` (type: `integer`):

Fail instead of silently truncating a country document.

## `mode` (type: `string`):

All matches, or only new and changed records since a successful run.

## `stateStoreId` (type: `string`):

A separate named key-value store for each task. Required in changes mode. Run sequentially.

## `query` (type: `string`):

A literal case-insensitive phrase in the record name or fields. Empty disables filtering.

## Actor input object example

```json
{
  "fsisCountries": [],
  "establishmentNumbers": [],
  "maxDocuments": 40,
  "maxRecords": 1000,
  "mode": "snapshot",
  "query": ""
}
```

# Actor output Schema

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

Records delivered to the default dataset.

## `summary` (type: `string`):

Collection statistics, delivery limits and source warnings.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("prixodik/fsis-foreign-establishment-monitor").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("prixodik/fsis-foreign-establishment-monitor").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 '{}' |
apify call prixodik/fsis-foreign-establishment-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,prixodik/fsis-foreign-establishment-monitor"
        }
    }
}
```

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/yGPwVvffUG1meIFb8/builds/koiGdVyfNTqHkhgHm/openapi.json
