# FCC ECFS Filings (`maximedupre/fcc-ecfs`) Actor

Search public FCC ECFS dockets and proceedings with shared filters. Get filing rows with filer details, dates, document links, and source context, plus a changes-only mode for a saved baseline.

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

## Pricing

$3.60 / 1,000 filings

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### 📡 Find FCC ECFS filings by docket

For regulatory researchers, telecom teams, policy analysts, and legal research teams, FCC ECFS Filings searches one or more exact FCC proceedings or dockets and returns filing-level rows with filing identity, filer context, dates, available document links, and source context. Use the rows to review a public FCC filing, follow an available document link, or feed citable filing data into a research workflow.

- Search one or more exact FCC proceedings and review filing rows with **[FCC ECFS search](https://apify.com/maximedupre/fcc-ecfs/examples/fcc-ecfs-search)**.
- Find filing metadata by docket, filer, or text with **[ECFS filings search](https://apify.com/maximedupre/fcc-ecfs/examples/ecfs-filings-search)**.
- Look up filings tied to one FCC docket with **[FCC docket search](https://apify.com/maximedupre/fcc-ecfs/examples/fcc-docket-search)**.
- Filter FCC filings by filer or full-text words with **[FCC filings search](https://apify.com/maximedupre/fcc-ecfs/examples/fcc-filings-search)**.
- Collect filing IDs, dates, document links, and source URLs with **[FCC filings](https://apify.com/maximedupre/fcc-ecfs/examples/fcc-filings)**.

#### 📄 Filing rows with source links

**What you get**

Each saved row represents one FCC ECFS filing. It can include the filing ID, proceeding, filing type and title, filer, author, law firm, filer location, FCC bureau, receipt and dissemination dates, document link, document and page counts, viewing status, full-text match snippets, the first matching proceeding, and a change status for changes-only retrieval. Nested source context includes a canonical ECFS page, jurisdiction, retrieval time, and confidence context. Fields the source does not provide may be absent; no values are invented.

#### ▶️ Search a proceeding your way

**How it works**

Enter one or more exact proceedings or dockets. One shared set of filters applies to every value in the list. Full retrieval returns matching filings up to your `maxItems` cap. Changes-only retrieval returns filings found since the last baseline and includes their change status. Each eligible filing is saved at its first match; if another submitted value reaches the same filing later, that later match is ignored. The `matchedProceeding` field shows which submitted proceeding first found and saved the filing.

If you leave `maxItems` empty, the Actor returns all available results until the source is exhausted. Use a number when you want a smaller cap.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `proceedings` | string\[] | Required. One or more exact FCC proceeding or docket values. The same search settings apply to every value. |
| `filer` | string | Optional. Keeps filings that match this filer name. |
| `fullText` | string | Optional. Finds these words in filing text. |
| `receivedAfter` | date string | Optional. Keeps filings received on or after `YYYY-MM-DD`; JSON dates are read in UTC. |
| `retrievalMode` | enum string | `full` returns matching filings; `changesOnly` returns filings found since the last baseline and includes change status. |
| `orderBy` | enum string | Orders rows by filing receipt date or dissemination date. |
| `maxItems` | integer | Optional cap. Leave it empty to return all available results until the source is exhausted. |
| `apiKey` | secret string | Optional FCC or `api.data.gov` key. Public ECFS access does not need a key; add one only if you need higher source limits. |

**Example input**

This is the public input from a successful default run:

```json
{
  "proceedings": [
    "10-90"
  ],
  "retrievalMode": "full",
  "orderBy": "receivedDate",
  "maxItems": 1
}
```

#### 🧾 Output

**Run output**

The run output contains a `dataset` link. Open it to review the filing rows in the default overview or read them through the Apify API.

**Dataset rows**

| Field | Type | What it does |
| --- | --- | --- |
| `filingId` | string | Stable FCC ECFS ID for the filing. |
| `proceeding` | string | FCC proceeding or docket tied to the filing. |
| `filingType` | string | Filing type shown by FCC ECFS. |
| `filingTitle` | string | Filing title shown by FCC ECFS, when provided. |
| `filer` | string | Person or group that filed the record. |
| `author` | string | Author shown for the filing, when provided. |
| `lawFirm` | string | Law firm shown for the filing, when provided. |
| `filerLocation` | string | Filer address or location, when provided. |
| `fccBureau` | string | FCC bureau shown for the filing, when provided. |
| `receivedDate` | string | Date and time when FCC ECFS received the filing. |
| `disseminationDate` | string | Date and time when FCC ECFS made the filing public, when provided. |
| `documentUrl` | URL | Direct link to the filing document, when provided. |
| `documentCount` | integer | Number of documents attached to the filing, when provided. |
| `pageCount` | integer | Number of pages in the filing documents, when provided. |
| `viewingStatus` | string | Document viewing status shown by ECFS, when provided. |
| `textMatchSnippets` | string\[] | Source text snippets that help explain a full-text match, when available. |
| `matchedProceeding` | string | Submitted proceeding that first found and saved this filing. |
| `changeStatus` | string | Change state for this filing when changes-only retrieval is used. |
| `source` | object | Groups public source links and context for the filing. |
| `source.url` | URL | Canonical public FCC ECFS page for this filing. |
| `source.jurisdiction` | string | Jurisdiction linked to the source record, when provided. |
| `source.retrievedAt` | string | UTC time when the source record was retrieved. |
| `source.confidence` | string | Source confidence context, when provided. |

**Example filing row**

This complete row is copied from a successful hosted run. Fields the source did not provide are not added.

```json
{
  "filingId": "105210517314044",
  "proceeding": "26-96; 10-90",
  "filingType": "NOTICE OF PROPOSED RULEMAKING",
  "filer": "Wireline Competition Bureau",
  "author": "Wireline Competition Bureau",
  "lawFirm": "FCC",
  "fccBureau": "Wireline Competition Bureau",
  "receivedDate": "2026-05-21T17:00:00.000Z",
  "disseminationDate": "2026-05-21T17:00:00.000Z",
  "documentUrl": "https://docs.fcc.gov/public/attachments/FCC-26-35A1.pdf",
  "documentCount": 4,
  "viewingStatus": "Unrestricted",
  "matchedProceeding": "26-96",
  "source": {
    "url": "https://www.fcc.gov/ecfs/search/search-filings/filing/105210517314044",
    "jurisdiction": "US",
    "retrievedAt": "2026-08-04T22:58:23.646Z",
    "confidence": "FCC ECFS; source fields copied verbatim; unavailable optional fields omitted"
  }
}
```

#### 💳 Pricing

**Per filing**

The active price is $0.0036 for each filing saved to your dataset. Empty results, rejected requests, and errors are not billed.

#### 🔌 Integrations

**Apify workflow**

Open or export the dataset in Apify, or read its rows through the Apify API. This video shows an Apify integration workflow:

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

#### ❓ FAQ

##### What happens if the same filing matches more than one submitted proceeding?

The first eligible occurrence is saved. Later matches are ignored. `matchedProceeding` shows which submitted proceeding first found and saved the filing.

##### Can I search filing text?

Yes. Add `fullText` to find words in filing text. Matching rows can include `textMatchSnippets` when the source provides them.

##### What does changes-only retrieval return?

It returns filings found since the last baseline for the search and includes `changeStatus`. Use the same search settings on a later run to check for new filings.

##### Can I leave Maximum results empty?

Yes. The Actor returns all available results until the source is exhausted. Enter a number when you want a cap.

##### Do I need an FCC API key?

No. Public ECFS access does not need a key. You can add an FCC or `api.data.gov` key if you need higher source limits.

##### Does the Actor download filing documents?

No. It returns `documentUrl` when available and a public `source.url` for review. It does not download, transform, or mirror document files.

##### Can I search several proceedings together?

Yes. Add one or more exact values to `proceedings`. One shared set of filters applies to every value; the list does not create separate search configurations.

##### What happens when ECFS does not provide a field?

An unavailable optional field may be absent from the row. The Actor does not fill missing filing data with guesses, so use the source links for review.

##### Does this provide legal or policy advice?

No. It returns public FCC ECFS filing data and source links. It does not make legal, compliance, or policy conclusions.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

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

### 🔗 Related Actors

- [FCC License Search](https://apify.com/maximedupre/fcc-license-search-scraper) — Check public FCC ULS licenses and recent licensing activity when a filing points to a spectrum authorization.
- [Federal Register Scraper — Rules & Regulations](https://apify.com/maximedupre/federal-register) — Follow a filing topic into official Federal Register rules, notices, and dates.
- [FCC ECFS Scraper: Filings by Docket & Filer](https://apify.com/thoob/fcc-ecfs-filings) — Search public FCC filings by docket, filer, or full text.
- [FCC ECFS Public Notices & Filings Scraper](https://apify.com/v0iddo/fcc-public-notices) — Collect public notices and filing metadata by FCC docket.
- [Federal Register Monitor: Rules & Regulation Changes](https://apify.com/thoob/regulatory-change-monitor) — Track federal rules and notices related to an FCC policy topic.

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

# Actor input Schema

## `proceedings` (type: `array`):

Enter one or more exact FCC proceeding or docket values. The same search settings apply to every value in this list.

## `filer` (type: `string`):

Optional. Enter a filer name to keep only matching filings.

## `fullText` (type: `string`):

Optional. Enter words to find in the filing text.

## `receivedAfter` (type: `string`):

Optional. Keep filings received on or after this date. In JSON, use YYYY-MM-DD; the date is read in UTC.

## `retrievalMode` (type: `string`):

Choose all matching filings or only filings found since the last baseline. New filings include a change status.

## `orderBy` (type: `string`):

Order results by the filing receipt date or dissemination date.

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

Optional. Stop after this many results. Leave it empty to return all available results until the source is exhausted.

## `apiKey` (type: `string`):

Optional. Public ECFS access does not need a key. Add an FCC or api.data.gov key only if you need higher source limits.

## Actor input object example

```json
{
  "proceedings": [
    "WC 23-123"
  ],
  "retrievalMode": "full",
  "orderBy": "receivedDate",
  "maxItems": 1
}
```

# Actor output Schema

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

A link to the dataset of filing rows returned from FCC ECFS.

# 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 = {
    "proceedings": [
        "10-90"
    ],
    "retrievalMode": "full",
    "orderBy": "receivedDate",
    "maxItems": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/fcc-ecfs").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 = {
    "proceedings": ["10-90"],
    "retrievalMode": "full",
    "orderBy": "receivedDate",
    "maxItems": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/fcc-ecfs").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "proceedings": [
    "10-90"
  ],
  "retrievalMode": "full",
  "orderBy": "receivedDate",
  "maxItems": 1
}' |
apify call maximedupre/fcc-ecfs --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=maximedupre/fcc-ecfs",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/5hAYUs29wW7CFeP4h/builds/wkK8lyQ3buNqfQz66/openapi.json
