# SEC Form D Filings Scraper & Monitor (New Private Raises) (`vocal_rhapsody/sec-form-d-filings`) Actor

Daily feed of new SEC Form D filings (private fundraises) from official SEC EDGAR data, no API key. Issuer, location, industry, offering size, amount sold, investors. Filter by state, industry, amount; only new since last run.

- **URL**: https://apify.com/vocal_rhapsody/sec-form-d-filings.md
- **Developed by:** [GovData Tools](https://apify.com/vocal_rhapsody) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 66.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

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

## SEC Form D Filings Scraper & Monitor (New Private Raises)

Get a daily feed of new SEC Form D filings, the notices companies file when they raise money privately, as JSON, CSV or Excel. See who just raised, where they are, what industry they are in, how much they are offering and how much they have already sold. Built for B2B sales teams selling to newly funded companies (banks, accountants, recruiters, SaaS, wealth and fund services), and for VC and market researchers. Official SEC EDGAR data, no API key.

### Why this Actor

- **Official source.** Reads the SEC EDGAR daily form index and each filing's own Form D XML on sec.gov. Form D filings are public records. Not affiliated with or endorsed by the SEC.
- **Operating companies first.** Pooled investment funds (hedge, PE and VC funds) file most Form D filings. They are excluded by default; switch that off, or list "Pooled Investment Fund" as an industry group, to get them.
- **New raises, not amendments.** Only original Form D filings by default; add `D/A` to include amendments.
- **Monitor mode.** With `onlyNew` on, each scheduled run returns only filings not seen before for that filter combination.
- **No individuals.** Executive officers, directors and promoters ("related persons") listed in a Form D are never read or output. The sales compensation recipients list is also skipped, because on live filings a recipient can be an individual.
- **Polite.** At most 5 requests per second (SEC allows 10) with a declared contact User-Agent, retries with backoff, and a clear failure if the SEC blocks access.

### What data you get

One flat item per filing.

| Field | Meaning |
|---|---|
| `accessionNumber`, `cik`, `formType`, `filedDate` | SEC accession number, issuer CIK, `D` or `D/A`, filing date |
| `issuerName`, `entityType`, `jurisdiction`, `yearOfIncorporation` | Who is raising; entity type; jurisdiction of incorporation; year (or text such as "Over five years ago") |
| `issuerStreet`, `issuerCity`, `issuerState`, `issuerZip` | Issuer business address as filed (phone numbers are not included: on small issuers they are often a founder's personal number) |
| `industryGroup`, `revenueRange` | Industry group and revenue range (net asset value range for funds), as filed |
| `exemptions` | Federal exemptions claimed, e.g. `06b` (Rule 506(b)), `06c` (Rule 506(c)), `04`, `3C.1` |
| `totalOfferingAmount`, `totalAmountSold`, `totalRemaining` | USD numbers; offering and remaining can be `"Indefinite"` |
| `minimumInvestment`, `totalInvestors` | Minimum investment accepted; investors so far |
| `dateOfFirstSale`, `isAmendment` | ISO date (null if yet to occur); true for D/A |
| `url`, `sourceUrl`, `scrapedAt` | Filing index page on sec.gov, the XML read, run timestamp |

Fields the filing leaves empty are `null`.

Example item (real filing):

```json
{
  "accessionNumber": "0002114061-26-000001",
  "cik": "0002114061",
  "formType": "D",
  "filedDate": "2026-10-21",
  "issuerName": "Crosstown Group RV Partners I LP",
  "entityType": "Limited Partnership",
  "jurisdiction": "DELAWARE",
  "yearOfIncorporation": 2026,
  "issuerStreet": "13516 PLEASANT VIEW ROAD",
  "issuerCity": "THREE RIVERS",
  "issuerState": "MI",
  "issuerZip": "49093",
  "industryGroup": "Other",
  "revenueRange": "Decline to Disclose",
  "exemptions": [
    "06b"
  ],
  "totalOfferingAmount": 300000,
  "totalAmountSold": 300000,
  "totalRemaining": 0,
  "minimumInvestment": 0,
  "totalInvestors": 1,
  "dateOfFirstSale": "2026-02-26",
  "isAmendment": false,
  "url": "https://www.sec.gov/Archives/edgar/data/2114061/000211406126000001/0002114061-26-000001-index.htm",
  "sourceUrl": "https://www.sec.gov/Archives/edgar/data/2114061/000211406126000001/primary_doc.xml",
  "scrapedAt": "2026-10-22T16:56:44.742Z"
}
```

### How to use

1. Set filters (all optional) such as `states`, `industryGroups` or `minAmountSold`. The form is prefilled for a small test: 3 business days, 10 items.
2. Click **Start**. You get filings from the last `lookbackDays` business days, newest first, up to `maxItems`.
3. Save the input as a task, turn on `onlyNew`, and schedule it daily. Send results to Sheets, your CRM or a webhook with Apify integrations.

```json
{
  "formTypes": ["D"],
  "excludePooledFunds": true,
  "states": ["CA", "NY", "TX"],
  "minAmountSold": 500000,
  "lookbackDays": 3,
  "onlyNew": true,
  "maxItems": 100
}
```

#### Filters

Between filters it is AND, within one filter it is OR.

| Input | Meaning |
|---|---|
| `formTypes` | `D` (default) and/or `D/A` |
| `industryGroups` | Exact industry group names as filed, case-insensitive, e.g. `Other Technology`, `Biotechnology`, `Banking and Financial Services` |
| `excludePooledFunds` | Default on; ignored if you list `Pooled Investment Fund` |
| `states` | Issuer state codes |
| `minAmountSold`, `minOfferingAmount` | USD thresholds; an "Indefinite" offering passes the offering minimum |
| `exemptions` | Match any claimed exemption; `3C` also matches `3C.1`, `3C.7` |
| `keywords` | Text match on issuer name (applied before details are fetched, which saves requests) |
| `lookbackDays` | Business days to read, 1 to 30, default 3 |
| `onlyNew`, `resetState` | New-since-last-run mode and its reset. State is kept per filter combination in the named key-value store `sec-form-d-filings-state` |
| `maxItems` | Cap on results, default 100 |

### Output example

Two items from a real run:

```json
[
  {
    "accessionNumber": "0002161278-26-000001",
    "cik": "0002161278",
    "formType": "D",
    "filedDate": "2026-10-21",
    "issuerName": "53 Maine Associates LLC",
    "entityType": "Limited Liability Company",
    "jurisdiction": "MAINE",
    "yearOfIncorporation": 2026,
    "issuerStreet": "755 SLIGO RD.",
    "issuerCity": "NORTH YARMOUTH",
    "issuerState": "ME",
    "issuerZip": "04097",
    "industryGroup": "Other",
    "revenueRange": "No Revenues",
    "exemptions": [
      "06b"
    ],
    "totalOfferingAmount": 15000000,
    "totalAmountSold": 0,
    "totalRemaining": 15000000,
    "minimumInvestment": 50000,
    "totalInvestors": 0,
    "dateOfFirstSale": null,
    "isAmendment": false,
    "url": "https://www.sec.gov/Archives/edgar/data/2161278/000216127826000001/0002161278-26-000001-index.htm",
    "sourceUrl": "https://www.sec.gov/Archives/edgar/data/2161278/000216127826000001/primary_doc.xml",
    "scrapedAt": "2026-10-22T16:56:44.742Z"
  },
  {
    "accessionNumber": "0002160913-26-000001",
    "cik": "0002160913",
    "formType": "D",
    "filedDate": "2026-10-21",
    "issuerName": "CXVN, LP",
    "entityType": "Limited Partnership",
    "jurisdiction": "CALIFORNIA",
    "yearOfIncorporation": 2026,
    "issuerStreet": "3964 DEGNAN BLVD",
    "issuerCity": "LOS ANGELES",
    "issuerState": "CA",
    "issuerZip": "90008",
    "industryGroup": "Investing",
    "revenueRange": "Not Applicable",
    "exemptions": [
      "06b"
    ],
    "totalOfferingAmount": 1000000,
    "totalAmountSold": 0,
    "totalRemaining": 1000000,
    "minimumInvestment": 10000,
    "totalInvestors": 0,
    "dateOfFirstSale": null,
    "isAmendment": false,
    "url": "https://www.sec.gov/Archives/edgar/data/2160913/000216091326000001/0002160913-26-000001-index.htm",
    "sourceUrl": "https://www.sec.gov/Archives/edgar/data/2160913/000216091326000001/primary_doc.xml",
    "scrapedAt": "2026-10-22T16:56:44.742Z"
  }
]
```

### Method and request budget

Discovery uses the EDGAR **daily form index** (`Archives/edgar/daily-index/<year>/QTR<n>/form.<YYYYMMDD>.idx`), one request per day. It was chosen over EDGAR full-text search because it is the official bulk file listing, has a fixed layout, is not a search API with its own rate and result-window quirks, and lists exactly what was filed each day. Weekends are skipped; holidays and the current day (index not yet published) have no file (EDGAR answers 403 with an AccessDenied XML body, not 404) and are skipped without error. Details come from each filing's `primary_doc.xml`, one request each, since industry, amounts and exemptions are only there.

Per run: about `lookbackDays + 1` index requests, plus at most `max(25, 5 x maxItems)` filing requests (the cap exists because filters such as industry and state can only be applied after the XML is read). If the cap is reached the run logs a warning; with `onlyNew` on, unchecked filings are picked up next run.

### Ready-made tasks

Start from a pre-filled search, then adjust the filters:

- [Startups That Just Raised Money (Tech, Form D)](https://console.apify.com/create-task-from-example/KNKALFuEQR9tyL6Cy)
- [New Private Raises Over $1M](https://console.apify.com/create-task-from-example/mTq5373oGhEacWDXb)

For a daily feed, turn on **Only new since last run** and add a schedule.

### Pricing

Pay per result: you are charged per filing returned. Use `maxItems` to cap a run.

### Use cases

- Prospect lists of newly funded companies for banks, accountants, law firms and payroll or benefits providers.
- Recruiters tracking companies that just raised and will hire.
- SaaS and wealth/fund-services sales teams targeting new issuers in their state or industry.
- VC and market researchers tracking private raise volume by industry and state.

### FAQ

**Is this legal?** Form D filings are public records published by the SEC for anyone to read. The Actor collects no data about individuals: related persons and sales compensation recipients are skipped. The issuer phone and address are the business contact details as filed.

**How fresh is it?** The daily index for a day appears after that day closes, so filings arrive with about one day delay. Schedule the task daily.

**Why fewer results than expected?** Amendments and pooled funds are excluded by default, and the lookback counts business days.

**Required setup.** The SEC requires a declared User-Agent with a contact email. Set the environment variable `SEC_USER_AGENT` (for example `Company Name contact@example.com`); the run fails with a clear message if it is missing.

### Known limitations

Verified 2026-10-22 against live sec.gov (daily index plus primary_doc.xml for D and D/A, pooled funds and operating companies).

- The amount fields are self-reported by issuers and may be "Indefinite" (about 1 in 12 results, more often with funds included) or zero.
- Industry names are matched exactly as filed. Common values: Other Technology, Other, Other Real Estate, Commercial, Residential, Biotechnology, Other Health Care, Oil and Gas, Pooled Investment Fund.
- Pooled investment funds were about 53% of the Form D filings read in a 10-business-day check, so with the default exclusion roughly two filing requests are spent per result. Foreign issuers use SEC country codes in `issuerState` (for example `N4`).
- `revenueRange` is very often "Decline to Disclose".
- Sales compensation recipients are not output (a recipient can be an individual).
- Filings without a primary_doc.xml (rare) are skipped and counted in `RUN_SUMMARY.missingXml`.
- Issuer phone and address are as filed; for small issuers these can be a founder's contact details, and some are placeholders such as `000000-0000`.
- Reference run, lookbackDays 10 and maxItems 200: 434 requests, 88 seconds, about 140 MB peak memory, 200 results. The prefilled input (3 days, 10 items) takes about 10 seconds and 34 requests.

### Changelog

See CHANGELOG.md.

# Changelog

This Actor's version history is a separate document: https://apify.com/vocal_rhapsody/sec-form-d-filings/changelog.md

# Actor input Schema

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

D = new filing, D/A = amendment. Default D only, so amendments are excluded. Allowed values: D, D/A.

## `industryGroups` (type: `array`):

Exact industry group names as filed, case-insensitive, e.g. "Other Technology", "Biotechnology", "Banking and Financial Services", "Pooled Investment Fund". Leave empty for all.

## `excludePooledFunds` (type: `boolean`):

Hedge funds, private equity and venture funds file the majority of Form D filings. On by default so you see operating companies raising money. Ignored if you list "Pooled Investment Fund" under industry groups.

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

Two-letter state code of the issuer address, e.g. CA, NY, TX. Leave empty for all.

## `minAmountSold` (type: `integer`):

Only filings reporting at least this much sold so far.

## `minOfferingAmount` (type: `integer`):

Only filings with a total offering amount of at least this value. Indefinite offerings are kept.

## `exemptions` (type: `array`):

Match any of the claimed exemptions, e.g. 06b (Rule 506(b)), 06c (Rule 506(c)), 04 (Rule 504), 3C.1. "3C" also matches 3C.1, 3C.7 and so on.

## `keywords` (type: `array`):

Case-insensitive text match on the issuer name; kept if any entry matches. Leave empty to skip.

## `lookbackDays` (type: `integer`):

How many business days back to read EDGAR daily indexes, from 1 to 30 (today is also tried). Weekends are skipped; holidays simply have no index.

## `onlyNew` (type: `boolean`):

Return only filings not seen in earlier runs with the same filters. The list of seen filings is kept per filter combination in the named key-value store "sec-form-d-filings-state" in your account. Off (the default) gives all matches in the window on every run.

## `resetState` (type: `boolean`):

Forget which filings were already seen for these filters and treat this run as a first run. Only applies when "Only new since last run" is on.

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

Stop after this many results. You are charged per result, so this keeps the cost of a run predictable. Each filing needs one extra SEC request, and at most max(25, 5 x maxItems) filings are checked per run.

## Actor input object example

```json
{
  "formTypes": [
    "D"
  ],
  "excludePooledFunds": true,
  "lookbackDays": 3,
  "onlyNew": false,
  "resetState": false,
  "maxItems": 10
}
```

# Actor output Schema

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

One item per matching Form D filing (new since last run when onlyNew is on).

## `runSummary` (type: `string`):

Index days read, filing detail requests, items pushed, runtime and peak memory.

# 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 = {
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("vocal_rhapsody/sec-form-d-filings").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 = { "maxItems": 10 }

# Run the Actor and wait for it to finish
run = client.actor("vocal_rhapsody/sec-form-d-filings").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 '{
  "maxItems": 10
}' |
apify call vocal_rhapsody/sec-form-d-filings --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vocal_rhapsody/sec-form-d-filings"
        }
    }
}
```

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/mtSRMoL38cpAdojSO/builds/ASVWJUgOdpXjbiGm4/openapi.json
