# SEC Form D Filings – Startup Funding Leads from EDGAR (`agentic_solutions/form-d-fundraising-leads`) Actor

Get new SEC Form D filings from EDGAR as startup funding leads: private placements with issuer, phone, executives, offering size and amount sold. Filter by date, state, industry group and raise size. Not affiliated with or endorsed by the SEC.

- **URL**: https://apify.com/agentic_solutions/form-d-fundraising-leads.md
- **Developed by:** [Agentic Solutions](https://apify.com/agentic_solutions) (community)
- **Categories:** Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event

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 – Startup Funding Leads from EDGAR

Pull new **SEC Form D** filings (private placements by startups and funds) straight from EDGAR and get them as clean **startup funding leads**: issuer, phone, executives, offering size, amount sold and a direct EDGAR link.

**Tested against SEC EDGAR:** in our 14 Oct 2026 audit, 25 of 25 output records matched each filing's own `primary_doc.xml` and the data.sec.gov submissions JSON.

### Quick example

Input:

```json
{
  "maxItems": 5,
  "userAgent": "Your Company you@yourcompany.com"
}
```

Output: one real row from a 16 Oct 2026 run (selected fields; amounts in USD).

```json
{
  "issuerName": "Equitybee 22-46410 a Series of Equitybee cFund Master LLC",
  "cik": "0002160588",
  "industryGroup": "Pooled Investment Fund",
  "issuerCity": "PALO ALTO",
  "issuerState": "CA",
  "issuerPhone": "6508471149",
  "contactName": "Dennis Henderson",
  "investorsCount": 1,
  "totalAmountSold": 154867,
  "formType": "D",
  "dateFiled": "2026-10-16",
  "filingUrl": "https://www.sec.gov/Archives/edgar/data/2160588/000216058826000001/0002160588-26-000001-index.htm"
}
```

Turns new **Form D** filings (companies and funds raising private capital) into clean lead records: issuer name, CIK, address, **phone**, **related persons** (executives, directors, promoters), total offering, amount sold, amount remaining, industry, filing date and direct EDGAR link. The data comes straight from EDGAR, refreshed daily, with no cache in between.

### Use cases

1. **Outbound for B2B SaaS and agencies.** Each morning, get US companies that just raised $1M or more in tech.
   ```json
   {"states": [], "industryGroups": ["Other Technology"], "minOfferingAmount": 1000000, "enriched": true, "maxItems": 200}
   ```
   Leave `dateFrom` empty to use the default (7 days ago). Schedule the run daily.
2. **Fractional CFO, fund admin and legal services.** Get a weekly list of newly funded companies in your state, e.g. `{"states": ["CA", "NY"], "minOfferingAmount": 500000}`.
3. **VC and angel deal-flow research.** Track new pooled funds with `{"industryGroups": ["Pooled Investment Fund"]}`.
4. **Biotech and real-estate market maps.** Use `"Biotechnology"` or `"Other Real Estate"` with an amount range.

### Automations (Make, Zapier, n8n, Google Sheets)

- **Zapier:** Trigger *Finished Task Run* (Apify app) on a daily task → *Fetch Dataset Items* → HubSpot/Pipedrive *Create Company*. Don't add an auto-email step. Docs: https://docs.apify.com/integrations/zapier.md
- **Make:** *Watch Actor Runs* → *Get Dataset Items* → Google Sheets *Add a Row*. Docs: https://docs.apify.com/integrations/make.md
- **n8n:** Schedule (daily) → Apify node *Run Actor* → Google Sheets *Append* → Slack message with the count. Docs: https://docs.apify.com/integrations/n8n.md
- **Google Sheets (no-code):** add an Actor-to-Actor integration that passes the dataset to `lukaskrivka/google-sheets`. Docs: https://docs.apify.com/integrations/actors.md
- *Module names follow Apify's docs. Confirm the exact labels in each tool.*

### Inputs

Date range (defaults to last 7 days), issuer states, industry groups (exact Form D names), min/max offering size, include and merge amendments, max results, User-Agent (**strongly recommended**: SEC fair access asks for your own company name and a monitored contact email; if empty, the run falls back to the publisher contact and logs a warning), max requests/s (default 5, hard cap 10), throttle behaviour (default: fail immediately with a clear message, or cool down ≥10 min and resume; default run timeout is 1800 s), and **re-check filings** (refresh specific `CIK/ACCESSION` filings to catch post-acceptance corrections or removals; output includes `dateFiled`, `fileNumber`, `originalAccessionNumber` and the full accession history). Default max results: 25.

### Amendments and offerings

With amendments on, every D and D/A filing that shares an SEC file number becomes **one record per offering** that carries the latest values. The record lists `originalAccessionNumber`, `amendmentAccessionNumbers`, every `accessionNumbers` entry, `amendmentCount` and `firstFiledDate`. If a D/A falls inside your date range, the actor pulls the issuer's full filing history from the SEC submissions JSON with no date limit. That brings in the original D and every earlier amendment, even ones filed years ago, while staying under the same rate cap. Newer amendments filed after `dateTo` are listed in `newerFilingsAfterWindow`.

### Output

One row per offering, newest first, with the same field names on every row. **Base fields:** `issuerName`, `cik`, `industryGroup`, issuer address and `issuerPhone`, `contactName` (first related person), `investorsCount` (integer), `totalOfferingAmount`, `totalOfferingIndefinite` (true when the issuer reported "Indefinite"; the amount is then `null`), `totalAmountSold`, `totalRemaining`, `isAmendment`, `formType`, `dateFiled`, `firstFiledDate`, `fileNumber`, the accession numbers, `filingUrl`, `primaryDocUrl`, `recheckStatus` (`null` in normal runs), `newerFilingsAfterWindow` and `scrapedAt` (UTC). Amounts are in USD. A value the filer left blank is `null`.

**Enriched mode adds:** `relatedPersons` (array of `{name, relationships[], city, state, clarification}`, deduped), `relatedPersonsCount`, `entityType`, `jurisdictionOfInc`, `yearOfInc`, `revenueRange`, `dateOfFirstSale`, `exemptions`, `minimumInvestment`, `percentSold`, `offeringSizeBucket`, `industryCategory` and `amountsCurrency`.

Without "Include & merge amendments", only original Form D filings are returned (D/A amendments are skipped). Dates follow EDGAR, which uses US Eastern time; the default range is the last 7 days in US Eastern time.

### What we fix compared with other Form D scrapers

| Common complaint | This actor |
|---|---|
| Stale or cached data | Queries live EDGAR full-text search on every run |
| Missing phone / related persons / amounts | Parses each filing's `primary_doc.xml` for all of them |
| Silent failures, empty runs with no reason | Clear status messages (bad User-Agent → 403 explanation, invalid dates, "0 matched, widen filters"), plus run stats saved to `RUN_STATS` |
| Duplicates | Deduped by accession number |
| Pagination stops at the first page | Pages through every result, and automatically splits large date ranges to get past EDGAR's 10,000-hits-per-query limit |
| IP bans | Declared User-Agent plus `Accept-Encoding: gzip, deflate`, 5 req/s by default (cap 10), exponential backoff on 5xx, and a ≥10-minute cool-down on 429 or throttle 403 in line with SEC policy (or fail fast if configured) |
| Duplicate amendment rows | D/A amendments merged per offering |

### Example output

Trimmed real records (selected fields):

```json
[
 {
  "issuerName": "Hard Pill To Swallow, Inc.",
  "issuerCity": "MARINA DEL REY",
  "issuerState": "CA",
  "issuerPhone": "8455056767",
  "contactName": "Daniel Ari Smith",
  "industryGroup": "Manufacturing",
  "totalOfferingAmount": 1500000,
  "totalAmountSold": 30000,
  "investorsCount": 2,
  "dateFiled": "2026-10-09",
  "filingUrl": "https://www.sec.gov/Archives/edgar/data/2159842/000215984226000001/0002159842-26-000001-index.htm"
 },
 {
  "issuerName": "KBC Baxter LLC",
  "issuerCity": "SEATTLE",
  "issuerState": "WA",
  "issuerPhone": "2065792096",
  "contactName": "PAUL BENJAMIN ROETER",
  "industryGroup": "Residential",
  "totalOfferingAmount": 7700000,
  "totalAmountSold": 7700000,
  "investorsCount": 49,
  "dateFiled": "2026-10-09",
  "filingUrl": "https://www.sec.gov/Archives/edgar/data/2159787/000215978726000001/0002159787-26-000001-index.htm"
 },
 {
  "issuerName": "Arneo Commercial Investments, LLC",
  "issuerCity": "FORT WAYNE",
  "issuerState": "IN",
  "issuerPhone": "260-422-0080",
  "contactName": "James Bashir Khan",
  "industryGroup": "Other Real Estate",
  "totalOfferingAmount": 8505000,
  "totalAmountSold": 500000,
  "investorsCount": 1,
  "dateFiled": "2026-10-09",
  "filingUrl": "https://www.sec.gov/Archives/edgar/data/2159757/000215975726000001/0002159757-26-000001-index.htm"
 }
]
```

#### Key fields

| Field | Meaning |
|---|---|
| `issuerName` | Company that filed the Form D |
| `issuerCity / issuerState` | Issuer business address |
| `issuerPhone` | Issuer phone from the filing |
| `contactName` | First related person (executive/director) listed |
| `industryGroup` | Industry group declared by the issuer |
| `totalOfferingAmount` | Total offering size (USD; null if indefinite) |
| `totalAmountSold` | Amount sold so far (USD) |
| `investorsCount` | Investors who have already invested |
| `dateFiled` | Filing date |
| `filingUrl` | Link to the filing index |

### Pricing (pay-per-event)

- `filing-result`: **$0.0025 per filing** for base fields per offering (issuer, CIK, address, phone, first contact, investor count, amounts, date, accession numbers, links)
- `filing-enriched`: **$0.006 per filing** when `enriched: true`. Adds related persons deduped with their roles merged, normalized amounts (percent sold, computed remaining, size bucket), industry group and category, entity type, exemptions, minimum investment, and revenue range.
- Actor start: Apify's default synthetic `apify-actor-start` event (platform default price).
- Only filings that pass your filters are billed per result, and each filing carries exactly one result event. Billing errors are logged and reported in the status message and `RUN_STATS.chargeErrors`.
  Event definitions are in `.actor/pay_per_event.json`.

### Responsible use

Filings name executives because the law requires it. You're responsible for having a lawful basis for any contact. Don't use this for unsolicited mass messaging (Apify Acceptable Use Policy).

### Source & disclaimer

Data comes from SEC EDGAR public filings (sec.gov). Source: U.S. Securities and Exchange Commission. Requests identify themselves with a User-Agent and stay within SEC's fair-access limits.

The data is public filings from the U.S. EDGAR system. This actor follows the SEC fair-access policy: it sends a declared User-Agent naming you and a contact email (the `userAgent` input; please set your own), adds `Accept-Encoding: gzip, deflate`, and never goes above 10 requests/second.

No SEC seal, logos or artwork are used.

**Not affiliated with or endorsed by the SEC.**

### Limitations

EDGAR full-text search returns at most 10,000 hits per query; the actor splits large ranges into smaller windows automatically (a single day above 10,000 filings would be logged and counted in `RUN_STATS.truncatedDays`, which has never happened for Form D). Large ranges with industry or amount filters read one document per offering, so expect several minutes for multi-month ranges. EDGAR is closed on US federal holidays and weekends, so those days return no filings. State and industry filters apply to the issuer's business address and the industry group the issuer declared.

# Actor input Schema

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

Defaults to 7 days ago.

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

Defaults to today.

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

2-letter codes, e.g. CA, NY. Empty = all.

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

Exact Form D industry group names, e.g. 'Pooled Investment Fund', 'Other Technology', 'Biotechnology', 'Other Real Estate'. Case-insensitive.

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

Min total offering (USD).

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

Max total offering (USD).

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

Amendments are merged into one record per offering (by SEC file number) with the latest values; all accession numbers are listed.

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

Maximum number of offerings to return (and bill).

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

Strongly recommended. SEC fair-access policy: your company name and a monitored contact email. The prefilled value is only an example: REPLACE it with your own, e.g. 'Acme Research ops@acme.com'. If left empty, the run falls back to the publisher's contact and logs a warning.

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

Default 5, hard cap 10 (SEC limit is 10/s total across all your runs).

## `enriched` (type: `boolean`):

Adds deduped related persons with merged roles, normalized amounts (percent sold, computed remaining, size bucket), industry group/category, entity type, exemptions, minimum investment, investor count, revenue range. Billed as 'filing-enriched' instead of 'filing-result'.

## `onThrottle` (type: `string`):

Default 'fail': stop at once with a clear message on an SEC throttle (re-run after 10 min). 'wait' cools down >=10 min and resumes; needs a run timeout of at least 1800 s.

## `throttleBackoffMinutes` (type: `integer`):

Throttle cool-down (minutes).

## `maxThrottleWaits` (type: `integer`):

Max cool-downs before failing.

## `recheckFilings` (type: `array`):

Refresh specific filings (e.g. corrected/removed after acceptance). Use 'CIK/ACCESSION' (e.g. 2158429/0002158429-26-000001) or a filing URL. When set, search filters are ignored; removed filings are output with recheckStatus 'removed_or_not_found'.

## Actor input object example

```json
{
  "states": [],
  "industryGroups": [],
  "includeAmendments": false,
  "maxItems": 25,
  "userAgent": "Agentic Solutions jeff_assist@mail.grokbot.com",
  "maxRequestsPerSecond": 5,
  "enriched": false,
  "onThrottle": "fail",
  "throttleBackoffMinutes": 10,
  "maxThrottleWaits": 2,
  "recheckFilings": []
}
```

# Actor output Schema

## `results` (type: `string`):

All output records (default dataset, 'overview' view).

## `runStats` (type: `string`):

RUN_STATS JSON: counts, errors, billing errors.

# 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 = {
    "userAgent": "Agentic Solutions jeff_assist@mail.grokbot.com"
};

// Run the Actor and wait for it to finish
const run = await client.actor("agentic_solutions/form-d-fundraising-leads").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 = { "userAgent": "Agentic Solutions jeff_assist@mail.grokbot.com" }

# Run the Actor and wait for it to finish
run = client.actor("agentic_solutions/form-d-fundraising-leads").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 '{
  "userAgent": "Agentic Solutions jeff_assist@mail.grokbot.com"
}' |
apify call agentic_solutions/form-d-fundraising-leads --silent --output-dataset

```

## MCP server setup

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

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/e7oNxfHRixM3G4IDb/builds/RWUwFqRdaWVlMJehh/openapi.json
