# SEC Form D API: Newly Funded Company Data (`publicrecords-api/sec-form-d-api`) Actor

Newly funded US companies from SEC Form D filings, with each company's raise history: which round this is, what it raised last time, and the growth multiple. Amount raised, phone, business address and named officers. Hedge funds and SPVs filtered out. No API key.

- **URL**: https://apify.com/publicrecords-api/sec-form-d-api.md
- **Developed by:** [Hassan Masarani](https://apify.com/publicrecords-api) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 filings

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?

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 Form D API: Newly Funded Company Data

When a US company raises private capital under **Regulation D** — the exemption behind most private rounds — it must file a **Form D** with the SEC within 15 days. This Actor turns those filings into a clean feed of companies that just got funded, with the amount raised, the business address, the phone number, and the names of every officer and director.

Roughly **35,000 Form D filings are made each year — about 140 on a typical business day.** **About two-thirds come from pooled investment funds** — hedge funds, private equity, venture funds and SPVs. This Actor detects them on four separate signals and filters them out, so you are left with operating companies.

No API key. No login. No anti-bot. The SEC states: "All Government-created content on sec.gov and EDGAR public filing content are free to access and reuse."

***

### Who uses newly funded company data

**Sales teams selling into freshly funded startups.** A company that closed $8M last week has budget and is about to spend it. Each row carries the issuer's phone number and business address, plus named executives and where they are based — enough to route a lead without an enrichment step.

**Deal sourcers.** Filter to your sector and cheque size and get a standing list of private raises in your thesis. A Form D lands in EDGAR days or weeks before the round is announced anywhere.

**Recruiters.** Companies that just raised are companies that are about to hire.

**Anyone tracking a fund family or competitor set.** Use the company-name filter to follow a specific issuer pattern across filings.

**AI agents.** Flat rows, no nesting, stable field types — callable through the Apify MCP server as a tool.

### Example output: one Form D filing as a flat row

```json
{
  "issuerName": "Northwind Robotics, Inc.",
  "cik": "0001998821",
  "formType": "D",
  "isOperatingCompany": true,
  "industryGroup": "Other Technology",
  "entityType": "Corporation",
  "totalOfferingAmount": 12000000,
  "totalAmountSold": 8500000,
  "totalRemaining": 3500000,
  "investorCount": 14,
  "street": "4200 Congress Ave, Suite 900",
  "city": "Austin",
  "state": "TX",
  "stateName": "TEXAS",
  "zipCode": "78701",
  "phone": "512-555-0142",
  "relatedPersons": [
    { "name": "Dana Okonkwo", "relationships": ["Executive Officer", "Director"],
      "city": "Austin", "state": "TX", "zipCode": "78701" }
  ],
  "filedAt": "2026-09-08",
  "firstSaleDate": "2026-08-20",
  "daysSinceFirstSale": 21,
  "sourceUrl": "https://www.sec.gov/Archives/edgar/data/1998821/000199882126000001/primary_doc.xml",
  "scrapedAt": "2026-09-10T09:14:22.108Z"
}
```

Open-ended offerings report their target as "Indefinite" rather than a number. Those come back as `null` — never as a guess.

### Example input: a daily feed of recently funded companies

```json
{ "daysBack": 1, "onlyOperatingCompanies": true, "minAmountSold": 1000000,
  "onlyNewSinceLastRun": true, "trackerName": "daily-1m-raises", "maxItems": 0 }
```

A one-off historical pull of Texas technology raises:

```json
{ "dateFrom": "2026-01-01", "dateTo": "2026-09-01",
  "industryGroups": ["Other Technology", "Computers", "Business Services"],
  "states": ["TX"], "onlyNewSinceLastRun": false, "maxItems": 0 }
```

### Form D lookup, search and database fields

- Reads the **official SEC EDGAR daily index**, then parses each filing's `primary_doc.xml` into one flat row
- **Separates operating companies from pooled investment funds** — hedge funds, PE, VC and SPVs — which are about two-thirds of all filings and pure noise for most buyers. Four signals are checked, not just the industry label; a single-signal filter leaks roughly 8% of funds through
- **Joins each filing to the company's own raise history** — raise number, previous amount, growth multiple, serial-filer warning, and EIN
- Extracts **named officers, directors and promoters** with their role and the city and state they filed from. Their street addresses are left out on purpose — many are home addresses
- Filters by **date, amount raised, industry, US state, and company name**
- **Only-new-since-last-run mode** — remembers what it has given you, so a daily schedule bills you only for new companies
- Reports **how old the raise actually is** (`daysSinceFirstSale`), not just when the paperwork landed — the median filing arrives 70 days after the first sale, and a fifth of leads are already outside the buying window on the day they are delivered
- Handles the `"Indefinite"` offering amount correctly instead of coercing it to zero — 47% of filings report no fixed target

### Raise history: the part no other Form D tool has

A Form D on its own gives you a company name you have never heard of and a dollar figure. That is why most funding tools quietly fall back on press coverage.

This Actor joins every filing to **the company's own earlier filings**, so each row tells you whether the company is actually going anywhere:

| Row as everyone else ships it | Row with raise history |
|---|---|
| Rightway Healthcare — $155,000,000 | **raise #5**, previously $108,749,915 — **1.43x** |
| Lola's Fine Sauces — $600,480 | **raise #3**, previously $96,000 — **6.25x** |
| NOVAPHOS Inc. — $1,944,522 | **raise #15**, previously $7,000,000 — **0.28x, a down round** |
| VECTORMAX Corp — $7,500 | **raise #88 — serial filer**, skip it |

Those are real rows from a single day. The last one matters most: companies that file dozens of tiny offerings look identical to genuine raises until you count their history, and every other tool in this category will sell you that row as a hot lead.

Each enriched row carries `raiseNumber`, `priorRaiseCount`, `previousAmountSold`, `cumulativePriorAmountSold`, `growthMultiple`, `daysSincePreviousRaise`, `isSerialFiler`, `firstRaiseDate` — and the company's **EIN**, a far better CRM key than a fuzzy company name.

### A Crunchbase alternative built on public Regulation D data

Form D is the primary regulatory record behind a large share of what funding databases resell. Reading it directly costs a fraction of a Crunchbase or PitchBook seat, and the data is first-party rather than aggregated.

### What Form D does and does not disclose

- It does **not** name investors. Form D discloses the issuer, the amount, and the issuer's own officers and directors — not who put the money in. Any tool claiming otherwise is inferring.
- The **industry filter uses the SEC's own labels**, which are coarse and have no plain "Technology", "Health Care" or "Fintech" option — the closest are "Other Technology" and "Other Health Care", and the largest single bucket is literally "Other". Form D carries no business description, so precise sector targeting is not possible on this data. Real-estate offerings are *retained* by the operating-company filter; exclude them by industry if you don't want them.
- It covers **Regulation D offerings only**. It does not cover Reg A+ (Form 1-A), Reg CF (Form C), Reg S, public offerings, or Section 4(a)(2) placements made outside the Reg D safe harbour — those require no Form D at all.
- Structured Form D data begins around **September 2008**, when electronic filing started. Earlier date ranges return nothing.
- It does not enrich with emails or LinkedIn profiles. You get what the filing says, plus a link to the filing.
- Missing values are `null`. Nothing is inferred.

### Pricing

| Event | Price |
|---|---|
| Actor start | $0.00005 |
| Filing returned | $0.025 — **$25 per 1,000 filings** |
| Raise history added | $0.008 — charged only when a company's history actually resolves |

A fully enriched row is **$33 per 1,000**. Turn raise history off and it is $25. The complete US operating-company feed is roughly 1,900 filings a month, so a full daily subscription runs about **$63/month** — against $49–99 for comparable funding-lead lists that carry no history at all, and a fraction of a Crunchbase seat.

You are not charged for retried requests, filings excluded by your filters, duplicates suppressed in only-new mode, a scheduled run that finds nothing new, or raise-history lookups that come back empty. Users on paid Apify plans pay less per filing.

### Run it on a schedule or from the SEC EDGAR API

**Console** — open the Actor, press Start. The defaults return real filings immediately.

**On a schedule** — add a daily Schedule. `onlyNewSinceLastRun` is on by default, so you are billed only for filings you have not already received. This is the intended way to use it.

**API**

```bash
curl -X POST "https://api.apify.com/v2/acts/YOUR_USERNAME~sec-form-d-api/run-sync-get-dataset-items?token=YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"daysBack":1,"minAmountSold":1000000,"maxItems":50}'
```

**AI agents** — available through the Apify MCP server as a callable tool for Claude, Cursor and other MCP clients.

### Integrations

Google Sheets, n8n, Make, Zapier, Slack, Airtable and webhooks — all via Apify's Integrations tab, no code. The dataset ships a sheet-ready column view, so a Sheets sync needs no field mapping.

### Compliance, rate limits and data quality

- **Public data only.** Everything comes from the SEC's public EDGAR archive. No login, no paywall, nothing bypassed.
- The SEC asks automated callers to declare a User-Agent and stay under **10 requests per second**. This Actor does both.
- Form D is **self-reported by the issuer**. Amounts and addresses are as filed and are occasionally stale or wrong.
- Amendments (`D/A`) are excluded by default so each company appears once. Turn them on to track progress within a round.
- Filings name real people. This Actor returns their name, role, city and state, but not their street address. Use that data in line with your own obligations.

### FAQ

**Do I need an API key?** No. None exists for EDGAR. Nothing to sign up for.

**How fresh is it?** EDGAR publishes the daily index the evening of each business day. Run tomorrow morning and you have today's filings.

**Why does most of the result set disappear when I turn on "Real companies only"?** Because about two-thirds of Form D filers are pooled investment funds — hedge funds, PE, VC and SPVs. That filter is doing exactly what you want.

**Does Form D tell me who invested?** No. It reports the issuer, the amount, and the issuer's own officers and directors. Investor identities are not disclosed on the form.

**What is the difference between offering amount and amount sold?** The offering amount is the target; amount sold is what has actually closed. `totalAmountSold` is the number that matters.

**Can I pull years of history?** Yes — set `dateFrom` and `dateTo` and `maxItems: 0`. Large ranges take longer because the Actor stays under the SEC's rate limit.

**Official source:** [SEC EDGAR](https://www.sec.gov/edgar) · [EDGAR full-text search](https://efts.sec.gov)

# Actor input Schema

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

How far back to search, ending yesterday. EDGAR publishes each day's filings that evening, so today is never available. About 140 companies file a Form D every business day.

## `dateFrom` (type: `string`):

Exact start date (YYYY-MM-DD). Overrides the look-back setting above. Use this for a one-off historical pull.

## `dateTo` (type: `string`):

Exact end date (YYYY-MM-DD). Defaults to today.

## `onlyOperatingCompanies` (type: `boolean`):

About two-thirds of Form D filings come from pooled investment funds — hedge funds, private equity, venture funds and SPVs. Leave this on to remove them. It checks four separate signals in the filing, not just the industry label. Real-estate offerings are NOT removed; exclude them with Industry if you don't want them.

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

Only return companies that have actually sold at least this much. Set to 1000000 to skip small friends-and-family rounds. Leave empty for all.

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

Limit to the industry the company picked on its filing. These are the SEC's own labels — note there is no plain 'Technology' or 'Health Care' option, because the form doesn't offer one. Leave empty for all industries.

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

Two-letter state codes of the company's business address, e.g. CA, NY, TX. Leave empty for the whole country.

## `issuerKeyword` (type: `string`):

Only return companies whose name contains this text — e.g. 'Capital' to track a fund family, or a portfolio company's name. Leave blank for all.

## `includeRaiseHistory` (type: `boolean`):

Looks up each company's own past Form D filings and adds: which raise this is, how much they raised before, whether this round is bigger, and a warning flag for shell-like companies that file dozens of tiny offerings. This is what turns an unfamiliar company name into a lead you can judge.

## `maxPriorFilings` (type: `integer`):

How many of the company's earlier filings to open in order to total up what they raised before. Higher is more complete but slower. 5 is plenty for almost every company.

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

Adds the named executives, directors and promoters from the filing, with their role and the city and state they filed from. Street addresses are never included.

## `includeAmendments` (type: `boolean`):

Amendments report progress on a round that was already filed. Leave off to see only first-time filings — each company appears once.

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

Stop after this many. Starts at 10 so your first run is quick; raise it (or set 0 for every match in the date range) once you've seen the output.

## `onlyNewSinceLastRun` (type: `boolean`):

On by default. Remembers every filing already delivered to you and skips it next time, so a daily schedule bills you only for genuinely new companies. Turn it off to re-pull the full date range.

## `trackerName` (type: `string`):

Only used with the setting above. Give each saved search its own name (e.g. 'texas-tech') so separate schedules keep separate memories.

## `resetTracker` (type: `boolean`):

Wipes the tracker above and starts fresh on this run.

## `secUserAgent` (type: `string`):

The SEC asks every automated caller to identify itself. Leave blank and the Actor identifies itself on your behalf — no signup, no API key.

## Actor input object example

```json
{
  "daysBack": 7,
  "onlyOperatingCompanies": true,
  "minAmountSold": 1000000,
  "industryGroups": [],
  "states": [],
  "includeRaiseHistory": true,
  "maxPriorFilings": 5,
  "includeRelatedPersons": true,
  "includeAmendments": false,
  "maxItems": 10,
  "onlyNewSinceLastRun": true,
  "trackerName": "daily-1m-raises",
  "resetTracker": false
}
```

# Actor output Schema

## `filings` (type: `string`):

Every matching Form D filing as flat JSON rows, ready for CSV, Sheets, or a CRM.

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

// Run the Actor and wait for it to finish
const run = await client.actor("publicrecords-api/sec-form-d-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 = {
    "daysBack": 7,
    "minAmountSold": 1000000,
    "maxItems": 10,
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,publicrecords-api/sec-form-d-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/Ntyqr79b7VAAHsnQa/builds/bOMeGEvWs447Pd6sk/openapi.json
