# Form D Scraper: New US Startup Fundraises (`agents001/form-d-funding-feed`) Actor

Returns new US private fundraises from Form D filings: company, amount raised and sold, industry, first sale date, issuer address and phone. Optional 8-K events with plain-English labels. Daily mode returns only new filings. Public SEC data.

- **URL**: https://apify.com/agents001/form-d-funding-feed.md
- **Developed by:** [Mike Ross](https://apify.com/agents001) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 filing records

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

## Form D Scraper: New US Startup Fundraises

Get a clean, daily feed of US companies that have just raised private money, straight from public SEC filings. Every Form D filing tells you who raised, how much they are raising, how much they have already sold, when the first sale happened, what industry they are in, and the company's address and phone number. Optionally add 8-K trigger events such as new material agreements, completed acquisitions and executive changes, each with a plain-English label.

All data comes from official SEC sources (EDGAR full-text search, EDGAR daily index and the filings themselves). No third-party databases, no logins, no scraping of private sites.

### What does it do?

1. Finds every Form D and Form D/A (and, if you want, 8-K and 8-K/A) filed in your date range.
2. Opens each filing and pulls out the structured fields.
3. Applies your filters (state, industry, minimum offering amount, 8-K item numbers).
4. Saves one tidy record per filing, with the same columns every time, ready for CSV, Excel, JSON, your CRM or a webhook.

### Who is it for?

- **B2B sales teams.** A company that just raised money has budget and is about to hire and buy. Reach them in the first weeks after the raise.
- **Venture capital and private equity.** Track who is raising in your sector and state, how big the rounds are and how much is already committed.
- **Fintech, banking and lending.** Spot newly funded businesses for treasury, payroll, card and credit products.
- **Recruiters and agencies.** Newly funded companies hire. 8-K item 5.02 flags director and officer changes at listed companies.
- **Market researchers and journalists.** Count raises by industry, state and size over time.

### Why use this instead of browsing EDGAR?

- EDGAR shows one filing at a time. This Actor gives you the whole day in one table.
- Form D data lives inside XML. This Actor turns it into named columns.
- 8-K items are numeric codes. This Actor adds the plain-English label for each one.
- Schedule it daily on Apify and send new rows to Google Sheets, Slack, HubSpot, Zapier or Make.

### Input

| Field | What it does | Default |
| --- | --- | --- |
| Days back | Fetch filings from today back this many calendar days (US Eastern time) | 3 |
| Start date / End date | Exact date range in YYYY-MM-DD. Overrides Days back | empty |
| Form types | D, D/A, 8-K, 8-K/A | D and D/A |
| Max records | Stop after this many saved filings. Each saved filing is one billable event | 50 |
| Only new since last run | Output only filings not delivered by an earlier run with the same filters. See Daily monitoring below | off |
| State store name | Optional custom name for the store that remembers delivered filings | automatic |
| US states | Two-letter codes for the business address, such as CA, NY, TX | all |
| Industry groups | Form D only. Keeps filings whose industry group or sector contains any of your words, such as Technology, Biotechnology, Health Care, Real Estate | all |
| Exclude pooled investment funds | Form D only. Drops fund vehicles so only operating companies remain | off |
| Minimum offering amount | Form D only. Minimum total offering amount in USD | none |
| Keep offerings with an indefinite amount | When a minimum is set, keep or drop filings that report the amount as Indefinite | on |
| 8-K item numbers | Keep only 8-Ks with at least one of these items, such as 1.01, 2.01, 5.02 | all |
| Include executive and director names | Adds the related persons listed on Form D | off |
| SEC User-Agent | Your company name and contact email, as SEC asks | DataEngine contact@example.com |
| Max SEC requests per second | Politeness limit, capped at 8 (SEC allows 10) | 5 |
| Discovery source | Auto, EDGAR full-text search only, or daily index only | Auto |

**Please set the SEC User-Agent to your own details**, for example `Acme Growth Ltd sales-ops@acme.com`. The SEC fair access policy asks every automated client to identify itself, and may block anonymous traffic.

#### Example input

```json
{
    "daysBack": 3,
    "formTypes": ["D", "D/A", "8-K"],
    "states": ["CA", "NY", "TX"],
    "industryGroups": ["Technology", "Health Care"],
    "excludePooledInvestmentFunds": true,
    "minOfferingAmount": 1000000,
    "eightKItems": ["1.01", "2.01", "5.02"],
    "maxItems": 500,
    "userAgent": "Acme Growth Ltd sales-ops@acme.com"
}
```

Industry, minimum amount and fund filters apply to Form D records only. State filters apply to both. 8-K item filters apply to 8-K records only.

### Daily monitoring

Turn on **Only new since last run** (`onlyNew`) and schedule the Actor. Each run then outputs only filings it has not delivered before, so your sheet, CRM or Slack channel gets new raises once, and you pay only for those new records.

How it works:

- The Actor remembers the accession number of every filing it delivers, in a named key-value store in your Apify account. The name is built from a hash of your filters, for example `sec-funding-seen-3f9a1c0d2b7e4a65`. The exact name is shown in the log and in `RUN_SUMMARY`.
- The filters in the hash are form types, states, industry groups, minimum amount, indefinite amounts, fund exclusion and 8-K items. Days back, the date range, Max records and the privacy and connection settings are not, so a rolling window keeps the same memory. Change a filter and you get a fresh, separate memory.
- Set **State store name** (`stateStoreName`) to choose the name yourself, for example to share one memory between two schedules, or to start over with a new name. Deleting the store in Storage also starts over.
- The last 50,000 accession numbers are kept; older ones are dropped.
- Filings that fail to parse are not remembered, so a later run retries them.

Example schedule: every weekday at 07:00 New York time (cron `0 7 * * 1-5`, timezone America/New_York) with this input:

```json
{
    "daysBack": 3,
    "formTypes": ["D", "D/A"],
    "states": ["CA", "NY"],
    "excludePooledInvestmentFunds": true,
    "maxItems": 1000,
    "onlyNew": true,
    "userAgent": "Acme Growth Ltd sales-ops@acme.com"
}
```

A 3 day window overlaps the previous runs on purpose. Late filings and weekends are still caught, and the overlap is never delivered twice. Keep Max records high enough for a full day of new filings, because it counts new records only.

### Output

Every record has the same set of fields. Fields that do not apply to a record type are `null`. Download as JSON, CSV, Excel, XML or HTML, or read it through the Apify API. The Output tab has four ready-made views: Overview, Fundraises (Form D), Trigger events (8-K) and Company contacts.

#### Form D example (fundraise)

```json
{
    "recordType": "fundraise",
    "formType": "D",
    "isAmendment": false,
    "companyName": "Satlyt Inc.",
    "cik": "0002160771",
    "filingDate": "2026-10-19",
    "accessionNumber": "0002160771-26-000001",
    "street1": "605 TASMAN DRIVE",
    "city": "SUNNYVALE",
    "state": "CA",
    "stateOrCountryName": "CALIFORNIA",
    "zipCode": "94089",
    "phone": "+1 650-931-5728",
    "jurisdictionOfIncorporation": "DELAWARE",
    "entityType": "Corporation",
    "yearOfIncorporation": "2024",
    "industryGroup": "Other Technology",
    "industrySector": "Technology",
    "revenueRange": "Decline to Disclose",
    "totalOfferingAmount": 9012239,
    "offeringAmountIndefinite": false,
    "totalAmountSold": 7794707,
    "totalRemaining": 1217532,
    "dateOfFirstSale": "2026-09-25",
    "securitiesOffered": ["Equity"],
    "federalExemptionLabels": ["Rule 506(b)"],
    "totalInvestors": 39,
    "filingUrl": "https://www.sec.gov/Archives/edgar/data/2160771/000216077126000001/0002160771-26-000001-index.htm",
    "documentUrl": "https://www.sec.gov/Archives/edgar/data/2160771/000216077126000001/primary_doc.xml",
    "companyFilingsUrl": "https://www.sec.gov/cgi-bin/browse-edgar?action=getcompany&CIK=0002160771",
    "dataSource": "EDGAR full-text search"
}
```

#### 8-K example (trigger event)

```json
{
    "recordType": "trigger-event",
    "formType": "8-K",
    "companyName": "Teamshares Inc",
    "cik": "0002048951",
    "filingDate": "2026-10-19",
    "periodOfReport": "2026-10-16",
    "street1": "214 SULLIVAN STREET",
    "city": "NEW YORK",
    "state": "NY",
    "zipCode": "10012",
    "phone": "+1 917-310-2731",
    "jurisdictionOfIncorporation": "DELAWARE",
    "eventItemCodes": ["1.01", "1.02", "2.03", "3.03", "7.01", "9.01"],
    "eventItems": [
        { "code": "1.01", "label": "Entry into a Material Definitive Agreement" },
        { "code": "2.03", "label": "Creation of a Direct Financial Obligation or Off-Balance Sheet Arrangement" }
    ],
    "eventSummary": "1.01 Entry into a Material Definitive Agreement; 1.02 Termination of a Material Definitive Agreement; ...",
    "sicCode": "5900",
    "filingUrl": "https://www.sec.gov/Archives/edgar/data/2048951/000204895126000030/0002048951-26-000030-index.htm",
    "documentUrl": "https://www.sec.gov/Archives/edgar/data/2048951/000204895126000030/tms-20261016.htm"
}
```

#### Main fields

| Field | Meaning |
| --- | --- |
| companyName, cik | Issuer name and SEC Central Index Key |
| filingDate, accessionNumber | When it was filed and the unique SEC filing ID |
| street1, street2, city, state, zipCode, phone | Company business address and phone as filed |
| industryGroup, industrySector | Form D industry (for example Biotechnology inside Health Care) |
| totalOfferingAmount, totalAmountSold, totalRemaining | Size of the raise in USD. Amount is `null` and `offeringAmountIndefinite` is `true` when the issuer filed Indefinite |
| dateOfFirstSale | Date the first investor money came in |
| securitiesOffered, otherSecurityDescription | Equity, debt, SAFE, convertible note and so on |
| federalExemptionLabels | Exemption claimed, such as Rule 506(b) or 506(c) |
| eventItemCodes, eventItems, eventSummary | 8-K items with plain labels |
| filingUrl, documentUrl, companyFilingsUrl | Links back to the source on sec.gov |

A short run summary (records saved, filings scanned, filtered out, skipped, SEC requests, runtime) is saved to the key-value store as `RUN_SUMMARY`.

### How much does it cost?

Pay per event: **$6 per 1,000 filings** saved to the dataset (charged once per filing). Filings that your filters drop are not charged. You can cap spend with the maximum total charge setting on each run, and the Actor stops cleanly when the cap is reached.

A typical daily run of all new Form D filings is a few hundred records. Platform usage is included in the price, so you only pay per filing (plus a tiny start fee).

### How fast is it?

About 5 SEC requests per second. The default run (50 records) finishes in roughly 15 seconds. A full 3-day sweep of every Form D, D/A, 8-K and 8-K/A (about 850 filings) took about 3.5 minutes in testing. Heavy filters mean more filings are scanned per saved record, so runs with very narrow filters over long date ranges take longer.

### FAQ

**How fresh is the data?**
EDGAR full-text search usually shows filings within minutes of acceptance. Run the Actor daily (or several times a day). Turn on Only new since last run so each filing is delivered once, or drop duplicates yourself on `accessionNumber`.

**Why is the offering amount empty on some records?**
The issuer filed the amount as Indefinite. This is common for investment funds. `offeringAmountIndefinite` is `true` for these.

**What is the difference between D and D/A?**
D is the first notice of an offering. D/A is an amendment, often filed yearly or when the amount sold changes. Many teams want both, because an amendment can show that a round has grown.

**Why are there no records for Saturday or Sunday?**
EDGAR does not accept filings on weekends or federal holidays.

**Do you include personal data?**
By default, no. Records contain company-level data only: company name, business address and company phone. Executive and director names are available behind the Include executive and director names switch, which is off by default to support data minimisation under GDPR, POPIA and similar laws. Only turn it on if you have a lawful basis to process that personal data.

**Can I get older filings?**
Yes. Set Start date and End date. Form D has been filed electronically since 2009.

**What happens if a filing is broken?**
It is logged and skipped. One bad filing never stops the run.

**Is this affiliated with the SEC?**
No. It is an independent tool that reads public SEC data.

### Legal note

SEC EDGAR filings are public records published by the US Securities and Exchange Commission and are generally in the public domain. This Actor follows the SEC fair access policy: it identifies itself with a User-Agent you control, stays well under 10 requests per second, and backs off when SEC asks it to slow down. You are responsible for how you use the data, including compliance with privacy, anti-spam and marketing laws (for example GDPR, POPIA, CAN-SPAM and TCPA) when contacting companies. This is not investment advice.

This Actor is independent and is not affiliated with or endorsed by the US Securities and Exchange Commission. SEC and EDGAR are trademarks of the SEC, used here only to describe the data source.

# Actor input Schema

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

Fetch filings from today back this many calendar days (US Eastern time). Ignored when Start date is set. Weekends and SEC holidays have no filings.

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

First filing date to include, YYYY-MM-DD. Overrides Days back.

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

Last filing date to include, YYYY-MM-DD. Defaults to today.

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

D is a new private offering notice, D/A an amendment. 8-K and 8-K/A are current reports for trigger events such as deals, acquisitions and executive changes.

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

Stop after this many filings are saved. Each saved filing is one billable event.

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

For scheduled monitoring. When on, the Actor remembers which filings (by accession number) it has already delivered for this combination of filters and outputs only filings it has not delivered before. You are charged only for the new filings that are saved. State is kept in a named key-value store in your account, named from a hash of your filters (form types, states, industries, minimum amount, indefinite amounts, fund exclusion, 8-K items). The date range and Max records are not part of it, so a rolling Days back window keeps the same state. The last 50,000 accession numbers are remembered.

## `stateStoreName` (type: `string`):

Only used with Only new since last run. Override the automatic name of the key-value store that remembers delivered filings, for example to share state between schedules or to start fresh with a new name. Lowercase letters, numbers and hyphens, up to 63 characters. Leave empty for the automatic name.

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

Two-letter codes such as CA, NY, TX. Leave empty for all states and countries.

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

Keep only Form D filings whose industry group or sector contains one of these words, for example Technology, Biotechnology, Health Care, Real Estate, Pooled Investment Fund. Case-insensitive.

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

Drop hedge fund, private equity fund and venture fund vehicles so only operating companies remain. Useful for B2B sales prospecting.

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

Keep only offerings at or above this total offering amount.

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

Some issuers (mostly funds) report the offering amount as Indefinite. When a minimum amount is set, keep these (on) or drop them (off).

## `eightKItems` (type: `array`):

Keep only 8-K filings that contain at least one of these items, for example 1.01 (material agreement), 2.01 (acquisition completed), 5.02 (director or officer change). Leave empty for all items.

## `includeExecutiveNames` (type: `boolean`):

Adds the related persons (executives, directors, promoters) listed on Form D. Off by default for data minimisation under GDPR and POPIA. Only turn on if you have a lawful basis to process personal data.

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

SEC fair access policy asks every client to identify itself as "Company Name contact@yourdomain.com". Leave empty to use the Actor's own contact, or set your own.

## `maxRequestsPerSecond` (type: `integer`):

SEC allows up to 10. This Actor caps it at 8 and defaults to 5.

## `dataSource` (type: `string`):

Auto uses EDGAR full-text search and falls back to the nightly daily index if search fails. The daily index is not published until the night after filing.

## Actor input object example

```json
{
  "daysBack": 3,
  "formTypes": [
    "D",
    "D/A"
  ],
  "maxItems": 50,
  "onlyNew": false,
  "excludePooledInvestmentFunds": false,
  "includeIndefiniteAmounts": true,
  "includeExecutiveNames": false,
  "maxRequestsPerSecond": 5,
  "dataSource": "auto"
}
```

# Actor output Schema

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

No description

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

No description

# 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,
    "formTypes": [
        "D",
        "D/A"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("agents001/form-d-funding-feed").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,
    "formTypes": [
        "D",
        "D/A",
    ],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("agents001/form-d-funding-feed").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,
  "formTypes": [
    "D",
    "D/A"
  ],
  "maxItems": 50
}' |
apify call agents001/form-d-funding-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,agents001/form-d-funding-feed"
        }
    }
}
```

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/OVCYDOero5FcZ4PEu/builds/Rb6n59QtKF9pA3vjb/openapi.json
