# SEC Form D Filings Scraper (Private Fundraising) (`soogrow_berries/sec-form-d-filings-scraper`) Actor

New Form D notices from SEC EDGAR: companies and funds raising money privately, with amount offered and sold, investors, industry, securities, exemption, address and the people named. Newest filing days first.

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

## Pricing

$4.50 / 1,000 filing saveds

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 Filings Scraper (Private Fundraising)

Monitor new private-offering notices by industry or issuer location using SEC EDGAR Form D filings. Get up to Maximum results filings per run, one row per filing, with issuer-reported offering amounts, investor counts and named officers.

### What does this Actor do?

- **You give:** the default preset (the newest 3 filing days and a publisher contact email for SEC requests), a number of recent filing days, a date range, or filing links. Optional filters: issuer state, industry group, operating companies only, minimum amount sold.
- **You get:** issuer name, CIK, entity type, jurisdiction and year of incorporation, address and phone, industry group and fund type, size range, exemptions claimed, date of first sale, types of securities, minimum investment, amount offered, sold and remaining, number of investors, commissions and finders' fees, the people named with their roles, and links to the filing on [SEC EDGAR](https://www.sec.gov/Archives/edgar/daily-index/).
- **How many:** up to Maximum results matching filings across the selected window (20 by default). Amendments (D/A) are left out unless you include them; the number available varies by filing day.
- **Speed and limits:** requests run one at a time, with a wait of at least 1.1 seconds before each request. Each filing is one small file. With filters the Actor reads at most 3 filings per result asked (Maximum results x 3 + 20 files a run).
- **Price:** $4.50 per 1,000 filings (20 filings = $0.09). No start fee. No proxy needed.
- **Not included:** investor names, the full text of other SEC forms, and company websites or emails (Form D has none).

### Input

| Field | What it does | Default |
|---|---|---|
| Recent filing days | Read the newest this many filing days | 3 |
| Filed from / Filed until | A date range instead (YYYY-MM-DD) | None |
| Include amendments | Also read amended notices (D/A) | Off |
| Issuer states | Keep only these SEC state or country codes (CA, NY, TX, ...) | All |
| Industry groups | Keep only these Form D industry groups, or words in them | All |
| Leave out investment funds | Keep operating companies only | Off |
| Minimum amount sold (USD) | Keep only filings that report at least this much sold | None |
| Filing links | Read these Form D documents, filing folders or daily indexes instead | None |
| Contact email for SEC | Public business contact stored visibly in run input and sent to SEC in the User-Agent | `mattl@vextalabs.net` (publisher contact; optionally replace with your business contact) |
| Maximum results | Stop after this many filings | 20 |
| Only new results | Skip filings an earlier run with the same filters already saved; they are not saved or charged | Off |
| Leave out names and phones of people | Empty the people named and the issuer phone | Off |
| Proxy configuration | Optional; the Actor runs without one | No proxy |

Filings your filters leave out are not charged.

Example: technology companies in California and New York that filed in the last 5 filing days and sold at least $1 million.

```json
{
    "daysBack": 5,
    "industryGroups": ["Technology"],
    "states": ["CA", "NY"],
    "leaveOutFunds": true,
    "minAmountSoldUsd": 1000000,
    "maxItems": 200
}
```

Run it every weekday with "Only new results" on to skip previously saved filings. Each run still stops at Maximum results; a capped run does not cover every new filing in the window.

### Output

One record per filing. Download it as JSON, CSV, Excel or HTML from the Output tab, or read it through the Apify API.

```json
{
    "accessionNumber": "0002159093-26-000001",
    "formType": "D",
    "filedDate": "2026-10-07",
    "cik": "0002159093",
    "issuerName": "AERSTREAM INC",
    "entityType": "Corporation",
    "jurisdiction": "DELAWARE",
    "yearOfIncorporation": 2024,
    "city": "ROCKLEDGE",
    "stateOrCountry": "FL",
    "industryGroup": "Other Technology",
    "issuerSize": "$1 - $1,000,000",
    "exemptions": [
        "06b"
    ],
    "dateOfFirstSale": "2026-09-24",
    "securitiesTypes": [
        "Debt",
        "Option, warrant or other right to acquire",
        "Security to be acquired on exercise"
    ],
    "minimumInvestmentUsd": 0,
    "totalOfferingAmountUsd": 1800002,
    "totalAmountSoldUsd": 1200000,
    "totalRemainingUsd": 600002,
    "investorsCount": 1,
    "hasNonAccreditedInvestors": false,
    "filingUrl": "https://www.sec.gov/Archives/edgar/data/2159093/000215909326000001/",
    "scrapedAt": "2026-10-08T03:17:15.787Z"
}
```

A real record from a local test run on 2026-10-08 (UTC), shortened to 23 of its 36 fields. Not shown: `incorporatedWithin5Years`, `street`, `stateOrCountryName`, `zipCode`, `issuerPhone`, `fundType`, `moreThanOneYear`, `businessCombination`, `offeringAmountIndefinite`, `salesCommissionsUsd`, `findersFeesUsd`, `relatedPersons`, `sourceUrl`.

Amounts are in US dollars as filed. `exemptions` uses SEC codes: `06b` = Rule 506(b), `06c` = Rule 506(c), `04` = Rule 504, `3C`, `3C.1`, `3C.7` = Investment Company Act exclusions. `stateOrCountry` uses SEC codes (US states, then codes such as `X0` for the United Kingdom).

The run also saves an `OUTCOME` record in its key-value store, and the same sentence as the run's status message: `COMPLETE` (no more filings in your window), `MAX_RESULTS` (stopped at Maximum results), `SPENDING_LIMIT`, `PARTIAL` (some files failed to load), `PAGE_LIMIT` (filters left out most filings; raise Maximum results), `NO_NEW_RESULTS` (Only new results is on and nothing is new), `NO_MATCHING_RESULTS` (your filters left nothing), `NO_RESULTS` (no filing day in your window) or `FAILED`. Only `FAILED` ends the run as failed.

### Pricing

You pay $4.50 per 1,000 filings, only for filings saved. No start fee. Platform costs are included in the price.
Example: the default maximum of 20 saved filings costs $0.09 (20 × $0.0045). Fewer saved filings cost proportionally less.

- Filings your filters leave out are not charged.
- A run that cannot read anything stops with a reason and costs nothing.
- A filing seen again in a later run is saved and charged again, unless "Only new results" is on.
- Set "Maximum results" or a spending limit to cap the cost.

### Notes

- This Actor is an independent tool. It is not affiliated with, endorsed by or sponsored by the US Securities and Exchange Commission.
- It reads EDGAR's public daily form indexes and Form D documents, which need no key, one request at a time with a wait of at least 1.1 seconds before each request (SEC limits users to 10 requests a second). It names itself in the User-Agent with the contact email input (the publisher contact by default), as SEC's fair access policy asks. Serial pacing applies within one run; simultaneous runs sharing an upstream IP can still exceed a combined access limit.
- Form D is a notice of an exempt offering filed by the issuer itself; the SEC does not review it. Amounts are as filed and can change in later amendments (turn on "Include amendments" to follow them). A filing is not independent verification of cash received, an issuer's present fundraising activity or intent to buy any product or service.
- People named in a filing are its executive officers, directors and promoters, as the issuer listed them. "Leave out names and phones of people" empties them and the issuer phone if your use needs no personal data.
- Found a problem? Open an issue on the Issues tab and include the run link.

# Actor input Schema

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

Read the newest this many filing days of SEC EDGAR (days with filings; weekends and holidays have none). Used when no dates and no filing links are given.

## `fromDate` (type: `string`):

Optional. First filing date to read (YYYY-MM-DD).

## `toDate` (type: `string`):

Optional. Last filing date to read (YYYY-MM-DD). Default: the newest filing day.

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

Also read amended notices (form D/A). Off: new notices only (form D).

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

Optional. Keep only issuers whose address is in these US states or countries, as SEC codes (CA, NY, TX, DE, ...; X0 = United Kingdom, A6 = Canada (Ontario) and so on). Filings left out are not charged.

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

Optional. Keep only these Form D industry groups, or words in them, such as "Other Technology", "Biotechnology", "Pooled Investment Fund", "Real Estate", "Health Care". Filings left out are not charged.

## `leaveOutFunds` (type: `boolean`):

Skip filings by pooled investment funds (hedge, private equity, venture capital and other funds), keeping operating companies. Filings left out are not charged.

## `minAmountSoldUsd` (type: `integer`):

Optional. Keep only filings that report at least this much sold so far. Filings left out are not charged.

## `startUrls` (type: `array`):

Optional. Read these instead: Form D documents (https://www.sec.gov/Archives/edgar/data/<CIK>/<accession>/primary_doc.xml), filing folders (https://www.sec.gov/Archives/edgar/data/<CIK>/<accession>/) or EDGAR daily form indexes (https://www.sec.gov/Archives/edgar/daily-index/2026/QTR4/form.20261006.idx).

## `secContactEmail` (type: `string`):

SEC asks automated tools to name a contact in the User-Agent of their requests (SEC fair access policy). This public business contact is stored visibly in run input and sent to SEC in the User-Agent. The publisher contact is supplied by default; optionally replace it with your own business contact email.

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

Stop after saving this many filings. You pay per result, so this also caps the cost.

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

Skip filings that an earlier run with the same filters already saved. Skipped filings are not saved and not charged. The list of saved IDs is kept in a key-value store named "sec-form-d-filings-scraper-seen" in your Apify account; delete it to start over.

## `leaveOutPersonFields` (type: `boolean`):

Empty the list of people named in the filing (relatedPersons) and the issuer phone (issuerPhone), which small issuers often give as a personal number.

## `proxyConfiguration` (type: `object`):

Optional. The Actor runs without a proxy.

## Actor input object example

```json
{
  "daysBack": 3,
  "includeAmendments": false,
  "leaveOutFunds": false,
  "secContactEmail": "mattl@vextalabs.net",
  "maxItems": 20,
  "onlyNew": false,
  "leaveOutPersonFields": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

Saved filings in the default dataset.

## `runSummary` (type: `string`):

Run outcome record in the default key-value store.

# 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,
    "secContactEmail": "mattl@vextalabs.net",
    "maxItems": 20,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("soogrow_berries/sec-form-d-filings-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,
    "secContactEmail": "mattl@vextalabs.net",
    "maxItems": 20,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("soogrow_berries/sec-form-d-filings-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,
  "secContactEmail": "mattl@vextalabs.net",
  "maxItems": 20,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call soogrow_berries/sec-form-d-filings-scraper --silent --output-dataset

```

## MCP server setup

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