Companies that just raised money tend to spend it on hiring, software, agencies and office space. That makes funding announcements valuable for sales teams, recruiters and investors. But many private raises never make the news. The one place nearly all of them show up is an SEC filing called Form D.
This guide explains what Form D is, why reading it by hand is painful, and how to turn it into a clean daily feed with the SEC Form D Funding Alerts Actor on Apify.
What is Form D?
Companies raising money privately in the US under Regulation D must file a Form D with the SEC within 15 days of their first sale. The filing lists the company, its address and industry, the total offering size, how much has been sold so far, the minimum investment, and the executives, directors and promoters involved. It's all public on SEC EDGAR.
The manual way (and why it hurts)
EDGAR lets you browse filings by form type, but each Form D is a separate document. To build a list you'd open filings one by one, read the XML or the rendered form, and type the key numbers into a spreadsheet. There are many filings each day, and a large share are investment funds rather than operating companies, so you'd also spend time filtering out noise.
Step 1: Configure the input
Open the Actor page and click Try for free. The defaults:
{ "daysBack": 3, "includeAmendments": false, "maxItems": 50 } The filters that matter most:
-
daysBackordateFrom/dateTo: the filing-date window. -
industryGroups: exact SEC names such asOther Technology,Biotechnology,Other Health CareorBusiness Services. -
states: issuer business-address codes such asCAorNY. -
minOfferingAmount: skip small raises. Offerings marked "Indefinite" are kept. -
includeAmendments: also return D/A filings.
Tip: most Form D filings are investment funds. To focus on operating companies, set industryGroups.
Step 2: Read the output
| companyName | filingDate | state | industryGroup | totalOfferingAmount | totalAmountSold |
|---|---|---|---|---|---|
| Soliton ID, Inc. | 2026-10-29 | A8 | Other Technology | 1000000 | 105000 |
| GGxTB I, L.P. | 2026-10-29 | CA | Pooled Investment Fund | Indefinite | 0 |
| Innovative Home Solutions USA LLC | 2026-10-29 | VA | Residential | 11000000 | 400000 |
Full records also include CIK, accession number, entity type, year of incorporation, address, revenue range, federal exemptions, the securities offered (for example SAFEs or equity), date of first sale, minimum investment, number of investors, sales compensation, related persons, and links to the filing.
A few notes:
-
stateuses EDGAR codes, which include country codes.A8above is a non-US code, andstateOrCountryNamespells it out. -
totalOfferingAmountcan be the text"Indefinite", which is common for funds. - The Actor follows SEC fair-access rules: it identifies itself and stays at or below five requests per second.
Step 3: Schedule it
A one-off export is useful, but the real value is getting new records on a timetable without thinking about it.
- In Apify Console, open Schedules and click Create new.
- Set the cron expression. For example,
0 7 * * 1-5runs it at 7:00 every weekday, since EDGAR doesn't accept filings on weekends. - Add the Actor (SEC Form D Funding Alerts) and paste the same input JSON you used above.
- Optional: under the Actor's Integrations tab, connect Google Sheets, Slack, Zapier, Make or a webhook so each finished run lands where your team already works.
Pair the schedule with a Slack or email integration and you'll get a short morning digest of new raises in your target industries.
Step 4: Run it from Python with apify-client
If you'd rather pull the data into your own scripts or CRM, use the official apify-client package (pip install apify-client). Grab your API token from Settings > API & Integrations in Apify Console and keep it in an environment variable rather than in code.
import os from apify_client import ApifyClient client = ApifyClient(os.environ["APIFY_TOKEN"]) run_input = { "daysBack": 1, "industryGroups": [ "Other Technology", "Biotechnology" ], "minOfferingAmount": 1000000, "maxItems": 50 } run = client.actor("perskekits/sec-form-d-funding-alerts").call(run_input=run_input) for item in client.dataset(run["defaultDatasetId"]).iterate_items(): print(item.get("companyName"), item.get("industryGroup"), item.get("totalAmountSold")) Use cik or accessionNumber to de-duplicate, and link the filingUrl in your alert so people can read the original filing.
What it costs
The Actor uses Apify's pay-per-event pricing, so you pay for results, not for server time:
- $0.005 per run start
- $0.003 per filing returned
For example, 100 filings cost about $0.305, and 1,000 filings cost about $3.01. Apify's free plan includes a small amount of monthly platform credit, which is enough to try small runs. Check the Actor's pricing tab for the current rates before you run anything large.
FAQ
Where does the data come from?
SEC EDGAR, the official source for public filings.
Does every startup file a Form D?
No. It's required for Regulation D offerings, which cover most US private raises, but not every company or round. Treat it as a strong signal, not a complete list.
Can I filter by amount or industry?
Yes. Use minOfferingAmount, industryGroups and states.
Why do I see so many funds?
Pooled investment funds file Form D too. Filter by industryGroups to remove them.
Is it legal to use this data?
Form D filings are public records. If you use them for outreach, follow CAN-SPAM, TCPA and other applicable rules.
Wrapping up
Form D is one of the most reliable public signals that a company has fresh money. Instead of digging through EDGAR, get it parsed and filtered every morning. Try SEC Form D Funding Alerts on Apify.

