<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Michalis Solomou</title>
    <description>The latest articles on DEV Community by Michalis Solomou (@michalis_solomou_ef4e3025).</description>
    <link>https://dev.to/michalis_solomou_ef4e3025</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4027664%2F81da894d-9457-4603-b4b4-2f14bbe5719e.png</url>
      <title>DEV Community: Michalis Solomou</title>
      <link>https://dev.to/michalis_solomou_ef4e3025</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/michalis_solomou_ef4e3025"/>
    <language>en</language>
    <item>
      <title>Find B2B Leads the Moment a Company Raises Funding (Free API + Python)</title>
      <dc:creator>Michalis Solomou</dc:creator>
      <pubDate>Mon, 13 Jul 2026 17:56:24 +0000</pubDate>
      <link>https://dev.to/michalis_solomou_ef4e3025/find-b2b-leads-the-moment-a-company-raises-funding-free-api-python-cb5</link>
      <guid>https://dev.to/michalis_solomou_ef4e3025/find-b2b-leads-the-moment-a-company-raises-funding-free-api-python-cb5</guid>
      <description>&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Turns out you don't have to wait for TechCrunch. In the US, private funding rounds get filed with the SEC as a &lt;strong&gt;Form D&lt;/strong&gt; — a public record — often days to weeks &lt;em&gt;before&lt;/em&gt; 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.&lt;/p&gt;

&lt;p&gt;I built a small API that does that cleanup for you — &lt;a href="https://funding-signals-api.onrender.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=tutorial" rel="noopener noreferrer"&gt;Funding Signals&lt;/a&gt; — 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the data actually comes from
&lt;/h2&gt;

&lt;p&gt;Two public sources, both legally clean:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SEC EDGAR Form D filings&lt;/strong&gt; — the official record of private capital raises. Public domain, free, no scraping.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Funding-news RSS feeds&lt;/strong&gt; — 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.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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 &lt;a href="https://funding-signals-api.onrender.com/guide-sec-form-d" rel="noopener noreferrer"&gt;source methodology&lt;/a&gt; if you want the receipts.&lt;/p&gt;

&lt;h2&gt;
  
  
  The noise problem
&lt;/h2&gt;

&lt;p&gt;Raw Form D data is messier than it looks. In a typical day's filings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;~30% are &lt;strong&gt;amendments&lt;/strong&gt; to a previous filing, not a new raise&lt;/li&gt;
&lt;li&gt;~35% are &lt;strong&gt;pooled investment funds&lt;/strong&gt; (VC/hedge funds raising for themselves) — not operating companies with a budget to spend&lt;/li&gt;
&lt;li&gt;The rest need a &lt;strong&gt;0–100 score&lt;/strong&gt; based on raise size and recency to separate "just raised $100M" from "raised $250K eighteen months ago and never amended the filing"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That filtering is the actual product. Here's what's left after it runs, pulled live just now:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="c1"&gt;# no API key needed for the public sample
&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://funding-signals-api.onrender.com/v1/sample?limit=5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;company&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;company&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;score&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;  &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;company&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;company_name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="mi"&gt;28&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
          &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;company&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;amount_usd&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;  (&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;company&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;industry&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's real output — Form D filings that landed in the last few days, already de-duplicated and amendment-filtered.&lt;/p&gt;

&lt;h2&gt;
  
  
  Filtering for your own ICP
&lt;/h2&gt;

&lt;p&gt;With a free API key (self-serve, no card) you get the full &lt;code&gt;/v1/signals&lt;/code&gt; endpoint with real filters — score range, raise size, industry, source, and date window:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;

&lt;span class="n"&gt;API_KEY&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fs_...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;  &lt;span class="c1"&gt;# free tier, get one at the link above
&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;X-API-Key&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;API_KEY&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://funding-signals-api.onrender.com/v1/signals&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;min_score&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;85&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;min_raise&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5_000_000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;industry&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;technology&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;has_contact&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;true&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# only leads with a discovered contact point
&lt;/span&gt;        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;limit&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;lead&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;lead&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;company_name&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;—&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;$&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;lead&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;amount_usd&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;has_contact=true&lt;/code&gt; filters down to signals where the enrichment step (Phase 3 in the pipeline — domain resolution, then a check of the company's own &lt;code&gt;/about&lt;/code&gt; and &lt;code&gt;/contact&lt;/code&gt; pages) found a real, public generic contact point — &lt;code&gt;info@&lt;/code&gt;, &lt;code&gt;sales@&lt;/code&gt;, or a contact-page URL. That's the difference between "a company that exists" and "a company you can actually email."&lt;/p&gt;

&lt;h2&gt;
  
  
  What's under the hood, briefly
&lt;/h2&gt;

&lt;p&gt;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 &lt;em&gt;and&lt;/em&gt; 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.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free tier, no card:&lt;/strong&gt; &lt;a href="https://funding-signals-api.onrender.com/?utm_source=devto&amp;amp;utm_medium=article&amp;amp;utm_campaign=tutorial#pricing" rel="noopener noreferrer"&gt;get a key&lt;/a&gt; and hit &lt;code&gt;/v1/signals&lt;/code&gt; directly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs / OpenAPI:&lt;/strong&gt; &lt;a href="https://funding-signals-api.onrender.com/docs" rel="noopener noreferrer"&gt;funding-signals-api.onrender.com/docs&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Data refreshes daily. Free tier sees it after a short delay; paid tiers see it real-time with full contact enrichment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;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.&lt;/p&gt;

</description>
      <category>python</category>
      <category>api</category>
      <category>sales</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
