# SEC Form D Scraper: Startup Funding Rounds & Private Placements (`cprussin/sec-form-d-funding`) Actor

New SEC Form D filings (startup funding rounds, fundraising, Reg D private placements) from EDGAR. Filter by date, state, industry, offering size, new or amended. Returns issuer, CIK, address, phone, amount offered and sold, investors, 506(b)/(c) exemptions, executives. $10 per 1,000 filings.

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

## Pricing

from $10.00 / 1,000 form d 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/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 Scraper: startup funding rounds and private placements from EDGAR

**SEC Form D Funding** returns new **Form D** filings from SEC EDGAR. Companies and funds must file a Form D within 15 days of the first sale in a Regulation D private placement, so this is the earliest public record of most US **startup funding rounds** and **fundraising**: seed and venture rounds, SAFEs, real estate syndications, and private equity, hedge and VC funds. Each filing comes back as one clean JSON record with the issuer, contact details, amount offered and sold, number of investors, exemptions claimed (506(b), 506(c)) and the executives and directors behind it.

- ✅ **Official SEC data**, read straight from EDGAR. No login, CAPTCHA, proxy or API key needed.
- ✅ **Every Form D field that matters**, parsed from each filing's XML. Not just the search-index summary.
- ✅ Filter by **filing date, issuer state, industry group, offering size** and **new vs. amended** filings, or **exclude investment funds** to keep only operating companies.
- ✅ **Delta mode** returns only filings you haven't received yet, which suits a daily "recently funded" feed.
- ✅ You pay per filing returned. Empty runs cost next to nothing.

### Start in one minute

Click **Start** with the prefilled input:

```json
{
  "lastNDays": 5,
  "excludeInvestmentFunds": true,
  "maxResults": 20
}
```

You get: Up to 20 Form D filings from the last 5 days by operating companies (investment funds excluded), with `issuerName`, `industryGroup`, `totalOfferingAmount`, `totalAmountSold`, `relatedPersons` and `filingUrl`.

**Cost:** up to $0.20: 20 filings × $0.01, plus the $0.00005 actor-start fee.

### Use with an AI assistant

Connect the [Apify MCP server](https://mcp.apify.com) to Claude, ChatGPT, Cursor or any MCP client (`https://mcp.apify.com?tools=cprussin/sec-form-d-funding` loads only this actor), then paste:

```text
Use the Apify actor cprussin/sec-form-d-funding to list new Form D filings from the last 7 days by California companies raising at least $2M, excluding investment funds, with amount sold, number of investors and executives.
```

### Recipes

#### Startup rounds of $1M+ in CA and NY

New (not amended) filings from the last 3 days.

```json
{
  "lastNDays": 3,
  "states": ["CA", "NY"],
  "excludeInvestmentFunds": true,
  "minOfferingAmount": 1000000,
  "filingType": "new",
  "maxResults": 30
}
```

#### Biotech raises this month

New biotechnology filings from the last 30 days.

```json
{
  "lastNDays": 30,
  "industryGroups": ["Biotechnology"],
  "filingType": "new",
  "maxResults": 30
}
```

#### Real estate syndications

Real estate offerings filed in the last week.

```json
{
  "lastNDays": 7,
  "industryGroups": ["Real Estate"],
  "maxResults": 20
}
```

#### Daily recently-funded feed

Schedule it daily: after the first run you get (and pay for) only filings not returned before.

```json
{
  "lastNDays": 2,
  "excludeInvestmentFunds": true,
  "filingType": "new",
  "maxResults": 100,
  "onlyNew": true
}
```

### Who uses SEC Form D data?

- **B2B sales teams** (SaaS, banking, payroll, HR, recruiting, office space) contact startups right after they raise money and have budget to spend.
- **VCs, angels and analysts** track competitors' rounds, new funds and deal flow by industry or state.
- **Lawyers, accountants and fund administrators** find new funds and issuers that need services.
- **Journalists and researchers** monitor private-market fundraising in near real time.
- **Data teams** build a free alternative to Crunchbase-style funding feeds and enrich CRMs with official filings.

### How does the Form D scraper work?

1. Pick a filing-date window (default: the last 7 days) and any filters.
2. The actor searches EDGAR full-text search for Form D and D/A filings one day at a time, newest first. Issuer-state and filing-type filters run on the server.
3. For each filing it downloads the official `primary_doc.xml` and parses every field into one flat record.
4. Industry, fund and offering-size filters are applied, and matching filings are saved to the dataset.
5. With `onlyNew`, filings already delivered by earlier runs with the same filters are skipped (and not charged).

The actor follows the [SEC's fair-access policy](https://www.sec.gov/os/accessing-edgar-data): it sends a declared User-Agent, stays under 10 requests per second and backs off on HTTP 429/503. It processes about 7 filings per second.

### How do I filter Form D filings?

| Field                                     | Description                                                                              | Example                           |
| ----------------------------------------- | ---------------------------------------------------------------------------------------- | --------------------------------- |
| `lastNDays`                               | Filed in the last N calendar days, including today (UTC)                                 | `7`                               |
| `startDate` / `endDate`                   | Exact filing-date range (YYYY-MM-DD); `startDate` overrides `lastNDays`                  | `"2026-09-01"`                    |
| `states`                                  | Two-letter codes of the issuer's business address state (empty = all)                    | `["CA", "NY", "TX"]`              |
| `industryGroups`                          | Form D industry groups or whole categories (empty = all)                                 | `["Technology", "Biotechnology"]` |
| `excludeInvestmentFunds`                  | Skip pooled investment funds (hedge, PE, VC funds, SPVs), which file over half of all Ds | `true`                            |
| `minOfferingAmount` / `maxOfferingAmount` | Total offering size in USD. "Indefinite" offerings pass a minimum and fail a maximum     | `1000000`                         |
| `filingType`                              | `both`, `new` (Form D) or `amendment` (Form D/A)                                         | `"new"`                           |
| `maxResults`                              | Maximum filings to return                                                                | `100`                             |
| `onlyNew`                                 | Delta mode: skip filings returned by earlier runs with the same filters                  | `true`                            |

Industry categories: Agriculture, Banking & Financial Services, Business Services, Energy, Health Care, Manufacturing, Real Estate, Retailing, Restaurants, Technology, Travel, Other. Each has groups such as Computers, Telecommunications, Other Technology, Biotechnology, Pharmaceuticals, Oil and Gas, Residential or Pooled Investment Fund.

### What data do you get for each Form D filing?

One dataset item per filing:

```json
{
  "issuerName": "Acme Robotics, Inc.",
  "cik": "2012345",
  "accessionNumber": "0002012345-26-000001",
  "formType": "D",
  "filingDate": "2026-10-08",
  "isAmendment": false,
  "previousAccessionNumber": null,
  "entityType": "Corporation",
  "yearOfIncorporation": 2024,
  "incorporatedWithinFiveYears": true,
  "stateOfIncorporation": "DELAWARE",
  "address": {
    "street": "100 Market Street",
    "street2": "Suite 300",
    "city": "SAN FRANCISCO",
    "state": "CA",
    "stateName": "CALIFORNIA",
    "zip": "94105"
  },
  "phone": "415-555-0100",
  "industryGroup": "Other Technology",
  "industryCategory": "Technology",
  "investmentFundType": null,
  "revenueRange": "Decline to Disclose",
  "securityTypes": ["Equity"],
  "dateOfFirstSale": "2026-09-30",
  "totalOfferingAmount": 5000000,
  "offeringAmountIndefinite": false,
  "totalAmountSold": 3250000,
  "totalRemaining": 1750000,
  "minimumInvestment": 25000,
  "totalInvestors": 12,
  "nonAccreditedInvestors": 0,
  "salesCommissions": 0,
  "findersFees": 0,
  "exemptions": ["06b"],
  "relatedPersons": [
    {
      "name": "Jane Q Founder",
      "roles": ["Executive Officer", "Director"],
      "title": "CEO",
      "city": "San Francisco",
      "state": "CA"
    }
  ],
  "salesRecipients": [],
  "otherIssuers": [],
  "filingUrl": "https://www.sec.gov/Archives/edgar/data/2012345/000201234526000001/0002012345-26-000001-index.htm",
  "xmlUrl": "https://www.sec.gov/Archives/edgar/data/2012345/000201234526000001/primary_doc.xml"
}
```

(This is an illustrative record.)

**Field notes**

- `totalAmountSold` is the amount raised so far. `totalOfferingAmount` is the target. Funds often report the offering as Indefinite (`offeringAmountIndefinite: true`, amount `null`).
- `exemptions` uses the SEC's codes: `06b` = Rule 506(b), `06c` = Rule 506(c) (general solicitation allowed), `04` = Rule 504, `3C`, `3C.1`, `3C.7` = Investment Company Act 3(c) exclusions used by funds, `4a5` = Section 4(a)(5).
- `relatedPersons` lists executive officers, directors and promoters with their city and state. Form D does not include emails or investor names.
- `salesRecipients` lists placement agents and brokers paid commissions, with their FINRA CRD numbers.
- Amendments (`D/A`) update earlier notices, for example with a higher amount sold. `previousAccessionNumber` points to the filing being amended.
- `address.state` is a US state code, or an EDGAR country code (for example `A1`) for foreign issuers. `stateName` spells it out.

### How much does SEC Form D data cost?

This actor is priced **per result** (pay-per-event):

| Event                                   | Price     |
| --------------------------------------- | --------- |
| Form D filing (one item in the dataset) | **$0.01** |

For example, 1,000 filings cost $10.00, and a daily delta-mode feed of new startup rounds (about 100 operating-company filings per business day) costs about $1 per day. Filings skipped by filters or delta mode are free. If you set a **maximum cost per run**, the actor stops cleanly when it reaches that limit.

### Tips for tracking startup funding with Form D

- **Daily "recently funded" leads:** schedule the actor daily with `lastNDays: 3`, `excludeInvestmentFunds: true` and `onlyNew: true`, then send results to Google Sheets, a CRM, email or Slack through Apify integrations.
- **Real raises only:** add `minOfferingAmount` (for example `1000000`) to drop tiny offerings and syndications.
- **Fund launches:** set `industryGroups` to `["Pooled Investment Fund"]` and read `investmentFundType` for hedge, private equity and VC funds.
- **Backfills:** use `startDate`/`endDate` for any period since 2009, when Form D moved to XML.
- To identify your own organization to the SEC, set a `SEC_USER_AGENT` environment variable, such as `"Your Company admin@yourcompany.com"`.

### SEC Form D scraper FAQ

**Is this data official?** Yes. Every record is parsed from the Form D filed on SEC EDGAR, and `filingUrl` links to the original filing.

**How fresh is it?** Filings appear on EDGAR within minutes of acceptance, and the actor searches through today. EDGAR accepts filings on business days only.

**Why is a well-known company's round missing?** Not every raise needs a Form D, some are filed late, and many startups raise through a series of SAFEs filed under one notice. Form D also doesn't reveal valuation or investor names.

**Can I use it through the API or with AI agents?** Yes. Call it through the Apify API, the MCP server or any Apify integration.

**Disclaimer:** This actor is not affiliated with the U.S. Securities and Exchange Commission. You are responsible for following marketing laws (CAN-SPAM, TCPA, GDPR) when you contact issuers or related persons.

### Related actors

- [new-business-registrations](https://apify.com/cprussin/new-business-registrations?fpr=to54nm): Newly registered LLCs and corporations from state registries.
- [ycombinator-companies](https://apify.com/cprussin/ycombinator-companies?fpr=to54nm): Y Combinator startups by batch, industry and region, plus YC startup jobs.
- [federal-recompete-radar](https://apify.com/cprussin/federal-recompete-radar?fpr=to54nm): US federal contracts nearing expiry, for recompete pipelines.

# Actor input Schema

## `lastNDays` (type: `integer`):

Only filings from the last N calendar days, including today (UTC). Ignored when "Filed on or after" is set. EDGAR accepts filings on business days only, so use at least 4 to always cover two business days.

## `startDate` (type: `string`):

Start of the filing-date range (YYYY-MM-DD). Overrides "Filed in the last (days)".

## `endDate` (type: `string`):

End of the filing-date range (YYYY-MM-DD). Default: today.

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

Two-letter codes of the issuer's business address state, e.g. CA, NY, TX. Leave empty for all states and countries.

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

Form D industry groups to include. A category such as Technology (all) includes all its groups. Leave empty for all industries.

## `excludeInvestmentFunds` (type: `boolean`):

Skip pooled investment funds (hedge, private equity, VC funds and SPVs), which file over half of all Form Ds. Keeps operating companies such as startups.

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

Only offerings of at least this size. Offerings marked "Indefinite" count as unlimited.

## `maxOfferingAmount` (type: `integer`):

Only offerings of at most this size. Excludes "Indefinite" offerings.

## `filingType` (type: `string`):

New notices (Form D), amendments (Form D/A, e.g. updated amounts sold) or both.

## `maxResults` (type: `integer`):

Maximum number of filings to return. Each filing is billed as one event.

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

Skip filings already returned by earlier runs with the same filters (dates excluded). Ideal for scheduled daily runs.

## Actor input object example

```json
{
  "lastNDays": 5,
  "excludeInvestmentFunds": true,
  "filingType": "both",
  "maxResults": 20,
  "onlyNew": 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 = {
    "lastNDays": 5,
    "excludeInvestmentFunds": true,
    "maxResults": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("cprussin/sec-form-d-funding").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 = {
    "lastNDays": 5,
    "excludeInvestmentFunds": True,
    "maxResults": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("cprussin/sec-form-d-funding").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 '{
  "lastNDays": 5,
  "excludeInvestmentFunds": true,
  "maxResults": 20
}' |
apify call cprussin/sec-form-d-funding --silent --output-dataset

```

## MCP server setup

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

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/c6RJWY3oukpsEyxvE/builds/hc0wbLT1FgfuTwPdX/openapi.json
