# SEC Form D Filings - Private Placements & Startup Funding (`jpopendata/us-sec-form-d-offerings`) Actor

Form D notices of exempt offerings from SEC EDGAR's official daily index and XML: issuer, CIK, city/state, industry, fund type, Rule 506(b)/(c) exemption, offering/sold/remaining amounts, investor counts, broker-dealer firms. No personal names. Unofficial; not affiliated with the SEC.

- **URL**: https://apify.com/jpopendata/us-sec-form-d-offerings.md
- **Developed by:** [JP Open Data](https://apify.com/jpopendata) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 results

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 - Private Placements & Startup Funding

**Every Form D notice filed with the SEC, one row per filing: issuer, CIK, city and state, industry, fund type, exemption (Rule 506(b), 506(c), 504 ...), offering size, amount sold, amount remaining, number of investors, commissions and the broker-dealer firms involved. Straight from EDGAR's own files, with no personal names.**

Companies and funds that raise money privately under Regulation D must file a **Form D** with the U.S. Securities and Exchange Commission within 15 days of the first sale. EDGAR receives about 250 of them every business day: startups closing a seed or Series A round, real estate syndications, oil and gas programs, and hedge, private equity and venture capital funds. This Actor reads EDGAR's daily index for the dates you choose (or a company's whole filing history), downloads each Form D in its structured XML form and returns the facts as clean rows you can filter, sort and export.

Typical uses: tracking who raised how much, sizing private-market activity by state or industry, monitoring new funds and their placement agents, building company-level prospect lists, and research on Regulation D offerings.

> **Unofficial tool. Not affiliated with or approved by the U.S. Securities and Exchange Commission.** Data: SEC EDGAR, public information. The names of executive officers, directors, promoters, signers and individual sales representatives are never returned (see [Personal data](#personal-data)).

### Quick start — verified input

Run on 2026-10-13 on the Apify platform: 20 rows, about 22 requests, under a minute. An empty input `{}` runs exactly this.

```json
{
  "daysBack": 7,
  "maxItems": 20
}
```

The whole Form D history of one company (CIK = the SEC company number; verified on 2026-10-13: 10 filings since 2015, 11 requests):

```json
{
  "ciks": ["1641404"],
  "maxItems": 100
}
```

Operating companies only (no pooled funds) in California and New York that used Rule 506(c), last 30 days:

```json
{
  "daysBack": 30,
  "issuerKind": "companies",
  "states": ["CA", "NY"],
  "exemptions": ["506(c)"],
  "maxItems": 200,
  "maxRequests": 3000
}
```

New venture capital funds of the last two weeks:

```json
{
  "daysBack": 14,
  "formTypes": ["D"],
  "issuerKind": "funds",
  "fundTypes": ["Venture Capital Fund"],
  "maxItems": 100,
  "maxRequests": 3000
}
```

#### Common input mistakes

| Wrong | Right | Why |
|---|---|---|
| `"ciks": ["Peca Labs"]` | `"issuerNames": ["Peca Labs"]` or `"ciks": ["1641404"]` | A CIK is the SEC's company number. Names go in issuerNames. |
| `"industryGroups": ["SaaS"]` | `"industryGroups": ["Other Technology"]` or `["Technology"]` | Form D has its own industry list (and no SIC code). The error message lists every valid value. |
| `"states": ["USA"]` | leave `states` empty, or `["CA", "TX"]`, or `["non-US"]` | States are the issuer's principal place of business. |
| `"exemptions": ["Reg D"]` | `"exemptions": ["506(b)", "506(c)"]` | Every Form D is Regulation D (or 4(a)(5)); pick the rule. |
| `"tickers": ["OPENAI"]` | `"issuerNames": ["OpenAI"]` | Most Form D issuers are private and have no ticker. |
| A filter with the default `maxRequests` | raise `maxRequests` | Each Form D is one request. With filters, many filings are read to find the matching ones. |

An invalid value stops the run before any request, with a message that names the field and lists the valid values.

#### Empty results?

- **Weekend or holiday window:** EDGAR publishes no index for days without filings. `daysBack: 1` on a Monday morning finds nothing.
- **Today's filings:** EDGAR builds each business day's index around 10 pm US Eastern, so today's Form Ds appear tonight.
- **Combined filters** (a state plus an industry plus a minimum amount) can exclude everything in a short window.
- **A company that never filed a Form D**, or a ticker that is not in the SEC's ticker list.

The run then ends successfully with 0 rows. `RUN_SUMMARY` in the key-value store shows how many filings were listed, read and dropped by each filter.

### Input

| Field | What it does |
|---|---|
| `daysBack` / `filedFrom` / `filedTo` | Filing-date window (US Eastern dates, at most 366 days). Default: the last 7 days. |
| `formTypes` | `D` (new notice) and/or `D/A` (amendment). Default: both. |
| `issuerNames` | Company or fund names, matched at word starts ("Lab" finds "Peca Labs, Inc."). |
| `ciks` / `tickers` | Read these companies' complete Form D history from data.sec.gov instead of the daily window. |
| `states` | Issuer state (`CA`, `New York`), `non-US`, an EDGAR country code (`E9` = Cayman Islands) or a country name. |
| `issuerKind` | `all`, `companies` (no pooled funds) or `funds`. About two thirds of Form Ds are funds. |
| `industryGroups` | Form D industry groups or broad categories (Technology, Health Care, Real Estate, Energy ...). |
| `fundTypes` | Hedge Fund, Private Equity Fund, Venture Capital Fund, Other Investment Fund. |
| `exemptions` | `506(b)`, `506(c)`, `504`, `4(a)(5)`, `3(c)(1)`, `3(c)(7)` ... |
| `minAmountSold` / `minOfferingAmount` | Minimum USD amounts. "Indefinite" offerings are dropped by `minOfferingAmount`. |
| `maxItems` | Maximum rows (you are charged per row). |
| `maxRequests` | Hard request budget for the run. |
| `userAgentContact` | Optional: your e-mail or website, added to the User-Agent sent to the SEC. |

### What one row contains

Identity and filing: `accessionNumber`, `formType`, `isAmendment`, `previousAccessionNumber`, `filedDate`, `acceptedAt` (company mode), `filingIndexUrl`, `formUrl` (EDGAR's readable version), `xmlUrl`, `schemaVersion`.

Issuer: `issuerCik`, `issuerName`, `entityType`, `entityTypeOther`, `jurisdictionOfIncorporation`, `yearOfIncorporation`, `incorporatedWithinFiveYears`, `yetToBeFormed`, `issuerCity`, `issuerStateCode`, `issuerStateOrCountry`, `issuerPreviousNames`, `coIssuers` (other issuers of the same notice).

Offering: `industryGroup`, `industryCategory`, `isPooledInvestmentFund`, `investmentFundType`, `isRegisteredUnder40Act`, `revenueRange`, `netAssetValueRange`, `federalExemptions` (readable) and `federalExemptionCodes`, `securitiesTypes`, `otherSecuritiesDescription` (e.g. "SAFE"), `isBusinessCombination`, `moreThanOneYear`, `dateOfFirstSale`, `firstSaleYetToOccur`, `minimumInvestment`, `totalOfferingAmount`, `offeringAmountIndefinite`, `totalAmountSold`, `totalRemaining`, `remainingIndefinite`.

Investors and costs: `hasNonAccreditedInvestors`, `nonAccreditedInvestors`, `totalInvestors`, `salesCommissions`, `findersFees`, `proceedsToRelatedPersons` (each with an `...Estimated` flag).

People as counts only: `relatedPersonsCount`, `executiveOfficersCount`, `directorsCount`, `promotersCount`.

Placement: `salesCompensationRecipientsCount`, `brokerDealers` (firm names), `brokerDealerCrds`, `recipientsWithheld`, `solicitationStates`, `solicitationAllStates`, `foreignSolicitation`.

Every row also has `source`, `sourceUrl`, `license` and `retrievedAt`.

#### Example row (shortened)

```json
{
  "accessionNumber": "0001641404-26-000001",
  "formType": "D",
  "filedDate": "2026-10-09",
  "issuerCik": "0001641404",
  "issuerName": "Peca Labs, Inc.",
  "entityType": "Corporation",
  "jurisdictionOfIncorporation": "DELAWARE",
  "issuerCity": "PITTSBURGH",
  "issuerStateCode": "PA",
  "industryGroup": "Other Health Care",
  "industryCategory": "Health Care",
  "isPooledInvestmentFund": false,
  "revenueRange": "Decline to Disclose",
  "federalExemptions": ["Rule 506(b)"],
  "securitiesTypes": ["Equity"],
  "dateOfFirstSale": "2026-09-30",
  "totalOfferingAmount": 21493540,
  "totalAmountSold": 12789342,
  "totalRemaining": 8704198,
  "totalInvestors": 30,
  "hasNonAccreditedInvestors": false,
  "relatedPersonsCount": 9,
  "executiveOfficersCount": 3,
  "directorsCount": 7,
  "brokerDealers": [],
  "formUrl": "https://www.sec.gov/Archives/edgar/data/1641404/000164140426000001/xslFormDX01/primary_doc.xml",
  "source": "SEC EDGAR - Form D filings (U.S. Securities and Exchange Commission)",
  "license": "Source: U.S. Securities and Exchange Commission, EDGAR (public information; ...). Unofficial tool, not affiliated with or approved by the SEC."
}
```

### How it reads EDGAR

- **Date window:** EDGAR's daily master index of each filing day, newest day first, then one request per Form D document. Within a day, the newest EDGAR registrants (highest CIK) come first. The run stops as soon as it has `maxItems` rows.
- **Companies:** the filing history on data.sec.gov (one request per company), then the Form D documents, newest first.
- **Pace:** one request at a time, at most 4 per second (the SEC's fair-access limit is 10 per second), with the SEC's `Retry-After` honoured and a hard request budget. The run stops 90 seconds before its timeout and keeps everything it found.
- **Partial results:** if the SEC refuses or fails mid-run, the rows already found are kept and the run succeeds with `complete: false` and a `stopReason` in `RUN_SUMMARY`. If nothing at all could be read, the run fails visibly.
- **User-Agent:** the SEC asks automated tools to declare themselves. The Actor sends `jpopendata-us-sec-form-d-offerings/0.1 (+https://apify.com/jpopendata)`, which the SEC accepted in testing. You can add your own contact with `userAgentContact`.

### Personal data

A Form D names people in three places: the related persons (executive officers, directors and promoters, with addresses), the signature block, and the sales compensation recipients (registered representatives are individuals with their own CRD numbers). This Actor returns **none of these names, addresses or personal CRD numbers**:

- related persons become counts per role;
- the signature block is not read;
- a recipient or broker-dealer name is returned only when it is clearly a firm (it ends in LLC, Inc., Corp., L.P., Ltd., PLC, GmbH ..., or contains words such as "Securities"). Individuals are counted in `recipientsWithheld`, and their broker-dealer firm is still listed. On the SEC's 2026 Q3 Form D data this withheld 1,811 of 6,302 named recipients (29%) — mostly individuals, plus some firms written without "LLC" or "Inc." — and for two thirds of them the associated firm is still shown;
- issuer street address, ZIP code and phone number are not returned (city and state only);
- free-text "clarification" answers are not returned;
- a filing whose issuer reads like a personal estate vehicle (a revocable or family trust, an estate, an IRA) is skipped entirely (4 of 15,952 filings in 2026 Q3).

Issuers are entities (corporations, partnerships, LLCs, funds, trusts), so their names are returned. Some business names contain a founder's name, as business names do.

The links in each row lead to the SEC's own pages, which show the full filing.

### Honest limits

- Freshness follows EDGAR's nightly daily index: a business day's filings appear after about 10 pm US Eastern.
- Form D has no SIC code; `industryGroup` is the issuer's own choice from the Form D list.
- `issuerStateCode` is the principal place of business written in the filing, not the state of incorporation (see `jurisdictionOfIncorporation`).
- An amendment (D/A) is its own row with the full, updated figures; join on `previousAccessionNumber` to follow an offering.
- Filters such as state, industry or amount need each Form D to be downloaded first, so a filtered run over a long window uses many requests (about 250 per business day). For multi-year bulk history, the SEC also publishes quarterly Form D data sets.
- Electronic (XML) Form D filing began in 2009; earlier notices are not covered.

### Data source, licence and your responsibility

Data comes from SEC EDGAR (www.sec.gov and data.sec.gov). The SEC states that information presented on sec.gov "is considered public information and may be copied or further distributed by users of the web site without the SEC's permission" and asks for citation of the SEC as the source; every row carries that citation. "SEC" and "EDGAR" are trademarks of the SEC; this Actor only refers to them to describe where the data comes from and is not affiliated with or approved by the SEC.

You are responsible for how you use the data, including any rules that apply to marketing or outreach in your jurisdiction. No personal data is collected or returned by design; if you combine this data with other sources, the GDPR and similar laws may apply to what you build.

# Actor input Schema

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

Filings of the last N calendar days (1..366), by EDGAR filing date (US Eastern). Ignored when Filed from is set or when CIKs / tickers are given. EDGAR receives about 250 Form D filings per business day; each business day's index appears around 10 pm US Eastern.

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

Optional. First filing date, YYYY-MM-DD, e.g. "2026-10-01". MM/DD/YYYY, "today" and "yesterday" also work. The window can be at most 366 days (electronic Form D starts in 2009).

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

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

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

Optional. D (new notice) and/or D/A (amendment). Empty = both. Amendments repeat the whole notice with updated amounts and point to the earlier filing in previousAccessionNumber.

## `issuerNames` (type: `array`):

Optional. Company or fund names (or their first words), any case, e.g. "Peca Labs", "Sequoia", "EquityZen". Matched at word starts against the issuer, co-issuers and previous names. Searches the date window; for one company's full history use CIKs.

## `ciks` (type: `array`):

Optional. SEC company numbers, with or without leading zeros, e.g. "1641404". When set, the Actor reads each company's whole Form D history from data.sec.gov instead of the daily window (narrow it with Filed from / Filed to).

## `tickers` (type: `array`):

Optional. Stock symbols of listed companies, e.g. "PLTR" or "BRK.B" — converted to CIKs with the SEC's ticker list. Most Form D issuers are private and have no ticker.

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

Optional. State of the issuer's principal place of business: US codes or names ("CA", "New York"), "non-US" for every issuer outside the US, an EDGAR country code such as "E9" (Cayman Islands), or a country name such as "United Kingdom".

## `issuerKind` (type: `string`):

About two thirds of Form D filings are pooled investment funds (hedge, private equity, venture capital funds and their feeders). "companies" keeps operating companies such as startups; "funds" keeps only the funds.

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

Optional. Form D industry groups, e.g. "Biotechnology", "Other Technology", "Commercial" (real estate), "Oil and Gas", or a broad category: Technology, Health Care, Real Estate, Energy, Travel, Banking and Financial Services, Agriculture, Business Services, Manufacturing, Retailing, Restaurants, Other. Form D has no SIC code; this is its own industry field.

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

Optional, funds only: Hedge Fund, Private Equity Fund, Venture Capital Fund, Other Investment Fund ("vc", "pe", "hedge" also work).

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

Optional. Keep filings that claim any of these: "506(b)", "506(c)" (general solicitation allowed), "504", "4(a)(5)", "3(c)(1)", "3(c)(7)" (any Investment Company Act 3(c) paragraph works), or Form D codes such as 06b, 06c, 3C.7.

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

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

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

Optional. Keep filings whose total offering amount is at least this, e.g. 5000000. Offerings of "Indefinite" size (common for funds) are dropped when this is set.

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

Maximum Form D rows (1..50000), newest filing day first. You are charged per row.

## `maxRequests` (type: `integer`):

Hard budget of requests for the whole run (1..15000). Each Form D is one request (plus one per filing day); requests go one at a time, at most 4 per second (the SEC allows 10). With filters, many filings are read to find matches. If the budget runs out the run still succeeds with what it found (complete=false in RUN_SUMMARY).

## `userAgentContact` (type: `string`):

Optional. The SEC asks automated tools to declare who they are. The Actor always identifies itself; add your e-mail or website here to include your own contact in the User-Agent (the SEC's suggested form). It is sent only to the SEC and never stored in the dataset.

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

Optional and normally not needed: the SEC answers Apify datacenter IPs. If set, one sticky session is used for the whole run (never rotation).

## Actor input object example

```json
{
  "daysBack": 7,
  "filedFrom": "",
  "filedTo": "",
  "formTypes": [],
  "issuerNames": [],
  "ciks": [],
  "tickers": [],
  "states": [],
  "issuerKind": "all",
  "industryGroups": [],
  "fundTypes": [],
  "exemptions": [],
  "maxItems": 20,
  "maxRequests": 300,
  "userAgentContact": "",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `records` (type: `string`):

One row per Form D / D/A filing with the SEC citation (source, sourceUrl, license, retrievedAt) on every item.

# 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": 7,
    "filedFrom": "",
    "filedTo": "",
    "formTypes": [],
    "issuerNames": [],
    "ciks": [],
    "tickers": [],
    "states": [],
    "issuerKind": "all",
    "industryGroups": [],
    "fundTypes": [],
    "exemptions": [],
    "maxItems": 20,
    "maxRequests": 300,
    "userAgentContact": "",
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("jpopendata/us-sec-form-d-offerings").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": 7,
    "filedFrom": "",
    "filedTo": "",
    "formTypes": [],
    "issuerNames": [],
    "ciks": [],
    "tickers": [],
    "states": [],
    "issuerKind": "all",
    "industryGroups": [],
    "fundTypes": [],
    "exemptions": [],
    "maxItems": 20,
    "maxRequests": 300,
    "userAgentContact": "",
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("jpopendata/us-sec-form-d-offerings").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": 7,
  "filedFrom": "",
  "filedTo": "",
  "formTypes": [],
  "issuerNames": [],
  "ciks": [],
  "tickers": [],
  "states": [],
  "issuerKind": "all",
  "industryGroups": [],
  "fundTypes": [],
  "exemptions": [],
  "maxItems": 20,
  "maxRequests": 300,
  "userAgentContact": "",
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call jpopendata/us-sec-form-d-offerings --silent --output-dataset

```

## MCP server setup

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

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/jpecHGs9Y1thhHYdt/builds/hKPloryQkf3E5cOMI/openapi.json
