# SEC Form D Scraper – Startup Funding Alerts & Private Raises (`stephen-56/sec-form-d-alerts`) Actor

Daily SEC Form D filings as funding leads: new private raises with company, address, phone, industry, amount offered and sold, first sale date, executives and brokers. Free EDGAR data, no login.

- **URL**: https://apify.com/stephen-56/sec-form-d-alerts.md
- **Developed by:** [Stephen](https://apify.com/stephen-56) (community)
- **Categories:** Lead generation, Business
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $30.00 / 1,000 form d leads

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 Funding Alerts** turns the SEC's daily **Form D** filings into clean **startup funding leads**: companies that just raised (or are about to raise) private money under Regulation D. Each lead has the company's address and phone, industry, **amount offered and sold**, **date of first sale**, investor count, **executives, directors and promoters**, and any **broker** paid to sell the round, with a link to the filing on [SEC EDGAR](https://www.sec.gov/edgar/search/).

It reads only free, official SEC sources (the EDGAR daily index and each filing's `primary_doc.xml`). No login, no API key, no proxies. Run it once for a backfill or **schedule it daily** to get only the new raises.

### What does SEC Form D Funding Alerts do?

Every US company that sells securities in a private placement under Reg D (Rule 506(b), 506(c), 504) must file a Form D within 15 days of its first sale. That makes Form D the earliest public signal that a startup or small business **just raised money**, often weeks before a press release.

The problem: about **85% of Form D filings are investment funds and real estate deals** (VC/PE/hedge funds, SPVs, apartment syndications), and many "new" filings are late notices for rounds that are years old. This Actor filters those out by default, so you pay only for **operating-company leads with a recent first sale**:

- 🏢 **Operating companies only** by default (funds, real estate, REITs and "Investing" issuers removed), or switch to **funds only** or **all filings**
- 🆕 **New raises only**: amendments (Form D/A) skipped unless you want them
- ⏱️ **Fresh rounds**: first sale within 30 days of filing (adjustable), plus a `freshRaise` flag
- 🔁 **Only new across runs**: a daily schedule never returns or charges for the same filing twice
- 💵 Filter by **offering amount**, **industry group** and **state or country**
- 👥 Executives, directors and promoters as a **list and a readable string**, plus brokers with CRD numbers

### Who is it for?

- **B2B sales and agencies**: freshly funded startups have budget for software, hiring, legal, accounting, insurance and marketing
- **Recruiters**: companies that just raised are about to hire
- **Investors, angels and VC scouts**: deal flow and competitive intelligence by industry and state
- **Fund administrators and service providers** (with **Funds** mode): new VC, PE and hedge funds launching each day
- **Journalists and researchers**: track private capital formation by region or sector

### What data does it extract?

| Field | Example | Notes |
|---|---|---|
| `companyName`, `cik` | Swep Bio, Inc., 2159106 | Issuer and its SEC ID |
| `street`, `city`, `state`, `zip`, `phone` | Scarsdale, NY | Issuer contact details from the filing |
| `industryGroup`, `category`, `isFund` | Biotechnology, operating company | Form D industry group |
| `filingType`, `isAmendment`, `filingDate` | New, false, 2026-10-29 | |
| `dateOfFirstSale`, `firstSaleYetToOccur`, `firstSaleAgeDays`, `freshRaise` | 2026-10-28, false, 1, true | |
| `totalOfferingAmount`, `isIndefinite`, `totalAmountSold`, `totalRemaining` | 4999976, false, 2499989 | USD; `totalOfferingAmount` is empty when "Indefinite" |
| `minimumInvestment`, `totalInvestors`, `nonAccreditedInvestors` | 0, 1, 0 | |
| `entityType`, `jurisdiction`, `yearOfIncorporation`, `revenueRange` | Corporation, Delaware, 2026 | Most issuers decline to disclose revenue |
| `federalExemptions`, `securityTypes` | Rule 506(b), Equity | |
| `executiveOfficers`, `directors`, `promoters`, `relatedPersons`, `relatedPersonsText` | | People named in the filing, with roles |
| `brokers`, `salesCompensation` | | Broker-dealers paid to sell the round (about 1 in 7 filings) |
| `accessionNumber`, `filingUrl`, `xmlUrl` | | Link to the original filing on EDGAR |

The **Funding leads** and **Contacts** views in the Output tab show the most useful columns. Download everything as JSON, CSV, Excel, XML or HTML.

### How to get startup funding leads from SEC Form D

1. Open the Actor and click **Start**. The defaults return yesterday's new operating-company raises (the latest business day SEC has posted).
2. Optional: pick **Industry groups** (e.g. Biotechnology, Other Technology), **States** (e.g. CA, TX) or a **Min offering amount**.
3. For a backfill, set **Start date** and **End date** (up to about 92 business days per run).
4. To get **daily alerts**, save the input as a task and add a **schedule** (e.g. every weekday at 8:00 AM). Keep **Only new leads** on.
5. Send the results to Google Sheets, Slack, email, a webhook, Zapier or Make with Apify integrations.

### How much does it cost?

This Actor is **pay per event**: you pay a small fee when a run starts and a fixed price **per lead saved**. Filings that are filtered out (funds, real estate, amendments, old rounds, duplicates, leads you already received) are **never charged**.

| Event | Price |
|---|---|
| Run start | $0.00005 |
| Form D lead (one row in the dataset) | $0.03 |

What that means in practice (based on October 2026 filing volumes):

- A typical weekday has **about 230 Form D filings**. With the default filters, about **20 are fresh operating-company raises**, so a daily run costs about **$0.60** (about **$13 a month** for a weekday schedule). Industry, state or amount filters return fewer leads and cost less.
- **Funds** mode returns many more rows (about 100-120 new funds per day, so about $3-3.60 per day).
- **Max leads** (default 100, so at most about $3 per run) and your **maximum cost per run** both cap the bill. When your limit is reached the run stops cleanly and saves what it has.
- Some Form D scrapers charge less per row, but they return every filing, and most of those rows are funds, real estate deals, amendments and old rounds. Here every charged row has already passed your filters and has not been delivered to you before.

Platform usage (compute) is included in these prices.

**Trying it for free:** there is no separate free trial for pay-per-event Actors on Apify, but the Apify **Free plan** includes **$5 of usage every month** (no credit card needed). At $0.03 per lead that covers about **160 leads a month**, so roughly a week of daily runs with the default filters, or much longer with industry, state or amount filters. Set **Max leads** (for example 20) for a cheap first run.

### Input

See the **Input** tab for every option. Example input for daily tech and biotech raises of $1M+ in California, New York and Texas:

```json
{
    "lookbackDays": 1,
    "mode": "operating",
    "industries": ["Biotechnology", "Other Technology", "Computers", "Pharmaceuticals"],
    "states": ["CA", "NY", "TX"],
    "minAmountOffered": 1000000,
    "onlyNew": true,
    "maxItems": 100
}
```

How the filters handle the tricky cases:

- **"Yet to occur" first sales** (about 1 in 3 filings) are **kept by default**, because they are often the earliest signal of a raise. Turn off **Include 'first sale yet to occur'** to drop them. They never get the `freshRaise` flag (no sale yet).
- **"Indefinite" offering amounts** (mostly funds) have an empty `totalOfferingAmount` and `isIndefinite: true`. When you set a min or max amount, they are kept unless you turn off **Keep 'Indefinite' amounts**.
- **Days since first sale** is measured from the filing date, so backfills behave the same as daily runs.
- **One lead per company per day**: if a company files two Form Ds on the same day (e.g. a new round plus a late notice for an old one), only the one with the most recent first sale is kept.
- Use a different **History store name** for each saved task, so a "funds" task and a "Texas startups" task don't share history.

### Output example

```json
{
    "companyName": "Swep Bio, Inc.",
    "cik": "2159106",
    "category": "operating company",
    "industryGroup": "Biotechnology",
    "filingType": "New",
    "filingDate": "2026-10-29",
    "dateOfFirstSale": "2026-10-28",
    "freshRaise": true,
    "totalOfferingAmount": 4999976,
    "isIndefinite": false,
    "totalAmountSold": 2499989,
    "totalInvestors": 1,
    "street": "7 ROCHAMBEAU ROAD",
    "city": "SCARSDALE",
    "state": "NY",
    "zip": "10583",
    "phone": "(914) 555-0100",
    "entityType": "Corporation",
    "jurisdiction": "Delaware",
    "yearOfIncorporation": "2026",
    "federalExemptions": ["Rule 506(b)"],
    "executiveOfficers": ["Sample Founder", "Sample Cofounder"],
    "relatedPersonsText": "Sample Founder (Executive Officer/Director) | Sample Cofounder (Executive Officer/Director) | Sample Director (Director)",
    "brokers": [],
    "accessionNumber": "0002159106-26-000001",
    "filingUrl": "https://www.sec.gov/Archives/edgar/data/2159106/000215910626000001/0002159106-26-000001-index.htm"
}
```

(Person names and the phone number in this example are placeholders.) Each run also saves a `RUN_SUMMARY` record with how many filings were read, filtered out (by reason) and saved.

### Sample leads

Real sample output from SEC Form D filings dated **Oct 23–29, 2026** (default filters: operating companies, new filings, first sale within 30 days). Amounts are in USD as stated in the filing; industry is the filing's own industry group.

| Company | Industry (as filed) | State | Amount offered | Amount sold | First sale / filed | freshRaise | Filing |
|---|---|---|---|---|---|---|---|
| Swep Bio, Inc. | Biotechnology | NY | $4,999,976 | $2,499,989 | 2026-10-28 / 2026-10-29 | true | [filing](https://www.sec.gov/Archives/edgar/data/2159106/000215910626000001/0002159106-26-000001-index.htm) |
| CVAT.ai Corp | Other Technology | DE | $5,499,997 | $2,499,998 | 2026-10-20 / 2026-10-28 | true | [filing](https://www.sec.gov/Archives/edgar/data/2157596/000215759626000001/0002157596-26-000001-index.htm) |
| Fathom Water Corp | Other Technology | WA | $5,399,997 | $4,299,999 | 2026-10-16 / 2026-10-28 | true | [filing](https://www.sec.gov/Archives/edgar/data/2080138/000208013826000001/0002080138-26-000001-index.htm) |
| Accufy Diagnostics, Inc. | Biotechnology | MD | $2,000,000 | $2,000,000 | 2026-10-15 / 2026-10-28 | true | [filing](https://www.sec.gov/Archives/edgar/data/2089723/000208972326000001/0002089723-26-000001-index.htm) |
| Cala Systems, Inc. | Other Technology | MA | $3,000,000 | $2,550,000 | 2026-10-13 / 2026-10-27 | true | [filing](https://www.sec.gov/Archives/edgar/data/1836919/000183691926000004/0001836919-26-000004-index.htm) |
| Septal Solutions, Inc. | Other Health Care | PA | $10,000,000 | $7,319,695 | 2026-10-16 / 2026-10-27 | true | [filing](https://www.sec.gov/Archives/edgar/data/1955031/000195503126000004/0001955031-26-000004-index.htm) |
| Navispend, Inc. | Other Technology | CT | $16,312,226 | $5,312,226 | 2026-10-09 / 2026-10-23 | true | [filing](https://www.sec.gov/Archives/edgar/data/2161767/000216176726000001/0002161767-26-000001-index.htm) |

One record, abbreviated (the real output also includes street address, ZIP, phone, executive officers, directors, promoters and related persons, which are left out of this sample):

```json
{
    "companyName": "CVAT.ai Corp",
    "cik": "2157596",
    "category": "operating company",
    "industryGroup": "Other Technology",
    "filingType": "New",
    "filingDate": "2026-10-28",
    "dateOfFirstSale": "2026-10-20",
    "firstSaleAgeDays": 8,
    "freshRaise": true,
    "totalOfferingAmount": 5499997,
    "totalAmountSold": 2499998,
    "totalRemaining": 2999999,
    "totalInvestors": 2,
    "city": "Wilmington",
    "state": "DE",
    "entityType": "Corporation",
    "jurisdiction": "Delaware",
    "yearOfIncorporation": "2022",
    "federalExemptions": [
        "Rule 506(b)"
    ],
    "securityTypes": [
        "Equity"
    ],
    "brokers": [],
    "accessionNumber": "0002157596-26-000001",
    "filingUrl": "https://www.sec.gov/Archives/edgar/data/2157596/000215759626000001/0002157596-26-000001-index.htm"
}
```

### Use it via API

Replace `<YOUR_API_TOKEN>` with your token from **Apify Console > Settings > API & Integrations**.

#### Python

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("stephen-56/sec-form-d-alerts").call(run_input={
    "lookbackDays": 1,
    "states": ["CA"],
    "minAmountOffered": 1000000,
})
for lead in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(lead["companyName"], lead["totalOfferingAmount"], lead["phone"])
```

#### JavaScript

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_API_TOKEN>' });
const run = await client.actor('stephen-56/sec-form-d-alerts').call({
    lookbackDays: 1,
    industries: ['Biotechnology', 'Other Technology'],
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.map((l) => `${l.companyName}: $${l.totalOfferingAmount}`));
```

#### cURL

```bash
curl -X POST "https://api.apify.com/v2/acts/stephen-56~sec-form-d-alerts/run-sync-get-dataset-items?token=<YOUR_API_TOKEN>&format=csv" \
  -H "Content-Type: application/json" \
  -d '{"lookbackDays": 1, "mode": "operating", "maxItems": 50}'
```

### Daily funding alerts (scheduling)

1. Set your filters and click **Save as a new task**.
2. In the task, open **Schedules** and add one, e.g. weekdays at 8:00 AM (`0 8 * * 1-5`, with your time zone selected in the schedule). SEC usually posts the previous business day's index overnight.
3. Keep **Only new leads** on. Each run returns only filings you haven't received yet, so a missed or repeated run never duplicates leads.
4. Add an integration (Slack, email, Google Sheets, webhook) to receive the leads automatically.

### Limitations

- **Funds dominate Form D.** About 70% of filings are pooled investment funds and about 12% are real estate. Expect roughly **15-35 operating-company leads per business day** nationwide with default filters, fewer with industry or state filters.
- **"Indefinite" amounts**: many funds (and some companies) don't state an offering size.
- **Old rounds**: some new filings are late notices for rounds from past years; the default 30-day first-sale filter removes them.
- **Public and foreign issuers** also file Form D (e.g. a listed company selling a private block, or a startup based in Israel or Canada). Use `isUS` or the **States** filter to keep only US issuers. Non-US locations use EDGAR codes (L3 = Israel, A6 = Ontario).
- **No emails or websites**: Form D has a phone number and address, not an email. Pair it with an enrichment tool if you need emails.
- **Revenue** is disclosed in under 10% of filings.
- Data is as filed by the issuer; the Actor doesn't verify it.
- SEC limits clients to 10 requests per second. The Actor stays at about 4 per second, so one business day takes about a minute.

### FAQ

#### Is it legal to scrape SEC Form D filings?

Form D filings are public records published by the SEC for anyone to read. This Actor uses SEC's free EDGAR files, identifies itself with a User-Agent as SEC asks, and stays well under SEC's rate limit. Filings name executives and directors. Personal data is protected by the GDPR in the EU and by other laws elsewhere, so use it only for a legitimate purpose and consult a lawyer if you are unsure.

#### How fresh is the data?

SEC posts each business day's index the same night or the next morning. Default settings (**Business days to scan** = 1) read the latest day SEC has posted. A day that isn't posted yet is skipped, never an error.

#### Why did I get 0 leads?

Your filters may be strict for one day, or **Only new leads** already delivered those filings in an earlier run. Check the run's status message or `RUN_SUMMARY`, which lists how many filings each filter removed. Try more days, or a new **History store name**.

#### Can I get investment funds instead of startups?

Yes. Set **What to include** to **Pooled investment funds only**. `fundType` says Venture Capital, Private Equity, Hedge Fund or Other.

#### Can I include amendments?

Turn on **Include amendments (D/A)**. Amendments usually update older rounds, so you may also want to set **Max days since first sale** to 0.

Found a bug or need a field? Open an issue in the **Issues** tab.

# Actor input Schema

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

How many of the latest EDGAR business days to read. 1 = the latest day SEC has posted (yesterday's filings on a weekday morning). Ignored when Start date or End date is set. Each day is about 150-250 Form D filings and takes about 1 minute.

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

Optional. First filing date to scan (YYYY-MM-DD), for a backfill. Weekends, holidays and days SEC hasn't posted yet are skipped.

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

Optional. Last filing date to scan (YYYY-MM-DD). Defaults to today when only Start date is set.

## `mode` (type: `string`):

Operating companies (default) drops pooled investment funds and real estate, REIT and 'Investing' issuers, which are about 85% of all Form D filings. Funds returns only pooled investment funds (VC, PE, hedge funds). All returns everything.

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

Amendments update an earlier filing (often an old round). Off by default so you only get new raises.

## `maxFirstSaleAgeDays` (type: `integer`):

Drop filings whose first sale happened more than this many days before the filing date (some 'new' filings are late notices for rounds years old). 0 = no limit. Also sets the window for the freshRaise flag.

## `includeYetToOccur` (type: `boolean`):

Keep raises that haven't had their first sale yet (about 1 in 3 filings). These are often the earliest signal of a raise.

## `minAmountOffered` (type: `integer`):

Optional. Only raises with a total offering amount of at least this many dollars.

## `maxAmountOffered` (type: `integer`):

Optional. Only raises with a total offering amount of at most this many dollars.

## `includeIndefiniteAmounts` (type: `boolean`):

Some issuers (mostly funds) report the offering amount as 'Indefinite'. When a min or max amount is set, keep these (on) or drop them (off). Has no effect without an amount filter.

## `industries` (type: `array`):

Optional. Only these Form D industry groups. Leave empty for all (within the mode above).

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

Optional. Issuer's state or country, as a code (CA, NY, TX) or a name (California). EDGAR codes non-US issuers too, e.g. L3 = Israel, A6 = Ontario.

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

Remembers delivered filings in a named key-value store, so a daily schedule never returns (or charges for) the same filing twice. Also skips a second filing by the same company on the same day.

## `historyName` (type: `string`):

Name of the key-value store that remembers delivered filings. Use a different name per saved task (e.g. one for funds, one for Texas startups) so they don't share history.

## `dedupeSameDayCompany` (type: `boolean`):

If a company files more than one Form D on the same day, keep only the one with the most recent first sale.

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

Stop after saving this many leads (a cost cap). 0 = no limit.

## `userAgent` (type: `string`):

SEC asks every client to identify itself with a name and contact email. Leave empty to use the Actor's default, or enter your own like 'Acme Research alerts@acme.com'.

## Actor input object example

```json
{
  "lookbackDays": 1,
  "mode": "operating",
  "includeAmendments": false,
  "maxFirstSaleAgeDays": 30,
  "includeYetToOccur": true,
  "includeIndefiniteAmounts": true,
  "onlyNew": true,
  "historyName": "form-d-history",
  "dedupeSameDayCompany": true,
  "maxItems": 100
}
```

# Actor output Schema

## `leads` (type: `string`):

Dataset of Form D leads

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

Counts of filings read, filtered and saved

# 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 = {
    "lookbackDays": 1,
    "maxItems": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("stephen-56/sec-form-d-alerts").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 = {
    "lookbackDays": 1,
    "maxItems": 100,
}

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

```

## MCP server setup

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

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/ugOykChvdxCZjDeFl/builds/rRngqfupfvafP4kbh/openapi.json
