# SEC EDGAR Form D - Startup Funding Rounds API (`thedeadpoet/sec-edgar-form-d-startup-funding-rounds-api`) Actor

Every US private funding round, from the filing the company itself signed. Reads SEC EDGAR Form D notices and returns issuer, amount raised, offering size, industry, address, phone and the officers and directors named on the filing. Official SEC API, no key, no scraping of a paywalled database.

- **URL**: https://apify.com/thedeadpoet/sec-edgar-form-d-startup-funding-rounds-api.md
- **Developed by:** [Pablo D](https://apify.com/thedeadpoet) (community)
- **Categories:** Lead generation, News
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 funding round returneds

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?

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

## SEC EDGAR Form D — startup funding rounds, from the filing the company signed

**You want a list of companies that just raised money, and every commercial database either costs four figures a year or forbids you from exporting it.** Meanwhile the underlying facts are filed with the US government, in machine-readable XML, for free, by the companies themselves.

When a US company raises money privately — a pre-seed, a seed, a Series A, a real-estate syndication, a fund close — it files a **Form D** notice with the SEC. This Actor reads those filings and returns **one row per funding round**: who raised, how much, in what industry, where they are, and **the officers and directors named on the filing**.

```
date range ──►  EDGAR full-text search  ──►  primary_doc.xml  ──►  one row per round
                                                                   ├─ companyName, cik
                                                                   ├─ totalAmountSold / totalOfferingAmount
                                                                   ├─ industryGroup, yearOfInc
                                                                   ├─ street, city, state, zip, phone
                                                                   └─ relatedPersons[] (officers, directors)
```

### Startup funding rounds without a Crunchbase subscription

Form D is not a press release and not a rumour. It is a legal filing under Regulation D, signed by the issuer, with a deadline: **15 days after the first sale**. That gives it three properties no aggregator can match:

- **It is the primary source.** Every funding-round database in the world is, at some level, reading these.
- **It is fast.** The filing often lands before the announcement blog post.
- **It is complete for US private placements.** No editorial selection, no "notable rounds only".

It also carries something the press coverage never does: **the issuer's street address and phone number, and the names and addresses of the executive officers, directors and promoters** on the filing. That is a lead list, not a news feed.

### What one row contains

**The round** — `totalOfferingAmount` (the size of the whole round), `totalAmountSold` (what has actually closed), `totalRemaining`, `minimumInvestment`, `totalNumberAlreadyInvested`, `dateOfFirstSale`, `securityTypes`, `federalExemptions` (`06b` = Rule 506(b), `06c` = 506(c)).

**The company** — `companyName`, `cik`, `previousNames`, `entityType`, `jurisdictionOfInc`, `yearOfInc`, `isWithinFiveYears`, `industryGroup`, `revenueRange`.

**How to reach them** — `street1`, `street2`, `city`, `stateOrCountry`, `zipCode`, `phone`.

**The people** — `relatedPersons[]`, each with `name`, `relationships` (Executive Officer / Director / Promoter) and their address, plus `relatedPersonNames` as a flat list ready for a CRM column. `salesCompensationRecipients[]` gives the placement agents and their CRD numbers.

**Provenance** — `accessionNumber`, `filingDate`, `formType`, `filingUrl` (the XML itself), `filingIndexUrl`, `edgarCompanyUrl`. Every row can be traced back to the exact document in one click.

### Input

```json
{
  "daysBack": 7,
  "formTypes": ["D"],
  "searchQuery": "",
  "maxFilings": 100,
  "minAmountSold": 0,
  "minOfferingAmount": 0,
  "excludePooledInvestmentFunds": true,
  "onlyCompaniesFormedWithinFiveYears": false,
  "excludeAmendments": false,
  "industryGroups": [],
  "states": [],
  "includeRelatedPersons": true,
  "requestsPerSecond": 5,
  "contactEmail": ""
}
```

`daysBack: 7` is the whole configuration for a weekly funding feed. Set it to `0` to use explicit `startDate` / `endDate` instead. `searchQuery` is passed to EDGAR full-text search, so it matches text *inside* the filings — `"artificial intelligence"` in quotes for an exact phrase.

### Output

```json
{
  "accessionNumber": "0002153881-26-000001",
  "formType": "D",
  "filingDate": "2026-09-05",
  "cik": "0002153881",
  "companyName": "Eletusk, Corp",
  "entityType": "Corporation",
  "jurisdictionOfInc": "DELAWARE",
  "yearOfInc": "2026",
  "isWithinFiveYears": true,
  "street1": "1 MAIN ST",
  "city": "Indianapolis",
  "stateOrCountry": "IN",
  "stateOrCountryDescription": "INDIANA",
  "zipCode": "46204",
  "phone": "3175551234",
  "industryGroup": "Other Technology",
  "revenueRange": "No Revenues",
  "totalOfferingAmount": 100000,
  "totalAmountSold": 35000,
  "totalRemaining": 65000,
  "isIndefiniteOffering": false,
  "minimumInvestment": 5000,
  "totalNumberAlreadyInvested": 3,
  "hasNonAccreditedInvestors": false,
  "dateOfFirstSale": "2026-08-20",
  "isAmendment": false,
  "securityTypes": ["Equity"],
  "federalExemptions": ["06b"],
  "relatedPersons": [
    {
      "name": "Timothy Kamer",
      "relationships": ["Executive Officer", "Director"],
      "street1": "1 MAIN ST",
      "city": "Indianapolis",
      "stateOrCountry": "IN",
      "zipCode": "46204"
    }
  ],
  "relatedPersonNames": ["Timothy Kamer", "Ronald Reeves"],
  "salesCompensationRecipients": [],
  "statesOfSolicitation": [],
  "filingUrl": "https://www.sec.gov/Archives/edgar/data/2153881/000215388126000001/primary_doc.xml",
  "filingIndexUrl": "https://www.sec.gov/Archives/edgar/data/2153881/000215388126000001/",
  "edgarCompanyUrl": "https://www.sec.gov/edgar/browse/?CIK=0002153881",
  "scrapedAt": "2026-09-10T18:22:01+00:00"
}
```

### Use cases

- **Funding-triggered outreach** — companies that closed a round in the last seven days, filtered to `minAmountSold: 1000000` and your industry. They have budget now and did not have it last month.
- **Recruiting after a raise** — a company that just closed a Series A is about to hire. Pair the output with a jobs Actor and you see what for.
- **Investor and placement-agent mapping** — `salesCompensationRecipients` names the brokers and their CRD numbers, round after round.
- **Regional deal flow** — `states: ["TX"]` plus `excludePooledInvestmentFunds: true` gives you every operating company that raised in Texas this month.
- **Market research** — `industryGroups: ["Technology"]` over a year of filings is a real, unfiltered census of private tech fundraising, not a curated list.

### Honest limitations

- **US only.** Form D is a US federal filing. A European or Asian company appears only if it raised from US investors under Regulation D.
- **Roughly half of all Form D filings are investment funds**, not operating companies — a fund raising from its LPs files exactly the same form as a startup raising a seed. Set `excludePooledInvestmentFunds: true` to drop them.
- **Form D does not say "Series A".** It reports amounts, not round labels. `totalOfferingAmount`, `totalAmountSold` and `isWithinFiveYears` are what you get; the round name is your inference.
- **"Indefinite" is a legal answer.** Funds often decline to state an offering size. Those rows have `totalOfferingAmount: null` and `isIndefiniteOffering: true` rather than a fabricated number.
- **`totalAmountSold` can be 0** on a filing made before the first close. That is the issuer's own answer, reported as filed.
- **No valuation, no investor names, no round labels.** Form D does not contain them and this Actor does not invent them.
- **EDGAR full-text search covers 2001 onwards**, and returns at most 10,000 hits per query — wide date ranges are automatically split in half until each window fits.

### Data source and politeness

Two official, public, unauthenticated SEC endpoints, and nothing else:

- `https://efts.sec.gov/LATEST/search-index` — EDGAR full-text search.
- `https://www.sec.gov/Archives/edgar/data/...` — the filed `primary_doc.xml`.

The SEC [explicitly permits scripted access](https://www.sec.gov/os/webmaster-faq) at up to **10 requests per second** with a declared User-Agent. This Actor defaults to **5** and refuses to go above 10. `sec.gov/robots.txt` disallows `/cgi-bin`, so no request is ever made there. EDGAR filings are US federal government works in the public domain.

Set `contactEmail` to put your own address in the User-Agent header. It is optional — a link to this Actor is sent otherwise — but it is the courteous thing to do.

### Works with

- [Website Tech Stack & Email Finder](https://apify.com/thedeadpoet/website-tech-stack-email-finder-wappalyzer-builtwith) — turn a funded company's domain into emails, tech stack and its ATS board token.
- [Bulk Email Verifier](https://apify.com/thedeadpoet/bulk-email-verifier-mx-spf-dmarc-disposable-check) — clean the addresses before you mail them.
- [Greenhouse, Lever, Ashby, Workable — Career Site Jobs API](https://apify.com/thedeadpoet/greenhouse-lever-ashby-workable-ats-jobs-api) — see what the newly funded company is hiring for.

### FAQ

**Is scraping SEC EDGAR allowed?**
Yes. The SEC publishes the rules for automated access and this Actor follows them: declared User-Agent, 5 requests per second by default, and no requests to disallowed paths.

**How current is it?**
Filings appear in EDGAR full-text search within roughly a day of acceptance. `daysBack: 7` on a daily schedule keeps a rolling window with overlap.

**How many filings are there?**
Around 200 Form D notices are filed on a typical US business day. `maxFilings` caps every run so a wide date range cannot run away with your budget.

**Does it include Form D/A amendments?**
Only if you ask. `formTypes: ["D", "D/A"]` includes them; `excludeAmendments: true` drops them from the output so each round appears once.

**What does it cost?**
Pay per event: a fixed fee to start the run, plus a small fee per filing returned.

# Actor input Schema

## `daysBack` (type: `integer`):

The simplest way to run this on a schedule: 7 means the last seven days, ending today. Set to 0 to use the explicit start and end dates below instead.

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

YYYY-MM-DD. Used only when "Look back this many days" is 0. EDGAR full-text search covers filings from 2001 onwards.

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

YYYY-MM-DD. Used only when "Look back this many days" is 0. Defaults to today.

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

D is a new notice of an exempt offering. D/A is an amendment to one - usually a later close of the same round.

## `searchQuery` (type: `string`):

Optional. Passed to EDGAR full-text search, so it matches text inside the filings themselves. Wrap a phrase in double quotes for an exact match, e.g. "artificial intelligence". Leave empty for every Form D in the range.

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

Hard stop on how many filings are fetched, so a wide date range cannot run away with your budget. Roughly 200 Form D notices are filed on a US business day.

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

0 = no filter. Filters on totalAmountSold, the money actually raised so far. Filings that declare no amount are dropped when this is set.

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

0 = no filter. Filters on totalOfferingAmount, the size of the whole round.

## `excludePooledInvestmentFunds` (type: `boolean`):

Roughly half of all Form D filings are funds raising from LPs rather than operating companies raising a round. Turn this on for an operating-company-only list.

## `onlyCompaniesFormedWithinFiveYears` (type: `boolean`):

Uses the issuer's own declaration on the form. The closest thing Form D has to a "startup" flag.

## `excludeAmendments` (type: `boolean`):

Drops rows where the filing amends an earlier notice, so each round appears once.

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

Case-insensitive substring match against the industry the issuer chose, e.g. "Technology", "Health", "Real Estate", "Other Banking".

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

Two-character EDGAR codes, e.g. CA, NY, TX, MA. Leave empty for everywhere.

## `includeRelatedPersons` (type: `boolean`):

Executive officers, directors and promoters, each with their relationships and address. This is the contact-grade part of the dataset; turn it off for a smaller output.

## `requestsPerSecond` (type: `number`):

The SEC's published maximum is 10 requests per second. This Actor defaults to 5 and will not exceed 10.

## `contactEmail` (type: `string`):

The SEC asks automated clients to declare a contact address in the User-Agent header. Optional - a link to this Actor is sent when you leave it blank - but setting it is the courteous thing to do.

## Actor input object example

```json
{
  "daysBack": 7,
  "startDate": "",
  "endDate": "",
  "formTypes": [
    "D"
  ],
  "searchQuery": "",
  "maxFilings": 100,
  "minAmountSold": 0,
  "minOfferingAmount": 0,
  "excludePooledInvestmentFunds": false,
  "onlyCompaniesFormedWithinFiveYears": false,
  "excludeAmendments": false,
  "industryGroups": [],
  "states": [],
  "includeRelatedPersons": true,
  "requestsPerSecond": 5,
  "contactEmail": ""
}
```

# Actor output Schema

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

One row per Form D filing: issuer, amount raised, industry, address and the people named on the filing.

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("thedeadpoet/sec-edgar-form-d-startup-funding-rounds-api").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("thedeadpoet/sec-edgar-form-d-startup-funding-rounds-api").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 '{}' |
apify call thedeadpoet/sec-edgar-form-d-startup-funding-rounds-api --silent --output-dataset

```

## MCP server setup

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

```

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/bjSna0r8YtpLcfCR3/builds/ByWn9NNkwYk9qPqRo/openapi.json
