Freshly-funded companies are one of the best B2B sales signals that exists. They just got a pile of cash, they have a mandate to grow fast, and they haven't been pitched by every vendor under the sun yet — because most of the sales world doesn't find out until TechCrunch writes about it, weeks later.
Turns out you don't have to wait for TechCrunch. In the US, private funding rounds get filed with the SEC as a Form D — a public record — often days to weeks before any press release goes out. The catch: it's raw regulatory data. No score, no company enrichment, no way to tell a real Series A from a hedge fund's internal paperwork.
I built a small API that does that cleanup for you — Funding Signals — and in this post I'll walk through how to pull today's freshly-funded companies into a Python script in about 15 lines, no API key required for the basics.
Where the data actually comes from
Two public sources, both legally clean:
- SEC EDGAR Form D filings — the official record of private capital raises. Public domain, free, no scraping.
- Funding-news RSS feeds — press coverage for rounds that aren't US-filed (or filed later), cross-checked against the SEC feed so the same raise doesn't show up twice.
Everything is company-level: company name, industry, raise size, filing date, and (on paid tiers) a resolved domain + a public contact address. No scraping of private data, no personal-data harvesting — see the source methodology if you want the receipts.
The noise problem
Raw Form D data is messier than it looks. In a typical day's filings:
- ~30% are amendments to a previous filing, not a new raise
- ~35% are pooled investment funds (VC/hedge funds raising for themselves) — not operating companies with a budget to spend
- The rest need a 0–100 score based on raise size and recency to separate "just raised $100M" from "raised $250K eighteen months ago and never amended the filing"
That filtering is the actual product. Here's what's left after it runs, pulled live just now:
import requests
# no API key needed for the public sample
resp = requests.get("https://funding-signals-api.onrender.com/v1/sample?limit=5")
for company in resp.json():
print(f"{company['score']:>3} {company['company_name']:<28} "
f"${company['amount_usd']:,} ({company['industry']})")
100 Avantstay, Inc. $50,859,879 (Other Technology)
99 Picogrid, Inc. $44,999,942 (Other Technology)
97 Glydways, Inc. $59,999,999 (Other Technology)
97 Databento Inc. $97,025,539 (Other Technology)
96 8090 Solutions Inc. $115,640,617 (Other Technology)
That's real output — Form D filings that landed in the last few days, already de-duplicated and amendment-filtered.
Filtering for your own ICP
With a free API key (self-serve, no card) you get the full /v1/signals endpoint with real filters — score range, raise size, industry, source, and date window:
import requests
API_KEY = "fs_..." # free tier, get one at the link above
headers = {"X-API-Key": API_KEY}
resp = requests.get(
"https://funding-signals-api.onrender.com/v1/signals",
headers=headers,
params={
"min_score": 85,
"min_raise": 5_000_000,
"industry": "technology",
"has_contact": "true", # only leads with a discovered contact point
"limit": 10,
},
)
for lead in resp.json():
print(lead["company_name"], "—", f"${lead['amount_usd']:,}")
has_contact=true filters down to signals where the enrichment step (Phase 3 in the pipeline — domain resolution, then a check of the company's own /about and /contact pages) found a real, public generic contact point — info@, sales@, or a contact-page URL. That's the difference between "a company that exists" and "a company you can actually email."
What's under the hood, briefly
If you're curious how the scoring works rather than just consuming it: raise size and filing recency each contribute a fraction of the 0–100 score (bigger + fresher scores higher, on a log scale so a $500K seed and a $50M Series B don't collapse to the same number). Pooled-fund detection uses both the SEC's own industry label and a legal-name pattern match, because SEC's own labels miss plenty of SPVs. Cross-source dedup clusters filings by normalized company name within a time window, so the same raise reported by both SEC and a press outlet collapses to one signal, not two.
Try it
-
Free tier, no card: get a key and hit
/v1/signalsdirectly. - Docs / OpenAPI: funding-signals-api.onrender.com/docs
- Data refreshes daily. Free tier sees it after a short delay; paid tiers see it real-time with full contact enrichment.
If you build something with it — a Slack alert bot, a CRM sync, a personal "who just got funded in my niche" dashboard — I'd genuinely like to hear about it.
Top comments (0)