# SEC Form D Scraper: Startup Funding Rounds (`tidyharvest/sec-form-d-scraper`) Actor

Startup funding rounds from official SEC Form D filings: amount raised, investors, industry, SAFE/equity, executives, brokers. Funds/SPVs excluded by default; full quarters in minutes; company lookup, monitor. Built to beat logiover's Form D scraper: 75 vs 30 fields, 3x faster. From $0.80/1k.

- **URL**: https://apify.com/tidyharvest/sec-form-d-scraper.md
- **Developed by:** [TidyHarvest](https://apify.com/tidyharvest) (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 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.
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

## SEC Form D Scraper: Startup Funding Rounds

Get **startup funding rounds** and every other **private placement** straight from official **SEC Form D** filings: company, **amount raised**, total offering size, number of investors, **date of first sale**, industry, security type (equity, debt, **SAFE**), exemptions (Rule 506(b), 506(c)), **executives and directors**, brokers and finders, address and phone. Search any date window from 2008 to today, look up companies by name or CIK, or schedule it as a **monitor of new raises**.

Funds and single-deal vehicles (SPVs, "a Series of ..." LLCs) make up over half of all Form D filings; they are **left out by default**, so a date search returns companies actually raising money. Switch them back on, or ask for funds only, with one setting.

**Fast at any size:** a full quarter of Form D filings (16,640 rows, every industry) in about 3 minutes (87 seconds at 1 GB memory); the last 3 days in about a minute.

### What you can do with it

- **Track who just raised:** daily list of new rounds in tech, biotech or any of Form D's 35 industry groups, with the amount sold and the executives to contact.
- **Build a funding dataset:** every Form D since 2008 in a few runs, one row per filing, with amendments linked to the offering they amend.
- **Company research:** the full Form D history of a company by name or CIK (including filings under earlier names), with what changed between amendments.
- **SPV and secondary demand:** find the SPVs named after a company (e.g. vehicles buying into Anthropic or Harvey AI).
- **Lead generation:** filter by city, ZIP, state, amount, year of incorporation or security type; get executives, directors and promoters as a flat list.
- **Deal and market analytics:** totals by industry, state and month in the free run summary.

### Input

Everything is optional. With no input you get the last 7 days of operating-company filings.

| Field | What it does |
|---|---|
| `daysBack` / `filedFrom` / `filedTo` | The filing-date window (default: last 7 days). Any window from 2008-09-15 to today. |
| `companies` | Company names or CIKs to look up instead of a date window. Exact names only (punctuation, case and Inc/Corp/LLC don't matter); a name without an exact match is reported with the closest names, never guessed. |
| `includeSpvsNamedAfter` | With `companies`: also the SPVs and series vehicles named after them. |
| `filings` | Specific filings by accession number or EDGAR link. |
| `fullTextQuery` | Only filings whose text contains a phrase (a person, an investor, a street, a technology). |
| `fundsAndSpvs` | `exclude` (default for date searches), `include` or `only`. |
| `formTypes` | `all`, `new` (Form D only) or `amendments` (Form D/A). |
| `latestOnly` | One row per offering: its newest filing in your window. |
| `industryCategories` / `industryGroups` / `excludeIndustryGroups` | Form D's broad headings (Technology, Health Care, Real Estate...) or its 35 exact groups. |
| `minAmountSold` / `maxAmountSold` / `minOfferingAmount` / `maxOfferingAmount` | Amount filters in USD ("Indefinite" offerings don't pass offering-amount filters). |
| `states` / `cities` / `zipCodes` / `jurisdictions` | Where the issuer is, or where it is incorporated. ZIP prefixes work (941 = San Francisco). |
| `entityTypes`, `minYearOfIncorporation`, `revenueRanges`, `securityTypes`, `exemptions`, `minInvestors`, `nonAccredited`, `fundTypes`, `firstSaleFrom` / `firstSaleTo` | The rest of the form's answers. |
| `nameKeywords` / `excludeNameKeywords` / `personKeywords` | Words in the issuer's name, or in its executives' and brokers' names. |
| `sortBy` | `newest` (default), `oldest`, `amountSold`, `offeringAmount`, `firstSale`. |
| `includeRelatedPersons`, `includeSalesCompensation`, `includeSignatures` | Keep or drop the people blocks (on by default). |
| `relatedPersonRows`, `salesCompensationRows` | Also one **free** row per executive/director/promoter or per broker. |
| `includeOfferingHistory`, `includeChanges` | Every filing of the same offering, and what changed since the amended filing. |
| `onlyNew` + `monitorKey` | Monitor: each filing is delivered (and charged) once; scheduled runs return only new ones. |
| `maxItems` | Hard cap on rows and cost (empty = 1,000; 0 = no limit). |

Field names from other Form D actors (`dateFrom`, `dateTo`, `keyword`, `industry`, `minAmount`, `maxResults`, `formType`, `issuers`, `monitorName`, `excludeInvestmentFunds`...) are understood too.

Examples. Tech and health rounds of $1M+ in the last 30 days, one row per round:

```json
{ "daysBack": 30, "industryCategories": ["Technology", "Health Care"], "minAmountSold": 1000000, "latestOnly": true }
```

A company's whole Form D history with amendment changes:

```json
{ "companies": ["Harvey AI"], "includeOfferingHistory": true, "includeChanges": true }
```

Daily monitor of new San Francisco Bay Area raises:

```json
{ "daysBack": 3, "zipCodes": ["940", "941", "943", "945", "950"], "onlyNew": true, "monitorKey": "bay-area" }
```

### Output

One row per Form D or D/A filing (75 fields). Shortened example:

```json
{
  "type": "filing", "accessionNumber": "0001974654-26-000003", "formType": "D", "isAmendment": false,
  "fileNumber": "021-597236", "filingDate": "2026-09-11",
  "issuerName": "Harvey AI Corp", "issuerCik": "0001974654", "issuerCity": "SAN FRANCISCO", "issuerState": "CA",
  "issuerZip": "94103", "issuerPhone": "415-579-0539", "jurisdictionOfIncorporation": "DELAWARE",
  "entityType": "Corporation", "yearOfIncorporation": 2022, "yearOfIncorporationStatus": "withinFiveYears",
  "edgarPreviousNames": ["Counsel AI Corp"], "industryGroup": "Other Technology", "revenueRange": "Decline to Disclose",
  "federalExemptions": ["06b"], "federalExemptionLabels": ["Rule 506(b)"], "dateOfFirstSale": "2026-08-28",
  "securityTypes": ["Equity"], "minimumInvestment": 0, "totalOfferingAmount": null, "totalOfferingAmountIndefinite": true,
  "totalAmountSold": 550299446, "totalInvestors": 28, "hasNonAccreditedInvestors": false,
  "salesCommissions": 0, "findersFees": 0, "relatedPersonCount": 7,
  "relatedPersonsSummary": "Winston Weinberg (Executive Officer, Director); Gabriel Pereyra (Executive Officer, Director); Pat Grady (Director); ...",
  "relatedPersons": [{ "name": "Winston Weinberg", "relationships": ["Executive Officer", "Director"], "city": "San Francisco", "state": "CA" }],
  "salesCompensationRecipients": [], "signerName": "John LaBarre", "signerTitle": "Chief Legal Officer",
  "isFund": false, "isSpv": false, "spvNameHint": null, "normalizedIssuerName": "harvey ai",
  "filingUrl": "https://www.sec.gov/Archives/edgar/data/1974654/000197465426000003/0001974654-26-000003-index.htm"
}
```

- **Amounts** are numbers in USD; an "Indefinite" amount is `null` with `totalOfferingAmountIndefinite: true`.
- **`isFund` / `isSpv`** flag pooled funds and single-deal vehicles; **`spvNameHint`** is the part of an SPV's name that usually names the company it buys into (e.g. "Harvey AI" from "HII Harvey AI-01, a Series of HII Harvey AI LLC"). It can also be a syndicate's own name, so treat it as a hint.
- **`normalizedIssuerName`** is a matching key (case, punctuation and Inc/Corp/LLC removed) for joining with your company lists.
- The free **run summary** (`SUMMARY` in the key-value store) has the window read, lookup results, monitor counts and totals by industry, state and month.

### Pricing

Pay per filing row: **$1.50 per 1,000 filings** on the Free plan, **$1.00** on Bronze, **$0.90** on Silver and **$0.80** on Gold and above. No start fee. Filters, caps and the monitor apply before you are charged; person and broker rows and the run summary are free. A week of operating-company filings is typically 300-450 rows; a full quarter of everything about 16,000.

### Compared with logiover's SEC EDGAR Form D Scraper

Same input on both (`{"formType": "D_AND_DA", "dateFrom": "2026-10-01", "dateTo": "2026-10-07", "industry": "Technology", "maxResults": 120}`), run on 2026-10-18 on Apify, scored against each filing's own EDGAR document:

| | This actor | logiover |
|---|---|---|
| Technology filings found | 116 of 116 operating companies (the one fund left out by default) | 117 of 117 |
| Values matching the filing (16 checked fields x 116 shared filings) | 1,856 of 1,856 | 1,829 of 1,856: year of incorporation is the text "true" for the 27 companies founded over five years ago |
| Fields per row | 75, incl. brokers and finders, signatures, previous names, exemption labels, fund/SPV flags | 30 |
| Run time | 147 s | 445 s |
| Real cost of this run | $0.10 at our Silver price ($0.17 on Free) | $0.29 (their Silver price, $2.50 per 1,000) |
| A whole quarter (16,640 filings) | 181 s in one run (87 s at 1 GB) | not measured; at the speed above, many hours |

Where logiover still does more: nothing we found on Form D data. Other trackers mix in news sources (TechCrunch, Y Combinator); this actor is the official-filings product only.

### How well it works

- **Complete:** for 2026 Q3, 15,951 of the 15,951 Form D and D/A filings in EDGAR's index are returned, with the same filing dates and form types.
- **Accurate:** 80 random filings checked value by value against their EDGAR documents: 5,515 of 5,520 values identical (Oct 2026). The 5 differences are in executives' details (four second address lines, one middle initial).
- **Honest failures:** a window with no filings at all (a weekend, a typo in a date) fails with a message instead of an empty "success"; an unknown company name is reported with the closest names.

### Limits and notes

- Form D filings exist as data from 2008-09-15; paper filings before that are not included.
- A full-text phrase search returns at most 10,000 filings per run.
- Form D gives the number of investors, not their names, and carries no email addresses.
- The acceptance time of day (`acceptedAt`) is filled for recent filings and company lookups; older bulk windows give the filing date only.
- Related persons, addresses and amounts are as the filer typed them.

### Is it legal?

Form D filings are public records the SEC publishes for anyone to read, and this actor reads them from SEC's own systems at a polite pace with a declared contact, as SEC's fair-access policy asks. The people named in a filing (executives, directors, promoters) are named in public record; if you contact them, the rules on unsolicited calls and email (e.g. CAN-SPAM, TCPA, GDPR where it applies) are yours to follow. This actor is not affiliated with the SEC. Data, not investment advice.

# Actor input Schema

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

Filings filed in the last N days (default 7). Ignored when 'Filed from' is set.

## `filedFrom` (type: `string`):

First filing date, YYYY-MM-DD. Any date from 2008-09-15 (the first electronic Form D) works: a whole quarter or year of filings is one run.

## `filedTo` (type: `string`):

Last filing date, YYYY-MM-DD. Empty = up to today.

## `companies` (type: `array`):

Look up companies instead of a date window: one per line, the company's SEC CIK or its name (exact name, any punctuation, with or without Inc/Corp/LLC: 'Harvey AI' finds Harvey AI Corp and its filings under earlier names). Returns each company's Form D history, newest first. A name without an exact match is reported in the run summary with the closest names, never guessed. Dates and filters still apply when you set them.

## `includeSpvsNamedAfter` (type: `boolean`):

With Companies: also return the SPVs and series vehicles whose names carry the company's name (e.g. 'HII Anthropic-01, a Series of HII Anthropic LLC'), a signal of secondary and syndicate demand.

## `filings` (type: `array`):

Specific filings: an accession number (0001974654-26-000003) or any EDGAR link to the filing. Delivered as asked: filters and the monitor don't apply.

## `fullTextQuery` (type: `string`):

Only filings whose text contains this phrase anywhere: issuer, executives, brokers, addresses, notes. E.g. a person, a fund manager, a street or 'artificial intelligence'. Works with the date window and every filter (up to 10,000 filings per run).

## `fundsAndSpvs` (type: `string`):

Over half of Form D filings are pooled investment funds and single-deal vehicles (SPVs, 'a Series of ...' LLCs). Excluded by default in date searches so you get companies raising money; included by default for company and filing lookups.

## `formTypes` (type: `string`):

A Form D/A amends an earlier Form D of the same offering (often with a higher amount sold).

## `latestOnly` (type: `boolean`):

An offering's amendments restate it. On: keep only the newest filing of each offering in your window, so each round appears once with its latest amounts.

## `industryCategories` (type: `array`):

Broad Form D headings, each covering several groups: Technology = Computers, Telecommunications, Other Technology; Health Care = Biotechnology, Pharmaceuticals, Health Insurance, Hospitals and Physicians, Other Health Care; and so on.

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

Keep only these Form D industry groups (as the filer chose them). Startups mostly file as Other Technology, Computers, Biotechnology, Pharmaceuticals, Other Health Care, Business Services or Other.

## `excludeIndustryGroups` (type: `array`):

Drop these groups, e.g. the real-estate ones (Commercial, Residential, Other Real Estate, REITS and Finance).

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

Keep filings that report at least this much already sold, e.g. 1000000.

## `maxAmountSold` (type: `integer`):

Keep filings that report at most this much sold.

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

Keep filings whose total offering amount is at least this. 'Indefinite' amounts don't pass (use Min amount sold to keep them).

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

Keep filings whose total offering amount is at most this ('Indefinite' doesn't pass).

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

Issuer address state: two-letter codes (CA, NY, TX) or full names (California). Other countries: EDGAR's codes (X0 United Kingdom, A6 Ontario) or names (UNITED KINGDOM).

## `cities` (type: `array`):

Issuer address city, e.g. San Francisco, Palo Alto (any capitalization).

## `zipCodes` (type: `array`):

Issuer ZIP code or its start: 941 = San Francisco, 100 = Manhattan.

## `jurisdictions` (type: `array`):

Jurisdiction of incorporation as filed, e.g. DELAWARE, CALIFORNIA, CAYMAN ISLANDS.

## `entityTypes` (type: `array`):

Venture-backed startups are mostly Corporations.

## `minYearOfIncorporation` (type: `integer`):

Young companies only, e.g. 2022. Filings that only say 'over five years ago' don't pass.

## `revenueRanges` (type: `array`):

Issuer revenue range as filed (most startups decline to disclose).

## `securityTypes` (type: `array`):

Keep filings offering any of these (part of the name is enough): Equity, Debt, Option, Pooled Investment Fund, Other, or words of the 'other' description such as SAFE or convertible.

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

06b = Rule 506(b), 06c = Rule 506(c) (public advertising allowed), 04 = Rule 504, 3C.1 / 3C.7 = private fund exclusions.

## `minInvestors` (type: `integer`):

Keep filings reporting at least this many investors so far.

## `nonAccredited` (type: `string`):

Filter on Form D item 14.

## `fundTypes` (type: `array`):

For fund searches (set Funds and SPVs to Include or Only).

## `firstSaleFrom` (type: `string`):

Date of first sale on or after this date (YYYY-MM-DD).

## `firstSaleTo` (type: `string`):

Date of first sale on or before this date.

## `nameKeywords` (type: `array`):

Keep issuers whose name has any of these words or phrases, e.g. AI, Labs, Robotics.

## `excludeNameKeywords` (type: `array`):

Drop issuers whose name has any of these words, e.g. Realty, Properties.

## `personKeywords` (type: `array`):

Keep filings whose executives, directors, promoters or brokers match any of these, e.g. a person's name or a firm such as Sequoia.

## `sortBy` (type: `string`):

Largest-first reads the whole window before delivering (Max filings then keeps the largest).

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

Executive officers, directors and promoters with their roles and business address as filed.

## `relatedPersonRows` (type: `boolean`):

Also one free row per person (type 'relatedPerson'), linked to its filing, for a flat contact list.

## `includeSalesCompensation` (type: `boolean`):

Sales compensation recipients with CRD numbers and states of solicitation.

## `salesCompensationRows` (type: `boolean`):

Also one free row per broker or finder (type 'salesCompensationRecipient') with CRD numbers and states of solicitation.

## `includeSignatures` (type: `boolean`):

Signer name, title and date.

## `includeOfferingHistory` (type: `boolean`):

Every filing of the same offering (first notice and each amendment), when it was first filed, and whether this row is its latest filing.

## `includeChanges` (type: `boolean`):

For amendments: what changed against the previous filing (amount sold, offering amount, investors, people added or removed).

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

Schedule the run (e.g. daily with Days back 3) and each filing is delivered and charged once: later runs skip what this monitor already returned.

## `monitorKey` (type: `string`):

Keeps separate monitors apart (e.g. 'sf-ai-rounds'). Empty = one monitor per set of filters.

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

Hard cap on filing rows and cost. Empty = 1,000; 0 = no limit (a full quarter is ~16,000 filings, ~5,000 without funds and SPVs).

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

SEC asks automated tools to identify themselves. Leave empty to use ours.

## Actor input object example

```json
{
  "daysBack": 3,
  "includeSpvsNamedAfter": false,
  "latestOnly": false,
  "includeRelatedPersons": true,
  "relatedPersonRows": false,
  "includeSalesCompensation": true,
  "salesCompensationRows": false,
  "includeSignatures": true,
  "includeOfferingHistory": false,
  "includeChanges": false,
  "onlyNew": false,
  "maxItems": 20
}
```

# Actor output Schema

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

One row per filing (and free related-person rows when switched on).

## `summary` (type: `string`):

Counts, the date window read, lookup results and totals by industry, state and month.

# 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": 3,
    "maxItems": 20
};

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

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,tidyharvest/sec-form-d-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/8G4We4uyr7YMctsAU/builds/1h7JVt2un1V1UtdVk/openapi.json
