<?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: Matt Cepulis</title>
    <description>The latest articles on DEV Community by Matt Cepulis (@mcp35).</description>
    <link>https://dev.to/mcp35</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%2F4194205%2F71b56c15-864d-46c3-8dab-44cec221c9f7.png</url>
      <title>DEV Community: Matt Cepulis</title>
      <link>https://dev.to/mcp35</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mcp35"/>
    <language>en</language>
    <item>
      <title>A 25-line check for botted crypto KOL accounts before you pay them</title>
      <dc:creator>Matt Cepulis</dc:creator>
      <pubDate>Tue, 20 Oct 2026 12:08:27 +0000</pubDate>
      <link>https://dev.to/mcp35/a-25-line-check-for-botted-crypto-kol-accounts-before-you-pay-them-2pae</link>
      <guid>https://dev.to/mcp35/a-25-line-check-for-botted-crypto-kol-accounts-before-you-pay-them-2pae</guid>
      <description>&lt;p&gt;Paying a crypto KOL is mostly a bet on whether their audience is real. Follower counts are easy to fake. Engagement patterns are harder.&lt;/p&gt;

&lt;p&gt;We vet KOLs for a living, so here is the first-pass check we run before anyone looks at a wallet or a rate card. It will not prove an account is clean. It tells you which accounts deserve a closer look.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;kolRedFlags&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;flags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[];&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;engagement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;avgLikes&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;avgReplies&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;avgReposts&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;er&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;engagement&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;followers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;er&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.002&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;engagement under 0.2% of followers&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;avgReplies&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;max&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;avgLikes&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="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.01&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nx"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;almost no replies for the likes&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;growth&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;followers30dAgo&lt;/span&gt;
    &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;followers&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;followers30dAgo&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;followers30dAgo&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;growth&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;0.3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nx"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;followers up more than 30% in 30 days&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;topRepliersShare&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;0.4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nx"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;a handful of accounts write most of the replies&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;k&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;promoPostsShare&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="nx"&gt;flags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;push&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;more than half of recent posts are paid promos&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;engagementRate&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;er&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;flags&lt;/span&gt; &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The thresholds are starting points, not rules. Tune them to the niche: a memecoin caller and a DeFi researcher have very different normal engagement.&lt;/p&gt;

&lt;h2&gt;
  
  
  What each flag catches
&lt;/h2&gt;

&lt;p&gt;Bought followers inflate the denominator, so the engagement rate collapses. Bought likes rarely come with replies. Sudden follower jumps usually mean a purchase or a giveaway. Reply rings show up as the same few handles under every post. And an account that is mostly ads has an audience that has learned to scroll past them.&lt;/p&gt;

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

&lt;p&gt;Wallet behaviour. The most expensive KOL problem is not fake followers. It is a real audience being sold into by the KOL's own wallet. That needs on-chain checks, which we cover in our &lt;a href="https://3betmedia.com/insights/crypto-kol-due-diligence/" rel="noopener noreferrer"&gt;crypto KOL due diligence checklist&lt;/a&gt; and the open &lt;a href="https://mcp350.github.io/crypto-kol-campaign-guide/" rel="noopener noreferrer"&gt;crypto KOL campaign guide&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you are pricing streamers rather than X accounts, the same idea applies to live viewers. We put that maths in a &lt;a href="https://3betmedia.com/tools/streamer-sponsorship-cost-calculator/" rel="noopener noreferrer"&gt;free streamer sponsorship cost calculator&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Feedback on the thresholds is welcome in the comments.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>crypto</category>
      <category>marketing</category>
      <category>analytics</category>
    </item>
    <item>
      <title>The funnel maths behind pricing a streamer sponsorship (and the formula we put in a free calculator)</title>
      <dc:creator>Matt Cepulis</dc:creator>
      <pubDate>Mon, 19 Oct 2026 16:49:23 +0000</pubDate>
      <link>https://dev.to/mcp35/the-funnel-maths-behind-pricing-a-streamer-sponsorship-and-the-formula-we-put-in-a-free-calculator-4g5</link>
      <guid>https://dev.to/mcp35/the-funnel-maths-behind-pricing-a-streamer-sponsorship-and-the-formula-we-put-in-a-free-calculator-4g5</guid>
      <description>&lt;p&gt;Most streamer sponsorship quotes are priced on followers. Followers tell you how many people clicked a button once. They tell you nothing about how many people are watching right now.&lt;/p&gt;

&lt;p&gt;We run creator campaigns for a living, so we needed a way to price a live deal on what actually happens during a stream. We ended up with a small set of formulas and turned them into a &lt;a href="https://3betmedia.com/tools/streamer-sponsorship-cost-calculator/" rel="noopener noreferrer"&gt;free streamer sponsorship cost calculator&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here is the maths, so you can check it or build your own.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inputs
&lt;/h2&gt;

&lt;p&gt;Cost side:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;number of streams&lt;/li&gt;
&lt;li&gt;creator fee per stream&lt;/li&gt;
&lt;li&gt;production and clip editing&lt;/li&gt;
&lt;li&gt;usage rights and exclusivity&lt;/li&gt;
&lt;li&gt;management, tracking and reporting&lt;/li&gt;
&lt;li&gt;optional payment per first purchase (for hybrid deals)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Delivery side:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;average concurrent viewers per stream&lt;/li&gt;
&lt;li&gt;hours live per stream&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Funnel side:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;share of average viewers who click the link per stream&lt;/li&gt;
&lt;li&gt;share of clicks that register&lt;/li&gt;
&lt;li&gt;share of registrations that make a first purchase&lt;/li&gt;
&lt;li&gt;your target cost per first purchase&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The formulas
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;priceDeal&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;fixed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;production&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;rights&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;management&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;clicks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;avgViewers&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;clickRate&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;streams&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;registrations&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;clicks&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;regRate&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;firstPurchases&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;registrations&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;purchaseRate&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;totalCost&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
    &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;streams&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;feePerStream&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;fixed&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;perPurchase&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;firstPurchases&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;viewerHours&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;avgViewers&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;hoursLive&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;streams&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;totalCost&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nx"&gt;viewerHours&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;costPer1kViewerHours&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;totalCost&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;viewerHours&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="na"&gt;costPerClick&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;totalCost&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;clicks&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;costPerRegistration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;totalCost&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;registrations&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="na"&gt;costPerFirstPurchase&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;totalCost&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nx"&gt;firstPurchases&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;// the highest fee per stream that still hits your target&lt;/span&gt;
    &lt;span class="na"&gt;maxFeePerStream&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
      &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;target&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;firstPurchases&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;fixed&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;perPurchase&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;firstPurchases&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;
      &lt;span class="nx"&gt;d&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;streams&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The last line is the useful one. It turns the question around: instead of "is this quote fair?", you ask "what is the most I can pay per stream and still hit my number?"&lt;/p&gt;

&lt;h2&gt;
  
  
  A worked example (made-up numbers)
&lt;/h2&gt;

&lt;p&gt;These inputs are invented to show the mechanics. They are not real rates.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;4 streams at $1,500 each&lt;/li&gt;
&lt;li&gt;$800 production, $400 rights, $600 management&lt;/li&gt;
&lt;li&gt;1,200 average concurrent viewers, 4 hours live&lt;/li&gt;
&lt;li&gt;5% of viewers click, 30% of clicks register, 25% of registrations make a first purchase&lt;/li&gt;
&lt;li&gt;target: $150 per first purchase&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Results:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;total cost: $7,800&lt;/li&gt;
&lt;li&gt;viewer-hours: 19,200, so $406.25 per 1,000 viewer-hours&lt;/li&gt;
&lt;li&gt;240 clicks at $32.50 each&lt;/li&gt;
&lt;li&gt;72 registrations at $108.33 each&lt;/li&gt;
&lt;li&gt;18 first purchases at $433.33 each&lt;/li&gt;
&lt;li&gt;max fee per stream for a $150 target: $225&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the quote is roughly 6.7 times what the funnel can carry. You either negotiate the fee down, improve the funnel (a better offer, a pinned link, a clip programme that keeps working after the stream), or walk away.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why viewer-hours and not followers
&lt;/h2&gt;

&lt;p&gt;Two creators with the same follower count can differ by ten times on concurrent viewers. Concurrent viewers times hours live is the closest thing to a real impression count on a live platform, and it is the number you can verify from public stream stats.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the model leaves out
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Clip reach after the stream. One two-hour stream can hold 20 to 30 usable short clips. If they are cut and posted, the cost per result keeps falling for weeks.&lt;/li&gt;
&lt;li&gt;Brand lift and retention. The model only counts first purchases.&lt;/li&gt;
&lt;li&gt;Variance. Real campaigns are lumpy. Treat the output as a negotiating range, not a forecast.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want the acquisition side in more depth, we wrote up &lt;a href="https://3betmedia.com/insights/casino-creator-customer-acquisition-cost/" rel="noopener noreferrer"&gt;what a casino creator costs per depositing player&lt;/a&gt; and &lt;a href="https://3betmedia.com/insights/igaming-creator-pilot-budget/" rel="noopener noreferrer"&gt;how to size a first creator pilot&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Feedback on the funnel assumptions is welcome in the comments.&lt;/p&gt;

</description>
      <category>marketing</category>
      <category>analytics</category>
      <category>javascript</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
