Every time a US startup or private company raises money under Regulation D, it has to file a Form D with the SEC within 15 days of the first sale. The filing is public and machine-readable on EDGAR. It shows how much the company is raising, how much it has already sold, its industry, the year it was incorporated, its business address and its business phone.
That's a solid lead signal. A company that just closed a round is about to hire, buy software, lease space and set up payroll.
From Oct 21 to Oct 27, 2026, EDGAR received 790 new Form D filings. 504 were pooled investment funds (hedge, PE, real estate and VC funds). After those are dropped, 283 operating companies remain:
- 202 were raising $1M or more, and 71 were raising $10M or more
- 215 were incorporated in the last five years
- Together they reported $6.7B already sold
- The top states were California (45), New York (26), Texas (24), Massachusetts (14), Illinois (14) and Florida (13)
- The top industries were "Other Technology" (77), "Other" (58) and commercial real estate (28)
How Form D data is laid out
EDGAR publishes a daily form index at https://www.sec.gov/Archives/edgar/daily-index/2026/QTR4/form.20261027.idx. Each D row points to a filing folder, and each folder holds a primary_doc.xml with the structured Form D. The SEC's fair-access rules ask for two things: a descriptive User-Agent with contact details, and no more than 10 requests per second.
import re, time, requests, xml.etree.ElementTree as ET
UA = {"User-Agent": "Your Company you@example.com"}
idx = requests.get("https://www.sec.gov/Archives/edgar/daily-index/2026/QTR4/form.20261027.idx", headers=UA).text
rows = [l for l in idx.splitlines() if l.startswith("D ")]
for line in rows[:20]:
path = line.split()[-1] # edgar/data/<cik>/<accession>.txt
cik, acc = path.split("/")[2], path.split("/")[3][:-4]
url = f"https://www.sec.gov/Archives/edgar/data/{cik}/{acc.replace('-','')}/primary_doc.xml"
x = ET.fromstring(requests.get(url, headers=UA).content)
name = x.findtext(".//primaryIssuer/entityName")
ind = x.findtext(".//industryGroup/industryGroupType")
amt = x.findtext(".//offeringSalesAmounts/totalOfferingAmount")
print(name, ind, amt)
time.sleep(0.15)
That's enough for a quick look. A daily lead feed needs more: deduping by accession number, filtering out funds (the industryGroupType "Pooled Investment Fund" plus fund-style names), handling amendments (D/A), parsing "Indefinite" offering amounts and turning state codes into names. It also needs to drop the related-persons block, which holds executive and promoter names you usually don't want in a company list.
The no-code route
I packaged all of that as an Apify Actor: SEC Form D Scraper - Startup Funding & Private Placement Leads. Here's an example input:
{
"withinDays": 7,
"states": ["CA", "NY", "TX"],
"industries": ["Technology"],
"minOfferingAmount": 1000000,
"newCompaniesOnly": true,
"excludePooledFunds": true
}
A 14-day run for California tech companies raising $1M+ read 805 filings and returned 36 companies in about 2.5 minutes.
Each row has the company name, CIK, entity type, year and state of incorporation, industry group, revenue range, total offering, amount sold and remaining, minimum investment, number of investors, exemption (506(b) or 506(c)), date of first sale, business address and phone, plus EDGAR links. Pricing is $1.50 per 1,000 companies, so a week of national data costs well under a dollar. Apify's free plan covers it.
Ideas
- SaaS and agency outbound: pull "Other Technology" raises of $2M+ every Monday and push them to your CRM through the Apify integration (HubSpot, Google Sheets or Zapier).
- Recruiters: filter to companies founded within five years that have sold $5M+. A Series A almost always means hiring.
-
Commercial bankers and venture debt: use
totalRemainingto find companies still raising. - Commercial real estate brokers: "Commercial" and "Other Real Estate" filers are often new property SPVs.
A sample CSV and full field list are at loomwise.app/data/startup-funding-leads.
Data: U.S. SEC EDGAR Form D filings, public domain. The tool outputs companies only. Executive, director and promoter names are never included.
Top comments (0)