# DOL EFAST2 Form 5500 Benefit Plan Scraper (`jungle_synthesizer/dol-efast2-form-5500-benefit-plan-scraper`) Actor

Pulls the complete DOL EFAST2 Form 5500 / 5500-SF benefit-plan universe — sponsor identity, plan identity, participant counts and asset values — joined with Schedule A (insurance carrier and broker-of-record commissions) and Schedule C (service-provider compensation) on ACK\_ID.

- **URL**: https://apify.com/jungle\_synthesizer/dol-efast2-form-5500-benefit-plan-scraper.md
- **Developed by:** [BowTiedRaccoon](https://apify.com/jungle_synthesizer) (community)
- **Categories:** Lead generation
- **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

## Form 5500 Benefit Plan & Broker Database — DOL EFAST2 Scraper

Pulls the complete ERISA Form 5500 benefit-plan universe from the [DOL's EFAST2 system](https://www.efast.dol.gov/), the federal filing system every employer-sponsored retirement and welfare plan reports to. Returns sponsor identity, plan identity, participant counts, and asset data for every plan year from 2009 to the current one, joined with the insurance carrier and broker of record (Schedule A) and the service providers behind the plan (Schedule C).

***

### DOL EFAST2 Form 5500 Scraper Features

- Covers every Form 5500 and Form 5500-SF filing DOL publishes, 2009 through the current plan year — roughly 1.1 million filings annually.
- Returns sponsor identity in full: legal name, DBA, EIN, mailing address, phone, and NAICS business code.
- Joins Schedule A to each filing — the insurance carrier, contract number, and the broker or agent of record with their commission and fees.
- Joins Schedule C to each filing — the recordkeeper, TPA, auditor, or adviser, along with their direct compensation and service codes.
- Returns participant counts (active, retired, with account balance) and, for small-plan 5500-SF filings, inline asset and contribution totals.
- Emits one row per attached schedule entry alongside the base filing, so broker and provider names are directly filterable — no second join required.

***

### Who Uses Form 5500 Benefit Plan Data?

- **Retirement-plan advisors** — prospect employers by plan asset size, participant count, and incumbent broker.
- **Group-benefits brokers** — find plans with a named broker of record worth displacing, and the commission they're currently earning.
- **Compliance and due-diligence teams** — verify a plan's sponsor, administrator, and service-provider relationships before signing anything.
- **Recordkeepers and TPAs** — track compensation disclosures across every plan in the market they compete in.
- **Data and research teams** — build a standing feed of new, amended, and final filings, or compute year-over-year participant and asset trends.

***

### How DOL EFAST2 Form 5500 Scraper Works

1. Pick the plan years and form types you want. Leave both empty and you get the entire 2009-2026 archive.
2. The actor retrieves DOL's filing and schedule records for those years and joins them by filing ID.
3. Each filing comes back as one base record, plus an additional record for every attached Schedule A or Schedule C entry it has.
4. Set `maxItems` to cap the run at a specific record count, or leave it high for a full year's worth — or the whole archive's worth — of filings.

***

### Input

```json
{
  "planYears": ["2023", "2024"],
  "formTypes": ["5500-SF"],
  "includeScheduleA": true,
  "includeScheduleC": true,
  "maxItems": 5000
}
```

| Field              | Type    | Default               | Description |
|--------------------|---------|-----------------------|---|
| `planYears`        | array   | all years (2009-2026) | Plan filing years to include. Leave empty for the full archive. |
| `formTypes`        | array   | both                  | `5500` (large plans) and/or `5500-SF` (small plans). Leave empty for both. |
| `includeScheduleA` | boolean | `true`                | Join Schedule A — insurance carrier, contract number, and broker/agent of record. |
| `includeScheduleC` | boolean | `true`                | Join Schedule C — service provider name and direct compensation. |
| `maxItems`         | integer | `10`                  | Maximum number of records — base filings plus any joined schedule rows — to return. |

Leaving `planYears` and `formTypes` empty pulls the widest slice DOL publishes; narrow either one to scope a run to exactly what you need.

***

### DOL EFAST2 Form 5500 Scraper Output Fields

A base filing row (`schedule: null`):

```json
{
  "ack_id": "20100211140439P040003583622001",
  "form_type": "5500",
  "plan_name": "ANDREW BONAVITA DMD PC 401K PROFITSHARING",
  "plan_number": "001",
  "sponsor_name": "ANDREW BONAVITA DMD PC",
  "sponsor_ein": "043471038",
  "sponsor_address_city": "LONGMEADOW",
  "sponsor_address_state": "MA",
  "plan_type": "defined_contribution",
  "benefit_codes": ["2E", "2G", "2J", "2K", "3E"],
  "participants_total": 6,
  "participants_active": 5,
  "signer_name": "ANDREW BONAVITA",
  "signer_role": "admin",
  "date_received": "2010-02-11",
  "schedule": null
}
```

The same filing's joined Schedule A row (`schedule: "A"`):

```json
{
  "ack_id": "20100211140439P040003583622001",
  "form_type": "5500",
  "plan_name": "ANDREW BONAVITA DMD PC 401K PROFITSHARING",
  "sponsor_name": "ANDREW BONAVITA DMD PC",
  "schedule": "A",
  "insurance_carrier_name": "ING LIFE INSURANCE AND ANNUITY",
  "insurance_carrier_ein": "710294708",
  "insurance_contract_number": "PHQ438",
  "broker_name": "AMERITAS INVESTMENT CORP",
  "broker_commission_amount": 188,
  "broker_fees_amount": null
}
```

| Field                          | Type    | Description                                                                     |
|--------------------------------|---------|---------------------------------------------------------------------------------|
| `ack_id`                       | string  | DOL acknowledgement ID — the join key across the filing and every schedule row. |
| `form_type`                    | string  | `5500` or `5500-SF`.                                                            |
| `plan_year_begin_date`         | string  | Plan year start date.                                                           |
| `form_tax_period`              | string  | End of the plan year covered by this filing.                                    |
| `plan_name`                    | string  | Plan name.                                                                      |
| `plan_number`                  | string  | Plan number.                                                                    |
| `plan_effective_date`          | string  | Date the plan became effective.                                                 |
| `plan_entity_type`             | string  | Plan entity type code.                                                          |
| `dfe_plan_entity_type`         | string  | DFE plan entity type (Form 5500 large-plan filings only).                       |
| `is_initial_filing`            | boolean | Whether this is the plan's first filing.                                        |
| `is_amended`                   | boolean | Whether this filing amends a prior one.                                         |
| `is_final_filing`              | boolean | Whether this is the plan's final filing.                                        |
| `is_short_plan_year`           | boolean | Whether the reported plan year is a short year.                                 |
| `collective_bargaining`        | boolean | Whether the plan covers collectively bargained employees.                       |
| `sponsor_name`                 | string  | Plan sponsor's legal name.                                                      |
| `sponsor_dba_name`             | string  | Sponsor's DBA name.                                                             |
| `sponsor_ein`                  | string  | Sponsor's EIN.                                                                  |
| `sponsor_phone`                | string  | Sponsor's phone number.                                                         |
| `sponsor_address_line1`        | string  | Sponsor mailing address line 1.                                                 |
| `sponsor_address_city`         | string  | Sponsor mailing address city.                                                   |
| `sponsor_address_state`        | string  | Sponsor mailing address state.                                                  |
| `sponsor_address_zip`          | string  | Sponsor mailing address ZIP.                                                    |
| `sponsor_country`              | string  | Sponsor country.                                                                |
| `sponsor_business_code`        | string  | Sponsor's NAICS business code.                                                  |
| `admin_name`                   | string  | Plan administrator name.                                                        |
| `admin_ein`                    | string  | Plan administrator EIN.                                                         |
| `admin_phone`                  | string  | Plan administrator phone number.                                                |
| `plan_type`                    | string  | `defined_contribution`, `defined_benefit`, `welfare`, or `other`.               |
| `benefit_codes`                | array   | Pension and welfare benefit feature codes (e.g. `2A`, `2E`, `4A`).              |
| `participants_total`           | number  | Total participants, end of year.                                                |
| `participants_active`          | number  | Active participants, end of year.                                               |
| `participants_retired`         | number  | Retired or separated participants.                                              |
| `participants_with_balance`    | number  | Participants with an account balance.                                           |
| `total_assets_boy`             | number  | Total plan assets, beginning of year — 5500-SF filings only.                    |
| `total_assets_eoy`             | number  | Total plan assets, end of year — 5500-SF filings only.                          |
| `total_contributions`          | number  | Total contributions received — 5500-SF filings only.                            |
| `total_distributions`          | number  | Total distributions paid to participants — 5500-SF filings only.                |
| `signer_name`                  | string  | Name of the person who signed the filing.                                       |
| `signer_role`                  | string  | `admin` or `sponsor`.                                                           |
| `date_received`                | string  | Date DOL received the filing.                                                   |
| `schedule`                     | string  | `null` for a base filing row, `A` or `C` for a joined schedule row.             |
| `insurance_carrier_name`       | string  | Schedule A — insurance carrier name.                                            |
| `insurance_carrier_ein`        | string  | Schedule A — insurance carrier EIN.                                             |
| `insurance_contract_number`    | string  | Schedule A — insurance contract/policy number.                                  |
| `broker_name`                  | string  | Schedule A — the broker or agent of record, where DOL publishes one.            |
| `broker_commission_amount`     | number  | Schedule A — broker commission amount.                                          |
| `broker_fees_amount`           | number  | Schedule A — broker fees amount.                                                |
| `service_provider_name`        | string  | Schedule C — service provider name (recordkeeper, TPA, auditor, adviser).       |
| `service_provider_ein`         | string  | Schedule C — service provider EIN.                                              |
| `service_provider_relation`    | string  | Schedule C — the provider's stated role.                                        |
| `service_provider_comp_amount` | number  | Schedule C — direct compensation amount.                                        |
| `service_code`                 | array   | Schedule C — service codes for this provider.                                   |

***

### FAQ

#### How do I get Form 5500 data from DOL EFAST2?

Run DOL EFAST2 Form 5500 Benefit Plan Scraper with a plan year and form type, or leave both blank for the full 2009-2026 archive. You get back structured records instead of downloading and parsing government filings by hand.

#### What years of Form 5500 filings are covered?

Every plan year DOL publishes, 2009 through the current one. Narrow to specific years with `planYears`, or leave it empty and get all of them in one run.

#### Can I get the broker or insurance carrier behind a plan?

Yes. `includeScheduleA` joins each filing to its Schedule A entries, which carry the insurance carrier name, contract number, and — where DOL discloses one — the named broker or agent of record with their commission.

#### Does this include Schedule C compensation data?

It does. `includeScheduleC` joins each filing to its Schedule C service providers — recordkeepers, TPAs, auditors, advisers — along with their direct compensation and service codes.

#### Do I need a DOL account or API key?

No. DOL EFAST2 filings are public record, so there's no account, login, or API key to configure.

***

### Need More Features?

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

### Why Use DOL EFAST2 Form 5500 Benefit Plan Scraper?

- **Complete history, not just this year** — 2009 through the current plan year in one actor, so year-over-year participant and asset changes are yours to compute.
- **Schedules joined, not just the base filing** — most Form 5500 sources stop at plan name and sponsor. This one adds the insurance carrier, the broker of record, and the service providers behind the plan.
- **Scoped to what you need** — narrow by plan year and form type, or pull the whole archive. Either way, you're not paying for schedules you didn't ask for.

# 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.

## `planYears` (type: `array`):

Which plan filing years to include. Leave empty to crawl the entire 2009-2026 EFAST2 archive (every year DOL publishes as a bulk FOIA file).

## `formTypes` (type: `array`):

Which filing forms to include. Leave empty to crawl both.

## `includeScheduleA` (type: `boolean`):

Join each filing with its Schedule A rows — insurance carrier, contract number, and the broker/agent of record with their commission and fees.

## `includeScheduleC` (type: `boolean`):

Join each filing with its Schedule C rows — recordkeeper, TPA, auditor and adviser with their direct compensation.

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

Maximum number of records to scrape (base filings plus any joined schedule rows).

## Actor input object example

```json
{
  "sp_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "includeScheduleA": true,
  "includeScheduleC": true,
  "maxItems": 10
}
```

# 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_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("jungle_synthesizer/dol-efast2-form-5500-benefit-plan-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_intended_usage": "Describe your intended use...",
    "sp_improvement_suggestions": "Share your suggestions here...",
    "sp_contact": "Share your email here...",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("jungle_synthesizer/dol-efast2-form-5500-benefit-plan-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_intended_usage": "Describe your intended use...",
  "sp_improvement_suggestions": "Share your suggestions here...",
  "sp_contact": "Share your email here...",
  "maxItems": 10
}' |
apify call jungle_synthesizer/dol-efast2-form-5500-benefit-plan-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,jungle_synthesizer/dol-efast2-form-5500-benefit-plan-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/uRnFu5plUJ11TQiqs/builds/OnGSjtuB9TMSPngb6/openapi.json
