SEC Form D Scraper: Offerings & Funding Leads
Pricing
from $1.92 / 1,000 offerings
SEC Form D Scraper: Offerings & Funding Leads
Scrape SEC Form D and D/A filings by date, company or filing number, no login or API key: about 1,000 offerings in 4 minutes. Get issuer address and phone, industry, amount offered and sold, investor count, exemptions, executives, directors and brokers. JSON or CSV; pay per offering, not per miss.
Pricing
from $1.92 / 1,000 offerings
Rating
0.0
(0)
Developer
Automation Craft
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
SEC Form D Scraper: Offerings & Funding Leads
SEC Form D scraper for funding leads and private offering research: one Offering row per Form D or Form D/A filing, read from the SEC's public EDGAR system (EDGAR full-text search for the list of filings, the filing's own XML document for the data). A Form D is the notice of an offering that claims a federal exemption such as Rule 506(b), Rule 506(c) or Rule 504; a Form D/A amends it. Each row carries the issuer's address and phone, the industry group, the total offering amount and the amount sold, the number of investors, the exemptions claimed, the executive officers, directors and promoters, and the brokers paid to sell the offering. No login, no API key and no proxy setting.
Ask in one of three ways: every Form D of a date window (the last 7 days by default), the Form D history of the companies you list (by CIK or full legal name), or single filings by EDGAR link or accession number. Use it as a daily feed of new raises, as a Form D API for your own code (curl, Node and Python examples below), or as a CSV export for a spreadsheet or CRM.
Why this one
- Pay only for filings you get. One Offering event per filing delivered. A filing that does not pass your filters is not delivered and not charged. An unknown CIK, a company without Form D filings, a name that fits more than one filer, a filing that is not found or is not a Form D, and an empty search get free rows that say what happened.
- Every person in the filing. Related persons (executive officers, directors, promoters) with the business address they filed, the brokers and finders paid for the offering with their CRD numbers and states of solicitation, the signers, and every additional issuer of a multi issuer filing. People and brokers can also come as flat rows of their own, free.
- Filters judged on the filing itself. Form type, 35 industry groups, no pooled investment funds, fund type, entity type, issuer state or country, 24 exemption codes, minimum offering amount, minimum amount sold, minimum number of investors and sales to non accredited investors are checked on the filing's own data. A keyword anywhere in the filing (a person, a street, a city) and words of the issuer name narrow EDGAR's search.
- The amendment chain. Every amendment links to the filing it amends; on request you also get every filing of the same offering and what changed against the amended filing (amount sold, offering amount, investors, people added and removed).
- A monitor for new filings, and watch lists. Give a monitor name and schedule the run: each filing is delivered and charged once per monitor name. A list of companies is searched 100 at a time, so a watch list of hundreds of issuers costs a handful of requests when nothing is new.
- Company names that resolve. A company's full legal name is looked up among the filers of Form D filings, however you punctuate it, and a new filer is known from its first Form D on. In our test on 2026-10-05 the 977 distinct issuer names of 1,000 recent filings were sent exactly as filed: 973 resolved to their own filer and 4 came back as free
ambiguousrows that list the right filer with its CIK (one name is carried by two filers; three, such asVistiq.AI, Inc., have too few plain words to search by). None resolved to another filer. A name is never guessed into a company. - Complete, and it says so. In a test on 2026-10-01, EDGAR full-text search, which this Actor reads page by page, listed all 9,962 Form D and D/A filings of the SEC's own daily index files for the 60 days from 2026-07-31 to 2026-09-28. Every run ends with a summary whose
coveragesays whether the window was read to its end. - New filings within minutes. In one evening's measurement on 2026-10-01, a filing accepted at 17:24:02 US Eastern was in EDGAR full-text search at 17:25:08, and the five filings before it within 2 to 7 minutes.
- Fast and polite. On the platform 1,000 offerings took 207 to 217 seconds in five test runs and a 10 offering run 3 to 7 seconds (2026-10-01 to 2026-10-05 UTC, 256 MB). The Actor sends at most 5 requests per second, half the SEC's published limit of 10, with a declared User-Agent.
Quick start
- Leave Days back at 7 for every Form D filed in the last seven days, or set Filed from and Filed to (YYYY-MM-DD) for another window. For one company, put its CIK or exact legal name into Issuers; for single filings, put EDGAR links or accession numbers into Filings.
- Optional: narrow the search with Filters (form types, industry groups, issuer state, exemptions, minimum amounts, keyword, issuer name words).
- Optional: under Output, turn on related persons or brokers as rows, the offering history, or the changes since the amended filing.
- Set Maximum offerings (the prefill is 10; 100 is used when the field is left out).
- Click Start. Rows appear in the Dataset tab; export JSON, CSV or Excel, or read them through the API.
What you get
Every row has a type: offering (the paid row), relatedPerson and salesCompensationRecipient (optional, free), status (free, one per miss, problem or stop) and summary (free, the last row of every run).
Offering row
One row per filing, 76 top level fields (85 with the offering history and the changes switched on). The blocks:
- Identity:
accessionNumber,formType(DorD/A),isAmendment,filedAt,fileNumber,schemaVersion,filingUrl,xmlUrl,htmlUrl,issuerFilingsUrl,source(search,issuerorfiling),searchRecordFound,edgarBusinessLocations,scrapedAt. - Issuer:
issuerName,issuerCik,issuerStreet1,issuerStreet2,issuerCity,issuerStateOrCountry,issuerStateOrCountryName,issuerZipCode,issuerPhone,jurisdictionOfIncorporation,entityType,entityTypeOther,yearOfIncorporation,yearOfIncorporationStatus,issuerPreviousNames,edgarPreviousNames,issuerCountandadditionalIssuers(each with the same address and incorporation fields). - Offering:
industryGroup,isPooledInvestmentFund,investmentFundType,isInvestmentCompanyActFund,revenueRange,aggregateNetAssetValueRange,federalExemptionswithfederalExemptionLabels,dateOfFirstSale,firstSaleYetToOccur,offeringLastsMoreThanOneYear,securityTypes,otherSecurityTypeDescription,isBusinessCombination,businessCombinationClarification,minimumInvestmentAccepted,totalOfferingAmount,totalOfferingAmountIndefinite,totalAmountSold,totalRemaining,totalRemainingIndefinite,percentSold,offeringAmountsClarification. - Investors and costs:
hasNonAccreditedInvestors,numberNonAccreditedInvestors,totalNumberAlreadyInvested,salesCommissions,salesCommissionsIsEstimate,findersFees,findersFeesIsEstimate,salesCommissionsClarification,grossProceedsUsedForInsiders,grossProceedsUsedIsEstimate,useOfProceedsClarification. - People:
relatedPersonCount,relatedPersons(fullName,firstName,middleName,lastName,isEntity,relationships,relationshipClarification,street1,street2,city,stateOrCountry,stateOrCountryName,zipCode),relatedPersonsSummary(one line of names and roles),salesCompensationRecipientCount,salesCompensationRecipients,signatures,authorizedRepresentative. - Amendment link:
previousAccessionNumberandpreviousFilingUrl(the filing an amendment names as the one it amends).
percentSold is computed from the two amounts when the offering amount is a number. An "Indefinite" offering amount (common for funds) comes as totalOfferingAmount: null with totalOfferingAmountIndefinite: true; the same holds for totalRemaining.
Fill rates
Measured on 862 real Form D and D/A filings run through this Actor's own parser and row builder (fetched 2026-10-01, scripts/fill-rates.mjs). recent (542) is every Form D and D/A filed on 2026-09-22 and 2026-09-25; all (862) adds 320 samples filed between 2008 and 2019. A field counts as filled when it is not null, not an empty text and not an empty list (a false or a 0 counts as filled). The rates are what filers put into the form, not a choice of the Actor.
| Field | What it holds | all (862) | recent (542) |
|---|---|---|---|
accessionNumber, formType, filedAt, fileNumber | Filing identity and date | 100% | 100% |
issuerName, issuerCik | The primary issuer | 100% | 100% |
issuerStreet1, issuerCity, issuerStateOrCountry, issuerZipCode | Issuer address | 100% | 100% |
issuerStreet2 | Second address line | 56.4% | 60% |
issuerPhone | Issuer phone as filed | 100% | 100% |
entityType | Corporation, Limited Liability Company, Limited Partnership, General Partnership, Business Trust or Other | 100% | 100% |
yearOfIncorporation | Year, when the filer gave one | 77.4% | 77.1% |
industryGroup | One of the form's 35 groups | 100% | 100% |
investmentFundType | Hedge Fund, Private Equity Fund, Venture Capital Fund or Other Investment Fund (funds only) | 57.1% | 68.1% |
revenueRange | Revenue range of an operating company | 68.6% | 66.4% |
aggregateNetAssetValueRange | Net asset value range of a fund | 31.4% | 33.6% |
federalExemptions, federalExemptionLabels | Codes such as 06b and their names | 100% | 100% |
dateOfFirstSale | Date of the first sale (else firstSaleYetToOccur) | 80.4% | 78% |
minimumInvestmentAccepted | Minimum investment in USD | 100% | 100% |
totalOfferingAmount, percentSold | Offering size in USD (null when Indefinite) | 52.9% | 45.8% |
totalAmountSold | Amount sold so far in USD | 100% | 100% |
totalNumberAlreadyInvested | Number of investors so far | 100% | 100% |
numberNonAccreditedInvestors | Number of non accredited investors | 7.7% | 5.2% |
salesCommissions, findersFees | Sales commissions and finders fees in USD | 100% | 100% |
useOfProceedsClarification | The filer's note on the use of proceeds | 32.9% | 37.3% |
relatedPersons | At least one executive officer, director or promoter | 100% | 100% |
salesCompensationRecipients | At least one broker or finder | 20% | 20.1% |
signatures | Signer name, title and date | 100% | 100% |
previousAccessionNumber, previousFilingUrl | The amended filing (amendments only) | 35.8% | 39.7% |
additionalIssuers | More than one issuer in the filing | 0.6% | 0.6% |
Example Offering row (platform run of the prefill input on 2026-10-01; shortened: 33 of its 76 fields):
{"type": "offering","accessionNumber": "0002158005-26-000001","formType": "D","isAmendment": false,"filedAt": "2026-10-01","fileNumber": "021-599617","issuerName": "Numerant, Inc.","issuerCik": "0002158005","issuerStreet1": "1623 GORDON PETTY DRIVE","issuerCity": "BRENTWOOD","issuerStateOrCountry": "TN","issuerZipCode": "37027","issuerPhone": "(256) 652-7929","jurisdictionOfIncorporation": "DELAWARE","entityType": "Corporation","yearOfIncorporation": 2026,"industryGroup": "Other Technology","isPooledInvestmentFund": false,"revenueRange": "Decline to Disclose","federalExemptions": ["06b"],"federalExemptionLabels": ["Rule 506(b)"],"dateOfFirstSale": "2026-09-10","securityTypes": ["Option, Warrant or Other Right to Acquire Another Security"],"minimumInvestmentAccepted": 0,"totalOfferingAmount": null,"totalOfferingAmountIndefinite": true,"totalAmountSold": 425000,"totalNumberAlreadyInvested": 3,"relatedPersonCount": 2,"relatedPersonsSummary": "Samuel James Barr (Executive Officer, Director, Promoter); Seth Townsend (Executive Officer, Director, Promoter)","salesCompensationRecipientCount": 0,"filingUrl": "https://www.sec.gov/Archives/edgar/data/2158005/000215800526000001/","scrapedAt": "2026-10-01T23:15:11.308Z"}
People and brokers as rows (free)
With relatedPersonRows on, every related person also comes as a relatedPerson row (25 fields: the person's name parts, isEntity, relationships, address, plus accessionNumber, position, issuerName, issuerCik, formType, filedAt, industryGroup, totalOfferingAmount, totalAmountSold, filingUrl). With salesCompensationRows on, every broker or finder comes as a salesCompensationRecipient row (22 fields: name, crdNumber, associatedBrokerDealerName, associatedBrokerDealerCrdNumber, address, statesOfSolicitation, allStates, foreignSolicitation, plus the offering's identity). They are tied to their Offering row by accessionNumber, written in the same dataset call, and never charged.
Offering history and changes (free)
includeOfferingHistory adds offeringHistory (every Form D and D/A of the same SEC file number, oldest first, with dates and links), offeringFilingCount, offeringFirstFiledAt, isLatestFilingOfOffering, issuerFormDFilingCount, offeringHistoryTruncated and offeringHistoryNote. includeChanges adds changesSincePrevious for an amendment: totalAmountSold, totalOfferingAmount, totalNumberAlreadyInvested, minimumInvestmentAccepted and salesCommissions as previous, current and change, relatedPersonsAdded, relatedPersonsRemoved and changedFields, plus changesNote when the amended filing cannot be compared (for example a paper filing). Both take extra requests to the SEC and never an extra charge.
Status rows (free)
Every input value that cannot be used, every issuer or filing you listed that does not end as an Offering row (with a monitor, an issuer without new filings gets none), every filing of a search that could not be read, every search that finds nothing and every stop gets a type: "status" row with scope (input, issuer, filing, search or run), status and a message in plain words. Issuer rows add input, issuerCik, issuerName, counts and, for a name, candidates (up to 10 filers with name and cik); filing rows add accessionNumber; search rows add the window and counts; run rows add details. None of them is charged.
status | What it means |
|---|---|
invalid | An input value that cannot be used. A setting (a date, a filter value, the row cap, an unknown field name) stops the run before any paid work; one bad item of issuers or filings gets its own row and the other items run. |
not_found | The SEC has no filer under this CIK or no filing under this number; or no filer with this name was found, neither among the filers of Form D filings nor in the SEC's company name lookup. |
ambiguous | A company name that was not used: two or more filers carry it, none carries exactly this name, or more filers match its words than the search lists. The closest filers are in candidates with their CIKs (the one that carries the name first). Nothing is guessed. |
not_form_d | The filing exists and is another form. |
no_filings | A known filer, or a valid search, without a Form D that matches. |
failed | The SEC could not be read for this item; run it again. |
skipped | Not processed, or not finished: the run stopped first (row cap, charge limit, free work allowance, the SEC unavailable, abort or timeout). |
limit_reached | A cap stopped the run: maxItems, your maximum charge per run, or the free work allowance (see Limits). In a date search the message names the filing date the search had reached, so you can continue from there. A run row with this status and the key freeRows does not stop anything: it says how many status rows were counted instead of written. |
source_unavailable | The SEC refused the run or did not answer; the run stopped asking. What was delivered before stays; the filings it was reading at that moment are not delivered and not charged. |
monitor_unavailable | The monitor memory could not be used (for example another run holds it); nothing was read or charged. |
A real status row from the prefill run (shortened: key and scrapedAt left out):
{"type": "status", "scope": "run", "status": "limit_reached", "message": "The row cap (maxItems 10) was reached; more filings of the window may match. Raise maxItems to get them. The search had reached filings dated 2026-10-01; continue with dateTo set to 2026-10-01 (that day may be delivered again in part).", "details": {"offeringsDelivered": 10, "oldestFilingDateReached": "2026-10-01"}}
The last row of every run is a free type: "summary" row with the counters (searchRecords, filingsRead, filteredOut, offerings, issuersAmbiguous, issuersNotChecked, statusRowsNotWritten, freeWorkUnitsUsed, freeWorkAllowance and the rest), coverage (today, from, to, complete, notRead, oldestFilingDateReached, limitedToMonitorHorizon, searchShortcut), stoppedBy, requests, monitor and billing. coverage.complete is true only when the run was not stopped and every filing, search and lookup it had to read was read.
How much does it cost to scrape SEC Form D filings?
You pay per Offering row delivered plus a small start fee per run. Status rows, person and broker rows, the offering history, the changes and the run summary are free.
| Event | FREE | BRONZE | SILVER | GOLD |
|---|---|---|---|---|
| Offering (one Form D or Form D/A filing delivered as a row) | $2.40 / 1,000 | $2.40 / 1,000 | $2.16 / 1,000 | $1.92 / 1,000 |
| Actor start (once per run) | $0.002 | $0.002 | $0.002 | $0.002 |
Platinum and Diamond plans pay the Gold price. The Actor start event is a flat fee with no tier discount, charged once per run whatever the run delivers (it is charged per GB of memory, and this Actor runs at 256 MB).
The Store pricing card shows these same prices per 1,000 events: "$2.40 / 1,000" on the Offering row means one offering costs 0.24 cents.
Worked examples (start fee included):
| Run | FREE and BRONZE | SILVER | GOLD |
|---|---|---|---|
| A search that finds nothing: $0.002 | $0.002 | $0.002 | $0.002 |
| 10 offerings (the prefill): $0.002 + 10 x $0.0024 | $0.026 | $0.0236 | $0.0212 |
| 100 offerings: $0.002 + 100 x $0.0024 | $0.242 | $0.218 | $0.194 |
| 1,000 offerings: $0.002 + 1,000 x $0.0024 | $2.402 | $2.162 | $1.922 |
What is free (no event other than the start fee): a filing that does not pass your filters, an unknown CIK or name, an ambiguous name, a filer without Form D filings, a filing that is not found or is not a Form D, an empty search, an invalid input value, a filing the same monitor delivered before, every status row and the run summary. Work that ends without an Offering is limited per run (see Limits, "Free work is limited"). With a monitor name a filing is charged once per monitor name, so a scheduled run that finds nothing new costs only the start fee. Rows are charged only after they are in your dataset, and your maximum charge per run is respected: offerings that do not fit are not delivered, and a free row says where the run stopped. A platform restart never delivers or charges an offering twice (the platform itself charges the start fee once more when a run is resurrected).
Input
| Field | Default | What it does |
|---|---|---|
daysBack | 7 (prefill 7) | How many days back from today (US Eastern time) the date search starts: 7 returns the filings of the last seven days and today. Used only when no start date is set. Weekends and US federal holidays have no filings. |
dateFrom | empty | First filing date, YYYY-MM-DD. Overrides daysBack. For issuers the window is optional: without it their whole Form D history is returned. |
dateTo | empty | Last filing date, YYYY-MM-DD. Empty means up to now. |
formTypes | all | all (Form D and Form D/A), new (Form D only, the first notice of an offering) or amendments (Form D/A only). |
keyword | empty | An exact phrase that must appear in the filing text, for example a person, a street or a city. Not case sensitive. Searched by EDGAR full-text search over the whole filing, related persons and brokers included. |
issuerName | empty | Words that must all appear in the issuer's name as EDGAR lists it, for example Capital Partners. |
issuers | empty | One company per line: a CIK (2158073 or CIK0002158073) or the full legal name as EDGAR lists it (TCIF Maple Fresno, LLC; capitals, commas and dots do not matter). A name is used only when exactly one filer of Form D filings carries it; otherwise a free row lists up to 10 candidate filers with their CIKs. Returns the issuers' Form D and D/A filings, newest first across the list. The filters apply. |
filings | empty | One filing per line: an EDGAR link (https://www.sec.gov/Archives/edgar/data/2158073/000215807326000001/) or an accession number (0002158073-26-000001). Filings given here are delivered as asked: the filters and the monitor do not apply to them. |
industryGroups | none | Keep only these industry groups (Form D item 4), any of the 35 groups of the form, from Agriculture to Other. |
excludeInvestmentFunds | false | Leave out filings whose industry group is Pooled Investment Fund, to see operating companies only. |
issuerStates | none | Keep only issuers whose address in the filing is in these states or countries, as the SEC's two character codes: US postal codes (CA, NY, TX, DE) and EDGAR codes for other places (E9 Cayman Islands, A6 Ontario, X0 United Kingdom). A full name such as California also works when it stands for one code. |
exemptions | none | Keep only filings that claim at least one of these exemptions (Form D item 6): 04, 04.1, 04.2, 04.3 (Rule 504), 05 (Rule 505), 06 (Rule 506), 06b (Rule 506(b)), 06c (Rule 506(c), general solicitation allowed), 46, 4a5, 3C and 3C.1 to 3C.14 (Investment Company Act Section 3(c)). |
minOfferingAmount | none | Keep only filings whose total offering amount is at least this many US dollars. Indefinite amounts do not pass; use minAmountSold to include them. |
minAmountSold | none | Keep only filings that report at least this many US dollars sold. |
entityTypes | none | Keep only issuers of these kinds (Form D item 1): Corporation, Limited Partnership, Limited Liability Company, General Partnership, Business Trust, Other. |
fundTypes | none | Keep only pooled investment funds of these types (Form D item 4): Hedge Fund, Private Equity Fund, Venture Capital Fund, Other Investment Fund. A filing that is not a pooled investment fund has no fund type and does not pass. Cannot be combined with excludeInvestmentFunds. |
minInvestors | none | Keep only filings that report at least this many investors who have already invested. |
onlyWithNonAccreditedInvestors | false | Keep only filings that say securities were or may be sold to investors who are not accredited (48 of the 1,000 filings of our bulk test run). |
includePersonNames | true | Related persons with their address, brokers and signers in the row. Turn off for company level rows: the people are left out and only counted. |
relatedPersonRows | false | Adds one free relatedPerson row per related person. |
salesCompensationRows | false | Adds one free salesCompensationRecipient row per broker or finder. |
includeOfferingHistory | false | Adds every filing of the same offering (same SEC file number). |
includeChanges | false | For an amendment: adds what changed against the filing it amends. |
maxItems | 100 (prefill 10) | The most Offering rows this run may deliver and charge, 1 to 1,000,000. |
monitorName | empty | Deliver only new filings: see below. |
Leave issuers and filings out of the input for a date search. When either key is present, the run looks up only those items and never widens into a search of recent filings; an empty list is a free invalid row. An input field this Actor does not know stops the run with a free row (it could be a filter under another name), except proxyConfiguration and proxy, which are ignored. Values outside a list of choices (form types, industry groups, exemption codes) are refused by the platform's input check before the run starts. There is no proxy setting, API key or login field.
Monitor: deliver only new filings
Give a name in monitorName, for example weekly-biotech, and schedule the run. Each filing is delivered and charged once per monitor name; later runs skip what the monitor already delivered, and a filing that failed the same filters before is not read again. The monitor applies to the date search and to issuers, not to filings given by number. A monitor looks back at most 45 days, and never further back than its memory reaches (entries leave it 60 days after their filing date): an older window start is moved to that day (a date search's summary says so in coverage.limitedToMonitorHorizon). Use a new name when you change the filters. Two runs on one monitor name at the same time do not share it: the second gets a free monitor_unavailable row and is charged no offering (two runs that start at the same moment may both be refused). With a monitor, issuers without new filings get no row and are not checked against the SEC's filer list, so a scheduled watch list stays quiet and cheap; a CIK that does not exist is therefore not reported in a monitored run (run a new list once without a monitor name to see such rows). The memory is a named key-value store this Actor creates in your account (its name starts with sec-form-d-monitor-v1-).
Limits
- Filings from 2008-09-17 on. That is the date of the first Form D filed on EDGAR as XML data; older Form D filings were paper.
- Filing dates are US Eastern business days. A filing accepted after 17:30 Eastern carries the next business day as its filing date. The time of day of the acceptance is not delivered.
- Indefinite amounts. 54.2 percent of the recent sample (294 of 542) state an Indefinite total offering amount; it comes as
nullwithtotalOfferingAmountIndefinite: true, and such filings do not passminOfferingAmount. - Free work is limited. Work that ends without an Offering row earns nothing, so a run does a limited amount of it: 150 units, plus 150 for every offering it delivers. A filing that is read and fails your filters is 1 unit, a filing number that is not found 1, the check of a CIK without filings 1, a request of a company name lookup 4 (a name nobody carries takes two requests; a name that resolves and then delivers an offering costs nothing), a free status row about one input 2. In practice a run that delivers nothing reads at most 150 filings that fail the filters, or looks up 15 names nobody carries, or 50 filing numbers or CIKs that give nothing, and each offering delivered buys the same again. When the allowance is used up the run starts no more unpaid work and ends with a free
limit_reachedrow (stoppedBy: allowance; in a date search it names the filing date reached); status rows it could not afford are counted in the summary (statusRowsNotWritten,issuersNotChecked). Filters on the industry group, the issuer state, the entity and fund type, the amounts, the investors and the fund exclusion need each filing read. Without a keyword, industry filters, and state filters on windows from 2012 on, are first narrowed by EDGAR's own search (a 30 day biotechnology search read 10 filings instead of 895 in our test). A shorter window, a keyword, an issuer name or an exemption filter helps. - Bare accession numbers. An accession number starts with the number of whoever submitted the filing, and the SEC stores a filing under the CIK of its issuer. A bare number therefore works when the issuer filed for itself; a link to the filing always works. A bare number that an agent submitted for the issuer gets a free
not_foundrow that asks for the link. - Company names are looked up among the filers of Form D filings in EDGAR full-text search (which knows a filer from its first Form D on), by the plain words of the name; the SEC's company name lookup is asked only when that list was read to its end and no Form D filer carries the name, to tell a company without Form D filings from an unknown one. A name is used only when exactly one filer carries it and the list of filers whose names hold its plain words (up to 300 filings) was read to its end. Two names are the same when their letters, digits and plain words agree: capitals, commas and the way a legal form is written make no difference (
Twin Fund LPandTwin Fund, L.P.are one name), but an initialism with and without dots is two names (US Widgets IncandU.S. Widgets Inc), so write initialisms as EDGAR does. A name whose plain words match more than that, or that has no plain word (A & B, L.L.C.), is not used: you get a freeambiguousrow with the closest filers and their CIKs. Measured on 2026-10-05 with the 977 distinct issuer names of 1,000 recent filings, sent as filed: 973 resolved to their own filer, 4 came backambiguouswith the right filer listed, none resolved to another filer. A name is looked up in every run, and a lookup whose issuer then delivers nothing counts as free work (4 units): for a scheduled watch list give CIKs (every row carriesissuerCik), because a list of names with nothing new stops at the allowance after about 37 names. The name must be the full legal name as EDGAR lists it today:Blackstone Property PartnerswithoutL.P.is another name and gets the candidates. A CIK always works. - Offering history reads an issuer's newest 300 Form D filings;
offeringHistoryTruncatedsays when there were more. - Per run: up to 5,000 issuers, 20,000 filings and 60 values per filter list; at most 200 status rows of one kind, and status rows about single inputs only as far as the free work allowance reaches (the rest are counted in the summary). Issuers are searched 100 at a time and their filings arrive newest first across each hundred, not issuer by issuer; when a cap stops a run inside a hundred, all issuers of that hundred get a
skippedrow. - Pace: at most 5 requests per second. Requests go out from the run's own address; if the SEC refuses it three times in a row, the rest of the run goes through one Apify datacenter proxy session at the same pace, at no extra charge to you, and the summary says so.
What this Actor does NOT do
- No investor names: a Form D gives the number of investors, not who they are.
- No e-mail addresses: a Form D carries none.
- No other sources: no news, no TechCrunch or Y Combinator data, no Crunchbase, no state business registries or city licences. One source, the SEC's Form D filings.
- No phone or e-mail verification and no lead scores.
- No AI summaries, buying intent or sales openers.
- No Form ADV data and no adviser matching for funds.
- No other SEC forms: a filing number of another form gets a free
not_form_drow. - No delivery connectors of its own (Notion, Supabase, Slack, a CRM): use Apify's integrations and webhooks on the dataset.
- No filter on the type of security, no filter on city, zip code or distance, no list of names to exclude, no lookup by stock ticker, no filter on a fund's strategy and no choice of sort order (rows come newest first). The fields are in the row: filter them in your own tool.
- No acceptance time of day: the filing date is delivered.
- No paper filings from before 2008-09-17.
- The issuer state filter judges the primary issuer's address in the filing, not EDGAR's company record and not the additional issuers.
About the data
The data is the SEC's public Form D data as the filer submitted it, read from EDGAR with a declared User-Agent at half the SEC's published request rate. Amounts are in US dollars as the filer typed them. The people named in a Form D are public record; whoever contacts them is responsible for the rules on unsolicited calls and e-mail (for example the TCPA and CAN-SPAM in the US). This Actor is an independent tool. It is not affiliated with or approved by the U.S. Securities and Exchange Commission (SEC).
API examples
Every run is also a Form D API call over the Apify API: send the input, read the rows.
curl (synchronous run, returns the rows):
curl -X POST "https://api.apify.com/v2/acts/automation_craft~sec-form-d-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \-H "Content-Type: application/json" \-d '{"daysBack":7,"excludeInvestmentFunds":true,"minAmountSold":1000000,"maxItems":50}'
Node.js with apify-client:
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('automation_craft/sec-form-d-scraper').call({daysBack: 7,industryGroups: ['Biotechnology', 'Pharmaceuticals'],maxItems: 50,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const row of items) if (row.type === 'offering') console.log(row.issuerName, row.issuerStateOrCountry, row.totalAmountSold, row.filingUrl);
Python with apify-client:
import osfrom apify_client import ApifyClientclient = ApifyClient(os.environ["APIFY_TOKEN"])run = client.actor("automation_craft/sec-form-d-scraper").call(run_input={"issuers": ["2158073"], "includeOfferingHistory": True})for row in client.dataset(run["defaultDatasetId"]).iterate_items():if row["type"] == "offering":print(row["accessionNumber"], row["formType"], row["filedAt"], row.get("totalAmountSold"))
FAQ
Does a Form D show who the investors are?
No. A Form D gives the number of investors (totalNumberAlreadyInvested), whether any are non accredited (hasNonAccreditedInvestors) and how many (numberNonAccreditedInvestors), but not their names. The people it names are the issuer's executive officers, directors and promoters (relatedPersons), the brokers and finders paid for the offering (salesCompensationRecipients) and the signers.
Can I download all Form D filings in bulk?
Yes, by date window: set dateFrom and dateTo and a maxItems as high as you need (up to 1,000,000). Data starts at 2008-09-17, a run of 1,000 offerings took about three and a half minutes on the platform (207 to 217 seconds in five test runs), and the summary's coverage tells you whether the whole window was read; when a cap stops the run, the free row names the filing date to continue from.
How do I find companies that just raised money from Form D filings?
Search the last days with daysBack, turn on excludeInvestmentFunds to drop hedge, private equity and venture funds, and set minAmountSold to the size you care about. Add monitorName and schedule the run daily: each new filing is delivered and charged once, with the issuer's address and phone, the amount sold and the executives in the row.
What do the exemption codes 06b, 06c and 3C mean?
They are the federal exemptions a filing claims (Form D item 6), delivered in federalExemptions with their names in federalExemptionLabels: 06b is Rule 506(b), 06c is Rule 506(c), under which general solicitation is allowed, and 3C.1 and 3C.7 are the usual private fund exclusions of Investment Company Act Section 3(c). Filter on them with exemptions.
Can I cold call or e-mail the people named in a Form D?
The names and addresses in a Form D are public record, and this Actor delivers them as filed. Whoever contacts them is responsible for the rules on unsolicited calls and e-mail, for example the TCPA and CAN-SPAM in the US. A Form D carries no e-mail addresses, and the phone number is the issuer's.
Why does this Actor run with limited permissions?
It runs with Apify's limited permissions, the least privilege level: it reads its input and writes only its own run's dataset, which it also reads back after a platform restart so no offering is delivered or charged twice. The one exception is the monitor: when you give a monitorName, it opens a named key-value store it creates itself (sec-form-d-monitor-v1-...) to remember which filings it delivered. It touches nothing else in your account.
Changelog
See the Changelog tab of this Actor (CHANGELOG.md in the source).