# Form 5500 Employee Benefit Plan & 401(k) Filings Scraper (`scrapers_lat/form-5500-benefit-plans-scraper`) Actor

Scrape US Form 5500 benefit plan filings: 401(k), pension, ESOP and health plans with the sponsoring employer name, EIN, mailing address, participant counts, plan assets and decoded plan features. Filter by employer, state, NAICS sector, plan year, headcount or assets. Export to JSON, CSV or Excel.

- **URL**: https://apify.com/scrapers\_lat/form-5500-benefit-plans-scraper.md
- **Developed by:** [Scrapers Lat](https://apify.com/scrapers_lat) (community)
- **Categories:** Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $12.75 / 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.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Form 5500 Employee Benefit Plan & 401(k) Filings Scraper

> Every US employer that offers a 401(k), pension, ESOP or company health plan files an annual Form 5500. This scraper turns those filings into a clean B2B dataset: the sponsoring employer with its mailing address and EIN, how many people the plan covers, how much money it holds, how fast both are growing, and exactly which benefits the plan provides — decoded from the official feature codes into plain English.

**📥 [Input](https://apify.com/scrapers_lat/form-5500-benefit-plans-scraper/input-schema) · 📤 [Output](https://apify.com/scrapers_lat/form-5500-benefit-plans-scraper/output-schema) · 💰 [Pricing](https://apify.com/scrapers_lat/form-5500-benefit-plans-scraper/pricing) · ▶️ [Examples](https://apify.com/scrapers_lat/form-5500-benefit-plans-scraper/examples)**

![Apify](https://img.shields.io/badge/Platform-Apify-1CE1CE?logo=apify\&logoColor=white)
![Data](https://img.shields.io/badge/Data-US%20benefit%20plans-blue)
![Output](https://img.shields.io/badge/Output-JSON%20%7C%20CSV%20%7C%20Excel-orange)

<table><tr>
<td align="center"><strong>Employer + EIN</strong><br>with mailing address</td>
<td align="center"><strong>Participants & plan assets</strong><br>start vs end of year</td>
<td align="center"><strong>JSON / CSV / Excel</strong><br>output formats</td>
</tr></table>

<br>

### What you get

Each row is one Form 5500 filing, flattened so it opens cleanly in a spreadsheet:

- **The employer** — legal sponsor name, EIN (raw and formatted), street address, city, state, ZIP and country.
- **The plan** — plan name, three-digit plan number, plan year, date the filing was received, and a direct link to the official filing document.
- **Scale** — participants at the start and end of the year, the change and percentage change, plus an `employerSizeBand` such as `50-249` or `5000+` that works as a company-size segment.
- **Money** — plan assets at the start and end of the year, the dollar and percentage change, and assets per participant.
- **What the plan actually does** — the official plan feature codes plus a plain-English description of each, and ready-made flags: `is401kPlan`, `hasAutomaticEnrollment`, `hasBrokerageWindow`, `isEsop`, `isCashBalancePlan`, `isFrozenPlan`, `isPooledEmployerPlan`, `isControlledGroupMember`, `usesLeasedEmployees`, `offersHealthBenefits`, `offersDentalBenefits`, `offersVisionBenefits`, `offersLifeInsurance`, `offersDisabilityBenefits`, `offersSeverancePay`.
- **Classification** — single-employer, multiple-employer, multiemployer or direct filing entity, and whether the plan is a pension or a welfare plan.

By default the scraper drops superseded filings, so an amended re-filing never shows up — or gets charged — twice alongside the original it replaced.

### Who is it for

| Use case | Who benefits |
|---|---|
| Retirement plan prospecting | 401(k) advisors, recordkeepers and TPAs targeting plans by assets, headcount and features |
| Employee benefits sales | Brokers and insurtechs finding employers whose health, dental or vision plans are in scope |
| B2B lead generation | Sales teams building verified company lists with real addresses, EINs and headcount proxies |
| Competitive and market research | Analysts sizing the retirement and benefits market by state, industry or plan feature |
| Corporate and credit research | Investors tracking pension exposure, frozen plans and plan asset trends over time |
| Compliance and due diligence | KYB and diligence teams confirming an employer's ERISA filing footprint |

### How to use it

1. Type one or more **employer or plan names** to search, or leave that empty and let the filters do the work.
2. Narrow with any combination of **state, city, ZIP, EIN, NAICS industry, plan year, participant count and plan assets**.
3. Focus the plan type: pick a **plan category** (retirement vs health and welfare), tick **only plans with a 401(k) feature**, or list specific **plan feature codes**.
4. Choose whether you want a filing history or **one row per plan** (latest plan year only), pick a **sort**, set **Max Filings To Scrape** and run.
5. Export as JSON, CSV or Excel, or pull the dataset through the Apify API.

### Frequently Asked Questions

**How far back does the data go?**
Filings are available from the 2009 plan year onward, including plan years filed in the current year.

**Can I get every plan for one company?**
Yes. Search by the company's EIN to pull every plan it sponsors and every year it has filed. A large employer typically files separately for its 401(k) plan and its health and welfare plan.

**Does the filing tell me how many employees a company has?**
Not directly, but participant counts are the closest public proxy and are usually within range of total headcount for a 401(k) plan. The `employerSizeBand` field turns that into a ready-made size segment.

**Why do some rows have no plan assets?**
Small plans and unfunded or fully insured welfare plans are not required to report assets, so those fields are empty rather than zero. Filter with a minimum asset amount to keep only funded plans.

**Can I find companies that just launched or froze a plan?**
Yes. Sort by date received to surface the newest filings, use the frozen plan flag, or compare participant and asset changes across plan years.

**Will I be charged for a run that finds nothing?**
No. Only real filings are billable, so an empty or failed run costs nothing.

**How many filings can one run return?**
As many as you set. Very broad searches are split internally so the run reaches far beyond the single-query limit the public search imposes; if a search is broader than one run can exhaust, the log says so instead of silently truncating.

### Export, API and AI agents (x402 + MCP)

Export the scraped data to **JSON, CSV or Excel**, pull it as a **dataset** through the Apify **API**, or wire it into your app with **no code**. This web scraper and data extractor also works for bulk data extraction and scheduled runs.

For AI agents: this Actor is available on **x402**, Apify's agentic payment standard built with Coinbase. An AI agent can discover, pay for and run it on its own with a funded wallet and a single HTTP request: no account, no subscription, no API key and no human in the loop. It also runs as an **MCP** tool inside Claude, Cursor and other AI clients out of the box. Learn more about [x402 agentic payments on Apify](https://docs.apify.com/platform/integrations/x402).

### Related scrapers

- [SEC IAPD Investment Advisers Scraper](https://apify.com/scrapers_lat/sec-iapd-investment-advisers-scraper)
- [SEC Form D Private Placements Scraper](https://apify.com/scrapers_lat/sec-form-d-private-placements-scraper)
- [FINRA BrokerCheck Scraper](https://apify.com/scrapers_lat/finra-brokercheck-scraper)

### More scrapers at scrapers.lat

This actor is built and maintained by [scrapers.lat](https://scrapers.lat), where we publish scrapers for public platforms: finance, news, real estate, jobs, e-commerce and government data. Browse the full catalog or ask us for a custom scraper at [scrapers.lat](https://scrapers.lat).

***

> This actor is an independent tool and has no affiliation with any government agency. It only accesses publicly available benefit plan filing data. Use the results in accordance with the source's terms.

# Actor input Schema

## `searchQueries` (type: `array`):

One search per entry. Matches the sponsoring employer name or the plan name, so "Tesla" returns every Tesla benefit plan filing. Leave empty to sweep purely by the filters below.

## `sponsorNames` (type: `array`):

Restrict to these employer names, matched as a whole phrase. Use when a keyword search returns too many unrelated employers.

## `planNames` (type: `array`):

Restrict to these plan names, matched as a whole phrase, e.g. "Acme Inc 401(k) Plan".

## `eins` (type: `array`):

Nine-digit employer identification numbers, with or without the dash. The most precise way to pull every plan and every year for one company.

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

Two-letter US state codes of the sponsoring employer, e.g. CA, TX, NY.

## `cities` (type: `array`):

Cities of the sponsoring employer, e.g. Chicago. Combine with a state for accurate local targeting.

## `zipCodes` (type: `array`):

Five or nine digit ZIP codes of the sponsoring employer.

## `businessSectors` (type: `array`):

Two-digit NAICS sector codes, e.g. 62 health care, 54 professional services, 31 manufacturing, 52 finance, 23 construction, 72 accommodation and food.

## `businessCodes` (type: `array`):

Full six-digit NAICS business codes for precise industry targeting, e.g. 541511 custom computer programming.

## `planCategory` (type: `string`):

Narrow to retirement plans or to health and welfare plans.

## `only401k` (type: `boolean`):

Return only plans that report a Code section 401(k) feature.

## `planCharacteristicCodes` (type: `array`):

Official Form 5500 plan characteristic codes, e.g. 2J 401(k) feature, 2S automatic enrollment, 2O ESOP, 1C cash balance, 4A health, 4D dental, 4E vision.

## `employerPlanTypes` (type: `array`):

1 single-employer, 2 multiple-employer, 3 multiemployer, 4-10 direct filing entities (master trusts, collective trusts, pooled separate accounts).

## `planYearFrom` (type: `integer`):

Earliest plan year to include. Filings go back to 2009.

## `planYearTo` (type: `integer`):

Latest plan year to include.

## `minParticipants` (type: `integer`):

Only plans covering at least this many people at the start of the year — a reliable proxy for employer headcount.

## `maxParticipants` (type: `integer`):

Only plans covering at most this many people.

## `minAssetsUsd` (type: `integer`):

Only plans holding at least this much at the end of the year.

## `maxAssetsUsd` (type: `integer`):

Only plans holding at most this much at the end of the year.

## `countryCodes` (type: `array`):

Two-letter country codes for employers based outside the US, e.g. CA, GB, BM, KY.

## `latestFilingOnly` (type: `boolean`):

Keep only the most recently received filing for each plan year, so amended re-filings do not appear (and are not charged) twice.

## `latestPlanYearOnly` (type: `boolean`):

Return one row per plan — its most recent plan year only. Ideal for building a current prospect list rather than a filing history.

## `sortBy` (type: `string`):

Order of the returned filings.

## `sortOrder` (type: `string`):

Descending puts the newest, largest or best-funded plans first.

## `maxFilings` (type: `integer`):

Maximum number of Form 5500 filings to return in this run.

## `withAiSummary` (type: `boolean`):

Add a plain-English AI summary of each benefit plan (type, sponsor, participants, assets, notable features) via AI. Opt-in, billed per enriched record; requires a paid Apify plan.

## Actor input object example

```json
{
  "searchQueries": [
    "Tesla"
  ],
  "planCategory": "any",
  "only401k": false,
  "latestFilingOnly": true,
  "latestPlanYearOnly": false,
  "sortBy": "dateReceived",
  "sortOrder": "desc",
  "maxFilings": 50,
  "withAiSummary": false
}
```

# 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 = {
    "searchQueries": [
        "Tesla"
    ],
    "maxFilings": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapers_lat/form-5500-benefit-plans-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 = {
    "searchQueries": ["Tesla"],
    "maxFilings": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("scrapers_lat/form-5500-benefit-plans-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 '{
  "searchQueries": [
    "Tesla"
  ],
  "maxFilings": 50
}' |
apify call scrapers_lat/form-5500-benefit-plans-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapers_lat/form-5500-benefit-plans-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/uZD4ADsn9e1nhFzyO/builds/mPu00c8Okg6N2zg5n/openapi.json
