<?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: SureSignal</title>
    <description>The latest articles on DEV Community by SureSignal (@suresignal).</description>
    <link>https://dev.to/suresignal</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%2F4184064%2F30ef2784-ee7c-422d-8ed3-f948edea725a.png</url>
      <title>DEV Community: SureSignal</title>
      <link>https://dev.to/suresignal</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/suresignal"/>
    <language>en</language>
    <item>
      <title>Enrich a list of company domains with hiring, funding and ad signals, and get re-charged only when something changes</title>
      <dc:creator>SureSignal</dc:creator>
      <pubDate>Wed, 14 Oct 2026 23:28:23 +0000</pubDate>
      <link>https://dev.to/suresignal/enrich-a-list-of-company-domains-with-hiring-funding-and-ad-signals-and-get-re-charged-only-when-ojk</link>
      <guid>https://dev.to/suresignal/enrich-a-list-of-company-domains-with-hiring-funding-and-ad-signals-and-get-re-charged-only-when-ojk</guid>
      <description>&lt;h1&gt;
  
  
  Enrich a list of company domains with hiring, funding and ad signals, and get re-charged only when something changes
&lt;/h1&gt;

&lt;p&gt;Most company enrichment answers "what is this company?" once. For sales, investing and account research, the better question is &lt;strong&gt;"what changed at this company since I last looked?"&lt;/strong&gt; New jobs, a new funding filing, new ads. Each is a reason to reach out this week.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a profile contains
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Company Profile API&lt;/strong&gt; on Apify takes a domain and returns one structured profile:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Section&lt;/th&gt;
&lt;th&gt;What&lt;/th&gt;
&lt;th&gt;Source&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Company&lt;/td&gt;
&lt;td&gt;Name, description, logo, socials, emails/phones listed on the site, key pages&lt;/td&gt;
&lt;td&gt;Company homepage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tech stack&lt;/td&gt;
&lt;td&gt;Analytics, CRM, chat, CMS, payments, frameworks (30+ detections)&lt;/td&gt;
&lt;td&gt;Homepage code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hiring&lt;/td&gt;
&lt;td&gt;Open jobs, jobs posted in last 30 days, top departments/locations&lt;/td&gt;
&lt;td&gt;Public Greenhouse, Lever, Ashby, Workable, SmartRecruiters, Recruitee boards&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Funding&lt;/td&gt;
&lt;td&gt;Form D filings, latest date, amount sold/offered, executives&lt;/td&gt;
&lt;td&gt;SEC EDGAR&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Advertising&lt;/td&gt;
&lt;td&gt;Google ads found by format, latest ad shown&lt;/td&gt;
&lt;td&gt;Google Ads Transparency Center&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Signals&lt;/td&gt;
&lt;td&gt;
&lt;code&gt;hiring_actively&lt;/code&gt;, &lt;code&gt;raised_recently_sec_form_d&lt;/code&gt;, &lt;code&gt;running_google_ads&lt;/code&gt;, plus new jobs / new filing / new ads since last run&lt;/td&gt;
&lt;td&gt;Computed&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No LinkedIn scraping and no logins.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Enrich a list
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"domains"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"ramp.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"notion.so"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"companyNames"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nl"&gt;"ramp.com"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Ramp Business Corporation"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"deliveryMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"changedOnly"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"monitorName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"q4-target-accounts"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adding the legal name in &lt;code&gt;companyNames&lt;/code&gt; makes the SEC match exact. Otherwise check &lt;code&gt;secMatchConfidence&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Schedule weekly and only pay when something changed
&lt;/h2&gt;

&lt;p&gt;In the default &lt;strong&gt;New or changed&lt;/strong&gt; mode, a weekly run charges only for companies whose jobs, funding filings, ads or homepage changed since the last run. &lt;strong&gt;Unchanged companies and domains with no data are free.&lt;/strong&gt; Each changed profile includes &lt;code&gt;changesSinceLastRun&lt;/code&gt;, for example &lt;code&gt;{ "newJobs": 5, "newFormDFilings": 0, "newGoogleAds": 3, "changed": true }&lt;/code&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Money:&lt;/strong&gt; $0.03 per profile delivered. A 1,000-account list costs at most $30 the first time (domains with no data are free), and after that you only pay for accounts that changed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time:&lt;/strong&gt; no diffing last week's export against this week's.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mental effort:&lt;/strong&gt; the weekly list &lt;em&gt;is&lt;/em&gt; the call list: only accounts with something new.
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;YOUR_APIFY_TOKEN&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SureSignal/company-profile-api&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&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;domains&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;accounts.txt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;read&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deliveryMode&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;changedOnly&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;monitorName&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;q4-target-accounts&lt;/span&gt;&lt;span class="sh"&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;p&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&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;p&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;domain&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;p&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;buyingSignals&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;p&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;changesSinceLastRun&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;Send the results to your CRM with Make, Zapier or n8n, or let an AI agent call it through the Apify API or MCP server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Company-level data only. No personal contact data beyond what a company publishes on its own site.&lt;/li&gt;
&lt;li&gt;Hiring data needs one of the six supported job boards. Funding data needs a US Form D filing. Ads data needs Google ads activity. Empty sections are normal and still tell you something.&lt;/li&gt;
&lt;li&gt;SEC matching is strictest with legal names provided.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;A decision is only as good as the information behind it. A weekly "what changed" list beats a once-a-year enrichment that's stale by spring.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;SureSignal: only pay for new data.&lt;/em&gt;&lt;/p&gt;







&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://apify.com/SureSignal/company-profile-api" rel="noopener noreferrer"&gt;company-profile-api on the Apify Store&lt;/a&gt;. You only pay for new data: runs on a schedule skip what you've already received.&lt;/p&gt;

</description>
      <category>api</category>
      <category>sales</category>
      <category>python</category>
      <category>automation</category>
    </item>
    <item>
      <title>How to see your competitors' Google ads, and get only the new ones every morning</title>
      <dc:creator>SureSignal</dc:creator>
      <pubDate>Wed, 14 Oct 2026 15:07:39 +0000</pubDate>
      <link>https://dev.to/suresignal/how-to-see-your-competitors-google-ads-and-get-only-the-new-ones-every-morning-4l82</link>
      <guid>https://dev.to/suresignal/how-to-see-your-competitors-google-ads-and-get-only-the-new-ones-every-morning-4l82</guid>
      <description>&lt;h1&gt;
  
  
  How to see your competitors' Google ads, and get only the new ones every morning
&lt;/h1&gt;

&lt;p&gt;Google publishes a public library of ads: the &lt;strong&gt;Google Ads Transparency Center&lt;/strong&gt; (adstransparency.google.com). Search an advertiser or a website and you can see their search, display and YouTube ads, when each was first and last shown, and in which regions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: The free, manual way
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Open adstransparency.google.com.&lt;/li&gt;
&lt;li&gt;Search a competitor's name or &lt;strong&gt;domain&lt;/strong&gt;. Domain search also catches resellers and affiliates pointing ads at that site.&lt;/li&gt;
&lt;li&gt;Filter by region, format and date.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is great for a one-off look. It falls short when you want to track 20 competitors, export the creatives, or know &lt;strong&gt;what's new since last week&lt;/strong&gt; without scrolling past the same long-running ads again.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the library will &lt;em&gt;not&lt;/em&gt; tell you:&lt;/strong&gt; spend, bids or the keywords a competitor targets. Google doesn't publish those for commercial ads. Treat any tool that promises them from this source with suspicion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Export it
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Google Ads Transparency Library&lt;/strong&gt; Actor on Apify searches by domain, advertiser name or ID, or keyword (which finds advertisers), and exports each ad with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;format (text, image or video),&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;firstShown&lt;/code&gt;, &lt;code&gt;lastShown&lt;/code&gt; and &lt;code&gt;daysShown&lt;/code&gt; (long-running ads are usually the ones that work),&lt;/li&gt;
&lt;li&gt;the rendered ad image, or the &lt;strong&gt;YouTube URL, video ID and thumbnail&lt;/strong&gt; for video ads,&lt;/li&gt;
&lt;li&gt;target domain and the Transparency Center link.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"domains"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"competitor-one.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"competitor-two.com"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"region"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"US"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"adFormat"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ALL"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dateFrom"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-09-01"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxAdsPerQuery"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"onlyNewAds"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"monitorName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"crm-competitors"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No Google account, API key or cookies needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Turn it into a monitor and only pay for new ads
&lt;/h2&gt;

&lt;p&gt;The first run pulls the competitors' current ads, up to your limit. With &lt;code&gt;onlyNewAds&lt;/code&gt; on and a daily Schedule, every later run delivers &lt;strong&gt;only ads this monitor hasn't seen&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Money:&lt;/strong&gt; $0.012 per ad delivered ($12 per 1,000). Ads you already have aren't re-sent and aren't charged. &lt;code&gt;maxAdsTotal&lt;/code&gt; caps any run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time:&lt;/strong&gt; no hand-filtering of the long-running ads that show up every run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mental effort:&lt;/strong&gt; the morning Slack message is "Competitor X launched 3 new video ads", not their whole back catalog.
&lt;/li&gt;
&lt;/ul&gt;

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

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;YOUR_APIFY_TOKEN&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SureSignal/google-ads-transparency-library&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&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;domains&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;competitor-one.com&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;region&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;US&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;onlyNewAds&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;monitorName&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;competitor-one-us&lt;/span&gt;&lt;span class="sh"&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;ad&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&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;ad&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;format&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;ad&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;firstShown&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;ad&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;videoUrl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="n"&gt;ad&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;imageUrl&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;ad&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;adUrl&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;Optional add-on: regions shown and variation count per ad, at $3 per 1,000 ads.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do with it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Review new creatives weekly and tag the offer, hook and landing page.&lt;/li&gt;
&lt;li&gt;Sort by &lt;code&gt;daysShown&lt;/code&gt;. Ads that have run for months are worth studying.&lt;/li&gt;
&lt;li&gt;Brand protection: search your own domain to spot resellers or affiliates bidding on it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Honest limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;No spend, keywords or bids (Google doesn't publish them).&lt;/li&gt;
&lt;li&gt;Google searches advertisers and domains, not ad copy text.&lt;/li&gt;
&lt;li&gt;Zero results usually means that format or region didn't run. Try region &lt;code&gt;anywhere&lt;/code&gt; and format &lt;code&gt;ALL&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;A decision is only as good as the information behind it. Seeing a competitor's new offer the week it launches beats discovering it in a quarterly review.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;SureSignal: only pay for new data.&lt;/em&gt;&lt;/p&gt;







&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://apify.com/SureSignal/google-ads-transparency-library" rel="noopener noreferrer"&gt;google-ads-transparency-library on the Apify Store&lt;/a&gt;. You only pay for new data: runs on a schedule skip what you've already received.&lt;/p&gt;

</description>
      <category>marketing</category>
      <category>api</category>
      <category>automation</category>
      <category>python</category>
    </item>
    <item>
      <title>Get YouTube transcripts for every new upload from the channels you follow (for RAG, summaries and research)</title>
      <dc:creator>SureSignal</dc:creator>
      <pubDate>Wed, 14 Oct 2026 15:07:14 +0000</pubDate>
      <link>https://dev.to/suresignal/get-youtube-transcripts-for-every-new-upload-from-the-channels-you-follow-for-rag-summaries-and-5079</link>
      <guid>https://dev.to/suresignal/get-youtube-transcripts-for-every-new-upload-from-the-channels-you-follow-for-rag-summaries-and-5079</guid>
      <description>&lt;h1&gt;
  
  
  Get YouTube transcripts for every new upload from the channels you follow (for RAG, summaries and research)
&lt;/h1&gt;

&lt;p&gt;YouTube transcripts are some of the most useful text on the internet for AI work: conference talks, earnings-call recaps, tutorials, interviews. Getting them reliably at scale is a well-known headache. Search autocomplete for "youtube transcript api" suggests "rate limit" and "ip blocked" right away.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is there an official API?
&lt;/h2&gt;

&lt;p&gt;YouTube's official Data API lets you download captions &lt;strong&gt;only for videos you own&lt;/strong&gt;. For public videos, tools read the publicly displayed captions, the same text you see under &lt;em&gt;Show transcript&lt;/em&gt;. The popular open-source &lt;code&gt;youtube-transcript-api&lt;/code&gt; Python library does this well for small jobs. The usual pain points at volume are IP blocks from cloud servers, and keeping track of which videos you've already processed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: One video, quickly
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;YouTube Transcript Scraper&lt;/strong&gt; Actor on Apify accepts watch, youtu.be, Shorts and live URLs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"videos"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"https://www.youtube.com/watch?v=dQw4w9WgXcQ"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"languages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"en"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"preferManualCaptions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"includeTimestamps"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You get &lt;code&gt;transcriptText&lt;/code&gt;, timestamped &lt;code&gt;segments&lt;/code&gt; (&lt;code&gt;start&lt;/code&gt;, &lt;code&gt;duration&lt;/code&gt;, &lt;code&gt;text&lt;/code&gt;), language, whether captions were auto-generated, word count, and video metadata (title, channel, views, duration, publish date, tags). It also retries and rotates proxies when YouTube rate-limits.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Monitor channels and only pay for new videos
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"channels"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"@somechannel"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"@anotherchannel"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"deliveryMode"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"newOnly"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"monitorName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ai-talks"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"languages"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"en"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxTranscripts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Schedule it daily. Each run checks the channels' latest uploads (up to 15 per channel from the public feed) and delivers &lt;strong&gt;only videos this monitor hasn't delivered before&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Money:&lt;/strong&gt; $0.008 per transcript ($8 per 1,000). Already-delivered, unavailable and no-caption videos are free. &lt;code&gt;maxTranscripts&lt;/code&gt; caps each run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time:&lt;/strong&gt; no "have I processed this one?" bookkeeping, and no re-embedding duplicates into your vector store.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mental effort:&lt;/strong&gt; your summary digest only contains new videos.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Need to catch caption corrections? Use &lt;em&gt;New + changed&lt;/em&gt; mode. It re-delivers a video only when its captions changed, with &lt;code&gt;transcriptChanged: true&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Feed it into RAG or a summary
&lt;/h2&gt;



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

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;YOUR_APIFY_TOKEN&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SureSignal/youtube-transcript-scraper&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&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;channels&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;@somechannel&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;deliveryMode&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;newOnly&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;monitorName&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;ai-talks&lt;/span&gt;&lt;span class="sh"&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;v&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;v&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;transcriptText&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="c1"&gt;# chunk on segment boundaries so every chunk keeps a timestamp you can cite
&lt;/span&gt;        &lt;span class="n"&gt;chunks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;start&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;s&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&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;s&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;v&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;segments&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]]&lt;/span&gt;
        &lt;span class="c1"&gt;# embed and upsert into your vector store, keyed by videoId + start time
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Chunking on segment boundaries lets every retrieved passage link back to &lt;code&gt;https://youtu.be/&amp;lt;videoId&amp;gt;?t=&amp;lt;start&amp;gt;&lt;/code&gt;, so answers can cite the exact moment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;No captions means no transcript. You get a free error row; the tool doesn't do speech-to-text.&lt;/li&gt;
&lt;li&gt;Channel monitoring covers the latest 15 uploads per run, so it builds the archive going forward. Paste older video URLs directly.&lt;/li&gt;
&lt;li&gt;Respect YouTube's Terms and copyright: use transcripts for summaries, research and accessibility, and don't republish creators' content wholesale.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;A decision is only as good as the information behind it. If your research agent is summarizing last month's videos twice, you're paying twice for less.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;SureSignal: only pay for new data.&lt;/em&gt;&lt;/p&gt;







&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://apify.com/SureSignal/youtube-transcript-scraper" rel="noopener noreferrer"&gt;youtube-transcript-scraper on the Apify Store&lt;/a&gt;. You only pay for new data: runs on a schedule skip what you've already received.&lt;/p&gt;

</description>
      <category>python</category>
      <category>ai</category>
      <category>rag</category>
      <category>automation</category>
    </item>
    <item>
      <title>How to check whether ChatGPT and Perplexity recommend your brand, and track changes weekly</title>
      <dc:creator>SureSignal</dc:creator>
      <pubDate>Wed, 14 Oct 2026 15:07:08 +0000</pubDate>
      <link>https://dev.to/suresignal/how-to-check-whether-chatgpt-and-perplexity-recommend-your-brand-and-track-changes-weekly-8gp</link>
      <guid>https://dev.to/suresignal/how-to-check-whether-chatgpt-and-perplexity-recommend-your-brand-and-track-changes-weekly-8gp</guid>
      <description>&lt;h1&gt;
  
  
  How to check whether ChatGPT and Perplexity recommend your brand, and track changes weekly
&lt;/h1&gt;

&lt;p&gt;More and more buyers ask an AI assistant "what's the best X for Y?" before they ever see a search results page. If your brand isn't in that answer, or a competitor is listed first, you'd want to know. You'd also want to know when it changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Pick the prompts that matter
&lt;/h2&gt;

&lt;p&gt;Start with 10â€“30 questions a real buyer would ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;category: "best CRM for small business"&lt;/li&gt;
&lt;li&gt;alternatives: "HubSpot alternatives"&lt;/li&gt;
&lt;li&gt;comparison: "Pipedrive vs HubSpot"&lt;/li&gt;
&lt;li&gt;problem: "how do I track sales emails automatically"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use your own sales calls, support tickets and Search Console queries as sources. Avoid prompts that contain your brand name, unless you're checking how AI describes you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Do it by hand once
&lt;/h2&gt;

&lt;p&gt;Ask each engine and note whether you're &lt;strong&gt;mentioned&lt;/strong&gt;, at what &lt;strong&gt;position&lt;/strong&gt; relative to competitors, and whether your site is &lt;strong&gt;cited&lt;/strong&gt;. You'll quickly see the problem: answers vary from run to run, and engines differ from each other. One manual check is a sample, not a measurement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Automate the checks
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;AI Search Visibility Tracker&lt;/strong&gt; on Apify asks each prompt through each provider's &lt;strong&gt;official search-enabled model API&lt;/strong&gt;: OpenAI search models, Perplexity Sonar, and Gemini and Claude with web search. It doesn't scrape chatgpt.com or perplexity.ai.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"brand"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"YourBrand"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"brandDomain"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"yourbrand.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"competitors"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"competitor-one.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"competitor-two.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Competitor Three"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"prompts"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"best CRM for small business"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"HubSpot alternatives"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"engines"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"perplexity"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"chatgpt"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"samplesPerPrompt"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"onlyChanges"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"trackerName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"crm-weekly"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For every prompt and engine you get &lt;code&gt;brandMentioned&lt;/code&gt;, &lt;code&gt;brandRank&lt;/code&gt;, &lt;code&gt;brandCited&lt;/code&gt;, &lt;code&gt;shareOfVoice&lt;/code&gt;, &lt;code&gt;competitorsMentioned&lt;/code&gt;, &lt;code&gt;citedDomains&lt;/code&gt; and the full answer text. You also get &lt;strong&gt;change fields&lt;/strong&gt;: &lt;code&gt;mentionChanged&lt;/code&gt;, &lt;code&gt;rankChange&lt;/code&gt;, &lt;code&gt;newCitedDomains&lt;/code&gt;, &lt;code&gt;changed&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;samplesPerPrompt&lt;/code&gt; asks the same question several times. AI answers vary, so averaging a few samples gives a steadier picture than one roll of the dice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Schedule weekly, and read only what moved
&lt;/h2&gt;

&lt;p&gt;Schedule the task weekly and turn on &lt;strong&gt;Only output changes&lt;/strong&gt;. Every check is a fresh, live answer, so the data is never a stale copy. Your dataset and Slack alert only show prompts where something moved: mention gained or lost, rank change, a new cited domain, a new competitor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pricing, plainly:&lt;/strong&gt; $0.15 per answer checked, &lt;strong&gt;including&lt;/strong&gt; unchanged checks that are filtered out of your output. Model usage is billed at cost to your Apify account through Apify's OpenRouter integration (the README estimates about $0.001â€“$0.01 per answer), or you can bring your own OpenRouter key. Errors aren't charged. Example: 20 prompts Ã— 2 engines Ã— 1 sample, weekly = 40 checks â‰ˆ $6 a week plus model usage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Act on it
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;citedDomains&lt;/code&gt; tells you &lt;em&gt;where&lt;/em&gt; AI engines get their information. If a competitor wins because of a G2 page or a comparison article, that's your content or PR to-do list.&lt;/li&gt;
&lt;li&gt;Lost a mention? Check whether a newly cited domain replaced yours.&lt;/li&gt;
&lt;li&gt;Re-run after publishing new content and watch &lt;code&gt;rankChange&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Honest limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;No tool can see a specific user's personalized ChatGPT session. This measures the same question through official APIs, which is reproducible and terms-friendly but not identical to the consumer app.&lt;/li&gt;
&lt;li&gt;Answers vary, so use samples and look at trends, not single checks.&lt;/li&gt;
&lt;li&gt;No guarantees: tracking visibility doesn't create it.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;A decision is only as good as the information behind it. "I think ChatGPT mentions us" isn't a strategy. A weekly record of what changed is.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;SureSignal: only pay for new data.&lt;/em&gt;&lt;/p&gt;







&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://apify.com/SureSignal/ai-search-visibility-tracker" rel="noopener noreferrer"&gt;AI Search Visibility Tracker on the Apify Store&lt;/a&gt;. $0.15 per AI answer check; every check is billed, and 'Only output changes' filters your report to what moved.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>marketing</category>
      <category>llm</category>
    </item>
    <item>
      <title>Greenhouse, Lever and Ashby job board APIs: one feed of new jobs at the companies you care about</title>
      <dc:creator>SureSignal</dc:creator>
      <pubDate>Wed, 14 Oct 2026 15:06:15 +0000</pubDate>
      <link>https://dev.to/suresignal/greenhouse-lever-and-ashby-job-board-apis-one-feed-of-new-jobs-at-the-companies-you-care-about-2ijn</link>
      <guid>https://dev.to/suresignal/greenhouse-lever-and-ashby-job-board-apis-one-feed-of-new-jobs-at-the-companies-you-care-about-2ijn</guid>
      <description>&lt;h1&gt;
  
  
  Greenhouse, Lever and Ashby job board APIs: one feed of new jobs at the companies you care about
&lt;/h1&gt;

&lt;p&gt;Greenhouse, Lever, Ashby, Workable, SmartRecruiters and Recruitee all publish &lt;strong&gt;public job-board endpoints&lt;/strong&gt; so companies can show openings on their own careers pages. No API key is needed. If you know a company's board slug, you can read its open jobs as JSON:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Greenhouse: &lt;code&gt;https://boards-api.greenhouse.io/v1/boards/&amp;lt;slug&amp;gt;/jobs&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Lever: &lt;code&gt;https://api.lever.co/v0/postings/&amp;lt;slug&amp;gt;?mode=json&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Ashby: &lt;code&gt;https://api.ashbyhq.com/posting-api/job-board/&amp;lt;slug&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's enough for one company. It gets messy when you want &lt;strong&gt;"these 200 companies, every morning, only what's new"&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;six different schemas (salary is a structured field on some and buried in the description on others),&lt;/li&gt;
&lt;li&gt;figuring out which ATS each company uses,&lt;/li&gt;
&lt;li&gt;diffing today's list against yesterday's to find new and removed jobs,&lt;/li&gt;
&lt;li&gt;collapsing the same role posted in five cities.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who actually needs this
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sales teams&lt;/strong&gt; using hiring as a buying signal ("they just opened four data-engineering roles").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recruiters&lt;/strong&gt; watching competitors and target companies.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Niche job boards&lt;/strong&gt; that need new listings plus a notice when a listing comes down.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analysts&lt;/strong&gt; tracking headcount plans at a set of companies.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Build a watchlist
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;Company Careers Job Feed&lt;/strong&gt; Actor on Apify accepts careers URLs, &lt;code&gt;ats:slug&lt;/code&gt;, domains or plain names. If you don't know the ATS, give it a domain and it tries each supported board:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"companies"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"https://boards.greenhouse.io/stripe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"lever:palantir"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ramp.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"notion"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"titleKeywords"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"data engineer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"revops"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"security"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"countries"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"US"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"onlyNew"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"includeRemoved"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"monitorId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"target-accounts"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Companies that can't be found are listed in the run's &lt;code&gt;NOT_FOUND_COMPANIES&lt;/code&gt; record and aren't charged.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: What comes back
&lt;/h2&gt;

&lt;p&gt;One schema across all six ATSs: title, department, seniority (derived from the title), location normalized to city, region and country, &lt;code&gt;workplaceType&lt;/code&gt; (remote/hybrid/onsite), &lt;code&gt;salaryMin&lt;/code&gt;/&lt;code&gt;salaryMax&lt;/code&gt; with &lt;code&gt;salarySource&lt;/code&gt; (ats or description), &lt;code&gt;postedAt&lt;/code&gt;, apply URL and the company domain.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Schedule it and only pay for new jobs
&lt;/h2&gt;

&lt;p&gt;Save it as a Task and schedule it daily. The first run returns all matching open jobs. Every run after that returns only &lt;strong&gt;new&lt;/strong&gt; jobs for this &lt;code&gt;monitorId&lt;/code&gt;, plus a &lt;strong&gt;free&lt;/strong&gt; &lt;code&gt;removed&lt;/code&gt; record when a job disappears (so you can tell it was filled or closed, and how long it was open).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Money:&lt;/strong&gt; $0.018 per job delivered. Repeats, collapsed duplicates, filtered-out jobs, removed notices and not-found companies are free.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time:&lt;/strong&gt; no diffing script to maintain, and no dedupe in your sheet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mental effort:&lt;/strong&gt; the Slack message says "3 new roles at Acme", not a list of 400 you've already seen.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 4: Pipe it somewhere useful
&lt;/h2&gt;

&lt;p&gt;From Python:&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;from&lt;/span&gt; &lt;span class="n"&gt;apify_client&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ApifyClient&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;YOUR_APIFY_TOKEN&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SureSignal/company-careers-job-feed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&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;companies&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;ramp.com&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;notion&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;lever:palantir&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;titleKeywords&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;data engineer&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;monitorId&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;data-eng-watch&lt;/span&gt;&lt;span class="sh"&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;job&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&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;job&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;job&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;companyName&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;job&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;title&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt; &lt;span class="n"&gt;job&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;salaryMin&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;job&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;url&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;Or with no code: Apify integrations â†’ Slack, Google Sheets, a webhook, n8n, Make or Zapier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost examples (list price)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;50 target accounts producing about 600 new jobs a month â‰ˆ $10.80&lt;/li&gt;
&lt;li&gt;A one-off snapshot of 1,500 jobs â‰ˆ $27&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are illustrations only. Your cost depends on how often your companies post, and &lt;strong&gt;Max jobs per run&lt;/strong&gt; caps it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;No LinkedIn, Indeed or Glassdoor. Only first-party company job boards.&lt;/li&gt;
&lt;li&gt;Workday, iCIMS, Taleo and SuccessFactors aren't supported yet.&lt;/li&gt;
&lt;li&gt;It doesn't discover companies; you bring the list.&lt;/li&gt;
&lt;li&gt;No currency conversion.&lt;/li&gt;
&lt;li&gt;Greenhouse and Workable rarely expose salary as a field.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;A decision is only as good as the information behind it. Knowing which account just started hiring is only useful if you hear about it this week, not after you've re-read the same 400 postings.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;SureSignal: only pay for new data.&lt;/em&gt;&lt;/p&gt;







&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://apify.com/SureSignal/company-careers-job-feed" rel="noopener noreferrer"&gt;company-careers-job-feed on the Apify Store&lt;/a&gt;. You only pay for new data: runs on a schedule skip what you've already received.&lt;/p&gt;

</description>
      <category>api</category>
      <category>python</category>
      <category>automation</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How to find recently funded startups every morning using SEC Form D filings (and only pay for new ones)</title>
      <dc:creator>SureSignal</dc:creator>
      <pubDate>Wed, 14 Oct 2026 15:06:12 +0000</pubDate>
      <link>https://dev.to/suresignal/how-to-find-recently-funded-startups-every-morning-using-sec-form-d-filings-and-only-pay-for-new-55jn</link>
      <guid>https://dev.to/suresignal/how-to-find-recently-funded-startups-every-morning-using-sec-form-d-filings-and-only-pay-for-new-55jn</guid>
      <description>&lt;h1&gt;
  
  
  How to find recently funded startups every morning using SEC Form D filings (and only pay for new ones)
&lt;/h1&gt;

&lt;p&gt;Every US company that sells shares in a private round files a &lt;strong&gt;Form D&lt;/strong&gt; with the SEC, usually within 15 days of the first sale. Those filings are public. Many of the raises never get a press release, so a Form D is often the earliest public trace that a company just got budget.&lt;/p&gt;

&lt;p&gt;That makes Form D useful if you sell to startups: agencies, fractional CFOs, startup lawyers, recruiters, insurance brokers, dev shops. You could also be an investor who wants to see what's being raised in your sector.&lt;/p&gt;

&lt;p&gt;Doing it by hand is the hard part. EDGAR's search is built for looking up one company, not for "show me every operating company that raised money this week, without the funds and SPVs". And if you pull a list every day, you get the same filings again and again.&lt;/p&gt;

&lt;p&gt;This tutorial sets up a feed that:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;pulls new Form D filings from SEC EDGAR,&lt;/li&gt;
&lt;li&gt;drops investment funds, SPVs and real-estate syndications,&lt;/li&gt;
&lt;li&gt;returns one clean row per raise (company, amount sold, named executives, phone, website, link to the filing), and&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;only delivers, and only charges for, filings you haven't already received.&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Step 1: The free, manual way (worth knowing)
&lt;/h2&gt;

&lt;p&gt;Go to EDGAR full-text search (efts.sec.gov / sec.gov/edgar/search), filter forms to &lt;strong&gt;D&lt;/strong&gt;, and set a date range. You'll get the filings, but you then have to open each one, read the XML or HTML, figure out whether it's a real company or a fund, and copy the fields into a sheet. That works for five filings. It doesn't work for a few hundred a week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Run the feed
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;SEC Form D Funding Leads&lt;/strong&gt; Actor on Apify does the parsing and filtering. Open it, click &lt;strong&gt;Try for free&lt;/strong&gt;, and leave the defaults: filings from the last 7 days, funds, SPVs and real estate excluded, &lt;em&gt;Only new since last run&lt;/em&gt; on.&lt;/p&gt;

&lt;p&gt;A typical narrowed-down input:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"daysBack"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"states"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"CA"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"NY"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"industries"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"Technology"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"minAmountSold"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1000000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"onlyFirstTimeFilers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"onlyNew"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"monitorId"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"ca-ny-tech-1m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"maxItems"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;onlyFirstTimeFilers&lt;/code&gt; keeps companies filing their first ever Form D, which is a good proxy for an early round. &lt;code&gt;monitorId&lt;/code&gt; gives this saved search its own memory, so it doesn't mix with your other searches.&lt;/p&gt;

&lt;p&gt;Each row looks like this (illustrative values, shortened):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"companyName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Example Robotics Inc."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"state"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"CA"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"totalAmountSold"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;4200000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"dateOfFirstSale"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"2026-09-30"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ceoName"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Jane Example"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"ceoTitle"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Chief Executive Officer"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"isFirstTimeFiler"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"isLikelySPVOrFund"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"website"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://example-robotics.com"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"websiteSource"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"sec"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"filingUrl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"https://www.sec.gov/Archives/edgar/data/..."&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every row links to the original SEC filing, so you can show anyone where the data came from.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Do it from code (optional)
&lt;/h2&gt;



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

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;ApifyClient&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;YOUR_APIFY_TOKEN&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;actor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SureSignal/sec-form-d-funding-leads&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;call&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run_input&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;daysBack&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;industries&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&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;onlyNew&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;monitorId&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;daily-tech&lt;/span&gt;&lt;span class="sh"&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;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dataset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;run&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;defaultDatasetId&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]).&lt;/span&gt;&lt;span class="nf"&gt;iterate_items&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;companyName&lt;/span&gt;&lt;span class="sh"&gt;"&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="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;totalAmountSold&lt;/span&gt;&lt;span class="sh"&gt;"&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="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;ceoName&lt;/span&gt;&lt;span class="sh"&gt;"&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;filingUrl&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;h2&gt;
  
  
  Step 4: Schedule it, and stop paying for the same filing twice
&lt;/h2&gt;

&lt;p&gt;Save the input as a &lt;strong&gt;Task&lt;/strong&gt; and add a &lt;strong&gt;Schedule&lt;/strong&gt; (daily at 7am, or hourly). With &lt;em&gt;Only new since last run&lt;/em&gt; on, each run returns only filings this monitor hasn't delivered before.&lt;/p&gt;

&lt;p&gt;That's the reason the feed is built this way:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Money:&lt;/strong&gt; you're charged once per filing, not every time it shows up in a date window. Filtered-out and already-delivered filings cost nothing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time:&lt;/strong&gt; there's no dedupe step before the list reaches your CRM or sequencer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mental effort:&lt;/strong&gt; the morning list is only what's new, so nothing needs re-checking.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Connect it to Google Sheets, Slack, HubSpot, n8n, Make or Zapier through Apify integrations, or call it from Clay over HTTP.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it costs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;$0.03 per lead delivered&lt;/strong&gt;, plus Apify's small run-start fee. 100 leads cost $3. 1,000 leads cost $30. Set &lt;em&gt;Max leads&lt;/em&gt; or a run spending limit, and a run can't cost more than you intended.&lt;/p&gt;

&lt;h2&gt;
  
  
  Honest limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;US Form D only.&lt;/li&gt;
&lt;li&gt;Form D doesn't state round stage ("Seed", "Series A") or name the investors.&lt;/li&gt;
&lt;li&gt;No email addresses. You get names, titles, the company phone, website and LinkedIn search links.&lt;/li&gt;
&lt;li&gt;Some raises never produce a Form D, or show up late.&lt;/li&gt;
&lt;li&gt;Websites are best effort and come with a confidence field.&lt;/li&gt;
&lt;li&gt;Fund and SPV detection is heuristic. Check &lt;code&gt;spvReasons&lt;/code&gt; if you need to audit it.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;A decision is only as good as the information behind it. Hearing about a raise two weeks after it happened is often the difference between being first in the inbox and being fifth.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;SureSignal builds data feeds on Apify that only charge for new data. Built on public SEC EDGAR data. Not investment advice. Not affiliated with the SEC.&lt;/em&gt;&lt;/p&gt;







&lt;p&gt;&lt;strong&gt;Try it:&lt;/strong&gt; &lt;a href="https://apify.com/SureSignal/sec-form-d-funding-leads" rel="noopener noreferrer"&gt;sec-form-d-funding-leads on the Apify Store&lt;/a&gt;. You only pay for new data: runs on a schedule skip what you've already received.&lt;/p&gt;

</description>
      <category>api</category>
      <category>python</category>
      <category>automation</category>
      <category>datascience</category>
    </item>
  </channel>
</rss>
