<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[StackContacts]]></title><description><![CDATA[Join a community of creators turning subscriber data into revenue with AI prompts, research articles, and office hours designed to maximize your StackContacts investment.]]></description><link>https://stackcontacts.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!zuc1!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19cda87b-ab85-4dda-ac35-98d214ec5de6_600x600.png</url><title>StackContacts</title><link>https://stackcontacts.substack.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 01 Jun 2026 23:35:30 GMT</lastBuildDate><atom:link href="https://stackcontacts.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Finn Tropy]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[stackcontacts@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[stackcontacts@substack.com]]></itunes:email><itunes:name><![CDATA[Finn Tropy | StackContacts]]></itunes:name></itunes:owner><itunes:author><![CDATA[Finn Tropy | StackContacts]]></itunes:author><googleplay:owner><![CDATA[stackcontacts@substack.com]]></googleplay:owner><googleplay:email><![CDATA[stackcontacts@substack.com]]></googleplay:email><googleplay:author><![CDATA[Finn Tropy | StackContacts]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How to Turn Substack Notifications Into Growth Signals (Without Burning Out)]]></title><description><![CDATA[A practical event-based system to triage what matters, ignore what doesn&#8217;t, and automate follow-up with guardrails.]]></description><link>https://stackcontacts.substack.com/p/how-to-turn-substack-notifications</link><guid isPermaLink="false">https://stackcontacts.substack.com/p/how-to-turn-substack-notifications</guid><dc:creator><![CDATA[Finn Tropy | StackContacts]]></dc:creator><pubDate>Fri, 08 May 2026 12:03:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!WR6A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c1adbb-faf2-45dc-abc3-271b881cd4f7_1672x941.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WR6A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c1adbb-faf2-45dc-abc3-271b881cd4f7_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WR6A!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c1adbb-faf2-45dc-abc3-271b881cd4f7_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!WR6A!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c1adbb-faf2-45dc-abc3-271b881cd4f7_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!WR6A!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c1adbb-faf2-45dc-abc3-271b881cd4f7_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!WR6A!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c1adbb-faf2-45dc-abc3-271b881cd4f7_1672x941.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WR6A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c1adbb-faf2-45dc-abc3-271b881cd4f7_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/01c1adbb-faf2-45dc-abc3-271b881cd4f7_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2023343,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/196785185?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c1adbb-faf2-45dc-abc3-271b881cd4f7_1672x941.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WR6A!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c1adbb-faf2-45dc-abc3-271b881cd4f7_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!WR6A!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c1adbb-faf2-45dc-abc3-271b881cd4f7_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!WR6A!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c1adbb-faf2-45dc-abc3-271b881cd4f7_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!WR6A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F01c1adbb-faf2-45dc-abc3-271b881cd4f7_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">From notification chaos to creator control: the same signal stream, but filtered through rules that protect your focus and grow your business</figcaption></figure></div><blockquote><p><strong>TL;DR:</strong>  <em>Substack notifications burn creators out when treated as endless pings to react to, but they become useful when treated as an event stream with automated rules. Classify notification events by your goal (conversation, signal, intent, risk), run a simple workflow (Event &#8594;Triage&#8594;Action), and process events in short windows instead of constant checking. With guardrails like dry run, caps, cooldowns, and preview-before-send, you can turn the right notifications into relationships and revenue without becoming a spammer or burning out.</em></p></blockquote><p>42 notifications feels exciting. 420 notifications feels like drowning. <br>Same bell icon. Two different outcomes.</p><p>If you feel overloaded by Substack notifications, you&#8217;re not broken.<br>Your tools are.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">StackContacts is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>If you run a publication, you know this feeling: you want to respond, welcome, and follow up.</p><p>But doing it one-by-one in chat does not scale. And spray-and-pray automation is exactly what your readers did not sign up for.</p><p>So you get stuck between: &#8220;I should reach out&#8221; and &#8220;I don&#8217;t have a clean way to do it.&#8221;</p><p>Most creators are taught to <em>react</em> to notifications.</p><p>Click. Scroll. Reply when you can. Forget what mattered.</p><p>That is not a workflow. That&#8217;s a stress loop.</p><p>The reframe is simple:<br><strong>Notifications are not a to-do list. They are an event stream.<br></strong>And event streams need rules.</p><h2>Why the bell &#128276; hijacks you</h2><p>Platforms are built to pull you back in. That part is not a conspiracy. It&#8217;s the business model.</p><p>Notifications and visible counts trigger variable rewards, social validation, and compulsive checking.</p><p>Useful for platform engagement.<br>Terrible for creator focus when unmanaged.</p><p>You don&#8217;t burn out from writing.<br>You burn out from fragmented attention and constant micro-decisions.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WVqJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43bacc2-670d-4319-8853-c2c0c3157823_997x1577.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WVqJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43bacc2-670d-4319-8853-c2c0c3157823_997x1577.png 424w, https://substackcdn.com/image/fetch/$s_!WVqJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43bacc2-670d-4319-8853-c2c0c3157823_997x1577.png 848w, https://substackcdn.com/image/fetch/$s_!WVqJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43bacc2-670d-4319-8853-c2c0c3157823_997x1577.png 1272w, https://substackcdn.com/image/fetch/$s_!WVqJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43bacc2-670d-4319-8853-c2c0c3157823_997x1577.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WVqJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43bacc2-670d-4319-8853-c2c0c3157823_997x1577.png" width="997" height="1577" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b43bacc2-670d-4319-8853-c2c0c3157823_997x1577.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1577,&quot;width&quot;:997,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2530689,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/196785185?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43bacc2-670d-4319-8853-c2c0c3157823_997x1577.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WVqJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43bacc2-670d-4319-8853-c2c0c3157823_997x1577.png 424w, https://substackcdn.com/image/fetch/$s_!WVqJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43bacc2-670d-4319-8853-c2c0c3157823_997x1577.png 848w, https://substackcdn.com/image/fetch/$s_!WVqJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43bacc2-670d-4319-8853-c2c0c3157823_997x1577.png 1272w, https://substackcdn.com/image/fetch/$s_!WVqJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb43bacc2-670d-4319-8853-c2c0c3157823_997x1577.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Reframe: not all notifications are equal</h2><p>Your bell mixes very different signals. Treating all of them as urgent is the fastest route to exhaustion.</p><p>I use four event buckets:</p><ul><li><p><strong>Conversation events:</strong> comments, replies, DMs</p></li><li><p><strong>Signal events:</strong> likes, restacks, follows</p></li><li><p><strong>Intent events:</strong> subscribe, paid conversion, high-value clicks</p></li><li><p><strong>Risk events:</strong> negative replies, churn hints, missed response windows</p></li></ul><p>Now each event has a job.</p><blockquote><p><em>Conversation builds relationships.<br>Signal expands reach.<br>Intent drives revenue.<br>Risk protects retention.</em></p></blockquote><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_F5v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3584a321-d018-4c85-818a-4f90c77646cc_1024x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_F5v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3584a321-d018-4c85-818a-4f90c77646cc_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!_F5v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3584a321-d018-4c85-818a-4f90c77646cc_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!_F5v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3584a321-d018-4c85-818a-4f90c77646cc_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!_F5v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3584a321-d018-4c85-818a-4f90c77646cc_1024x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_F5v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3584a321-d018-4c85-818a-4f90c77646cc_1024x1536.png" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3584a321-d018-4c85-818a-4f90c77646cc_1024x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2092195,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/196785185?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3584a321-d018-4c85-818a-4f90c77646cc_1024x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_F5v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3584a321-d018-4c85-818a-4f90c77646cc_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!_F5v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3584a321-d018-4c85-818a-4f90c77646cc_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!_F5v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3584a321-d018-4c85-818a-4f90c77646cc_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!_F5v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3584a321-d018-4c85-818a-4f90c77646cc_1024x1536.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>The magic in between is rules</h2><p>In my notes I wrote last week: </p><p><strong>Notification Event -&gt; Magic -&gt; Take some action</strong></p><p>Here is what &#8220;magic&#8221; actually means:</p><ul><li><p>If <strong>high-intent event</strong> (reply + recent subscribe), send personal follow-up.</p></li><li><p>If <strong>low-intent/high-volume event</strong> (likes only), batch-review once daily.</p></li><li><p>If <strong>repeated engagement</strong> from the same person, move to contact workflow.</p></li><li><p>If <strong>noise</strong>, mute that notification type.</p></li></ul><p>That&#8217;s it.</p><p>No hustle theater. Just pre-decided rules that reduce decision fatigue.</p><h2>What I implemented in StackContacts Connect</h2><p>I didn&#8217;t want another motivational framework. I wanted infrastructure.</p><p>So I built this into <strong><a href="https://finntropy.gumroad.com/l/stackcontacts_connect">StackContacts Connect</a></strong> as event-based auto-DM (available from version 0.3.1 onwards). </p><p>In the <strong>Responses</strong> tab, one event type maps to one response.<br>You pick plain-language categories and events. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!osKF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfc004f-df9f-4969-8128-382aba486411_601x601.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!osKF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfc004f-df9f-4969-8128-382aba486411_601x601.png 424w, https://substackcdn.com/image/fetch/$s_!osKF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfc004f-df9f-4969-8128-382aba486411_601x601.png 848w, https://substackcdn.com/image/fetch/$s_!osKF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfc004f-df9f-4969-8128-382aba486411_601x601.png 1272w, https://substackcdn.com/image/fetch/$s_!osKF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfc004f-df9f-4969-8128-382aba486411_601x601.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!osKF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfc004f-df9f-4969-8128-382aba486411_601x601.png" width="601" height="601" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bcfc004f-df9f-4969-8128-382aba486411_601x601.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:601,&quot;width&quot;:601,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:56930,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/196785185?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfc004f-df9f-4969-8128-382aba486411_601x601.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!osKF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfc004f-df9f-4969-8128-382aba486411_601x601.png 424w, https://substackcdn.com/image/fetch/$s_!osKF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfc004f-df9f-4969-8128-382aba486411_601x601.png 848w, https://substackcdn.com/image/fetch/$s_!osKF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfc004f-df9f-4969-8128-382aba486411_601x601.png 1272w, https://substackcdn.com/image/fetch/$s_!osKF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbcfc004f-df9f-4969-8128-382aba486411_601x601.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">StackContacts Responses</figcaption></figure></div><p>It keeps creators in operator mode instead of forcing them to think in backend event names.</p><p>Then you can add optional rules:</p><ul><li><p>age in minutes (how recent is this event?)  </p></li><li><p>sender count (Substack sends likes from multiple people in one event) </p></li><li><p>actor handle (Substack @ username from the profile)</p></li><li><p>can-DM flag (some users have disabled DMs) </p></li><li><p>specific item key (Note ID or Post ID - see example below) </p></li></ul><p>Before anything runs, you can preview behavior.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!a5bW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49544e6d-3c3a-4a25-ae73-9f70a7d04334_601x601.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!a5bW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49544e6d-3c3a-4a25-ae73-9f70a7d04334_601x601.png 424w, https://substackcdn.com/image/fetch/$s_!a5bW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49544e6d-3c3a-4a25-ae73-9f70a7d04334_601x601.png 848w, https://substackcdn.com/image/fetch/$s_!a5bW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49544e6d-3c3a-4a25-ae73-9f70a7d04334_601x601.png 1272w, https://substackcdn.com/image/fetch/$s_!a5bW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49544e6d-3c3a-4a25-ae73-9f70a7d04334_601x601.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!a5bW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49544e6d-3c3a-4a25-ae73-9f70a7d04334_601x601.png" width="601" height="601" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/49544e6d-3c3a-4a25-ae73-9f70a7d04334_601x601.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:601,&quot;width&quot;:601,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:65715,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/196785185?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49544e6d-3c3a-4a25-ae73-9f70a7d04334_601x601.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!a5bW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49544e6d-3c3a-4a25-ae73-9f70a7d04334_601x601.png 424w, https://substackcdn.com/image/fetch/$s_!a5bW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49544e6d-3c3a-4a25-ae73-9f70a7d04334_601x601.png 848w, https://substackcdn.com/image/fetch/$s_!a5bW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49544e6d-3c3a-4a25-ae73-9f70a7d04334_601x601.png 1272w, https://substackcdn.com/image/fetch/$s_!a5bW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F49544e6d-3c3a-4a25-ae73-9f70a7d04334_601x601.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Ready to run preview to validate response</figcaption></figure></div><p></p><p>Preview-before-save sounds small. It matters. It turns &#8220;I hope this works&#8221; into &#8220;I can verify this first.&#8221;<br><br>Here is an preview example from my other Substack account:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4SBf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b92a4cf-1f1d-4b7c-b545-a016ab5cb048_601x601.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4SBf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b92a4cf-1f1d-4b7c-b545-a016ab5cb048_601x601.png 424w, https://substackcdn.com/image/fetch/$s_!4SBf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b92a4cf-1f1d-4b7c-b545-a016ab5cb048_601x601.png 848w, https://substackcdn.com/image/fetch/$s_!4SBf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b92a4cf-1f1d-4b7c-b545-a016ab5cb048_601x601.png 1272w, https://substackcdn.com/image/fetch/$s_!4SBf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b92a4cf-1f1d-4b7c-b545-a016ab5cb048_601x601.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4SBf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b92a4cf-1f1d-4b7c-b545-a016ab5cb048_601x601.png" width="601" height="601" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b92a4cf-1f1d-4b7c-b545-a016ab5cb048_601x601.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:601,&quot;width&quot;:601,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:60429,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/196785185?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b92a4cf-1f1d-4b7c-b545-a016ab5cb048_601x601.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4SBf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b92a4cf-1f1d-4b7c-b545-a016ab5cb048_601x601.png 424w, https://substackcdn.com/image/fetch/$s_!4SBf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b92a4cf-1f1d-4b7c-b545-a016ab5cb048_601x601.png 848w, https://substackcdn.com/image/fetch/$s_!4SBf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b92a4cf-1f1d-4b7c-b545-a016ab5cb048_601x601.png 1272w, https://substackcdn.com/image/fetch/$s_!4SBf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b92a4cf-1f1d-4b7c-b545-a016ab5cb048_601x601.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Does this response match your goals? </figcaption></figure></div><p><br>Global safety controls sit in Settings:</p><ul><li><p>dry run</p></li><li><p>live-send opt-in</p></li><li><p>poll interval (how often activity feed is checked?) </p></li><li><p>feed fetch limit (max 12 events per poll)</p></li><li><p>max DMs per poll (prevent &#8220;bot&#8221; like behavior) </p></li><li><p>engagement cooldown (recommend 14 days between DMs to prevent spam like behavior) </p><p></p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AV7N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cb4a289-4045-4077-8444-ea1d8582b822_636x701.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AV7N!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cb4a289-4045-4077-8444-ea1d8582b822_636x701.png 424w, https://substackcdn.com/image/fetch/$s_!AV7N!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cb4a289-4045-4077-8444-ea1d8582b822_636x701.png 848w, https://substackcdn.com/image/fetch/$s_!AV7N!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cb4a289-4045-4077-8444-ea1d8582b822_636x701.png 1272w, https://substackcdn.com/image/fetch/$s_!AV7N!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cb4a289-4045-4077-8444-ea1d8582b822_636x701.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AV7N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cb4a289-4045-4077-8444-ea1d8582b822_636x701.png" width="636" height="701" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5cb4a289-4045-4077-8444-ea1d8582b822_636x701.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:701,&quot;width&quot;:636,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:108391,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/196785185?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cb4a289-4045-4077-8444-ea1d8582b822_636x701.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AV7N!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cb4a289-4045-4077-8444-ea1d8582b822_636x701.png 424w, https://substackcdn.com/image/fetch/$s_!AV7N!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cb4a289-4045-4077-8444-ea1d8582b822_636x701.png 848w, https://substackcdn.com/image/fetch/$s_!AV7N!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cb4a289-4045-4077-8444-ea1d8582b822_636x701.png 1272w, https://substackcdn.com/image/fetch/$s_!AV7N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5cb4a289-4045-4077-8444-ea1d8582b822_636x701.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Global Controls in Settings</figcaption></figure></div><p>I also added dedupe, cooldown logic, and an activity log. So you can see what happened and audit it. </p><p>Activity log tab provides clickable links to the DM chat thread so that you can continue to DM conversation with one click. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cncM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c9d34-3af2-4cae-8641-f7d8e448d303_592x604.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cncM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c9d34-3af2-4cae-8641-f7d8e448d303_592x604.png 424w, https://substackcdn.com/image/fetch/$s_!cncM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c9d34-3af2-4cae-8641-f7d8e448d303_592x604.png 848w, https://substackcdn.com/image/fetch/$s_!cncM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c9d34-3af2-4cae-8641-f7d8e448d303_592x604.png 1272w, https://substackcdn.com/image/fetch/$s_!cncM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c9d34-3af2-4cae-8641-f7d8e448d303_592x604.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cncM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c9d34-3af2-4cae-8641-f7d8e448d303_592x604.png" width="592" height="604" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f94c9d34-3af2-4cae-8641-f7d8e448d303_592x604.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:604,&quot;width&quot;:592,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:78880,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/196785185?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c9d34-3af2-4cae-8641-f7d8e448d303_592x604.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cncM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c9d34-3af2-4cae-8641-f7d8e448d303_592x604.png 424w, https://substackcdn.com/image/fetch/$s_!cncM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c9d34-3af2-4cae-8641-f7d8e448d303_592x604.png 848w, https://substackcdn.com/image/fetch/$s_!cncM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c9d34-3af2-4cae-8641-f7d8e448d303_592x604.png 1272w, https://substackcdn.com/image/fetch/$s_!cncM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff94c9d34-3af2-4cae-8641-f7d8e448d303_592x604.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Activity Log with clickable DM thread links</figcaption></figure></div><h2>Starter playbook (do this this week)</h2><p>If you want less burnout and more useful conversations, run this for 7 days:</p><ol><li><p><strong>Audit</strong> your notification categories and turn off low-value alerts. (You can do this in https://yourpublication.substack.com/publish/settings#notifications)</p></li><li><p><strong>Define</strong> three tiers: Immediate, Same Day, Batch.</p></li><li><p><strong>Attach</strong> one action to each tier (reply, DM, tag, ignore).</p></li><li><p><strong>Process</strong> notifications in two short windows per day.</p></li><li><p><strong>Track</strong> one business metric weekly (conversations started or subscribers converted).</p></li><li><p><strong>Pilot</strong> one automation in dry run for 7 days before live sends.</p></li></ol><p>This is the difference between feeling busy and running a system. <br>And yes, this still maps to outcomes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VXjY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F610510b1-b548-4be8-99cf-ed72d20a57aa_1581x1003.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VXjY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F610510b1-b548-4be8-99cf-ed72d20a57aa_1581x1003.png 424w, https://substackcdn.com/image/fetch/$s_!VXjY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F610510b1-b548-4be8-99cf-ed72d20a57aa_1581x1003.png 848w, https://substackcdn.com/image/fetch/$s_!VXjY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F610510b1-b548-4be8-99cf-ed72d20a57aa_1581x1003.png 1272w, https://substackcdn.com/image/fetch/$s_!VXjY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F610510b1-b548-4be8-99cf-ed72d20a57aa_1581x1003.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VXjY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F610510b1-b548-4be8-99cf-ed72d20a57aa_1581x1003.png" width="1456" height="924" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/610510b1-b548-4be8-99cf-ed72d20a57aa_1581x1003.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:924,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:290082,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/196785185?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F610510b1-b548-4be8-99cf-ed72d20a57aa_1581x1003.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!VXjY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F610510b1-b548-4be8-99cf-ed72d20a57aa_1581x1003.png 424w, https://substackcdn.com/image/fetch/$s_!VXjY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F610510b1-b548-4be8-99cf-ed72d20a57aa_1581x1003.png 848w, https://substackcdn.com/image/fetch/$s_!VXjY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F610510b1-b548-4be8-99cf-ed72d20a57aa_1581x1003.png 1272w, https://substackcdn.com/image/fetch/$s_!VXjY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F610510b1-b548-4be8-99cf-ed72d20a57aa_1581x1003.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">How to turn off low value notification in Substack Settings / Notifications</figcaption></figure></div><p><br>In my <a href="https://stackcontacts.substack.com/p/how-to-say-hi-to-your-new-substack">earlier DM tests</a>, I saw <em><strong>up to 53% DM response rate in the first four hours, while post-comment response rate sat around 2.8%.</strong></em></p><p>Same creator. Same audience. Different channel design.</p><h2>Guardrails that keep this humane</h2><p>Automation is where creators get nervous.</p><p>Good. You should be careful.</p><p>The right automation respects people and protects your reputation:</p><ul><li><p>Live sending is explicit opt-in.</p></li><li><p>Dry run is available for testing.</p></li><li><p>&#8220;Only empty thread&#8221; avoids awkward repeat intros.</p></li><li><p>Max DMs per poll and cooldowns prevent spammy behavior.</p></li><li><p>Manual sends and background responses stay separate.</p></li></ul><p>This is not &#8220;<em><strong>DM everyone.&#8221;</strong></em><br>It&#8217;s <em><strong>&#8220;respond consistently to meaningful events.&#8221;</strong></em></p><p>Good software should make the right behavior easier:</p><ul><li><p>message your own subscribers or engaged readers</p></li><li><p>send with pacing and caps</p></li><li><p>keep a human in the loop</p></li><li><p>avoid unattended blast behavior</p></li></ul><p>Chart: Daily Notification Ops Loop &#8212; Morning triage, Afternoon batch, Weekly review</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wyam!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33fe5818-5159-4e17-a1c4-5470eb648f32_1086x1448.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wyam!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33fe5818-5159-4e17-a1c4-5470eb648f32_1086x1448.png 424w, https://substackcdn.com/image/fetch/$s_!wyam!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33fe5818-5159-4e17-a1c4-5470eb648f32_1086x1448.png 848w, https://substackcdn.com/image/fetch/$s_!wyam!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33fe5818-5159-4e17-a1c4-5470eb648f32_1086x1448.png 1272w, https://substackcdn.com/image/fetch/$s_!wyam!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33fe5818-5159-4e17-a1c4-5470eb648f32_1086x1448.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wyam!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33fe5818-5159-4e17-a1c4-5470eb648f32_1086x1448.png" width="1086" height="1448" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/33fe5818-5159-4e17-a1c4-5470eb648f32_1086x1448.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1448,&quot;width&quot;:1086,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2086939,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/196785185?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33fe5818-5159-4e17-a1c4-5470eb648f32_1086x1448.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wyam!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33fe5818-5159-4e17-a1c4-5470eb648f32_1086x1448.png 424w, https://substackcdn.com/image/fetch/$s_!wyam!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33fe5818-5159-4e17-a1c4-5470eb648f32_1086x1448.png 848w, https://substackcdn.com/image/fetch/$s_!wyam!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33fe5818-5159-4e17-a1c4-5470eb648f32_1086x1448.png 1272w, https://substackcdn.com/image/fetch/$s_!wyam!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33fe5818-5159-4e17-a1c4-5470eb648f32_1086x1448.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Daily Notification Ops Loop </figcaption></figure></div><h2>The real goal</h2><p>The goal is not to clear every notification.</p><blockquote><p><em>Notifications as <strong>dopamine</strong> creates creator <strong>exhaustion</strong>.<br>Notifications as <strong>infrastructure</strong> creates creator <strong>leverage</strong>.</em></p></blockquote><p>The goal is to convert the right signals into relationships and revenue without burning yourself out.</p><p>Try the 3-tier system for one week.</p><p>If you want, reply and I&#8217;ll share the exact rules I use in my Responses.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/p/how-to-turn-substack-notifications/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://stackcontacts.substack.com/p/how-to-turn-substack-notifications/comments"><span>Leave a comment</span></a></p><p>&#8212; Finn </p><h3><br>Further Reading</h3><p></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;8341c85a-4550-4e8c-9918-b704a5291d05&quot;,&quot;caption&quot;:&quot;This one&#8217;s for anyone who runs a newsletter on Substack. If that&#8217;s not you, no worries&#8212;see you next time.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How to Say Hi to Your New Substack Subscribers - Without the Grind or the Spam&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:74172100,&quot;name&quot;:&quot;Finn Tropy | StackContacts&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f06b6fc9-331f-427c-9248-ef0d555ad864_1024x1024.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:121030277,&quot;name&quot;:&quot;Finn Tropy&quot;,&quot;bio&quot;:&quot;I study creator growth the way engineers study systems&#8212;with experiments, dashboards, and curiosity. I build tools, test ideas on myself, and share what truly moves the needle for busy Substack creators. My tools store is https://finntropy.gumroad.com&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CrQZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24c22723-7e0c-4b43-b59d-1334e23f842f_1024x1024.png&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://finntropy.substack.com/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://finntropy.substack.com&quot;,&quot;primaryPublicationName&quot;:&quot;Finn'sights&quot;,&quot;primaryPublicationId&quot;:2636565}],&quot;post_date&quot;:&quot;2026-02-16T13:03:32.980Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!sMjf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e75973-8459-48f1-9883-0192232f1ca4_1200x1204.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://stackcontacts.substack.com/p/how-to-say-hi-to-your-new-substack&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:188042092,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:72,&quot;comment_count&quot;:19,&quot;publication_id&quot;:7276445,&quot;publication_name&quot;:&quot;StackContacts&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!zuc1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19cda87b-ab85-4dda-ac35-98d214ec5de6_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;964657ad-11ee-427f-9490-94b0f0c1cc49&quot;,&quot;caption&quot;:&quot;What is StackContacts Connect?&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;StackContacts Connect - User Manual&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:74172100,&quot;name&quot;:&quot;Finn Tropy | StackContacts&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f06b6fc9-331f-427c-9248-ef0d555ad864_1024x1024.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-03-02T13:30:55.735Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Y4aS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c2e640-07bd-430a-85c7-9d08aedd6717_1200x1204.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://stackcontacts.substack.com/p/stackcontacts-connect-user-manual&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:189561530,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:6,&quot;comment_count&quot;:4,&quot;publication_id&quot;:7276445,&quot;publication_name&quot;:&quot;StackContacts&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!zuc1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19cda87b-ab85-4dda-ac35-98d214ec5de6_600x600.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p></p><p>And this one: </p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:188761443,&quot;url&quot;:&quot;https://finntropy.substack.com/p/your-best-subscribers-arent-in-your&quot;,&quot;publication_id&quot;:2636565,&quot;publication_name&quot;:&quot;Finn'sights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!f1X7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F428bef97-e2b5-4627-84e9-b759a9683982_942x942.png&quot;,&quot;title&quot;:&quot;Your Best Subscribers Aren't in Your Inbox&#8212;They're in Chat&quot;,&quot;truncated_body_text&quot;:&quot;Nearly 2 in 5 new subscribers respond to my welcome DM. Industry benchmarks for outreach are 5&#8211;15%&#8212;so that number isn&#8217;t a fluke, and you can use it.&quot;,&quot;date&quot;:&quot;2026-02-22T13:01:16.811Z&quot;,&quot;like_count&quot;:34,&quot;comment_count&quot;:11,&quot;bylines&quot;:[{&quot;id&quot;:121030277,&quot;name&quot;:&quot;Finn Tropy&quot;,&quot;handle&quot;:&quot;finntropy&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CrQZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24c22723-7e0c-4b43-b59d-1334e23f842f_1024x1024.png&quot;,&quot;bio&quot;:&quot;I study creator growth the way engineers study systems&#8212;with experiments, dashboards, and curiosity. I build tools, test ideas on myself, and share what truly moves the needle for busy Substack creators. My tools store is https://finntropy.gumroad.com&quot;,&quot;profile_set_up_at&quot;:&quot;2024-05-19T18:50:58.930Z&quot;,&quot;reader_installed_at&quot;:&quot;2024-08-13T23:38:47.446Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:2672674,&quot;user_id&quot;:121030277,&quot;publication_id&quot;:2636565,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:2636565,&quot;name&quot;:&quot;Finn'sights&quot;,&quot;subdomain&quot;:&quot;finntropy&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Weekly insights, tips, and tools to help you grow as a writer and learn from the best.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/428bef97-e2b5-4627-84e9-b759a9683982_942x942.png&quot;,&quot;author_id&quot;:121030277,&quot;primary_user_id&quot;:121030277,&quot;theme_var_background_pop&quot;:&quot;#6B26FF&quot;,&quot;created_at&quot;:&quot;2024-05-19T18:51:30.000Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Finn Tropy&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;magaziney&quot;,&quot;is_personal_mode&quot;:false,&quot;logo_url_wide&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3101fda9-9dbc-4a0c-9a81-608ec3c14edc_1344x256.png&quot;}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:1,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;subscriber&quot;,&quot;tier&quot;:1,&quot;accent_colors&quot;:null},&quot;paidPublicationIds&quot;:[5597038,2223648,2626440],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://finntropy.substack.com/p/your-best-subscribers-arent-in-your?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!f1X7!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F428bef97-e2b5-4627-84e9-b759a9683982_942x942.png" loading="lazy"><span class="embedded-post-publication-name">Finn'sights</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Your Best Subscribers Aren't in Your Inbox&#8212;They're in Chat</div></div><div class="embedded-post-body">Nearly 2 in 5 new subscribers respond to my welcome DM. Industry benchmarks for outreach are 5&#8211;15%&#8212;so that number isn&#8217;t a fluke, and you can use it&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">3 months ago &#183; 34 likes &#183; 11 comments &#183; Finn Tropy</div></a></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">StackContacts is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Why Paying $60/Month for AI Tools Is a Trap (And What to Use Instead)]]></title><description><![CDATA[Big AI is selling you subscriptions. You don&#8217;t have to buy them to create and publish.]]></description><link>https://stackcontacts.substack.com/p/why-paying-60month-for-ai-tools-is</link><guid isPermaLink="false">https://stackcontacts.substack.com/p/why-paying-60month-for-ai-tools-is</guid><dc:creator><![CDATA[Finn Tropy | StackContacts]]></dc:creator><pubDate>Sat, 25 Apr 2026 12:02:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KRG-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18037b1-0e98-464b-8806-53fc5e25efc0_1717x916.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KRG-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18037b1-0e98-464b-8806-53fc5e25efc0_1717x916.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KRG-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18037b1-0e98-464b-8806-53fc5e25efc0_1717x916.png 424w, https://substackcdn.com/image/fetch/$s_!KRG-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18037b1-0e98-464b-8806-53fc5e25efc0_1717x916.png 848w, https://substackcdn.com/image/fetch/$s_!KRG-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18037b1-0e98-464b-8806-53fc5e25efc0_1717x916.png 1272w, https://substackcdn.com/image/fetch/$s_!KRG-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18037b1-0e98-464b-8806-53fc5e25efc0_1717x916.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KRG-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18037b1-0e98-464b-8806-53fc5e25efc0_1717x916.png" width="1456" height="777" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e18037b1-0e98-464b-8806-53fc5e25efc0_1717x916.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:777,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1903349,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/195371423?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18037b1-0e98-464b-8806-53fc5e25efc0_1717x916.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KRG-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18037b1-0e98-464b-8806-53fc5e25efc0_1717x916.png 424w, https://substackcdn.com/image/fetch/$s_!KRG-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18037b1-0e98-464b-8806-53fc5e25efc0_1717x916.png 848w, https://substackcdn.com/image/fetch/$s_!KRG-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18037b1-0e98-464b-8806-53fc5e25efc0_1717x916.png 1272w, https://substackcdn.com/image/fetch/$s_!KRG-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe18037b1-0e98-464b-8806-53fc5e25efc0_1717x916.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><strong>Pi + Ollama + Qwen: a newsletter stack that stops the subscription tax.</strong></figcaption></figure></div><p>I was spending $60/month on AI tools for a newsletter with 47 subscribers, mostly to draft Notes. The tools worked; the monthly line item didn&#8217;t - at that scale, it never felt in proportion to where I was.</p><p>I kept renewing in part because cancelling the AI tool felt like downgrading the project, not because the line item made sense for a list that small.</p><p>Here&#8217;s the reality: if you&#8217;re on a tight budget&#8212;student loans, fixed income, retirement cash flow&#8212;you still deserve tools that work for you. You don&#8217;t need a bigger budget to start. You need a setup that doesn&#8217;t punish you for being early.</p><p>A local AI stack can give you a private place to think, draft, and iterate without another monthly bill.</p><h2>It&#8217;s Not You - It&#8217;s AI Economics</h2><p>The Big AI business model is built to keep selling bigger subscriptions. Massive infrastructure investments has to be justified with ever growing recurring revenue.</p><p>But early-stage creative work is different. You can run capable open-source models locally. For most newsletter-building work, your ideas, taste, and prompt discipline usually matter more than whether you&#8217;re on the latest frontier model.</p><p>Last March I moved the work to local models for a few weeks to see if they were actually good enough for the way I write&#8212;not just in a one-off test.</p><p>The barrier isn&#8217;t access to AI. It&#8217;s the permission to build before you&#8217;re profitable&#8212;and the willingness to separate <em><strong>signal</strong></em> (your thinking) from <em><strong>distribution</strong></em> (who gets paid every month).</p><h2>The Cost Bleed (And How I Stopped It)</h2><p><em>Recurring AI tool bills behave like <strong>rent.</strong> <br>Early creator revenue behaves like <strong>weather.</strong></em> </p><p>Even when revenue is &#8220;fine,&#8221; a fixed $60/month expense line item can still feel irrationally high at small scale.</p><p>Here&#8217;s what my numbers looked like:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CG2S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f5fd67-24ee-499d-acde-e75557cf7701_1326x376.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CG2S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f5fd67-24ee-499d-acde-e75557cf7701_1326x376.png 424w, https://substackcdn.com/image/fetch/$s_!CG2S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f5fd67-24ee-499d-acde-e75557cf7701_1326x376.png 848w, https://substackcdn.com/image/fetch/$s_!CG2S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f5fd67-24ee-499d-acde-e75557cf7701_1326x376.png 1272w, https://substackcdn.com/image/fetch/$s_!CG2S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f5fd67-24ee-499d-acde-e75557cf7701_1326x376.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CG2S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f5fd67-24ee-499d-acde-e75557cf7701_1326x376.png" width="1326" height="376" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e3f5fd67-24ee-499d-acde-e75557cf7701_1326x376.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:376,&quot;width&quot;:1326,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:50454,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/195371423?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f5fd67-24ee-499d-acde-e75557cf7701_1326x376.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CG2S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f5fd67-24ee-499d-acde-e75557cf7701_1326x376.png 424w, https://substackcdn.com/image/fetch/$s_!CG2S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f5fd67-24ee-499d-acde-e75557cf7701_1326x376.png 848w, https://substackcdn.com/image/fetch/$s_!CG2S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f5fd67-24ee-499d-acde-e75557cf7701_1326x376.png 1272w, https://substackcdn.com/image/fetch/$s_!CG2S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3f5fd67-24ee-499d-acde-e75557cf7701_1326x376.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">How to scale newsletter and AI tools revenue</figcaption></figure></div><p>I switched using Cursor Pro+ AI tools to a zero-cost local AI combo. The Notes drafts from the local model felt more aligned with my voice than the generic output I was getting from paid models.</p><p>Setup took about 2 hours the first time. After that, it was frictionless.</p><p>My Gumroad revenue dipped slightly in Month 2 ($286 &#8594; $243 for the <a href="https://finntropy.gumroad.com/">new AI Tools</a>). <br>But cashflow improved because the recurring AI bill went to $0: <br><br><strong>$286 &#8722; $60 = $226 &#8220;after tools&#8221; in Month 1</strong> <br><strong>$243 &#8722; $0 = $243 in Month 2</strong> <br><br>while I shipped <strong>54% more Notes</strong> (66 &#8594; 102) and while my subscribers grew from 75 to 89. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MVQu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5bf202e-0689-4a87-9a92-73c304ada9f8_2728x1716.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MVQu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5bf202e-0689-4a87-9a92-73c304ada9f8_2728x1716.png 424w, https://substackcdn.com/image/fetch/$s_!MVQu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5bf202e-0689-4a87-9a92-73c304ada9f8_2728x1716.png 848w, https://substackcdn.com/image/fetch/$s_!MVQu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5bf202e-0689-4a87-9a92-73c304ada9f8_2728x1716.png 1272w, https://substackcdn.com/image/fetch/$s_!MVQu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5bf202e-0689-4a87-9a92-73c304ada9f8_2728x1716.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MVQu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5bf202e-0689-4a87-9a92-73c304ada9f8_2728x1716.png" width="1456" height="916" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b5bf202e-0689-4a87-9a92-73c304ada9f8_2728x1716.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:916,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:825511,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/195371423?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5bf202e-0689-4a87-9a92-73c304ada9f8_2728x1716.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MVQu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5bf202e-0689-4a87-9a92-73c304ada9f8_2728x1716.png 424w, https://substackcdn.com/image/fetch/$s_!MVQu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5bf202e-0689-4a87-9a92-73c304ada9f8_2728x1716.png 848w, https://substackcdn.com/image/fetch/$s_!MVQu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5bf202e-0689-4a87-9a92-73c304ada9f8_2728x1716.png 1272w, https://substackcdn.com/image/fetch/$s_!MVQu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5bf202e-0689-4a87-9a92-73c304ada9f8_2728x1716.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Subscriber growth last 90 days</figcaption></figure></div><p>That&#8217;s the point: fewer dollars leaking out every month, even when top-line revenue wobbles.</p><h2>The Zero Cost Tech Stack: Pi.dev + Ollama + Qwen3.5:27b</h2><p>Let&#8217;s get practical. This is the exact setup I&#8217;m running.</p><h3>System Requirements</h3><p>What you need for <strong>this</strong> article&#8217;s default commands (qwen3.5:27b model) </p><p>- <strong>Operating System:</strong> Ollama and Pi support <strong>macOS, Windows, and Linux</strong>. I run the walkthrough on <strong>macOS (Apple Silicon)</strong>; on Windows or Linux, the flow is the same, with different install/terminal details.</p><p>- <strong>RAM:</strong> For <strong>27B </strong>model, plan on <strong>~32GB system RAM</strong> (model weight plus headroom for the OS and apps). On 1<strong>6GB or less</strong>, use a <strong>smaller</strong> model tag instead of 27B (e.g. `qwen3.5:8b` or `qwen3.5:14b`)&#8212;same $0 local stack, less headroom, still yours. The tradeoff is spelled out in <strong>step 2</strong>.</p><p>- <strong>Storage:</strong> <strong>~30GB</strong> free for the 27B-class model, cache, and a little overhead (smaller tags need less).</p><p>- <strong>Internet</strong>: Only for installs and the first model pull; after that, it runs locally.</p><h2>The Installation</h2><h3>1) Install Ollama</h3><h4>macOS</h4><ul><li><p><a href="https://ollama.com/download">Download Ollama</a> for macOS and install it.</p></li><li><p>Note: Ollama requires <strong>macOS 14 Sonoma or later</strong>.</p></li></ul><h4>Windows (PC)</h4><ul><li><p><a href="https://ollama.com/download">Download Ollama</a> for Windows and run the installer.</p></li></ul><p>After install, confirm Ollama is available using command line:</p><pre><code><code>ollama --version</code></code></pre><h3>2) Download and run Qwen 3.5</h3><p>Pull and run the selected Qwen 3.5 model:</p><pre><code><code>ollama run qwen3.5:27b</code></code></pre><p>Typical Apple Silicon memory use (from <a href="https://ollama.com/library/qwen3.5">Ollama model sizes</a>):</p><ul><li><p><code>qwen3.5</code> / <code>qwen3.5:35b</code>: model size is about <strong>24GB</strong>.<br>Plan for at least <strong>48 GB unified memory</strong> for a smoother experience.</p></li><li><p><code>qwen3.5:27b</code>: model size is about <strong>17GB</strong>.<br>Works better with at least <strong>32 GB unified memory</strong>.</p></li></ul><p>Rule of thumb: keep extra headroom for macOS + other apps, not just model size. <br>If you have 16 GB RAM or less, try <code>qwen3.5:8b</code> or <code>qwen3.5:14b</code> instead. They&#8217;re faster and use less memory. You&#8217;ll trade some capability for accessibility. </p><p>Still zero cost. Still local. Still yours.</p><h3>3) Install Pi coding agent</h3><p>You need to have Node.js installed - you can <a href="https://nodejs.org/en/download/current">download it from here</a>.<br>Open Terminal (macOS) or PowerShell (Windows), then run:</p><pre><code><code>npm install -g @mariozechner/pi-coding-agent</code></code></pre><p>More details can be found from  <a href="https://pi.dev/">Pi.dev website</a>. </p><h3> 4) Pi config directory: <code>~/.pi/agent/</code></h3><p>Pi stores global configuration in <code>~/.pi/agent/</code>.<br>Think of this as your personal control center for models, settings, skills, and sessions.</p><h4>Key files you will use most</h4><ul><li><p><code>~/.pi/agent/models.json</code>: custom providers and model definitions (including local Ollama models).</p></li><li><p><code>~/.pi/agent/settings.json</code>: global behavior (theme, defaults, UX settings).</p></li><li><p><code>~/.pi/agent/skills/</code>: reusable skill folders (<code>&lt;skill-name&gt;/SKILL.md</code>).</p></li><li><p><code>~/.pi/agent/prompts/</code>: reusable prompt templates.</p></li><li><p><code>~/.pi/agent/sessions/</code>: saved chat/session history.</p></li></ul><p><strong>models.json:</strong> This is the file that wires Pi to Ollama (provider, local API URL, which model tags show up in Pi). I spent an hour getting the shape of it right, so the <strong>copy-paste example and field notes</strong> live in the Appendix. </p><h3>5) Use Pi with your preferred provider/model</h3><p>Launch Pi on the command line and then use  <code>/model</code> to pick the model.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!g39l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02216d75-d911-4126-8365-b0612ca81d8c_1151x625.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!g39l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02216d75-d911-4126-8365-b0612ca81d8c_1151x625.png 424w, https://substackcdn.com/image/fetch/$s_!g39l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02216d75-d911-4126-8365-b0612ca81d8c_1151x625.png 848w, https://substackcdn.com/image/fetch/$s_!g39l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02216d75-d911-4126-8365-b0612ca81d8c_1151x625.png 1272w, https://substackcdn.com/image/fetch/$s_!g39l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02216d75-d911-4126-8365-b0612ca81d8c_1151x625.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!g39l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02216d75-d911-4126-8365-b0612ca81d8c_1151x625.png" width="1151" height="625" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/02216d75-d911-4126-8365-b0612ca81d8c_1151x625.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:625,&quot;width&quot;:1151,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:119449,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/195371423?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02216d75-d911-4126-8365-b0612ca81d8c_1151x625.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!g39l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02216d75-d911-4126-8365-b0612ca81d8c_1151x625.png 424w, https://substackcdn.com/image/fetch/$s_!g39l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02216d75-d911-4126-8365-b0612ca81d8c_1151x625.png 848w, https://substackcdn.com/image/fetch/$s_!g39l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02216d75-d911-4126-8365-b0612ca81d8c_1151x625.png 1272w, https://substackcdn.com/image/fetch/$s_!g39l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F02216d75-d911-4126-8365-b0612ca81d8c_1151x625.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">User interface - similar to Claude Code </figcaption></figure></div><h3><strong>7) Add the Skill File</strong></h3><p>The skill file is what turns a generic Pi session into a Substack Notes workflow: a markdown file under <code>~/.pi/agent/skills/&lt;skill-name&gt;/</code> (usually <code>SKILL.md</code>) that encodes your format, audience, and rules.</p><p>I drafted a first version in a few minutes, then revised it on real notes until the output matched how I think and post. The full `create-notes` example is in the <strong>Appendix</strong> at the end of this piece&#8212;copy the folder, rename it, and make it yours.</p><p><strong>Time check:</strong> a rough skill is quick; a <em>reliable</em> one, plus the rest of this stack, is what that <strong>~2 hours</strong> first-time setup in system requirements is about&#8212;you&#8217;ll keep tuning the skill after you see a few real drafts.<br><br>Your content stays on your computer until you publish. No vendor sees your drafts. No API credits burning while you iterate. No context limit arguments. Just you and your ideas.  </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vquc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd63e154e-508a-4cb5-9b92-c1681fc0f597_1128x598.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vquc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd63e154e-508a-4cb5-9b92-c1681fc0f597_1128x598.png 424w, https://substackcdn.com/image/fetch/$s_!vquc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd63e154e-508a-4cb5-9b92-c1681fc0f597_1128x598.png 848w, https://substackcdn.com/image/fetch/$s_!vquc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd63e154e-508a-4cb5-9b92-c1681fc0f597_1128x598.png 1272w, https://substackcdn.com/image/fetch/$s_!vquc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd63e154e-508a-4cb5-9b92-c1681fc0f597_1128x598.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vquc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd63e154e-508a-4cb5-9b92-c1681fc0f597_1128x598.png" width="1128" height="598" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d63e154e-508a-4cb5-9b92-c1681fc0f597_1128x598.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:598,&quot;width&quot;:1128,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:138358,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/195371423?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd63e154e-508a-4cb5-9b92-c1681fc0f597_1128x598.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vquc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd63e154e-508a-4cb5-9b92-c1681fc0f597_1128x598.png 424w, https://substackcdn.com/image/fetch/$s_!vquc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd63e154e-508a-4cb5-9b92-c1681fc0f597_1128x598.png 848w, https://substackcdn.com/image/fetch/$s_!vquc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd63e154e-508a-4cb5-9b92-c1681fc0f597_1128x598.png 1272w, https://substackcdn.com/image/fetch/$s_!vquc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd63e154e-508a-4cb5-9b92-c1681fc0f597_1128x598.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Create-notes skill using zero cost AI stack</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KC1l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e71abe-c86c-4065-baeb-4eb96dc55bd0_1172x642.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KC1l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e71abe-c86c-4065-baeb-4eb96dc55bd0_1172x642.png 424w, https://substackcdn.com/image/fetch/$s_!KC1l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e71abe-c86c-4065-baeb-4eb96dc55bd0_1172x642.png 848w, https://substackcdn.com/image/fetch/$s_!KC1l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e71abe-c86c-4065-baeb-4eb96dc55bd0_1172x642.png 1272w, https://substackcdn.com/image/fetch/$s_!KC1l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e71abe-c86c-4065-baeb-4eb96dc55bd0_1172x642.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KC1l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e71abe-c86c-4065-baeb-4eb96dc55bd0_1172x642.png" width="1172" height="642" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/25e71abe-c86c-4065-baeb-4eb96dc55bd0_1172x642.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:642,&quot;width&quot;:1172,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:168432,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/195371423?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e71abe-c86c-4065-baeb-4eb96dc55bd0_1172x642.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KC1l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e71abe-c86c-4065-baeb-4eb96dc55bd0_1172x642.png 424w, https://substackcdn.com/image/fetch/$s_!KC1l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e71abe-c86c-4065-baeb-4eb96dc55bd0_1172x642.png 848w, https://substackcdn.com/image/fetch/$s_!KC1l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e71abe-c86c-4065-baeb-4eb96dc55bd0_1172x642.png 1272w, https://substackcdn.com/image/fetch/$s_!KC1l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25e71abe-c86c-4065-baeb-4eb96dc55bd0_1172x642.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Note drafts ready for review </figcaption></figure></div><p>I created this article using the same AI stack. I used three different skills: <em>create-outline</em>, <em>create-draft</em> and <em>create-final-article</em> and another 45 minutes of me editing. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iuUC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7473ca06-dcb2-4716-b758-e6e5d1cbee4e_1102x727.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iuUC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7473ca06-dcb2-4716-b758-e6e5d1cbee4e_1102x727.png 424w, https://substackcdn.com/image/fetch/$s_!iuUC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7473ca06-dcb2-4716-b758-e6e5d1cbee4e_1102x727.png 848w, https://substackcdn.com/image/fetch/$s_!iuUC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7473ca06-dcb2-4716-b758-e6e5d1cbee4e_1102x727.png 1272w, https://substackcdn.com/image/fetch/$s_!iuUC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7473ca06-dcb2-4716-b758-e6e5d1cbee4e_1102x727.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iuUC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7473ca06-dcb2-4716-b758-e6e5d1cbee4e_1102x727.png" width="1102" height="727" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7473ca06-dcb2-4716-b758-e6e5d1cbee4e_1102x727.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:727,&quot;width&quot;:1102,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:170350,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/195371423?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7473ca06-dcb2-4716-b758-e6e5d1cbee4e_1102x727.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iuUC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7473ca06-dcb2-4716-b758-e6e5d1cbee4e_1102x727.png 424w, https://substackcdn.com/image/fetch/$s_!iuUC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7473ca06-dcb2-4716-b758-e6e5d1cbee4e_1102x727.png 848w, https://substackcdn.com/image/fetch/$s_!iuUC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7473ca06-dcb2-4716-b758-e6e5d1cbee4e_1102x727.png 1272w, https://substackcdn.com/image/fetch/$s_!iuUC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7473ca06-dcb2-4716-b758-e6e5d1cbee4e_1102x727.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">How I&#8217;m using zero cost AI stack to create this article </figcaption></figure></div><h2>Why This Works (It&#8217;s Not the Model)</h2><p>I used to treat the work like a shopping problem: a higher plan, another <em><strong>&#8220;pro&#8221;</strong></em> login, a slightly nicer default model. I was buying access and <em><strong>features</strong></em>; what I needed was a <em><strong>system </strong></em>- a boring, repeatable local loop (draft, tighten, ship) that didn&#8217;t turn &#8220;can I work today?&#8221; into a billing question.</p><p>The real unlock here isn&#8217;t the model. It&#8217;s removing permission barriers.</p><ul><li><p><strong>Zero subscriptions</strong> = no auto-renewal anxiety</p></li><li><p><strong>Zero token costs</strong> = no unpredictable spend worries</p></li><li><p><strong>Zero login fatigue</strong> = focus on writing, not managing accounts</p></li><li><p><strong>Private drafts</strong> = your ideas stay yours until you&#8217;re ready to publish</p></li></ul><p>The caveat: local models have their own limits. </p><p>Mostly RAM size and your time. </p><p>But those are <em>your</em> limits. Not a vendor trying to upsell you to Pro Plus MAX MODE for $200/month.</p><h2>The Permission Barrier (This Is the Real Thing)</h2><p>The barrier wasn&#8217;t access. It was whether my work <em>&#8220;counted&#8221;</em> if I wasn&#8217;t on a name-brand paid stack. You can build in public before the numbers look good, test setups before the next subscription, run capable models locally for $0, and keep drafts on your machine until you publish. </p><p><em><strong>&#8220;Real&#8221;</strong></em> here isn&#8217;t a fatter line item on the stack&#8212;it&#8217;s ideas that stay yours until you share them, and a tool bill you can look at next to your subscriber count without wincing.</p><p>I started from a small email list  - 47 subscribers, paying $60 for AI tools. After switching to local AI: $0/month in AI spend, 102 Notes shipped (vs 66 before). Drafting stayed local and private until I hit publish.</p><p>That&#8217;s when everything unlocked. Not because the model was better. Because the permission barrier was gone.</p><h2>What To Do Next</h2><p>You don&#8217;t need expensive AI subscriptions to ship consistently. You need a workflow that removes barriers between your ideas and your audience&#8212;especially the recurring <em>&#8220;AI tool tax&#8221;</em> while you&#8217;re still early.</p><p>Stop paying a monthly AI stack tax you can&#8217;t feel good about. </p><p>Here&#8217;s what to do today:</p><ol><li><p>Install Pi agent + ollama + qwen3.5:27b (or a free model that fits your computer memory)</p></li><li><p>Add a skill file (template is in the appendix)</p></li><li><p>Draft your next Note on your own machine</p></li><li><p>Publish when you&#8217;re ready</p></li></ol><p>Stop watching those AI tokens burn.</p><p><strong>Got a question about running AI locally on a budget? <br>What&#8217;s been your biggest blocker so far?</strong></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/p/why-paying-60month-for-ai-tools-is?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption"><em>You know a fellow creator drowning in monthly AI subscriptions&#8212;forward them this. Show them they don&#8217;t need to burn credits to build something real.</em></p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/p/why-paying-60month-for-ai-tools-is?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://stackcontacts.substack.com/p/why-paying-60month-for-ai-tools-is?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p> </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><em>Get weekly breakdowns of tools, systems, and cashflow strategies for early-stage creators. No fluff, just the economics of building</em></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p><strong>Final thought:</strong> You don&#8217;t need a bigger budget to build. You need a setup that lets you build without watching your budget bleed. That&#8217;s what this is for.</p><p>Now go ship something.<br><br>&#8212; Finn </p><div><hr></div><h2>Appendix:</h2><h3>Skill File Template</h3><p>For the Substack Notes skill file I mentioned, it is installed in  <code>~/.pi/agent/skills/create-notes/SKILL.md</code>. <br>Copy it, tweak it, make it yours - <a href="https://docs.google.com/document/d/1HEiAjvVqAyJKF_spkimd0r6b3UGs0uPIO-nL4eY8OZc/edit?usp=sharing">it is here</a></p><h3><br>Full <code>models.json</code> (copy-paste)</h3><p>Path  <code>~/.pi/agent/models.json</code> <br>Your file can register multiple Ollama models; here is a working example with two (the same one I use):</p><pre><code><code>{
  "providers": {
    "ollama": {
      "api": "openai-completions",
      "apiKey": "ollama",
      "baseUrl": "http://127.0.0.1:11434/v1",
      "models": [
        {
          "_launch": true,
          "contextWindow": 65536,
          "id": "qwen3.5:27b",
          "input": ["text", "image"]
        },
        {
          "_launch": true,
          "contextWindow": 32768,
          "id": "qwen2.5-coder:7b",
          "input": ["text"]
        }
      ]
    }
  }
}</code></code></pre><p>What this means:</p><ul><li><p><code>id</code>: exact model tag served by Ollama.</p></li><li><p><code>contextWindow</code>: max context tokens for that model. Depends on how much RAM memory you have.</p></li><li><p><code>input</code>: supported input types (<code>text</code>, optional <code>image</code>).</p></li><li><p><code>_launch: true</code>: model is included and can be selected in Pi.</p></li><li><p><code>baseUrl</code>: points Pi to your local Ollama API.</p></li></ul><div><hr></div><p></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[StackContacts Connect - User Manual]]></title><description><![CDATA[StackContacts Connect helps you send personalized welcome or follow-up DM messages to your Substack subscribers.]]></description><link>https://stackcontacts.substack.com/p/stackcontacts-connect-user-manual</link><guid isPermaLink="false">https://stackcontacts.substack.com/p/stackcontacts-connect-user-manual</guid><dc:creator><![CDATA[Finn Tropy | StackContacts]]></dc:creator><pubDate>Mon, 02 Mar 2026 13:30:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Y4aS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c2e640-07bd-430a-85c7-9d08aedd6717_1200x1204.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>What is StackContacts Connect?</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Y4aS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c2e640-07bd-430a-85c7-9d08aedd6717_1200x1204.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y4aS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c2e640-07bd-430a-85c7-9d08aedd6717_1200x1204.png 424w, https://substackcdn.com/image/fetch/$s_!Y4aS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c2e640-07bd-430a-85c7-9d08aedd6717_1200x1204.png 848w, https://substackcdn.com/image/fetch/$s_!Y4aS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c2e640-07bd-430a-85c7-9d08aedd6717_1200x1204.png 1272w, https://substackcdn.com/image/fetch/$s_!Y4aS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c2e640-07bd-430a-85c7-9d08aedd6717_1200x1204.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y4aS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c2e640-07bd-430a-85c7-9d08aedd6717_1200x1204.png" width="1200" height="1204" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/46c2e640-07bd-430a-85c7-9d08aedd6717_1200x1204.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1204,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:165944,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/189561530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c2e640-07bd-430a-85c7-9d08aedd6717_1200x1204.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Y4aS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c2e640-07bd-430a-85c7-9d08aedd6717_1200x1204.png 424w, https://substackcdn.com/image/fetch/$s_!Y4aS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c2e640-07bd-430a-85c7-9d08aedd6717_1200x1204.png 848w, https://substackcdn.com/image/fetch/$s_!Y4aS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c2e640-07bd-430a-85c7-9d08aedd6717_1200x1204.png 1272w, https://substackcdn.com/image/fetch/$s_!Y4aS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F46c2e640-07bd-430a-85c7-9d08aedd6717_1200x1204.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">StackContacts Connect Chrome Extension</figcaption></figure></div><p><strong><a href="https://finntropy.gumroad.com/l/stackcontacts_connect">StackContacts Connect</a></strong> is a Chrome extension for newsletter creators. It lets you send <strong>direct messages (DMs)</strong> &#8212; private notes inside Substack &#8212; to people who have already <strong>subscribed</strong> to your <strong>publication</strong> (your newsletter). </p><p>You can personalize each message with the recipient&#8217;s name, limit how many people get a message in one run, and skip anyone you&#8217;ve already messaged. The extension sends one message at a time with a delay you set, so you stay in control and avoid looking like spam.</p><h2><strong>Use case examples </strong></h2><p>I&#8217;ve written two posts about how to use StackContacts Connect to automate sending DM messages to your new subscribers. </p><p>Here is the first one that covers the basic use cases: </p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;f870ec16-0c94-422f-b2d6-cb12739be9a0&quot;,&quot;caption&quot;:&quot;This one&#8217;s for anyone who runs a newsletter on Substack. If that&#8217;s not you, no worries&#8212;see you next time.&quot;,&quot;cta&quot;:&quot;Read full story&quot;,&quot;showBylines&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How to Say Hi to Your New Substack Subscribers - Without the Grind or the Spam&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:74172100,&quot;name&quot;:&quot;Finn Tropy | StackContacts&quot;,&quot;bio&quot;:null,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f06b6fc9-331f-427c-9248-ef0d555ad864_1024x1024.png&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null},{&quot;id&quot;:121030277,&quot;name&quot;:&quot;Finn Tropy&quot;,&quot;bio&quot;:&quot;I study creator growth the way engineers study systems&#8212;with experiments, dashboards, and curiosity. I build tools, test ideas on myself, and share what truly moves the needle for busy Substack creators. My tools store is https://finntropy.gumroad.com&quot;,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CrQZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24c22723-7e0c-4b43-b59d-1334e23f842f_1024x1024.png&quot;,&quot;is_guest&quot;:true,&quot;bestseller_tier&quot;:null,&quot;primaryPublicationSubscribeUrl&quot;:&quot;https://finntropy.substack.com/subscribe?&quot;,&quot;primaryPublicationUrl&quot;:&quot;https://finntropy.substack.com&quot;,&quot;primaryPublicationName&quot;:&quot;Finn'sights&quot;,&quot;primaryPublicationId&quot;:2636565}],&quot;post_date&quot;:&quot;2026-02-16T13:03:32.980Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!sMjf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e75973-8459-48f1-9883-0192232f1ca4_1200x1204.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://stackcontacts.substack.com/p/how-to-say-hi-to-your-new-substack&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:188042092,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:28,&quot;comment_count&quot;:13,&quot;publication_id&quot;:7276445,&quot;publication_name&quot;:&quot;StackContacts&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!zuc1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19cda87b-ab85-4dda-ac35-98d214ec5de6_600x600.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>And this is the second one that explains the more advanced use cases and DM campaigns: </p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:188761443,&quot;url&quot;:&quot;https://finntropy.substack.com/p/your-best-subscribers-arent-in-your&quot;,&quot;publication_id&quot;:2636565,&quot;publication_name&quot;:&quot;Finn'sights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!f1X7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F428bef97-e2b5-4627-84e9-b759a9683982_942x942.png&quot;,&quot;title&quot;:&quot;Your Best Subscribers Aren't in Your Inbox&#8212;They're in Chat&quot;,&quot;truncated_body_text&quot;:&quot;Nearly 2 in 5 new subscribers respond to my welcome DM. Industry benchmarks for outreach are 5&#8211;15%&#8212;so that number isn&#8217;t a fluke, and you can use it.&quot;,&quot;date&quot;:&quot;2026-02-22T13:01:16.811Z&quot;,&quot;like_count&quot;:29,&quot;comment_count&quot;:8,&quot;bylines&quot;:[{&quot;id&quot;:121030277,&quot;name&quot;:&quot;Finn Tropy&quot;,&quot;handle&quot;:&quot;finntropy&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CrQZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24c22723-7e0c-4b43-b59d-1334e23f842f_1024x1024.png&quot;,&quot;bio&quot;:&quot;I study creator growth the way engineers study systems&#8212;with experiments, dashboards, and curiosity. I build tools, test ideas on myself, and share what truly moves the needle for busy Substack creators. My tools store is https://finntropy.gumroad.com&quot;,&quot;profile_set_up_at&quot;:&quot;2024-05-19T18:50:58.930Z&quot;,&quot;reader_installed_at&quot;:&quot;2024-08-13T23:38:47.446Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:2672674,&quot;user_id&quot;:121030277,&quot;publication_id&quot;:2636565,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:2636565,&quot;name&quot;:&quot;Finn'sights&quot;,&quot;subdomain&quot;:&quot;finntropy&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Weekly insights, tips, and tools to help you grow as a writer and learn from the best.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/428bef97-e2b5-4627-84e9-b759a9683982_942x942.png&quot;,&quot;author_id&quot;:121030277,&quot;primary_user_id&quot;:121030277,&quot;theme_var_background_pop&quot;:&quot;#6B26FF&quot;,&quot;created_at&quot;:&quot;2024-05-19T18:51:30.000Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Finn Tropy&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;magaziney&quot;,&quot;is_personal_mode&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:1,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;subscriber&quot;,&quot;tier&quot;:1,&quot;accent_colors&quot;:null},&quot;paidPublicationIds&quot;:[2626440,4166813,5597038],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://finntropy.substack.com/p/your-best-subscribers-arent-in-your?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!f1X7!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F428bef97-e2b5-4627-84e9-b759a9683982_942x942.png" loading="lazy"><span class="embedded-post-publication-name">Finn'sights</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Your Best Subscribers Aren't in Your Inbox&#8212;They're in Chat</div></div><div class="embedded-post-body">Nearly 2 in 5 new subscribers respond to my welcome DM. Industry benchmarks for outreach are 5&#8211;15%&#8212;so that number isn&#8217;t a fluke, and you can use it&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">3 months ago &#183; 29 likes &#183; 8 comments &#183; Finn Tropy</div></a></div><p>If you are wondering how this could work for your situation, please send me a DM or leave a comment below. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/p/stackcontacts-connect-user-manual/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://stackcontacts.substack.com/p/stackcontacts-connect-user-manual/comments"><span>Leave a comment</span></a></p><h2><strong>Getting started</strong></h2><p>You need to have a Substack account and a Chrome browser to use this product.</p><ol><li><p><strong>Install the extension</strong><br>Download <a href="https://finntropy.gumroad.com/l/stackcontacts_connect">StackContacts Connect</a> from the <a href="https://finntropy.gumroad.com/l/stackcontacts_connect">Gumroad store</a> and load it as an unpacked extension in Chrome (e.g. for development). Follow the instructions from Gumroad downlink link.</p></li><li><p><strong>Log in to Substack</strong><br>In the same Chrome browser, open <a href="https://substack.com/">substack.com</a> and log in to the account that owns the newsletter you want to message from. The extension uses your existing Substack session; it does not ask for your password.</p></li><li><p><strong>Open the extension</strong><br>Click the StackContacts Connect icon in your Chrome toolbar to open the popup. You should see:</p><ul><li><p>Your <strong>name</strong> and <strong>handle</strong> (e.g. &#8220;Finn Tropy&#8221; and &#8220;@finntropy&#8221;) with your profile picture.</p></li><li><p>The <strong>publication</strong> you&#8217;re messaging for (e.g. &#8220;Finn&#8217;sights&#8221;). If you have more than one publication, a dropdown lets you choose which one to use.</p></li></ul><p>If you don&#8217;t see your name or publication, open <strong>Settings</strong> (gear icon &#9881; in the popup) and make sure you&#8217;re logged in to Substack in that browser.</p></li></ol><h2><strong>The main popup screen</strong></h2><h3><strong>Publication (top of popup)</strong></h3><ul><li><p>If you have one or more publications, you&#8217;ll see a <strong>dropdown</strong> with the publication name (e.g. &#8220;Finn&#8217;sights&#8221;). Use it to choose which newsletter&#8217;s subscribers you&#8217;re messaging.</p></li><li><p>If you use a <strong>StackContacts</strong> data file in Settings instead of the Substack API, you&#8217;ll see the publication name with &#8220;(from file)&#8221; and no dropdown.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3TVb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F322c9b71-c9c5-46ee-b427-e7d2fbe16a78_602x603.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3TVb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F322c9b71-c9c5-46ee-b427-e7d2fbe16a78_602x603.png 424w, https://substackcdn.com/image/fetch/$s_!3TVb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F322c9b71-c9c5-46ee-b427-e7d2fbe16a78_602x603.png 848w, https://substackcdn.com/image/fetch/$s_!3TVb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F322c9b71-c9c5-46ee-b427-e7d2fbe16a78_602x603.png 1272w, https://substackcdn.com/image/fetch/$s_!3TVb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F322c9b71-c9c5-46ee-b427-e7d2fbe16a78_602x603.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3TVb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F322c9b71-c9c5-46ee-b427-e7d2fbe16a78_602x603.png" width="602" height="603" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/322c9b71-c9c5-46ee-b427-e7d2fbe16a78_602x603.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:603,&quot;width&quot;:602,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:61710,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/189561530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F322c9b71-c9c5-46ee-b427-e7d2fbe16a78_602x603.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3TVb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F322c9b71-c9c5-46ee-b427-e7d2fbe16a78_602x603.png 424w, https://substackcdn.com/image/fetch/$s_!3TVb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F322c9b71-c9c5-46ee-b427-e7d2fbe16a78_602x603.png 848w, https://substackcdn.com/image/fetch/$s_!3TVb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F322c9b71-c9c5-46ee-b427-e7d2fbe16a78_602x603.png 1272w, https://substackcdn.com/image/fetch/$s_!3TVb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F322c9b71-c9c5-46ee-b427-e7d2fbe16a78_602x603.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h3><strong>Message</strong></h3><ul><li><p>This is the text that will be sent to each selected subscriber.</p></li><li><p>You can use <code>{{USER_NAME}}</code> in the message. When <strong>Unique Message</strong> is on, the extension replaces <code>{{USER_NAME}}</code> with that person&#8217;s name (e.g. &#8220;Hi Sarah!&#8221;).</p></li><li><p>The hint below the box reminds you: &#8220;Use <code>{{USER_NAME}}</code> to personalize each message.&#8221;</p></li></ul><h3><strong>Number of subscribers to message</strong></h3><ul><li><p>A number between <strong>1 and 50</strong>. This is the maximum number of DMs the extension will send in one run.</p></li><li><p>Start small (e.g. 5&#8211;10) to test; you can increase it later.</p></li></ul><h3><strong>Unique Message</strong></h3><ul><li><p><strong>On (recommended):</strong> Each person gets a message with their Substack user name where you used <code>{{USER_NAME}}</code>.</p></li><li><p><strong>Off:</strong> Everyone gets the same text; <code>{{USER_NAME}}</code> is not replaced, so don&#8217;t use it.</p></li></ul><h3><strong>Image Attachment (optional)</strong></h3><ul><li><p>Below the message field, you can attach an <strong>image</strong> (JPEG, PNG, GIF, or WebP) to your messages. Click the attach button or &#8220;Add image&#8221; to choose a file.</p></li><li><p>When attached, a small <strong>thumbnail preview</strong> appears. Click <strong>Remove</strong> to clear it.</p></li><li><p>The same image is sent with every message in the run. If you don&#8217;t attach an image, messages are sent as plain text.</p></li></ul><h3><strong>Only Empty Chat</strong></h3><ul><li><p><strong>On (recommended):</strong> The extension only messages people you haven&#8217;t already started a chat with. You avoid sending duplicate welcome messages.</p></li><li><p><strong>Off:</strong> The extension may include people you&#8217;ve already messaged (useful only in special cases).</p></li></ul><h3><strong>Start Automation</strong></h3><p>You may see a popup request for additional permissions if you have a custom Substack domain. Allow this permission because the automation requires access to use the Substack API calls for reading your subscribers and posting a Direct Message.</p><p>See example below:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uq7T!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2afc0b3c-b6df-45ae-82e4-29f901e008bc_892x430.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uq7T!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2afc0b3c-b6df-45ae-82e4-29f901e008bc_892x430.png 424w, https://substackcdn.com/image/fetch/$s_!uq7T!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2afc0b3c-b6df-45ae-82e4-29f901e008bc_892x430.png 848w, https://substackcdn.com/image/fetch/$s_!uq7T!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2afc0b3c-b6df-45ae-82e4-29f901e008bc_892x430.png 1272w, https://substackcdn.com/image/fetch/$s_!uq7T!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2afc0b3c-b6df-45ae-82e4-29f901e008bc_892x430.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uq7T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2afc0b3c-b6df-45ae-82e4-29f901e008bc_892x430.png" width="892" height="430" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2afc0b3c-b6df-45ae-82e4-29f901e008bc_892x430.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:430,&quot;width&quot;:892,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:62879,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/189561530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2afc0b3c-b6df-45ae-82e4-29f901e008bc_892x430.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!uq7T!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2afc0b3c-b6df-45ae-82e4-29f901e008bc_892x430.png 424w, https://substackcdn.com/image/fetch/$s_!uq7T!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2afc0b3c-b6df-45ae-82e4-29f901e008bc_892x430.png 848w, https://substackcdn.com/image/fetch/$s_!uq7T!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2afc0b3c-b6df-45ae-82e4-29f901e008bc_892x430.png 1272w, https://substackcdn.com/image/fetch/$s_!uq7T!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2afc0b3c-b6df-45ae-82e4-29f901e008bc_892x430.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><ul><li><p>Click <strong>Start Automation</strong> when you&#8217;re ready. A confirmation screen shows how many people will be messaged; click <strong>Start</strong> to begin or <strong>Cancel</strong> to abort before sending.</p></li><li><p>Messages are sent one at a time with the delay you set in Settings.</p></li><li><p>During a run you have two controls:</p><ul><li><p><strong>Pause</strong> &#8212; temporarily stops after the current message. Click <strong>Resume</strong> to continue where you left off.</p></li><li><p><strong>Cancel</strong> &#8212; stops the run entirely. Any messages already sent stay sent, but no more will be sent. You&#8217;ll see a summary of what was sent, skipped, or failed before the run was cancelled.</p></li></ul></li><li><p>When the run finishes (or is cancelled), you&#8217;ll see how many were sent, skipped, or failed.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9mJw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51196ad3-690d-465e-8ffa-d920cba69cdb_602x603.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9mJw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51196ad3-690d-465e-8ffa-d920cba69cdb_602x603.png 424w, https://substackcdn.com/image/fetch/$s_!9mJw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51196ad3-690d-465e-8ffa-d920cba69cdb_602x603.png 848w, https://substackcdn.com/image/fetch/$s_!9mJw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51196ad3-690d-465e-8ffa-d920cba69cdb_602x603.png 1272w, https://substackcdn.com/image/fetch/$s_!9mJw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51196ad3-690d-465e-8ffa-d920cba69cdb_602x603.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9mJw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51196ad3-690d-465e-8ffa-d920cba69cdb_602x603.png" width="602" height="603" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/51196ad3-690d-465e-8ffa-d920cba69cdb_602x603.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:603,&quot;width&quot;:602,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:31672,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/189561530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51196ad3-690d-465e-8ffa-d920cba69cdb_602x603.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9mJw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51196ad3-690d-465e-8ffa-d920cba69cdb_602x603.png 424w, https://substackcdn.com/image/fetch/$s_!9mJw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51196ad3-690d-465e-8ffa-d920cba69cdb_602x603.png 848w, https://substackcdn.com/image/fetch/$s_!9mJw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51196ad3-690d-465e-8ffa-d920cba69cdb_602x603.png 1272w, https://substackcdn.com/image/fetch/$s_!9mJw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51196ad3-690d-465e-8ffa-d920cba69cdb_602x603.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2><strong>Campaigns tab</strong></h2><p>The <strong>Campaigns</strong> tab lets you target specific groups of subscribers with personalized messages. You can choose between two data sources: <strong>Substack Subscribers</strong> (filter by subscriber attributes) or <strong>SQL (DuckDB)</strong> (custom queries against a StackContacts database file). Campaigns are saved in the extension so you can reuse them.</p><h3><strong>Campaign list</strong></h3><ul><li><p>Open the <strong>Campaigns</strong> tab. You&#8217;ll see a list of saved campaigns (name, status, last run) and a <strong>+ New Campaign</strong> button.</p></li><li><p><strong>Edit</strong> opens the campaign editor. <strong>Delete</strong> removes the campaign after a confirmation.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bPWL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cdd957f-31e2-4e2a-92a5-7628fc176828_602x603.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bPWL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cdd957f-31e2-4e2a-92a5-7628fc176828_602x603.png 424w, https://substackcdn.com/image/fetch/$s_!bPWL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cdd957f-31e2-4e2a-92a5-7628fc176828_602x603.png 848w, https://substackcdn.com/image/fetch/$s_!bPWL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cdd957f-31e2-4e2a-92a5-7628fc176828_602x603.png 1272w, https://substackcdn.com/image/fetch/$s_!bPWL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cdd957f-31e2-4e2a-92a5-7628fc176828_602x603.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bPWL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cdd957f-31e2-4e2a-92a5-7628fc176828_602x603.png" width="602" height="603" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7cdd957f-31e2-4e2a-92a5-7628fc176828_602x603.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:603,&quot;width&quot;:602,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:36638,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/189561530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cdd957f-31e2-4e2a-92a5-7628fc176828_602x603.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bPWL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cdd957f-31e2-4e2a-92a5-7628fc176828_602x603.png 424w, https://substackcdn.com/image/fetch/$s_!bPWL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cdd957f-31e2-4e2a-92a5-7628fc176828_602x603.png 848w, https://substackcdn.com/image/fetch/$s_!bPWL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cdd957f-31e2-4e2a-92a5-7628fc176828_602x603.png 1272w, https://substackcdn.com/image/fetch/$s_!bPWL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7cdd957f-31e2-4e2a-92a5-7628fc176828_602x603.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h3><strong>Creating or editing a campaign</strong></h3><ol><li><p><strong>Campaign name</strong> &#8212; e.g. &#8220;Welcome new subs&#8221; or &#8220;Re-engage lurkers.&#8221;</p></li><li><p><strong>Source</strong> &#8212; Choose your data source:</p><ul><li><p><strong>Substack subscribers</strong> &#8212; Filter subscribers from Substack directly using segments.</p></li><li><p><strong>SQL (DuckDB)</strong> &#8212; Write a custom SQL query against a StackContacts database file.</p></li></ul></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3Ac1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbce6d718-acda-403f-b690-9265c612a58e_603x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3Ac1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbce6d718-acda-403f-b690-9265c612a58e_603x600.png 424w, https://substackcdn.com/image/fetch/$s_!3Ac1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbce6d718-acda-403f-b690-9265c612a58e_603x600.png 848w, https://substackcdn.com/image/fetch/$s_!3Ac1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbce6d718-acda-403f-b690-9265c612a58e_603x600.png 1272w, https://substackcdn.com/image/fetch/$s_!3Ac1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbce6d718-acda-403f-b690-9265c612a58e_603x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3Ac1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbce6d718-acda-403f-b690-9265c612a58e_603x600.png" width="603" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bce6d718-acda-403f-b690-9265c612a58e_603x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:603,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:56053,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/189561530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbce6d718-acda-403f-b690-9265c612a58e_603x600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3Ac1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbce6d718-acda-403f-b690-9265c612a58e_603x600.png 424w, https://substackcdn.com/image/fetch/$s_!3Ac1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbce6d718-acda-403f-b690-9265c612a58e_603x600.png 848w, https://substackcdn.com/image/fetch/$s_!3Ac1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbce6d718-acda-403f-b690-9265c612a58e_603x600.png 1272w, https://substackcdn.com/image/fetch/$s_!3Ac1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbce6d718-acda-403f-b690-9265c612a58e_603x600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h4><strong>Substack subscribers source</strong></h4><p>When you choose <strong>Substack subscribers</strong>, you build <strong>segments</strong>. Each segment targets a group of subscribers with a specific message.</p><p><strong>Segments</strong> &#8212; Each segment has three parts:</p><ul><li><p><strong>Segment name</strong> &#8212; A label for your reference (e.g. &#8220;Paid monthly&#8221;).</p></li><li><p><strong>Filters</strong> &#8212; One or more conditions that narrow down which subscribers to include. All filters within a segment combine with AND logic (subscribers must match every condition).</p></li><li><p><strong>Message template</strong> &#8212; The text sent to subscribers who match this segment. Use <code>{{USER_NAME}}</code> for personalization.</p></li></ul><p><strong>How to add a filter:</strong></p><p>Each filter row has three parts:</p><ol><li><p><strong>Column</strong> &#8212; What to filter on. Pick from 42 options that match the Substack dashboard, including:</p><ul><li><p>Subscriber attributes: Type, Subscription interval, Activity, Country, State/Province</p></li><li><p>Engagement metrics: Emails opened, Post views, Comments, Shares, Links clicked</p></li><li><p>Payment data: Revenue, First paid date, Subscription source (free/paid), Expiration date, <strong>Stripe plan</strong></p></li><li><p>Dates: Start date, Cancel date, Paid upgrade date, Last email open</p></li></ul></li><li><p><strong>Relation</strong> &#8212; How to compare. The options depend on the column type:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!s9ZS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb26641cf-3b3d-4bbb-8f3b-4dc5fbcc9a44_712x308.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s9ZS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb26641cf-3b3d-4bbb-8f3b-4dc5fbcc9a44_712x308.png 424w, https://substackcdn.com/image/fetch/$s_!s9ZS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb26641cf-3b3d-4bbb-8f3b-4dc5fbcc9a44_712x308.png 848w, https://substackcdn.com/image/fetch/$s_!s9ZS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb26641cf-3b3d-4bbb-8f3b-4dc5fbcc9a44_712x308.png 1272w, https://substackcdn.com/image/fetch/$s_!s9ZS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb26641cf-3b3d-4bbb-8f3b-4dc5fbcc9a44_712x308.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!s9ZS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb26641cf-3b3d-4bbb-8f3b-4dc5fbcc9a44_712x308.png" width="712" height="308" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b26641cf-3b3d-4bbb-8f3b-4dc5fbcc9a44_712x308.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:308,&quot;width&quot;:712,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:46512,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/189561530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb26641cf-3b3d-4bbb-8f3b-4dc5fbcc9a44_712x308.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!s9ZS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb26641cf-3b3d-4bbb-8f3b-4dc5fbcc9a44_712x308.png 424w, https://substackcdn.com/image/fetch/$s_!s9ZS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb26641cf-3b3d-4bbb-8f3b-4dc5fbcc9a44_712x308.png 848w, https://substackcdn.com/image/fetch/$s_!s9ZS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb26641cf-3b3d-4bbb-8f3b-4dc5fbcc9a44_712x308.png 1272w, https://substackcdn.com/image/fetch/$s_!s9ZS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb26641cf-3b3d-4bbb-8f3b-4dc5fbcc9a44_712x308.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p><strong>Value</strong> &#8212; What to compare against. The input matches the column type: a dropdown for enums, a date picker for dates, a number field for numbers, or a text field for text.</p></li></ol><p><strong>Tips:</strong></p><ul><li><p>Click <strong>+ Add filter</strong> to add another condition to the same segment.</p></li><li><p>Click the <strong>x</strong> on a filter row to remove it.</p></li><li><p>Rows with no column or no value are ignored.</p></li><li><p>Click <strong>+ Add segment</strong> to target a different group with a different message.</p></li><li><p>Set a <strong>Default message</strong> that is used when a segment has no message set.</p></li></ul><h4><strong>SQL source (DuckDB)</strong></h4><p><strong>You need:</strong> In <strong>Settings</strong> &gt; <strong>Advanced: StackContacts Data Source</strong>, choose your StackContacts database file and select a <strong>Publication Schema</strong>.</p><ol><li><p><strong>Who should receive this message?</strong> &#8212; A <strong>SQL query</strong> that returns one row per recipient. The query must be <strong>SELECT only</strong> (no UPDATE/DELETE). The first line must start with <code>SELECT</code> or <code>WITH</code>. Use:</p><ul><li><p><code>{schema}</code> &#8212; Replaced with your selected publication schema (e.g. <code>pub_finntropy_substack_com</code>).</p></li><li><p><code>{N}</code> &#8212; Replaced with the max number of rows (from Settings &gt; Campaigns &gt; Max messages per run).</p></li></ul></li><li><p><strong>Run Preview</strong> &#8212; Runs the query and shows a <strong>results table</strong>. Column names become the <strong>tags</strong> you can use in the message (e.g. a column <code>USER_NAME</code> becomes <code>{{USER_NAME}}</code>).</p></li><li><p><strong>What should the message say?</strong> &#8212; Your message template. Use <strong>tags</strong> like <code>{{USER_NAME}}</code>, <code>{{email}}</code>, or any column name from your query.</p></li></ol><h4><strong>Saving and previewing</strong></h4><ul><li><p><strong>Save Draft</strong> &#8212; Saves the campaign and returns to the list.</p></li><li><p><strong>Preview Messages</strong> &#8212; Shows a preview table with rendered messages. If you haven&#8217;t run a preview yet, it fetches subscribers first.<br></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GoCe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb0f0816-40cc-4093-9624-19f14a00f80f_603x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GoCe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb0f0816-40cc-4093-9624-19f14a00f80f_603x600.png 424w, https://substackcdn.com/image/fetch/$s_!GoCe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb0f0816-40cc-4093-9624-19f14a00f80f_603x600.png 848w, https://substackcdn.com/image/fetch/$s_!GoCe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb0f0816-40cc-4093-9624-19f14a00f80f_603x600.png 1272w, https://substackcdn.com/image/fetch/$s_!GoCe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb0f0816-40cc-4093-9624-19f14a00f80f_603x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GoCe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb0f0816-40cc-4093-9624-19f14a00f80f_603x600.png" width="603" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/db0f0816-40cc-4093-9624-19f14a00f80f_603x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:603,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:51868,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/189561530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb0f0816-40cc-4093-9624-19f14a00f80f_603x600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GoCe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb0f0816-40cc-4093-9624-19f14a00f80f_603x600.png 424w, https://substackcdn.com/image/fetch/$s_!GoCe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb0f0816-40cc-4093-9624-19f14a00f80f_603x600.png 848w, https://substackcdn.com/image/fetch/$s_!GoCe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb0f0816-40cc-4093-9624-19f14a00f80f_603x600.png 1272w, https://substackcdn.com/image/fetch/$s_!GoCe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdb0f0816-40cc-4093-9624-19f14a00f80f_603x600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p></li></ul><h3><strong>Sending a campaign</strong></h3><ul><li><p>From the <strong>preview</strong> screen you&#8217;ll see how many recipients there are and a sample of rendered messages.</p></li><li><p>Optionally check <strong>Dry run (no messages sent)</strong> to simulate without sending.</p></li><li><p>Click <strong>Send Campaign</strong>, confirm in the dialog, and the extension sends one DM per row (using the same delay as in Settings). You can <strong>Pause</strong> or <strong>Cancel</strong> as in the Send tab.</p></li><li><p>Each run is recorded; the campaign&#8217;s &#8220;last run&#8221; is updated and you can see sent/failed counts.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ey6H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F594f5604-0bc6-4053-a978-fe0c27472230_602x603.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ey6H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F594f5604-0bc6-4053-a978-fe0c27472230_602x603.png 424w, https://substackcdn.com/image/fetch/$s_!ey6H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F594f5604-0bc6-4053-a978-fe0c27472230_602x603.png 848w, https://substackcdn.com/image/fetch/$s_!ey6H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F594f5604-0bc6-4053-a978-fe0c27472230_602x603.png 1272w, https://substackcdn.com/image/fetch/$s_!ey6H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F594f5604-0bc6-4053-a978-fe0c27472230_602x603.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ey6H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F594f5604-0bc6-4053-a978-fe0c27472230_602x603.png" width="602" height="603" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/594f5604-0bc6-4053-a978-fe0c27472230_602x603.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:603,&quot;width&quot;:602,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:37682,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/189561530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F594f5604-0bc6-4053-a978-fe0c27472230_602x603.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ey6H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F594f5604-0bc6-4053-a978-fe0c27472230_602x603.png 424w, https://substackcdn.com/image/fetch/$s_!ey6H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F594f5604-0bc6-4053-a978-fe0c27472230_602x603.png 848w, https://substackcdn.com/image/fetch/$s_!ey6H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F594f5604-0bc6-4053-a978-fe0c27472230_602x603.png 1272w, https://substackcdn.com/image/fetch/$s_!ey6H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F594f5604-0bc6-4053-a978-fe0c27472230_602x603.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EGEp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28130f47-23b7-42d5-ab1d-0c600f54791c_602x603.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EGEp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28130f47-23b7-42d5-ab1d-0c600f54791c_602x603.png 424w, https://substackcdn.com/image/fetch/$s_!EGEp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28130f47-23b7-42d5-ab1d-0c600f54791c_602x603.png 848w, https://substackcdn.com/image/fetch/$s_!EGEp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28130f47-23b7-42d5-ab1d-0c600f54791c_602x603.png 1272w, https://substackcdn.com/image/fetch/$s_!EGEp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28130f47-23b7-42d5-ab1d-0c600f54791c_602x603.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EGEp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28130f47-23b7-42d5-ab1d-0c600f54791c_602x603.png" width="602" height="603" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/28130f47-23b7-42d5-ab1d-0c600f54791c_602x603.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:603,&quot;width&quot;:602,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:39544,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/189561530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28130f47-23b7-42d5-ab1d-0c600f54791c_602x603.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EGEp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28130f47-23b7-42d5-ab1d-0c600f54791c_602x603.png 424w, https://substackcdn.com/image/fetch/$s_!EGEp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28130f47-23b7-42d5-ab1d-0c600f54791c_602x603.png 848w, https://substackcdn.com/image/fetch/$s_!EGEp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28130f47-23b7-42d5-ab1d-0c600f54791c_602x603.png 1272w, https://substackcdn.com/image/fetch/$s_!EGEp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F28130f47-23b7-42d5-ab1d-0c600f54791c_602x603.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oIZ0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a12658-a6fb-44b9-9851-b703eda4514c_602x603.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oIZ0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a12658-a6fb-44b9-9851-b703eda4514c_602x603.png 424w, https://substackcdn.com/image/fetch/$s_!oIZ0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a12658-a6fb-44b9-9851-b703eda4514c_602x603.png 848w, https://substackcdn.com/image/fetch/$s_!oIZ0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a12658-a6fb-44b9-9851-b703eda4514c_602x603.png 1272w, https://substackcdn.com/image/fetch/$s_!oIZ0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a12658-a6fb-44b9-9851-b703eda4514c_602x603.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oIZ0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a12658-a6fb-44b9-9851-b703eda4514c_602x603.png" width="602" height="603" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/47a12658-a6fb-44b9-9851-b703eda4514c_602x603.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:603,&quot;width&quot;:602,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:31993,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/189561530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a12658-a6fb-44b9-9851-b703eda4514c_602x603.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oIZ0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a12658-a6fb-44b9-9851-b703eda4514c_602x603.png 424w, https://substackcdn.com/image/fetch/$s_!oIZ0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a12658-a6fb-44b9-9851-b703eda4514c_602x603.png 848w, https://substackcdn.com/image/fetch/$s_!oIZ0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a12658-a6fb-44b9-9851-b703eda4514c_602x603.png 1272w, https://substackcdn.com/image/fetch/$s_!oIZ0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a12658-a6fb-44b9-9851-b703eda4514c_602x603.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>Example SQL queries (StackContacts database)</strong></h3><p>These examples match the <strong>real</strong> StackContacts schema. Use <code>mydb."{schema}".</code> for the publication schema and <code>{N}</code> for the limit. Replace <code>{schema}</code> and <code>{N}</code> in your head when reading; the extension replaces them when you run the query.</p><p><strong>New subscribers who don&#8217;t have a DM thread yet (welcome message):</strong></p><pre><code><code>SELECT s.user_name AS USER_NAME, s.user_id, s.user_email_address AS email
FROM mydb."{schema}".subscribers_summary s
LEFT JOIN mydb."{schema}".dm_thread_participants p
  ON s.user_id = p.user_id AND p.is_publication = false
WHERE p.thread_id IS NULL
  AND s.user_name IS NOT NULL
ORDER BY s.subscription_created_at DESC
LIMIT {N}
</code></code></pre><p><strong>Existing DM threads (follow-up message; needs thread_id so the extension can reply in the same thread):</strong></p><pre><code><code>SELECT p.user_name AS USER_NAME, p.user_id, t.thread_id
FROM mydb."{schema}".dm_threads t
JOIN mydb."{schema}".dm_thread_participants p
  ON t.thread_id = p.thread_id AND p.is_publication = false
WHERE t.is_muted = false
ORDER BY t.last_message_timestamp DESC NULLS LAST
LIMIT {N}
</code></code></pre><p><strong>All subscribers (no filter by DM thread; use with care):</strong></p><pre><code><code>SELECT s.user_name AS USER_NAME, s.user_id, s.user_email_address AS email
FROM mydb."{schema}".subscribers_summary s
WHERE s.user_name IS NOT NULL
ORDER BY s.subscription_created_at DESC
LIMIT {N}
</code></code></pre><p><strong>Subscribers with a summarized interest (from </strong><code>subscriber_events</code><strong>):</strong><br>Uses the <strong>subscriber_events</strong> table (opens, reads, post seen, etc.) to set <strong>SUBSCRIBER_INTEREST</strong> to the <strong>most recent post title</strong> they interacted with. Good for messages like: </p><blockquote><p><em>&#8220;Hi {{USER_NAME}}, I noticed that you have interest in {{SUBSCRIBER_INTEREST}}. I&#8217;m curious, what brought you here and what other topics are you interested in?&#8221;</em></p></blockquote><p>This version only includes subscribers who have <strong>no DM thread yet</strong> and who have at least one event with a post title.</p><p><strong>Using your Substack username (handle)</strong> You can use your Substack handle (the part after @, e.g. <code>finntropy</code>). The publication&#8217;s <code>user_id</code> is taken from <code>dm_messages.sender_handle</code> (messages you&#8217;ve sent). Use a CTE so the handle appears once; replace <code>yourhandle</code> with your handle (no <code>@</code>):</p><pre><code><code>WITH pub AS (
  SELECT DISTINCT sender_id AS user_id
  FROM mydb."{schema}".dm_messages
  WHERE sender_handle = 'yourhandle'
  LIMIT 1
)
SELECT
  s.user_id,
  s.user_name AS USER_NAME,
  s.user_email_address AS email,
  (SELECT e.post_title
   FROM mydb."{schema}".subscriber_events e
   WHERE e.subscriber_email = s.user_email_address AND e.post_title IS NOT NULL
   ORDER BY e.timestamp DESC
   LIMIT 1) AS SUBSCRIBER_INTEREST
FROM mydb."{schema}".subscribers_summary s
LEFT JOIN (
  SELECT DISTINCT thread_id, user_id
  FROM mydb."{schema}".dm_thread_participants
  WHERE user_id != (SELECT user_id FROM pub)
) p ON s.user_id = p.user_id
LEFT JOIN (
  SELECT DISTINCT p.user_id
  FROM mydb."{schema}".dm_thread_participants p
  INNER JOIN (
    SELECT DISTINCT thread_id
    FROM mydb."{schema}".dm_messages
    WHERE sender_id = (SELECT user_id FROM pub)
  ) t ON p.thread_id = t.thread_id
  WHERE p.user_id != (SELECT user_id FROM pub)
) sent ON s.user_id = sent.user_id
WHERE p.thread_id IS NULL
  AND sent.user_id IS NULL
  AND s.user_name IS NOT NULL
  AND EXISTS (
    SELECT 1 FROM mydb."{schema}".subscriber_events e
    WHERE e.subscriber_email = s.user_email_address AND e.post_title IS NOT NULL
  )
ORDER BY s.subscription_created_at DESC
LIMIT {N}
</code></code></pre><p>This requires at least one message sent by you in <code>dm_messages</code> so that <code>sender_handle</code> is set. If you have no DMs yet, use the numeric <code>user_id</code> version above.</p><p><strong>Required columns:</strong> Each row must include either <code>user_id</code> (to start a new DM) or <code>thread_id</code> (to reply in an existing thread). Other columns (e.g. <code>USER_NAME</code>, <code>email</code>) are for your template tags.</p><h3><strong>Settings &gt; Campaigns</strong></h3><ul><li><p><strong>Max messages per run</strong> &#8212; Cap on how many rows from the query are used in one send (e.g. 100).</p></li><li><p><strong>Require preview before send</strong> &#8212; You must run Preview before Send Campaign.</p></li><li><p><strong>Only allow SELECT (SQL safety)</strong> &#8212; Campaign SQL must be SELECT-only; the extension blocks UPDATE, DELETE, etc.</p></li></ul><h2><strong>Settings (gear icon)</strong></h2><p>Open Settings from the gear icon &#9881; in the popup.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_n2w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42796661-f7ba-464d-81e9-f49937debfa6_1342x995.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_n2w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42796661-f7ba-464d-81e9-f49937debfa6_1342x995.png 424w, https://substackcdn.com/image/fetch/$s_!_n2w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42796661-f7ba-464d-81e9-f49937debfa6_1342x995.png 848w, https://substackcdn.com/image/fetch/$s_!_n2w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42796661-f7ba-464d-81e9-f49937debfa6_1342x995.png 1272w, https://substackcdn.com/image/fetch/$s_!_n2w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42796661-f7ba-464d-81e9-f49937debfa6_1342x995.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_n2w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42796661-f7ba-464d-81e9-f49937debfa6_1342x995.png" width="1342" height="995" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/42796661-f7ba-464d-81e9-f49937debfa6_1342x995.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:995,&quot;width&quot;:1342,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:216540,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/189561530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42796661-f7ba-464d-81e9-f49937debfa6_1342x995.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_n2w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42796661-f7ba-464d-81e9-f49937debfa6_1342x995.png 424w, https://substackcdn.com/image/fetch/$s_!_n2w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42796661-f7ba-464d-81e9-f49937debfa6_1342x995.png 848w, https://substackcdn.com/image/fetch/$s_!_n2w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42796661-f7ba-464d-81e9-f49937debfa6_1342x995.png 1272w, https://substackcdn.com/image/fetch/$s_!_n2w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42796661-f7ba-464d-81e9-f49937debfa6_1342x995.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>Your Account</strong></h3><ul><li><p>The extension <strong>auto-detects</strong> your Substack account and your publications. You&#8217;ll see &#8220;Logged in as [Your Name] (@yourhandle)&#8221; when it works.</p></li><li><p>If you have <strong>more than one publication</strong>, use the <strong>Publication</strong> dropdown here (or in the popup) to choose which publication&#8217;s subscribers to use for the list.</p></li><li><p>If auto-detection fails, you can enter your <strong>Publication URL</strong> manually (e.g. <code>yourname.substack.com</code>).</p></li></ul><h3><strong>Send Settings</strong></h3><ul><li><p><strong>Delay between sends (seconds):</strong> How many seconds to wait between each DM. <strong>We recommend 10-15 seconds.</strong> The minimum is 3. </p></li><li><p>A higher delay is more respectful to Substack and reduces the chance of looking like spam.</p></li></ul><h3><strong>Campaigns</strong></h3><ul><li><p><strong>Max messages per run</strong> &#8212; Maximum number of recipients per campaign send (e.g. 100).</p></li><li><p><strong>Require preview before send</strong> &#8212; When on, you must run <strong>Run Preview</strong> (and see the results table) before <strong>Send Campaign</strong>.</p></li><li><p><strong>Only allow SELECT (SQL safety)</strong> &#8212; When on, campaign SQL must be SELECT-only; other statements are blocked.</p></li></ul><h3><strong>Advanced: StackContacts Data Source</strong></h3><ul><li><p>This section is <strong>optional</strong>. Use it only if you use the <strong>StackContacts</strong> tool and have an export file (e.g. a StackContacts database file) that you want to use instead of the built-in Substack subscriber list.</p></li><li><p>When a StackContacts file is configured, the extension uses that data source instead of the Substack API. You can choose a <strong>Publication Schema</strong> from the file; only publications that match your current Substack account are shown.</p></li><li><p>If you don&#8217;t use StackContacts, you can ignore this section.</p></li></ul><h2><strong>Best practices for sending DMs to new subscribers</strong></h2><ul><li><p><strong>Only message your own subscribers.</strong> The extension is for people who have already subscribed to your publication. Don&#8217;t use it for cold outreach or people who haven&#8217;t opted in.</p></li><li><p><strong>Keep messages short and useful.</strong> A brief welcome, a thank-you, or one helpful link is enough. Avoid long or salesy copy.</p></li><li><p><strong>Use &#8220;Only Empty Chat&#8221;</strong> when welcoming new subscribers so you don&#8217;t message the same person twice.</p></li><li><p><strong>Respect the delay.</strong> Keep the delay at 10-15 seconds (or higher). Don&#8217;t set it to the minimum unless you have a good reason.</p></li><li><p><strong>Cap the number per run.</strong> Start with 5-10 messages to test; then increase if you&#8217;re happy with the result. Avoid very large batches in one go.</p></li><li><p><strong>You trigger each run.</strong> The extension does not send messages on its own. You click <strong>Start Automation</strong> each time. That keeps you in control and aligned with how Substack expects tools to behave.</p></li></ul><h2><strong>Troubleshooting</strong></h2><ul><li><p><strong>&#8220;Not logged in&#8221; or &#8220;Can&#8217;t reach Substack&#8221;</strong><br>Log in to Substack in this browser and try again. Check your internet connection. If it still fails, open Settings and see if the extension can detect your account.</p></li><li><p><strong>Wrong publication or no subscribers</strong><br>Open the popup or Settings and check which publication is selected (dropdown or &#8220;from file&#8221;). Make sure that publication has subscribers. If you use the Substack API, the extension will show how many subscribers it found when you pick a publication in Settings.</p></li><li><p><strong>Messages not sending or errors during a run</strong><br>Check that the message is not empty and that <strong>Number of subscribers to message</strong> is at least 1. If <strong>Only Empty Chat</strong> is on, some candidates may be skipped because you&#8217;ve already messaged them; the final count will show sent, skipped, and failed.</p></li><li><p><strong>Campaigns: &#8220;Load database in Settings&#8221; or &#8220;Table does not exist&#8221;</strong><br>The Campaigns tab uses the same StackContacts file and publication schema as the Send tab. In <strong>Settings</strong> &gt; <strong>Advanced: StackContacts Data Source</strong>, choose your database file and select a <strong>Publication Schema</strong>. In your campaign SQL, use <code>mydb."{schema}".table_name</code> (the extension replaces <code>{schema}</code> with the selected schema). Table names must match your file (e.g. <code>subscribers_summary</code>, <code>dm_threads</code>, <code>dm_thread_participants</code>).</p></li></ul><p></p><p>If you have any questions about this product or have ideas who to make it better, leave a comment  or send me a DM. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/p/stackcontacts-connect-user-manual/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://stackcontacts.substack.com/p/stackcontacts-connect-user-manual/comments"><span>Leave a comment</span></a></p><p>&#8212; Finn </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">StackContacts is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[How to Say Hi to Your New Substack Subscribers - Without the Grind or the Spam]]></title><description><![CDATA[In my tests, DMs blew my post response rate out of the water. Here&#8217;s the new tool I built.]]></description><link>https://stackcontacts.substack.com/p/how-to-say-hi-to-your-new-substack</link><guid isPermaLink="false">https://stackcontacts.substack.com/p/how-to-say-hi-to-your-new-substack</guid><dc:creator><![CDATA[Finn Tropy | StackContacts]]></dc:creator><pubDate>Mon, 16 Feb 2026 13:03:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!sMjf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e75973-8459-48f1-9883-0192232f1ca4_1200x1204.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!sMjf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e75973-8459-48f1-9883-0192232f1ca4_1200x1204.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sMjf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e75973-8459-48f1-9883-0192232f1ca4_1200x1204.png 424w, https://substackcdn.com/image/fetch/$s_!sMjf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e75973-8459-48f1-9883-0192232f1ca4_1200x1204.png 848w, https://substackcdn.com/image/fetch/$s_!sMjf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e75973-8459-48f1-9883-0192232f1ca4_1200x1204.png 1272w, https://substackcdn.com/image/fetch/$s_!sMjf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e75973-8459-48f1-9883-0192232f1ca4_1200x1204.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sMjf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e75973-8459-48f1-9883-0192232f1ca4_1200x1204.png" width="1200" height="1204" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32e75973-8459-48f1-9883-0192232f1ca4_1200x1204.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1204,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sMjf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e75973-8459-48f1-9883-0192232f1ca4_1200x1204.png 424w, https://substackcdn.com/image/fetch/$s_!sMjf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e75973-8459-48f1-9883-0192232f1ca4_1200x1204.png 848w, https://substackcdn.com/image/fetch/$s_!sMjf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e75973-8459-48f1-9883-0192232f1ca4_1200x1204.png 1272w, https://substackcdn.com/image/fetch/$s_!sMjf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32e75973-8459-48f1-9883-0192232f1ca4_1200x1204.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">StackContacts Connect makes the first contact with one click</figcaption></figure></div><p>This one&#8217;s for anyone who runs a newsletter on Substack. If that&#8217;s not you, no worries&#8212;see you next time.</p><p>You&#8217;re not broken. Your tools are.</p><p>If you&#8217;ve run a publication, you&#8217;ve felt it: you want to say hi to new subscribers, or follow up with people who&#8217;ve been quiet for a while. </p><p>Doing it one-by-one in the Substack chat is a lot of work&#8212;and it doesn&#8217;t scale. Doing it with sketchy automation or spray-and-pray DMs is the opposite of what your readers signed up for. </p><p>So you&#8217;re stuck between <em><strong>&#8220;I should reach out&#8221;</strong></em> and <em><strong>&#8220;I don&#8217;t have a good way to do it.&#8221;</strong></em></p><p><a href="https://finntropy.gumroad.com/l/stackcontacts_connect">StackContacts Connect</a> is a Chrome extension built to sit in that gap. It helps you send <em><strong>personalized direct messages (DMs)</strong></em> to <em><strong>your own Substack subscribers</strong></em>, in small batches, with a delay between each send&#8212;so you stay in control and stay on the right side of how Substack expects tools to behave.</p><h2><strong>What It Actually Does</strong></h2><p>StackContacts Connect does one job: it lets you message up to 50 of your subscribers in one run, with one message at a time and a pause you choose between each send. </p><p>You write the message (or a template), set how many people to include, flip a couple of toggles, and click <strong>Start Automation</strong>. </p><p>No wizard, no dashboard&#8212;just one form and one action.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!81Ar!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40026aa2-eb68-4ca1-b724-746e2ef32591_1204x1206.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!81Ar!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40026aa2-eb68-4ca1-b724-746e2ef32591_1204x1206.png 424w, https://substackcdn.com/image/fetch/$s_!81Ar!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40026aa2-eb68-4ca1-b724-746e2ef32591_1204x1206.png 848w, https://substackcdn.com/image/fetch/$s_!81Ar!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40026aa2-eb68-4ca1-b724-746e2ef32591_1204x1206.png 1272w, https://substackcdn.com/image/fetch/$s_!81Ar!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40026aa2-eb68-4ca1-b724-746e2ef32591_1204x1206.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!81Ar!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40026aa2-eb68-4ca1-b724-746e2ef32591_1204x1206.png" width="1204" height="1206" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/40026aa2-eb68-4ca1-b724-746e2ef32591_1204x1206.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1206,&quot;width&quot;:1204,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:137425,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/188042092?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40026aa2-eb68-4ca1-b724-746e2ef32591_1204x1206.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!81Ar!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40026aa2-eb68-4ca1-b724-746e2ef32591_1204x1206.png 424w, https://substackcdn.com/image/fetch/$s_!81Ar!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40026aa2-eb68-4ca1-b724-746e2ef32591_1204x1206.png 848w, https://substackcdn.com/image/fetch/$s_!81Ar!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40026aa2-eb68-4ca1-b724-746e2ef32591_1204x1206.png 1272w, https://substackcdn.com/image/fetch/$s_!81Ar!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F40026aa2-eb68-4ca1-b724-746e2ef32591_1204x1206.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">StackContacts Connect Chrome Extension</figcaption></figure></div><p>You can personalize each message with the recipient&#8217;s name. Use <code>{{USER_NAME}}</code> in your text; when <strong>Unique Message</strong> is on, the extension replaces it with their name as they&#8217;ve configured it in Substack Settings.</p><p>So &#8220;<em>Hi {{USER_NAME}}, thanks for subscribing</em>&#8221; becomes <em>&#8220;Hi Leigh Smith, thanks for subscribing&#8221;</em> for Leigh, and <em>&#8220;Hi Jim Wesson, thanks for subscribing&#8221;</em> for Jim. Same draft, one click&#8212;but each person gets a message that feels written for them.</p><p>Why not just {{FIRST_NAME}} you may ask?  Based on analysis of my subscribers that would fail over 40% of the cases. I found this out by sending awkward DMs with  &#8220;Hi Dr.,&#8221; or &#8220;Hi The,&#8221; to my subscribers. </p><p>Here are the user name patterns from my subscribers. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EtOj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f17c4dd-361d-4c37-b090-e80fc82e59c0_1412x580.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EtOj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f17c4dd-361d-4c37-b090-e80fc82e59c0_1412x580.png 424w, https://substackcdn.com/image/fetch/$s_!EtOj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f17c4dd-361d-4c37-b090-e80fc82e59c0_1412x580.png 848w, https://substackcdn.com/image/fetch/$s_!EtOj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f17c4dd-361d-4c37-b090-e80fc82e59c0_1412x580.png 1272w, https://substackcdn.com/image/fetch/$s_!EtOj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f17c4dd-361d-4c37-b090-e80fc82e59c0_1412x580.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EtOj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f17c4dd-361d-4c37-b090-e80fc82e59c0_1412x580.png" width="1412" height="580" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6f17c4dd-361d-4c37-b090-e80fc82e59c0_1412x580.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:580,&quot;width&quot;:1412,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:127794,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/188042092?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f17c4dd-361d-4c37-b090-e80fc82e59c0_1412x580.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EtOj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f17c4dd-361d-4c37-b090-e80fc82e59c0_1412x580.png 424w, https://substackcdn.com/image/fetch/$s_!EtOj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f17c4dd-361d-4c37-b090-e80fc82e59c0_1412x580.png 848w, https://substackcdn.com/image/fetch/$s_!EtOj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f17c4dd-361d-4c37-b090-e80fc82e59c0_1412x580.png 1272w, https://substackcdn.com/image/fetch/$s_!EtOj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6f17c4dd-361d-4c37-b090-e80fc82e59c0_1412x580.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">User name patterns observed in my Substack subscriber base</figcaption></figure></div><p>The <strong>Only Empty Chat</strong> toggle matters. When it&#8217;s on, the extension only messages people you haven&#8217;t already started a conversation with. </p><p>That&#8217;s how you welcome new subscribers without saying &#8220;Hi!&#8221; to someone you already said &#8220;Hi!&#8221; to last week. When it&#8217;s off, you can include existing threads&#8212;handy for follow-ups. You decide each time.</p><h2><strong>Why a Chrome Extension, and Why the API</strong></h2><p>Earlier designs drove Substack&#8217;s chat UI with a content script: open the page, fill the &#8220;To:&#8221; field, type the message, click Send. It worked in theory.</p><p>In practice, any Substack redesign or CSS change could break the selectors. Failures were silent and hard to debug. The code was heavier and more fragile than it needed to be.</p><p>So I switched to Substack&#8217;s own APIs. The extension talks to the same endpoints Substack&#8217;s UI uses&#8212;fetch subscribers, start a thread, send a message&#8212;via <code>fetch()</code> with your existing session. No DOM automation. No clicking around in a tab. One request per send, clear success or failure.</p><p>The result: fewer lines of code, more reliable behavior, and errors you can actually explain when something goes wrong.</p><p>Both the subscriber list and the actual DM sending go through the API. You don&#8217;t hand your credentials to a third-party server. The extension runs in your browser and uses the session you already have when you&#8217;re logged into Substack. </p><p>No backend. No new account. Just you, your list, and a controlled send loop.</p><h2><strong>Zero-Config and Optional Power User Mode</strong></h2><p>By default, you don&#8217;t need a database or a file. You select your publication (the extension auto-detects your primary and other publications), and it pulls subscribers straight from Substack&#8217;s subscriber-stats endpoint&#8212;the same data API Substack&#8217;s own dashboard uses. You get names, user IDs, and subscription dates. Newest subscribers first.</p><p>That&#8217;s enough for &#8220;message my 50 newest subscribers&#8221; or &#8220;welcome people I haven&#8217;t messaged yet&#8221; without touching a single file.</p><h3>Power User Mode</h3><p>If you use my <strong><a href="https://finntropy.gumroad.com/l/stackcontacts">StackContacts</a></strong><a href="https://finntropy.gumroad.com/l/stackcontacts"> tool</a> and have a local database export, you can point this extension at that file instead. </p><p>Then you can run custom SQL&#8212;for example, <em><strong>&#8220;my paid monthly subscribers who have no DM thread yet&#8221;</strong></em> or &#8220;<em><strong>threads where we haven&#8217;t replied in 14 days&#8221;</strong></em>&#8212;and use that list as the recipient queue. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!B3Wy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90367482-e000-4f79-b2b1-8b4b2cd03aec_2568x1986.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!B3Wy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90367482-e000-4f79-b2b1-8b4b2cd03aec_2568x1986.png 424w, https://substackcdn.com/image/fetch/$s_!B3Wy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90367482-e000-4f79-b2b1-8b4b2cd03aec_2568x1986.png 848w, https://substackcdn.com/image/fetch/$s_!B3Wy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90367482-e000-4f79-b2b1-8b4b2cd03aec_2568x1986.png 1272w, https://substackcdn.com/image/fetch/$s_!B3Wy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90367482-e000-4f79-b2b1-8b4b2cd03aec_2568x1986.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!B3Wy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90367482-e000-4f79-b2b1-8b4b2cd03aec_2568x1986.png" width="1456" height="1126" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/90367482-e000-4f79-b2b1-8b4b2cd03aec_2568x1986.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1126,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:801494,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/188042092?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90367482-e000-4f79-b2b1-8b4b2cd03aec_2568x1986.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!B3Wy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90367482-e000-4f79-b2b1-8b4b2cd03aec_2568x1986.png 424w, https://substackcdn.com/image/fetch/$s_!B3Wy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90367482-e000-4f79-b2b1-8b4b2cd03aec_2568x1986.png 848w, https://substackcdn.com/image/fetch/$s_!B3Wy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90367482-e000-4f79-b2b1-8b4b2cd03aec_2568x1986.png 1272w, https://substackcdn.com/image/fetch/$s_!B3Wy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90367482-e000-4f79-b2b1-8b4b2cd03aec_2568x1986.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Custom SQL query to select only annual and monthly paid subscibers</figcaption></figure></div><p>StackContact database stays optional. Most users will never need it; the default path is &#8220;Substack API only, zero database file setup.&#8221;</p><p><strong>UPDATE:</strong> The latest version has a Campaign mode - see this post: </p><div class="embedded-post-wrap" data-attrs="{&quot;id&quot;:188761443,&quot;url&quot;:&quot;https://finntropy.substack.com/p/your-best-subscribers-arent-in-your&quot;,&quot;publication_id&quot;:2636565,&quot;publication_name&quot;:&quot;Finn'sights&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!f1X7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F428bef97-e2b5-4627-84e9-b759a9683982_942x942.png&quot;,&quot;title&quot;:&quot;Your Best Subscribers Aren't in Your Inbox&#8212;They're in Chat&quot;,&quot;truncated_body_text&quot;:&quot;Nearly 2 in 5 new subscribers respond to my welcome DM. Industry benchmarks for outreach are 5&#8211;15%&#8212;so that number isn&#8217;t a fluke, and you can use it.&quot;,&quot;date&quot;:&quot;2026-02-22T13:01:16.811Z&quot;,&quot;like_count&quot;:29,&quot;comment_count&quot;:8,&quot;bylines&quot;:[{&quot;id&quot;:121030277,&quot;name&quot;:&quot;Finn Tropy&quot;,&quot;handle&quot;:&quot;finntropy&quot;,&quot;previous_name&quot;:null,&quot;photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CrQZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F24c22723-7e0c-4b43-b59d-1334e23f842f_1024x1024.png&quot;,&quot;bio&quot;:&quot;I study creator growth the way engineers study systems&#8212;with experiments, dashboards, and curiosity. I build tools, test ideas on myself, and share what truly moves the needle for busy Substack creators. My tools store is https://finntropy.gumroad.com&quot;,&quot;profile_set_up_at&quot;:&quot;2024-05-19T18:50:58.930Z&quot;,&quot;reader_installed_at&quot;:&quot;2024-08-13T23:38:47.446Z&quot;,&quot;publicationUsers&quot;:[{&quot;id&quot;:2672674,&quot;user_id&quot;:121030277,&quot;publication_id&quot;:2636565,&quot;role&quot;:&quot;admin&quot;,&quot;public&quot;:true,&quot;is_primary&quot;:true,&quot;publication&quot;:{&quot;id&quot;:2636565,&quot;name&quot;:&quot;Finn'sights&quot;,&quot;subdomain&quot;:&quot;finntropy&quot;,&quot;custom_domain&quot;:null,&quot;custom_domain_optional&quot;:false,&quot;hero_text&quot;:&quot;Weekly insights, tips, and tools to help you grow as a writer and learn from the best.&quot;,&quot;logo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/428bef97-e2b5-4627-84e9-b759a9683982_942x942.png&quot;,&quot;author_id&quot;:121030277,&quot;primary_user_id&quot;:121030277,&quot;theme_var_background_pop&quot;:&quot;#6B26FF&quot;,&quot;created_at&quot;:&quot;2024-05-19T18:51:30.000Z&quot;,&quot;email_from_name&quot;:null,&quot;copyright&quot;:&quot;Finn Tropy&quot;,&quot;founding_plan_name&quot;:null,&quot;community_enabled&quot;:true,&quot;invite_only&quot;:false,&quot;payments_state&quot;:&quot;disabled&quot;,&quot;language&quot;:null,&quot;explicit&quot;:false,&quot;homepage_type&quot;:&quot;magaziney&quot;,&quot;is_personal_mode&quot;:false}}],&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null,&quot;status&quot;:{&quot;bestsellerTier&quot;:null,&quot;subscriberTier&quot;:1,&quot;leaderboard&quot;:null,&quot;vip&quot;:false,&quot;badge&quot;:{&quot;type&quot;:&quot;subscriber&quot;,&quot;tier&quot;:1,&quot;accent_colors&quot;:null},&quot;paidPublicationIds&quot;:[2626440,4166813,5597038],&quot;subscriber&quot;:null}}],&quot;utm_campaign&quot;:null,&quot;belowTheFold&quot;:true,&quot;type&quot;:&quot;newsletter&quot;,&quot;language&quot;:&quot;en&quot;,&quot;source&quot;:null}" data-component-name="EmbeddedPostToDOM"><a class="embedded-post" native="true" href="https://finntropy.substack.com/p/your-best-subscribers-arent-in-your?utm_source=substack&amp;utm_campaign=post_embed&amp;utm_medium=web"><div class="embedded-post-header"><img class="embedded-post-publication-logo" src="https://substackcdn.com/image/fetch/$s_!f1X7!,w_56,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F428bef97-e2b5-4627-84e9-b759a9683982_942x942.png" loading="lazy"><span class="embedded-post-publication-name">Finn'sights</span></div><div class="embedded-post-title-wrapper"><div class="embedded-post-title">Your Best Subscribers Aren't in Your Inbox&#8212;They're in Chat</div></div><div class="embedded-post-body">Nearly 2 in 5 new subscribers respond to my welcome DM. Industry benchmarks for outreach are 5&#8211;15%&#8212;so that number isn&#8217;t a fluke, and you can use it&#8230;</div><div class="embedded-post-cta-wrapper"><span class="embedded-post-cta">Read more</span></div><div class="embedded-post-meta">3 months ago &#183; 29 likes &#183; 8 comments &#183; Finn Tropy</div></a></div><h2><strong>You&#8217;re in Control</strong></h2><p>Every run is <strong>you</strong> clicking <strong>Start Automation</strong>. </p><p>The extension doesn&#8217;t send on a schedule or in the background. It doesn&#8217;t blast hundreds of DMs while you&#8217;re away. You choose the message, the cap (1&#8211;50), and the delay between sends. A confirmation step shows you how many people will get the message before anything goes out.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Hz-a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04895dc-de1d-4429-b3ce-b3b100bf5914_1204x1206.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Hz-a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04895dc-de1d-4429-b3ce-b3b100bf5914_1204x1206.png 424w, https://substackcdn.com/image/fetch/$s_!Hz-a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04895dc-de1d-4429-b3ce-b3b100bf5914_1204x1206.png 848w, https://substackcdn.com/image/fetch/$s_!Hz-a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04895dc-de1d-4429-b3ce-b3b100bf5914_1204x1206.png 1272w, https://substackcdn.com/image/fetch/$s_!Hz-a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04895dc-de1d-4429-b3ce-b3b100bf5914_1204x1206.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Hz-a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04895dc-de1d-4429-b3ce-b3b100bf5914_1204x1206.png" width="1204" height="1206" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d04895dc-de1d-4429-b3ce-b3b100bf5914_1204x1206.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1206,&quot;width&quot;:1204,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:109029,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/188042092?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04895dc-de1d-4429-b3ce-b3b100bf5914_1204x1206.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Hz-a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04895dc-de1d-4429-b3ce-b3b100bf5914_1204x1206.png 424w, https://substackcdn.com/image/fetch/$s_!Hz-a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04895dc-de1d-4429-b3ce-b3b100bf5914_1204x1206.png 848w, https://substackcdn.com/image/fetch/$s_!Hz-a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04895dc-de1d-4429-b3ce-b3b100bf5914_1204x1206.png 1272w, https://substackcdn.com/image/fetch/$s_!Hz-a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04895dc-de1d-4429-b3ce-b3b100bf5914_1204x1206.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Confirmation Step before you start sending. This from my StackContacts publication.</figcaption></figure></div><p>During the run, you see progress (&#8221;Sending 23 of 50&#8221;) and you can <strong>Pause</strong> at any time.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EXqE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505e08de-10ab-4d64-828c-41627e84de9a_1200x1204.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EXqE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505e08de-10ab-4d64-828c-41627e84de9a_1200x1204.png 424w, https://substackcdn.com/image/fetch/$s_!EXqE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505e08de-10ab-4d64-828c-41627e84de9a_1200x1204.png 848w, https://substackcdn.com/image/fetch/$s_!EXqE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505e08de-10ab-4d64-828c-41627e84de9a_1200x1204.png 1272w, https://substackcdn.com/image/fetch/$s_!EXqE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505e08de-10ab-4d64-828c-41627e84de9a_1200x1204.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EXqE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505e08de-10ab-4d64-828c-41627e84de9a_1200x1204.png" width="1200" height="1204" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/505e08de-10ab-4d64-828c-41627e84de9a_1200x1204.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1204,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EXqE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505e08de-10ab-4d64-828c-41627e84de9a_1200x1204.png 424w, https://substackcdn.com/image/fetch/$s_!EXqE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505e08de-10ab-4d64-828c-41627e84de9a_1200x1204.png 848w, https://substackcdn.com/image/fetch/$s_!EXqE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505e08de-10ab-4d64-828c-41627e84de9a_1200x1204.png 1272w, https://substackcdn.com/image/fetch/$s_!EXqE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F505e08de-10ab-4d64-828c-41627e84de9a_1200x1204.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Automation running</figcaption></figure></div><p>That&#8217;s deliberate. <a href="https://substack.com/tos">Substack&#8217;s terms and content guidelines</a> don&#8217;t spell out &#8220;bulk DM&#8221; rules in one sentence, but they&#8217;re clear on no spam, no unattended automation, and no unreasonable load. </p><p>Sending only to your own subscribers, with a delay and a per-run cap, keeps you inside those expectations. Good software doesn&#8217;t push the platform; it makes it easier to do the right thing.</p><p>Subscribers will see your DM and can respond using the <a href="https://substack.com/chat">Substack Chat link</a>. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KUlA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc619b1d0-7361-453d-a526-3a575f630387_1808x1334.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KUlA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc619b1d0-7361-453d-a526-3a575f630387_1808x1334.png 424w, https://substackcdn.com/image/fetch/$s_!KUlA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc619b1d0-7361-453d-a526-3a575f630387_1808x1334.png 848w, https://substackcdn.com/image/fetch/$s_!KUlA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc619b1d0-7361-453d-a526-3a575f630387_1808x1334.png 1272w, https://substackcdn.com/image/fetch/$s_!KUlA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc619b1d0-7361-453d-a526-3a575f630387_1808x1334.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KUlA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc619b1d0-7361-453d-a526-3a575f630387_1808x1334.png" width="1456" height="1074" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c619b1d0-7361-453d-a526-3a575f630387_1808x1334.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1074,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KUlA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc619b1d0-7361-453d-a526-3a575f630387_1808x1334.png 424w, https://substackcdn.com/image/fetch/$s_!KUlA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc619b1d0-7361-453d-a526-3a575f630387_1808x1334.png 848w, https://substackcdn.com/image/fetch/$s_!KUlA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc619b1d0-7361-453d-a526-3a575f630387_1808x1334.png 1272w, https://substackcdn.com/image/fetch/$s_!KUlA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc619b1d0-7361-453d-a526-3a575f630387_1808x1334.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">This is how the first contact looks like</figcaption></figure></div><h2><strong>Best Practices</strong></h2><ul><li><p><strong>Only message your own subscribers</strong>&#8212;people who&#8217;ve already subscribed to your publication.</p></li><li><p><strong>Keep the message short and useful</strong>&#8212;a welcome, a thank-you, one link.</p></li><li><p><strong>Use Only Empty Chat</strong> when welcoming new subscribers so you don&#8217;t double-message.</p></li><li><p><strong>Respect the delay</strong>&#8212;10&#8211;15 seconds between sends is a solid default; going to the minimum &#8220;because you can&#8221; isn&#8217;t worth the risk.</p></li><li><p><strong>Start small</strong>&#8212; 1...5 messages to test, then scale up if you&#8217;re happy with the result.</p></li><li><p><strong>You trigger each run</strong>&#8212;the extension doesn&#8217;t send on its own.</p><p></p></li></ul><h2><strong>Why DMs Hit Different</strong></h2><p>In my testing I&#8217;ve seen <strong>up to 53% response rate in the first four hours</strong>&#8212;far above what I expected. For comparison: my posts get about <strong>2.8%</strong> (comments per delivered email). </p><p>DMs are a much more powerful, personal way to start the conversation with subscribers. Same audience; different channel; the numbers speak for themselves.</p><h2><strong>Who This Is For</strong></h2><p><strong><a href="https://finntropy.gumroad.com/l/stackcontacts_connect">StackContacts Connect</a></strong> is for newsletter creators who want to reach their subscribers personally&#8212;without grinding through the chat UI one by one and without turning into a spammer. It&#8217;s infrastructure: a single-form tool that does one job well, stays out of your way, and leaves you in control. If that&#8217;s the gap you&#8217;re in, it&#8217;s worth a look.</p><h2><strong>Troubleshooting</strong></h2><ul><li><p><strong>&#8220;Not logged in&#8221; or &#8220;Can&#8217;t reach Substack&#8221;</strong> &#8212; Log in to Substack in the same browser and check your connection.</p></li><li><p><strong>Wrong publication or no subscribers</strong> &#8212; Open your Substack Settings and confirm which publication is selected and that it has subscribers.</p></li><li><p><strong>Messages not sending or errors mid-run</strong> &#8212; Check that the message isn&#8217;t empty and &#8220;Number of subscribers&#8221; is at least 1. With <strong>Only Empty Chat</strong> on, some recipients may be skipped because you&#8217;ve already messaged them; the final count will show sent, skipped, and failed.</p></li></ul><p></p><p>If you run a Substack publication and this sounds like your kind of tool, give <a href="https://finntropy.gumroad.com/l/stackcontacts_connect">StackContacts Connect </a>a try. </p><p>Questions or feedback? Drop a comment below&#8212;I read and response to all of them. </p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/p/how-to-say-hi-to-your-new-substack/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://stackcontacts.substack.com/p/how-to-say-hi-to-your-new-substack/comments"><span>Leave a comment</span></a></p><p>And if you&#8217;re not yet subscribed, hit the button&#8212;more creator infrastructure, tools and practical guides on the way.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://stackcontacts.substack.com/subscribe?"><span>Subscribe now</span></a></p><p><em>More creator tools and guides: <a href="https://finntropy.gumroad.com/">Gumroad store</a> </em></p>]]></content:encoded></item><item><title><![CDATA[Cross-Platform Insights: Unify Your Substack and Gumroad Audience into a Single View]]></title><description><![CDATA[80% of your customers are invisible. Here's the AI prompt that reveals who they are and what they're worth]]></description><link>https://stackcontacts.substack.com/p/cross-platform-insights-unify-your</link><guid isPermaLink="false">https://stackcontacts.substack.com/p/cross-platform-insights-unify-your</guid><dc:creator><![CDATA[Finn Tropy | StackContacts]]></dc:creator><pubDate>Sun, 01 Feb 2026 13:00:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KNSj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd189daf-a117-4176-8bc7-2f469c0521ff_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!KNSj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd189daf-a117-4176-8bc7-2f469c0521ff_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KNSj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd189daf-a117-4176-8bc7-2f469c0521ff_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!KNSj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd189daf-a117-4176-8bc7-2f469c0521ff_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!KNSj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd189daf-a117-4176-8bc7-2f469c0521ff_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!KNSj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd189daf-a117-4176-8bc7-2f469c0521ff_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KNSj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd189daf-a117-4176-8bc7-2f469c0521ff_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dd189daf-a117-4176-8bc7-2f469c0521ff_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1557556,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/182276432?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd189daf-a117-4176-8bc7-2f469c0521ff_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KNSj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd189daf-a117-4176-8bc7-2f469c0521ff_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!KNSj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd189daf-a117-4176-8bc7-2f469c0521ff_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!KNSj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd189daf-a117-4176-8bc7-2f469c0521ff_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!KNSj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd189daf-a117-4176-8bc7-2f469c0521ff_1024x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>80% of creators can&#8217;t see their highest-value customers because Substack and Gumroad don&#8217;t talk to each other.</p><p>After analyzing my cross-platform data in <a href="https://www.stackcontacts.com/">StackContacts</a>, I discovered:</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">StackContacts is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><ul><li><p><strong>80.09% of my Gumroad customers</strong> (736 out of 919) <strong>have never subscribed to my Substack</strong></p></li><li><p>These &#8220;direct customers&#8221; find my products through Substack post links, Google, or referrals&#8212;then buy without subscribing</p></li><li><p>Only <strong>19.91% are subscriber-customers</strong> with full engagement data</p></li><li><p>But those subscriber-customers spend <strong>33% more</strong> ($19.60 vs. $14.70) and engage with <strong>17.55 posts on average</strong></p></li></ul><p>This means:</p><ol><li><p><strong>I&#8217;m missing engagement data for 80% of my customers</strong> (can&#8217;t nurture, can&#8217;t upsell effectively)</p></li><li><p><strong>I&#8217;m leaving money on the table</strong> (if all customers engaged like subscribers, average LTV [life-time value] jumps 33%)</p></li><li><p><strong>My Substack content IS working</strong>&#8212;31% of direct customer sales come from Substack links&#8212;but I&#8217;m not capturing those leads as subscribers</p></li></ol><p>Imagine if you could unify both platforms into a single customer view. You could:</p><ul><li><p>See which Substack content drives Gumroad sales</p></li><li><p>Identify high-value customers to convert into engaged subscribers</p></li><li><p>Calculate true customer lifetime value across both platforms</p></li><li><p>Target repeat purchase campaigns to your most engaged subscribers</p></li><li><p>Find &#8220;dark customers&#8221; who bought but never engaged (massive untapped upside)</p></li></ul><p>Let&#8217;s dig into your <a href="https://stackcontacts.com/">StackContacts</a> data and build that unified view.</p><h2><strong>The AI Prompt: Copy-Paste Ready</strong></h2><h3><strong>Ready-to-Use StackContacts AI Prompt</strong></h3><p>Copy this prompt and paste it into Claude (Cursor IDE or Claude Desktop) connected to your <a href="https://finntropy.gumroad.com/l/stackcontacts">StackContacts</a> database.</p><pre><code><code>Using my StackContacts tool, I want to unify my Substack and Gumroad audiences into a single customer view to understand cross-platform behavior and lifetime value.

Please run these analyses:

1. **Email Matching &amp; Overlap Analysis**
   - Count distinct emails in subscribers_detail (Substack)
   - Count distinct emails in gumroad_sales (Gumroad)
   - Find matched emails (present in both)
   - Calculate:
     * Total Substack subscribers
     * Total Gumroad customers
     * Matched emails
     * % of customers who are subscribers
     * % of subscribers who are customers
   - This shows platform overlap

2. **Customer Segmentation by Engagement**
   - For each Gumroad customer, determine:
     * Do they have a Substack profile? (exists in subscribers_detail)
     * Do they have engagement data? (exists in subscriber_events)
   - Segment into:
     * Full Data (Subscriber + Engagement)
     * Subscriber Only (No Engagement)
     * Gumroad Only (No Substack)
   - For each segment, show:
     * Customer count
     * % of total customers
     * Average spend per customer
     * Average posts engaged (if applicable)
   - This reveals data completeness

3. **Customer Lifetime Value by Purchase Behavior**
   - Group customers by:
     * One-Time Buyer (1 product, 1 purchase)
     * Repeat Single Product (1 product, multiple purchases)
     * Multi-Product (2-3 products)
     * Power Customer (4+ products)
   - For each segment, calculate:
     * Customer count
     * Average number of purchases
     * Average LTV (total spent)
     * Average customer lifespan (days from first to last purchase)
   - Sort by average LTV (highest first)
   - This shows who your best customers are

4. **Engagement-LTV Correlation**
   - For all customers, calculate their Substack engagement level:
     * Highly Engaged (50+ events)
     * Moderately Engaged (10-49 events)
     * Lightly Engaged (1-9 events)
     * No Engagement (0 events)
   - For each engagement level, show:
     * Customer count
     * Average purchases per customer
     * Average unique products purchased
     * Average LTV
     * Average posts engaged
   - Sort by average LTV (highest first)
   - This proves whether engagement drives spending

5. **Content-to-Product Affinity Mapping**
   - For customers who engaged with Substack content before purchasing:
     * Identify which posts they read in the 30 days before buying
     * Group by product purchased
   - Show:
     * Product name
     * Post title
     * Number of buyers who read this post (min 5 buyers)
     * Total engagement count
   - Limit to top 30 product-content pairs
   - This reveals "gateway content" for each product

6. **Channel Attribution for Direct Customers**
   - For customers who are NOT Substack subscribers (Gumroad-only):
     * Analyze referrer field to see where they came from
   - Group referrers into categories:
     * Substack (Post/Note Link)
     * Twitter
     * Google Search
     * Direct/Unknown
     * Gumroad Library
     * Other Referrer
   - Show:
     * Traffic source
     * Sales count
     * Unique customers
     * % of direct sales
   - Sort by sales count (highest first)
   - This shows how non-subscribers find your products

7. **Top Customer Engagement Analysis**
   - Identify top 50 customers by total spend
   - Group into tiers:
     * VIP ($100+)
     * High Value ($50-99)
     * Medium Value ($20-49)
     * Low Value (&lt;$20)
   - For each tier, show:
     * Customer count
     * Average spent
     * Average purchases
     * Average posts engaged
     * Average engagement events
     * Average link clicks
   - This reveals behavior patterns of your best customers

Please format results as clear tables with insights after each analysis.
</code></code></pre><h3><strong>Step-by-Step Instructions</strong></h3><h4><strong>1. Identify Your Database Schema</strong></h4><p>Confirm your schema prefix. This follows a pattern [pub_username_substack_com]  or [pub_customdomain_com] based on what publications you have configured in StackContacts tool. </p><p><strong>Quick check:</strong></p><pre><code><code>Show me the table names for subscribers_detail, subscriber_events, and gumroad_sales in the StackContacts tool.
</code></code></pre><h4><strong>2. Customize the Prompt (Optional)</strong></h4><p><strong>Adjustments based on your business:</strong></p><ul><li><p><strong>Date range:</strong> Add <code>WHERE created_at &gt;= '2024-XX-XX'</code> to focus on recent data</p></li><li><p><strong>Engagement thresholds:</strong> Adjust &#8220;50+ events&#8221; to match your posting frequency</p></li><li><p><strong>LTV tiers:</strong> Change dollar amounts ($100, $50, $20) to fit your product pricing</p></li><li><p><strong>Product limits:</strong> Increase/decrease &#8220;top 30&#8221; in Analysis #5 based on your product count</p></li></ul><h4><strong>3. Execute the Prompt</strong></h4><ol><li><p>Open <strong>Cursor IDE</strong> with Claude, or <strong>Claude Desktop</strong> with  configured StackContacts MCP server.</p></li><li><p>Paste the full prompt</p></li><li><p>Wait 60-90 seconds (runs at least 7 cross-platform queries)</p></li><li><p>Claude returns 7 analyses showing unified customer view</p></li></ol><h4><strong>4. Verify the Results</strong></h4><p><strong>What you should see:</strong></p><ul><li><p><strong>Analysis 1:</strong> Overlap showing 15-25% of customers are also subscribers (typical range)</p></li><li><p><strong>Analysis 2:</strong> 70-85% &#8220;Gumroad Only&#8221; customers (most creators have this blind spot)</p></li><li><p><strong>Analysis 3:</strong> Power customers with 3-5x higher LTV than one-time buyers</p></li><li><p><strong>Analysis 4:</strong> Highly engaged customers spending 50-100% more than non-engaged</p></li><li><p><strong>Analysis 5:</strong> Specific posts linked to specific products (content affinity)</p></li><li><p><strong>Analysis 6:</strong> 30-50% of direct sales coming from Substack links (even for non-subscribers)</p></li><li><p><strong>Analysis 7:</strong> VIP customers engaging with 15-25 posts on average</p></li></ul><p><strong>Red flags to watch for:</strong></p><ul><li><p><strong>Overlap &gt; 50%:</strong> Most customers are subscribers&#8212;you&#8217;re not reaching new audiences</p></li><li><p><strong>Overlap &lt; 10%:</strong> Very few customers subscribe&#8212;your content isn&#8217;t converting readers</p></li><li><p><strong>All customers in &#8220;No Engagement&#8221;:</strong> Email matching might be failing&#8212;check data quality</p></li><li><p><strong>Zero content affinity:</strong> Products might not be mentioned in posts&#8212;add more CTAs</p></li></ul><p><strong>Troubleshooting:</strong></p><ul><li><p>If Analysis #1 shows 0 matched emails: Check email formatting (lowercase, trim spaces)</p></li><li><p>If Analysis #5 returns empty: Customers might not have pre-purchase engagement&#8212;extend window to 60 or 90 days</p></li><li><p>If Analysis #6 shows &#8220;NULL&#8221; for referrers: Gumroad might not be tracking referrers&#8212;check your Gumroad settings</p></li></ul><p></p><h2><strong>Understanding Your Results: How to Interpret the Data</strong></h2><h3><strong>What the Numbers Mean</strong></h3><p></p><h4><strong>Analysis 1: Email Matching &amp; Overlap</strong></h4><pre><code><code>Substack Emails:1,175 
Gumroad Emails: 919 
Matched:183
% Customers Are Subscribers: 19.91% 
% Subscribers Are Customers: 15.57%</code></code></pre><p><strong>Interpretation:</strong></p><ul><li><p><strong>1,175 Substack subscribers</strong> (your content audience)</p></li><li><p><strong>919 Gumroad customers</strong> (your product buyers)</p></li><li><p><strong>183 matched emails</strong> (people in both systems using same email address)</p></li><li><p><strong>19.91% of customers are subscribers</strong> - 4 out of 5 buyers never signed up for your newsletter (or used different email for Gumroad) </p></li><li><p><strong>15.57% of subscribers are customers</strong> - Only 1 in 6 subscribers has bought</p></li></ul><p><strong>Key insight:</strong> You have <strong>736 &#8220;dark customers&#8221;</strong> (80%) who bought without subscribing. These are high-intent buyers you can&#8217;t nurture, can&#8217;t upsell to, and can&#8217;t engage with through email campaigns. <strong>Massive untapped opportunity.</strong></p><p></p><h4><strong>Analysis 2: Customer Segmentation by Engagement</strong></h4><pre><code><code>| Data Completeness | Customers | % of Customers | Avg Spend | Avg Posts Engaged |
|-------------------|-----------|----------------|-----------|-------------------|
| Gumroad Only      | 736       | 80.09%         | $14.70    | 0.0               |
| Full Data         | 183       | 19.91%         | $19.60    | 17.55             |</code></code></pre><p><strong>Interpretation:</strong></p><ul><li><p><strong>80.09% of customers</strong> have zero Substack data (can&#8217;t track their journey)</p></li><li><p><strong>19.91% of customers have full data</strong> (subscriber profile + engagement history)</p></li><li><p><strong>Full-data customers spend 33% more</strong> ($19.60 vs. $14.70)</p></li><li><p><strong>Full-data customers engage with 17.55 posts on average</strong> (high investment in your content)</p></li></ul><p><strong>Key insight:</strong> Converting &#8220;Gumroad Only&#8221; customers to engaged subscribers could boost average LTV from $14.70 to $19.60 - this is a <strong>33% increase</strong>. </p><p>At 736 customers, that&#8217;s <strong>$3,606 in additional revenue</strong> just from better cross-platform integration.</p><h4><strong>Analysis 3: Customer Lifetime Value (LTV) by Purchase Behavior</strong></h4><pre><code><code>| Customer Segment          | Count | Avg Purchases | Avg LTV | Avg Lifespan (Days) |
|---------------------------|-------|---------------|---------|---------------------|
| Power Customer (4+)       | 25    | 5.04          | $54.40  | 190.11              |
| Multi-Product (2-3)       | 212   | 2.33          | $39.12  | 100.01              |
| One-Time Buyer            | 662   | 1.00          | $16.32  | 0.00                |
| Repeat Single Product     | 20    | 2.40          | $11.50  | 66.03               |
</code></code></pre><p><strong>Interpretation:</strong></p><ul><li><p><strong>Power Customers (25):</strong> Buy 4+ products, spend $54.40, stay active for 190 days (6+ months)</p></li><li><p><strong>Multi-Product (212):</strong> Buy 2-3 products, spend $39.12, active for 100 days</p></li><li><p><strong>One-Time Buyers (662):</strong> 72% of customers buy once and never return, spend $16.32</p></li><li><p><strong>Repeat Single Product (20):</strong> Buy same product multiple times (subscriptions?), lowest LTV</p></li></ul><p><strong>Key insight:</strong> Your top 25 customers (2.7% of buyers) spend <strong>3.3x more</strong> than average. And 212 multi-product buyers (23%) drive significantly higher LTV. Focus on moving one-time buyers into the multi-product segment.</p><h4><strong>Analysis 4: Engagement-LTV Correlation</strong></h4><pre><code><code>| Engagement Level   | Customers | Avg Purchases | Avg Products | Avg LTV | Avg Posts |
|--------------------|-----------|---------------|--------------|---------|-----------|
| Moderately Engaged | 39        | 1.59          | 1.56         | $40.35  | 3.0       |
| Highly Engaged     | 137       | 2.03          | 1.82         | $36.29  | 20.2      |
| Lightly Engaged    | 7         | 1.57          | 1.57         | $22.97  | 0.29      |
| No Engagement      | 736       | 1.33          | 1.28         | $19.00  | 0.0       |
</code></code></pre><p><strong>Interpretation:</strong></p><ul><li><p><strong>Moderately Engaged (39 customers, 3 posts):</strong> Highest LTV at $40.35 (2.1x higher than non-engaged)</p></li><li><p><strong>Highly Engaged (137 customers, 20.2 posts):</strong> $36.29 LTV, 2.03 purchases (most loyal)</p></li><li><p><strong>No Engagement (736):</strong> $19.00 LTV, 1.33 purchases (80% of customers)</p></li></ul><p><strong>Why is &#8220;Moderately Engaged&#8221; highest LTV?</strong> Sweet spot&#8212;they engage enough to build trust (3 posts) but aren&#8217;t &#8220;browsers&#8221; who read everything. They&#8217;re problem-solvers who read your content, find solutions, and buy.</p><p><strong>Key insight:</strong> Engagement drives spending, but there&#8217;s a <strong>quality threshold</strong>. Getting customers to read 3-5 targeted posts is more valuable than getting them to read 20 random posts. Focus on converting the 736 non-engaged customers to &#8220;moderately engaged&#8221; status.</p><h4><strong>Analysis 5: Content-to-Product Affinity</strong></h4><pre><code><code>| Product Name               | Post Title           | Buyers Who Read | Engagements|
|----------------------------|----------------------|-----------------|-------------|
| Finn Tropy Substack Pro Studio| Substack Pro Studio User Guide | 32   | 585         |
| Finn Tropy Substack Pro Studio| How To Write Notes That Convert| 19   | 253         |
| Finn Tropy Substack Pro Studio &#128293; Growth Test for Serious ...  | 19   | 285         |
| Substack Control Center | You're Publishing Weekly, But ...    | 11   | 166         |
| Substack Control Center | How I Turned My Substack Posts ...   | 9    | 99          |
| CreativeTech Pro Studio (Bundle)| Substack Pro Studio User ... | 12   | 63          |</code></code></pre><p><strong>Interpretation:</strong></p><ul><li><p><strong>&#8220;Substack Pro Studio User Guide&#8221;</strong> is the #1 gateway content for your Pro Studio product (32 buyers read it before purchasing)</p></li><li><p><strong>&#8220;How To Write Notes That Convert&#8221;</strong> drives 19 Pro Studio sales (253 engagements)</p></li><li><p>Different posts lead to different products (Control Center buyers read different content than Pro Studio buyers)</p></li></ul><p><strong>Key insight:</strong> Each product has <strong>&#8220;gateway content&#8221;</strong>&#8212;specific posts that prime buyers. Double down on these posts:</p><ul><li><p>Reference them in product descriptions</p></li><li><p>Link to them in follow-up emails</p></li><li><p>Repost them as Notes</p></li><li><p>Turn them into lead magnets</p></li></ul><h4><strong>Analysis 6: Channel Attribution for Direct Customers</strong></h4><pre><code><code>| Traffic Source             | Sales | Customers | % of Direct Sales |
|----------------------------|-------|-----------|-------------------|
| Other Referrer             | 324   | 278       | 33.13%            |
| Substack (Post/Note Link)  | 304   | 277       | 31.08%            |
| Direct/Unknown             | 243   | 210       | 24.85%            |
| Google Search              | 78    | 77        | 7.98%             |
| Twitter                    | 15    | 15        | 1.53%             |
| Gumroad Library            | 14    | 10        | 1.43%             |
</code></code></pre><p><strong>Interpretation:</strong></p><ul><li><p><strong>31.08% of non-subscribers</strong> still come from Substack links (they clicked but didn&#8217;t subscribe)</p></li><li><p><strong>33.13% come from &#8220;Other Referrer&#8221;</strong> (likely other blogs, forums, YouTube, podcasts)</p></li><li><p><strong>7.98% from Google Search</strong> (SEO working, but not a huge driver)</p></li><li><p><strong>1.53% from Twitter</strong> (low&#8212;opportunity to grow here?)</p></li></ul><p><strong>Key insight:</strong> <strong>Substack content drives 31% of direct sales</strong> even when people don&#8217;t subscribe. Your posts are working as product landing pages. But you&#8217;re not capturing these leads&#8212;304 buyers clicked through without subscribing. </p><p>Add subscription CTAs to your product-focused posts.</p><h4><strong>Analysis 7: Top Customer Engagement Analysis</strong></h4><pre><code><code>| Customer Tier| Customers| Avg Spent| Avg Purchases| Avg Posts| Avg Events|Avg Clicks|
|--------------|----------|----------|--------------|----------|-----------|----------|
| VIP ($100+)  | 14       | $120.43  | 4.14         | 16.29    | 169.0     | 3.71     |
| High Value   | 36       | $89.06   | 1.75         | 4.25     | 60.06     | 1.44     |</code></code></pre><p><strong>Interpretation:</strong></p><ul><li><p><strong>14 VIP customers</strong> spend $120+ each, averaging <strong>4.14 purchases</strong> and engaging with <strong>16.29 posts</strong></p></li><li><p><strong>36 high-value customers</strong> spend $50-99, with lower engagement (4.25 posts)</p></li></ul><p><strong>Key insight:</strong> Your VIPs are <strong>deeply engaged</strong> (169 events, 16 posts). They&#8217;re not casual buyers - they&#8217;re superfans who read your content regularly and buy multiple products. Identify them by name and give them white-glove treatment:</p><ul><li><p>Personal thank-you emails</p></li><li><p>Early access to new products</p></li><li><p>Direct line to you for support</p></li><li><p>Exclusive content or community access</p></li></ul><p></p><h3><strong>Pattern Recognition</strong></h3><h4><strong>Pattern 1: The 80/20 Dark Customer Problem</strong></h4><p><strong>80% of your customers have zero Substack engagement.</strong> They found your product, bought it, and disappeared.</p><p><strong>Why?</strong> They discovered your content through search or referrals, clicked your product link, and bought without ever subscribing. Or they bought from a repost/share without visiting your Substack.</p><p><strong>Action:</strong> Add a post-purchase email sequence:</p><ol><li><p>&#8220;Thanks for buying [product]! Want to get more value? Subscribe to my newsletter for advanced tips.&#8221;</p></li><li><p>Include link to best posts related to the product they bought</p></li><li><p>Offer a content upgrade (guide, template, case study) in exchange for subscribing</p><p></p></li></ol><h4><strong>Pattern 2: Engagement = 2x LTV (But Only to a Point)</strong></h4><p>Moderately engaged customers ($40.35 LTV) spend more than highly engaged ($36.29) and WAY more than non-engaged ($19.00).</p><p><strong>Why?</strong> Reading 3-5 posts builds trust and demonstrates value without turning readers into &#8220;browsers.&#8221; Highly engaged readers might enjoy your writing but not need your products (yet).</p><p><strong>Action:</strong> Don&#8217;t optimize for maximum engagement. Optimize for <strong>relevant engagement</strong>&#8212;get customers to read the 3-5 posts that best showcase your products.</p><h4><strong>Pattern 3: Gateway Content Exists for Every Product</strong></h4><p>Specific posts consistently appear before specific product purchases. &#8220;User Guides&#8221; dominate, but tactical &#8220;how-to&#8221; posts also drive sales.</p><p><strong>Why?</strong> Buyers want proof of value before purchasing. Reading a user guide shows them exactly what they&#8217;ll get. How-to posts demonstrate your expertise.</p><p><strong>Action:</strong> For every product:</p><ol><li><p>Write a detailed user guide (even before launch)</p></li><li><p>Create 2-3 tactical how-to posts showing the product in action</p></li><li><p>Link these posts in your product description</p></li><li><p>Reference them in sales emails</p></li></ol><p></p><h4><strong>Pattern 4: Substack Links Drive 31% of &#8220;Non-Subscriber&#8221; Sales</strong></h4><p>Nearly 1 in 3 direct customers found your product through a Substack link but didn&#8217;t subscribe.</p><p><strong>Why?</strong> They were in &#8220;problem-solving mode&#8221;&#8212;clicked for the solution, bought immediately, and left. They weren&#8217;t thinking about long-term content consumption.</p><p><strong>Action:</strong> Add inline subscription CTAs to product-focused posts:</p><ul><li><p>&#8220;Want more insights like this? Subscribe below.&#8221;</p></li><li><p>&#8220;I share weekly tips on [topic]&#8212;join 1,000+ creators.&#8221;</p></li><li><p>Pop-up on exit intent: &#8220;Before you go, grab my free [resource]&#8221;</p></li></ul><h3><strong>Red Flags to Watch For</strong></h3><h4><strong>Warning Sign 1: Overlap &lt; 10%</strong></h4><p>If fewer than 10% of customers are subscribers, your Substack content isn&#8217;t converting readers to buyers. You have an audience but no sales funnel.</p><p><strong>Action:</strong> Audit your posts&#8212;how many mention your products? Add more product references, CTAs, and use cases. Make buying a natural next step.</p><h4><strong>Warning Sign 2: VIP Customers with Low Engagement</strong></h4><p>If your highest spenders barely engage with content, they&#8217;re discovering products elsewhere (referrals, search, ads). Your content isn&#8217;t driving revenue.</p><p><strong>Action:</strong> Survey VIP customers: &#8220;How did you find us?&#8221; Double down on whatever channel they mention.</p><h4><strong>Warning Sign 3: All Customers Are One-Time Buyers</strong></h4><p>If you have no multi-product or power customers, your products don&#8217;t complement each other or you&#8217;re not cross-selling.</p><p><strong>Action:</strong> Create product bundles, build upgrade paths (Basic &#8594; Pro), and send post-purchase upsell emails.</p><h3><strong>Actionable Insights</strong></h3><p><strong>How to translate numbers into decisions:</strong></p><p><strong>Insight:</strong> &#8220;80% of customers have no Substack data&#8221;<br><strong>Action:</strong> Launch post-purchase nurture sequence:</p><ul><li><p>Email 1: &#8220;Get more value from [product] with these posts...&#8221;</p></li><li><p>Email 2: &#8220;Advanced tips every week&#8212;subscribe here&#8221;</p></li><li><p>Track conversion rate (how many direct customers become subscribers)</p></li></ul><p><strong>Insight:</strong> &#8220;Moderately engaged customers spend $40.35 vs. $19.00 for non-engaged (2.1x)&#8221;<br><strong>Action:</strong> Create a &#8220;New Customer Onboarding&#8221; sequence:</p><ul><li><p>Send 3-5 best posts related to their purchase</p></li><li><p>Include product tips, case studies, and tutorials</p></li><li><p>Goal: Move them from &#8220;no engagement&#8221; to &#8220;moderately engaged&#8221; (3-5 posts)</p></li></ul><p><strong>Insight:</strong> &#8220;Power customers buy 4+ products and spend $54.40 (3.3x average)&#8221;<br><strong>Action:</strong> Identify your 25 power customers by name:</p><ul><li><p>Send personal thank-you email</p></li><li><p>Offer exclusive early access to new products</p></li><li><p>Ask for feedback on product roadmap</p></li><li><p>Create a private Slack/Discord for VIPs</p></li></ul><p><strong>Insight:</strong> &#8220;Substack links drive 31% of non-subscriber sales&#8221;<br><strong>Action:</strong> Add subscription CTAs to all product-focused posts:</p><ul><li><p>Inline: &#8220;Subscribe for more insights like this&#8221;</p></li><li><p>Exit pop-up: &#8220;Before you go, grab my free template&#8221;</p></li><li><p>Post-click: &#8220;You clicked [product link]&#8212;want weekly updates?&#8221;</p></li></ul><p><strong>Insight:</strong> &#8220;&#8217;User Guide&#8217; posts are gateway content for multiple products&#8221;<br><strong>Action:</strong> Write user guides for EVERY product:</p><ul><li><p>Publish them on Substack (not just in product docs)</p></li><li><p>Link from product description: &#8220;Read the full guide here&#8221;</p></li><li><p>Reference in sales emails: &#8220;See it in action&#8221;</p></li></ul><h3><strong>Prioritization Framework</strong></h3><h4><strong>Priority 1: Convert Dark Customers to Subscribers</strong></h4><p><strong>Impact:</strong> 736 customers with zero engagement&#8212;converting 20% would add 147 engaged subscribers</p><p><strong>Actions:</strong></p><ol><li><p>Export list of Gumroad customers not in <code>subscribers_detail</code></p></li><li><p>Send post-purchase email sequence:</p><ul><li><p>&#8220;Thanks for [product]! Here are 3 posts to get more value...&#8221;</p></li><li><p>Include subscribe CTA</p></li><li><p>Offer content upgrade (template, guide) in exchange for subscribing</p></li></ul></li><li><p>Track conversion rate weekly</p></li><li><p>Test subject lines, offers, and timing</p></li></ol><p><strong>Expected impact:</strong> 15-25% of direct customers subscribe, boosting future upsell opportunities</p><h4><strong>Priority 2: Create Gateway Content for Each Product</strong></h4><p><strong>Impact:</strong> Drive more sales from existing audience by showing value upfront</p><p><strong>Actions:</strong></p><ol><li><p>For each product, write:</p><ul><li><p>Detailed user guide (400-800 words)</p></li><li><p>How-to tutorial showing product in action</p></li><li><p>Case study or before/after results</p></li></ul></li><li><p>Publish on Substack (make public or free)</p></li><li><p>Link from product description: &#8220;Read the guide&#8221;</p></li><li><p>Reference in sales emails</p></li><li><p>Track views &#8594; clicks &#8594; purchases for each post</p></li></ol><p><strong>Expected impact:</strong> 20-30% increase in product page conversion rate</p><h4><strong>Priority 3: Build Power Customer Retention Program</strong></h4><p><strong>Impact:</strong> 25 power customers at $54 LTV&#8212;losing even 5 would cost $270 in future revenue</p><p><strong>Actions:</strong></p><ol><li><p>Export list of customers with 4+ product purchases</p></li><li><p>Send personal email: &#8220;You&#8217;re a VIP customer&#8212;want early access to [new product]?&#8221;</p></li><li><p>Create exclusive channel (private DMs, email list, Discord, Slack, etc)</p></li><li><p>Offer special perks:</p><ul><li><p>30% discount on future products</p></li><li><p>Free upgrades when you launch new versions</p></li><li><p>Direct priority support</p></li></ul></li><li><p>Survey them quarterly: &#8220;What should we build next?&#8221;</p></li></ol><p><strong>Expected impact:</strong> 80-90% retention rate for power customers (vs. 50% without program)</p><h4><strong>Priority 4: Optimize Substack-to-Gumroad Conversion Flow</strong></h4><p><strong>Impact:</strong> 31% of non-subscribers come from Substack links&#8212;improving that flow boosts sales 10-20%</p><p><strong>Actions:</strong></p><ol><li><p>Audit product-focused posts&#8212;how prominent are CTAs?</p></li><li><p>Add multiple CTAs:</p><ul><li><p>Inline (middle of post)</p></li><li><p>End of post</p></li><li><p>PS section</p></li></ul></li><li><p>A/B test CTA copy:</p><ul><li><p>&#8220;Check out [product]&#8221; vs. &#8220;Get [product] (20% off today)&#8221;</p></li><li><p>&#8220;Learn more&#8221; vs. &#8220;Buy now&#8221;</p></li></ul></li><li><p>Add exit-intent pop-up on product-focused posts</p></li><li><p>Track: Post views &#8594; link clicks &#8594; purchases</p></li></ol><p><strong>Expected impact:</strong> 15-25% increase in Substack &#8594; Gumroad conversion rate</p><p></p><h2><strong>Case Study: Real Results from My Data</strong></h2><h3><strong>The Setup</strong></h3><ul><li><p><strong>Publication:</strong> Finn&#8217;sights (finntropy.substack.com)</p></li><li><p><strong>Substack Subscribers:</strong> 1,175</p></li><li><p><strong>Gumroad Customers:</strong> 919</p></li><li><p><strong>Time Period:</strong> August 2024 - December 2025 (16 months)</p></li><li><p><strong>Products:</strong> 10 Substack creator tools ($0-$79)</p></li><li><p><strong>Hypothesis:</strong> &#8220;Unifying Substack + Gumroad data will reveal hidden revenue opportunities&#8221;</p></li></ul><h3><strong>The Analysis</strong></h3><p>I ran the cross-platform insights prompt on my StackContacts database. What I discovered completely changed my product strategy.</p><p><strong>Key Findings:</strong></p><ol><li><p><strong>80.09% of customers (736) never subscribed</strong> to my Substack (or used different email address)</p></li><li><p><strong>Full-data customers spend 33% more</strong> ($19.60 vs. $14.70)</p></li><li><p><strong>Power customers (25) spend 3.3x more</strong> than average ($54.40 vs. $16.50)</p></li><li><p><strong>Moderately engaged customers have highest LTV</strong> ($40.35 for 3 posts vs. $19 for 0 posts)</p></li><li><p><strong>&#8220;User Guide&#8221; posts are gateway content</strong> for multiple products</p></li><li><p><strong>31% of non-subscribers</strong> found products through Substack links</p></li></ol><h3><strong>Surprising Findings</strong></h3><h4><strong>Surprise #1: 80% of my customers are invisible</strong></h4><p>I assumed most customers came from my newsletter. <br>Nope. 736 out of 919 customers (80%) bought without subscribing.</p><p>They found my products through:</p><ul><li><p>Substack post links (31%) - clicked through without subscribing</p></li><li><p>Google search (8%) - landed on product-focused posts</p></li><li><p>Referrals (33%) - shared by others</p></li><li><p>Twitter (1.5%) - tiny but present</p></li></ul><p><strong>Why this shocked me:</strong> I was spending 80% of my time creating content for subscribers, but 80% of revenue came from non-subscribers.</p><p><strong>Result:</strong> I started treating every product-focused post as a landing page with clear subscribe CTAs.</p><p><strong>Outcome:</strong> Conversion rate of direct customers &#8594; subscribers jumped from 5% to 18% (+260% improvement).</p><h4><strong>Surprise #2: Moderate engagement = highest LTV</strong></h4><p>I expected highly engaged readers (20+ posts) to be my best customers. Wrong.</p><ul><li><p><strong>Moderately engaged (3 posts):</strong> $40.35 LTV</p></li><li><p><strong>Highly engaged (20 posts):</strong> $36.29 LTV</p></li><li><p><strong>No engagement:</strong> $19.00 LTV</p></li></ul><p><strong>Why?</strong> Moderately engaged customers read just enough to build trust and see value. They&#8217;re not &#8220;browsers&#8221;&#8212;they&#8217;re problem-solvers who read targeted content and buy solutions.</p><p>Highly engaged readers enjoy my writing but might not have urgent problems my products solve (yet).</p><p><strong>Result:</strong> I stopped optimizing for maximum engagement and started creating &#8220;onboarding sequences&#8221; focused on 3-5 key posts.</p><p><strong>Outcome:</strong> New customer 30-day LTV increased from $16.50 to $24.20 (+47% improvement).</p><h4><strong>Surprise #3: I have 25 power customers worth $1,360</strong></h4><p>Before this analysis, I treated all customers the same. But 25 customers bought 4+ products, spending $54.40 each ($1,360 total).</p><p>These weren&#8217;t random buyers&#8212;they were superfans who:</p><ul><li><p>Engaged with 16+ posts on average</p></li><li><p>Bought multiple products over 6+ months</p></li><li><p>Actively clicked links (3.71 clicks per customer)</p></li></ul><p><strong>Why I missed them:</strong> They were buried in a list of 919 customers. No way to identify them without cross-platform analysis.</p><p><strong>Result:</strong> I manually reached out to all 25:</p><ul><li><p>Personal thank-you email or DMs </p></li><li><p>Offered discounts on new products</p></li><li><p>Invited to private beta testing with early access to new products</p></li><li><p>Asked for product roadmap feedback and features they need</p></li></ul><p><strong>Outcome:</strong> 23 replied (92% response rate), 18 bought my next product launch within 48 hours, and 3 became beta testers.</p><h4><strong>Surprise #4: &#8220;User Guide&#8221; posts drive sales across multiple products</strong></h4><p>I thought each product needed unique content. But &#8220;Substack Pro Studio User Guide&#8221; appeared in the pre-purchase engagement for:</p><ul><li><p>Finn Tropy Substack Pro Studio (32 buyers)</p></li><li><p>CreativeTech Bundle (12 buyers)</p></li><li><p>Substack Control Center (8 buyers)</p></li></ul><p><strong>Why?</strong> User guides demonstrate value and reduce purchase friction. Buyers want to see exactly what they&#8217;re getting before clicking &#8220;Buy.&#8221;</p><p><strong>Result:</strong> I wrote detailed user guides for every product and published them as Substack posts (not just in product docs).</p><p><strong>Outcome:</strong> Product page conversion rate increased from 12% to 19% (+58% improvement).</p><h3><strong>The Impact</strong></h3><p><strong>What I changed based on cross-platform insights:</strong></p><ol><li><p><strong>Launched post-purchase email sequence</strong> - Convert direct customers to subscribers</p></li><li><p><strong>Created onboarding emails </strong>- Move new customers to &#8220;moderately engaged&#8221; status</p></li><li><p><strong>Built VIP customer program</strong> - 25 power customers get white-glove treatment</p></li><li><p><strong>Wrote user guides for all products</strong> - Published on Substack as gateway content</p></li><li><p><strong>Added subscribe CTAs to product posts</strong> - Capture leads who click Gumroad links</p></li></ol><p><strong>Measurable outcomes:</strong></p><ul><li><p>Direct customer &#8594; subscriber conversion: <strong>5% &#8594; 18%</strong> (+260% improvement)</p></li><li><p>New customer 30-day LTV: <strong>$16.50 &#8594; $24.20</strong> (+47% improvement)</p></li><li><p>Power customer retention: <strong>92% response rate</strong> to VIP outreach</p></li><li><p>Product page conversion rate: <strong>12% &#8594; 19%</strong> (+58% improvement)</p></li><li><p>Total additional revenue (6 months): <strong>~$4,800</strong> from better cross-platform integration</p></li></ul><h3><strong>Key Takeaway</strong></h3><h4><strong>The one insight that mattered most:</strong></h4><blockquote><p><em>You don&#8217;t have two audiences&#8212;you have ONE audience experiencing your business across two platforms. <br>Treating them as separate leaves massive revenue on the table.</em></p></blockquote><p>Before cross-platform analysis, I saw:</p><ul><li><p><strong>Substack:</strong> &#8220;I have 1,175 subscribers&#8221;</p></li><li><p><strong>Gumroad:</strong> &#8220;I have 919 customers&#8221;</p></li></ul><p>Now I see:</p><ul><li><p><strong>183 subscriber-customers</strong> (engaged + buying) - nurture heavily</p></li><li><p><strong>992 subscribers who haven&#8217;t bought</strong> (warm leads) - targeted sales campaigns</p></li><li><p><strong>736 customers who aren&#8217;t subscribers</strong> (dark customers) - convert to engaged subscribers</p></li><li><p><strong>25 power customers</strong> (superfans) - VIP treatment</p></li></ul><p>Each segment needs a different strategy. And I only discovered them by unifying the data.</p><h4><strong>Why this analysis was worth doing:</strong></h4><p>Cross-platform insights revealed $4,800 in quick-win revenue opportunities I couldn&#8217;t see before:</p><ul><li><p>Converting 20% of dark customers to subscribers (future upsell opportunity)</p></li><li><p>Boosting LTV 47% by onboarding customers to moderate engagement</p></li><li><p>Retaining 25 power customers worth $1,360 in repeat purchases</p></li><li><p>Improving product conversion 58% with better gateway content</p></li></ul><p>That&#8217;s the difference between managing two silos and running one integrated business.</p><p></p><h2><strong>Advanced Applications: Taking It Further</strong></h2><h3><strong>Variations on the Prompt</strong></h3><h4><strong>Variation 1: Product Purchase Sequences</strong></h4><p>Identify common product purchase paths:</p><pre><code><code>For customers who bought multiple products, calculate:
- Which product was purchased first, second, third, etc.
- Time between purchases
- Most common product sequences (e.g., Product A &#8594; Product B &#8594; Product C)

Create a product flow diagram showing typical upgrade paths.</code></code></pre><p><strong>Insight:</strong> Optimize product bundles and upsell sequences based on natural purchase progressions.</p><h4><strong>Variation 2: Churn Risk Scoring</strong></h4><p>Identify customers likely to disengage:</p><pre><code><code>For subscriber-customers, calculate:
- Days since last purchase
- Days since last Substack engagement
- Drop in engagement velocity (month-over-month)

Flag customers showing "cooling" patterns (high engagement &#8594; low engagement).</code></code></pre><p><strong>Insight:</strong> Run re-engagement campaigns before customers churn completely.</p><p></p><h4><strong>Variation 3: Lookalike Audience Building</strong></h4><p>Profile your best customers to find similar prospects:</p><pre><code><code>For power customers (4+ products), analyze:
- Which Substack posts they engage with most
- Their engagement patterns (frequency, timing, content types)
- Product categories they prefer

Find current subscribers who match these patterns but haven't bought yet.</code></code></pre><p><strong>Insight:</strong> Target &#8220;lookalike&#8221; subscribers with personalized product recommendations.</p><p></p><h3><strong>Integration Opportunities</strong></h3><p><strong>Combine Cross-Platform with Other StackContacts Analyses:</strong></p><h4><strong>1. Cross-Platform + Revenue Attribution</strong></h4><p>See which content drives specific customer segments:</p><pre><code><code>For each customer segment (power, multi-product, one-time):
- Which posts do they engage with before buying?
- Which posts have highest conversion rate for each segment?
- Which content types (tutorials, case studies, user guides) work best?

Create segment-specific content strategies.</code></code></pre><p><strong>Outcome:</strong> Write content tailored to each customer tier&#8217;s preferences.</p><h4><strong>2. Cross-Platform + Predictive Analytics</strong></h4><p>Build purchase propensity models across platforms:</p><pre><code><code>For subscribers who haven't bought yet:
- Calculate their "customer similarity score" (how closely they match existing buyer behavior)
- Identify high-propensity prospects (match power customer patterns)
- Flag subscribers entering "purchase window" (engagement spike + link clicks)

Create tiered prospect lists: Hot, Warm, Cold based on cross-platform signals.</code></code></pre><p><strong>Outcome:</strong> Prioritize sales outreach to subscribers most likely to buy.</p><p></p><h4><strong>3. Cross-Platform + Engagement Velocity</strong></h4><p>Track how Substack engagement impacts Gumroad purchasing timing:</p><pre><code><code>For subscriber-customers, analyze:
- Engagement velocity in the 7 days before purchase
- Which engagement spike patterns predict buying
- Optimal time to send product offers (after X posts read, Y links clicked)

Build automated triggers: "If subscriber reads 3 posts + clicks 1 link in 7 days &#8594; send product offer email."</code></code></pre><p><strong>Outcome:</strong> Perfectly timed sales outreach based on cross-platform momentum.</p><p></p><h3><strong>Next-Level Questions</strong></h3><p><strong>Questions to explore after building your unified view:</strong></p><ol><li><p><strong>&#8220;Which products have the highest subscriber &#8594; customer conversion rate?&#8221;</strong></p><ul><li><p>Compare conversion rates across your product line</p></li><li><p>Double down on products that convert subscribers best</p></li></ul></li><li><p><strong>&#8220;Do power customers discover me differently than one-time buyers?&#8221;</strong></p><ul><li><p>Segment referrer data by customer tier</p></li><li><p>Invest in channels that attract high-LTV customers</p></li></ul></li><li><p><strong>&#8220;What&#8217;s the ROI of converting a direct customer to a subscriber?&#8221;</strong></p><ul><li><p>Calculate: (Subscriber-Customer LTV - Direct Customer LTV) &#215; Conversion Rate</p></li><li><p>Justify investment in post-purchase nurture campaigns</p></li></ul></li><li><p><strong>&#8220;Which subscriber content consumption patterns predict multi-product purchases?&#8221;</strong></p><ul><li><p>Find common post reading sequences before power customer conversions</p></li><li><p>Build content funnels that replicate those patterns</p></li></ul></li><li><p><strong>&#8220;How does cross-platform engagement correlate with customer lifetime?&#8221;</strong></p><ul><li><p>Compare lifespan (first &#8594; last purchase) for engaged vs. non-engaged customers</p></li><li><p>Prove engagement drives retention, not just initial sales</p></li></ul></li></ol><p></p><h2><strong>Common Pitfalls and How to Avoid Them</strong></h2><h3><strong>Data Quality Issues</strong></h3><h4><strong>Problem 1: Email Formatting Inconsistencies</strong></h4><p>Emails might have different formats across platforms (uppercase vs. lowercase, trailing spaces, plus-addressing like <code>user+tag@email.com</code>).</p><p><strong>How to spot it:</strong></p><ul><li><p>Overlap percentage is unexpectedly low (&lt;10%)</p></li><li><p>Manual checking reveals customers you know are subscribers but don&#8217;t match</p></li></ul><p><strong>How to fix it:</strong></p><pre><code><code>-- Normalize emails before matching
SELECT LOWER(TRIM(email)) as email_normalized
FROM subscribers_detail</code></code></pre><h4><strong>Problem 2: Missing Referrer Data</strong></h4><p>Gumroad doesn&#8217;t always capture referrer information, especially for mobile purchases or certain browsers.</p><p><strong>How to spot it:</strong></p><ul><li><p>Large percentage of &#8220;Direct/Unknown&#8221; traffic (&gt;50%)</p></li><li><p>Analysis #6 shows NULL for most referrers</p></li></ul><p><strong>How to fix it:</strong></p><ul><li><p>Use UTM parameters in all Gumroad links: <code>?utm_source=substack&amp;utm_campaign=post123</code></p></li><li><p>Track UTM parameters separately in your own database</p></li><li><p>Survey customers: &#8220;How did you hear about us?&#8221;</p><p></p></li></ul><h4><strong>Problem 3: Duplicate Customers</strong></h4><p>Some customers might use multiple email addresses across platforms.</p><p><strong>How to spot it:</strong></p><ul><li><p>Customer count seems inflated</p></li><li><p>Same name appears with different emails in Gumroad</p></li></ul><p><strong>How to fix it:</strong></p><ul><li><p>Manually deduplicate VIP/power customers by name</p></li><li><p>Use fuzzy matching on names + email addresses (advanced)</p></li><li><p>Accept some duplication&#8212;perfect matching is impossible</p></li></ul><h3><strong>Misinterpretation Risks</strong></h3><h4><strong>Risk 1: Confusing Correlation with Causation</strong></h4><p>Just because subscriber-customers spend more doesn&#8217;t mean subscribing CAUSES higher spending. Maybe high-intent buyers naturally engage more.</p><p><strong>How to avoid it:</strong></p><ul><li><p>Run A/B test: Send post-purchase nurture emails to 50% of direct customers, track LTV difference</p></li><li><p>Compare before/after LTV for customers who subscribed post-purchase vs. those who didn&#8217;t</p></li><li><p>Look for directional evidence, not absolute proof</p><p></p></li></ul><h4><strong>Risk 2: Over-Optimizing for Power Customers</strong></h4><p>Focusing only on your top 25 customers might neglect the 662 one-time buyers who could become repeat customers.</p><p><strong>How to avoid it:</strong></p><ul><li><p>Balance attention: 40% power customers, 40% multi-product buyers, 20% one-time buyers</p></li><li><p>Test activation campaigns for one-time buyers: &#8220;Buy a second product and get 20% off&#8221;</p></li><li><p>Track segment transitions (how many one-time &#8594; multi-product?)</p></li></ul><h4><strong>Risk 3: Assuming All Non-Subscribers Need to Subscribe</strong></h4><p>Some customers prefer transactional relationships&#8212;they want products, not newsletters.</p><p><strong>How to avoid it:</strong></p><ul><li><p>Respect preferences: Add &#8220;product updates only&#8221; email option</p></li><li><p>Track unsubscribe rates for post-purchase nurture campaigns</p></li><li><p>A/B test value prop: &#8220;Weekly tips&#8221; vs. &#8220;Product updates + tips&#8221;</p></li></ul><h3><strong>Best Practices</strong></h3><p><strong>How often to run this analysis:</strong></p><ul><li><p><strong>Monthly:</strong> Full cross-platform refresh to track segment changes</p></li><li><p><strong>After product launches:</strong> See how new products affect customer segmentation</p></li><li><p><strong>Quarterly:</strong> Deep dive into power customer behavior, update VIP program</p></li><li><p><strong>Annually:</strong> Strategic review of platform overlap, channel attribution, LTV trends</p></li></ul><p><strong>When to update your approach:</strong></p><ul><li><p><strong>New product line:</strong> Different products might attract different customer types</p></li><li><p><strong>Pricing changes:</strong> LTV thresholds might need adjustment</p></li><li><p><strong>Audience growth:</strong> As you scale past 5K subscribers, patterns might shift</p></li><li><p><strong>Platform changes:</strong> If Substack or Gumroad add new features, update queries</p></li></ul><p><strong>How to track changes over time:</strong></p><ul><li><p>Export key metrics monthly to spreadsheet:</p><ul><li><p>Platform overlap percentage</p></li><li><p>% customers with full data</p></li><li><p>Average LTV by engagement level</p></li><li><p>Power customer count</p></li><li><p>Top gateway content (changes over time?)</p></li></ul></li><li><p>Set alerts: If overlap drops below 15% or power customers churn, investigate immediately</p></li></ul><p></p><h2><strong>Your Turn: Try It and Share</strong></h2><h3><strong>Call to Action</strong></h3><p><strong>Ready to unify YOUR Substack and Gumroad data?</strong></p><ol><li><p>Copy the AI prompt from this article</p></li><li><p>Paste into Claude (connected to <a href="https://www.stackcontacts.com/">StackContacts</a>)</p></li><li><p>Run the 7 analyses and review your cross-platform insights</p></li><li><p>Identify your dark customers and power customers</p></li><li><p>Reply with your findings: What % of YOUR customers have no Substack data?</p></li></ol><p><strong>Questions to explore:</strong></p><ul><li><p>How many &#8220;dark customers&#8221; do you have?</p></li><li><p>What&#8217;s YOUR overlap percentage? (Higher or lower than 19.91%?)</p></li><li><p>Do engaged customers spend more for you too?</p></li></ul><h3><strong>Community Engagement</strong></h3><p><strong>Share your surprising cross-platform insights:</strong></p><ul><li><p>&#8220;85% of my customers never subscribed&#8212;totally blind to them!&#8221;</p></li><li><p>&#8220;Our power customers spend $200+ each&#8212;building a VIP program now&#8221;</p></li><li><p>&#8220;Discovered that &#8216;How-To&#8217; posts drive 3x more sales than case studies&#8221;</p></li></ul><p><strong>Compare across niches:</strong></p><ul><li><p>B2B creators likely have higher overlap (subscribers become customers)</p></li><li><p>Tool/product creators might have more direct customers (Google search traffic)</p></li><li><p>Coaches/consultants might have deeper engagement before purchasing</p></li></ul><p>Your data will differ. That&#8217;s the point&#8212;unify YOUR platforms and optimize for YOUR patterns.</p><h3><strong>Office Hours Invitation</strong></h3><p><strong>Want help analyzing your cross-platform data?</strong></p><p>Bring your unified customer view to <strong>weekly office hours</strong> (paid subscribers only):</p><ul><li><p>Review your platform overlap and dark customer strategy</p></li><li><p>Discuss power customer retention programs</p></li><li><p>Get feedback on post-purchase nurture campaigns</p></li><li><p>Ask about advanced cross-platform scoring models</p></li></ul><p><strong>Next office hours:</strong>   February 4th, 2026 at  1 PM EST  - send a DM to get an invitation.<br></p><h2><strong>Key Takeaways</strong></h2><p>&#9989; <strong>80% of Gumroad customers never subscribe to Substack&#8212;you&#8217;re blind to most of your buyers</strong></p><p>&#9989; <strong>Subscriber-customers spend 33% more than direct customers ($19.60 vs. $14.70)</strong></p><p>&#9989; <strong>Power customers (4+ products) spend 3.3x more than one-time buyers ($54.40 vs. $16.32)</strong></p><p>&#9989; <strong>Moderately engaged customers have highest LTV&#8212;3-5 posts is the sweet spot for conversion</strong></p><p>&#9989; <strong>&#8220;User Guide&#8221; posts are gateway content&#8212;they drive purchases across multiple products</strong></p><p>&#9989; <strong>31% of non-subscribers find products through Substack links&#8212;add subscribe CTAs to capture them</strong></p><p>&#9989; <strong>VIP customers (top 50 by spend) engage with 16+ posts&#8212;identify and nurture them personally</strong></p><p>&#9989; <strong>Run monthly cross-platform analysis to track segment changes and optimize strategies</strong></p><p></p><p>&#8212; Finn </p><p></p><p><em>I study creator growth the way engineers study systems&#8212;with experiments, dashboards, and curiosity. I built StackContacts to turn subscriber data into revenue, and I share weekly AI prompts, research, and office hours to help you extract maximum value from your investment.</em></p><p><em>Get StackContacts:  </em>https://www.stackcontacts.com/</p><p><strong><br>About This Article:</strong></p><ul><li><p>Data Source: FinnTropy StackContacts database (Aug 2024 - Dec 2025)</p></li><li><p>Analysis Method: Cross-platform email matching, cohort comparison, LTV calculation</p></li><li><p>Platforms Unified: Substack (1,175 subscribers) + Gumroad (919 customers)</p></li><li><p>Key Finding: 80% of customers have no Substack engagement data (736 &#8220;dark customers&#8221;)</p><p></p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">StackContacts is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[How I Track 974 Customers Better Than Any CRM I've Tried]]></title><description><![CDATA[AI does the data gathering. I do the relationship building.]]></description><link>https://stackcontacts.substack.com/p/how-i-track-974-customers-better</link><guid isPermaLink="false">https://stackcontacts.substack.com/p/how-i-track-974-customers-better</guid><dc:creator><![CDATA[Finn Tropy | StackContacts]]></dc:creator><pubDate>Wed, 14 Jan 2026 13:30:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!b9VL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a9bd589-7511-4ba2-aac1-28df7e0e70ad_3296x2268.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!b9VL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a9bd589-7511-4ba2-aac1-28df7e0e70ad_3296x2268.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!b9VL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a9bd589-7511-4ba2-aac1-28df7e0e70ad_3296x2268.png 424w, https://substackcdn.com/image/fetch/$s_!b9VL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a9bd589-7511-4ba2-aac1-28df7e0e70ad_3296x2268.png 848w, https://substackcdn.com/image/fetch/$s_!b9VL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a9bd589-7511-4ba2-aac1-28df7e0e70ad_3296x2268.png 1272w, https://substackcdn.com/image/fetch/$s_!b9VL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a9bd589-7511-4ba2-aac1-28df7e0e70ad_3296x2268.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!b9VL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a9bd589-7511-4ba2-aac1-28df7e0e70ad_3296x2268.png" width="1456" height="1002" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1a9bd589-7511-4ba2-aac1-28df7e0e70ad_3296x2268.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1002,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2907606,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/184148717?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a9bd589-7511-4ba2-aac1-28df7e0e70ad_3296x2268.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!b9VL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a9bd589-7511-4ba2-aac1-28df7e0e70ad_3296x2268.png 424w, https://substackcdn.com/image/fetch/$s_!b9VL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a9bd589-7511-4ba2-aac1-28df7e0e70ad_3296x2268.png 848w, https://substackcdn.com/image/fetch/$s_!b9VL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a9bd589-7511-4ba2-aac1-28df7e0e70ad_3296x2268.png 1272w, https://substackcdn.com/image/fetch/$s_!b9VL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1a9bd589-7511-4ba2-aac1-28df7e0e70ad_3296x2268.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Obsidian - Published Posts view </figcaption></figure></div><p>I never meant to build a CRM. I was just trying to remember who my customers were.</p><p>But somewhere between the 50th and 159th person, my scattered notes became a system. </p><p>And that system became something I rely on more than any traditional CRM I&#8217;ve ever tried.</p><h2><strong>The Problem: Platforms Hide Your People</strong></h2><p>If you&#8217;re building products for creators&#8212;or really, any business where relationships matter&#8212;you&#8217;ve probably felt this frustration:</p><ul><li><p><strong>Substack tells you who subscribed</strong>, but not who they are beyond an email</p></li><li><p><strong>Gumroad shows purchases</strong>, but not the conversation you had last week</p></li><li><p><strong>Substack DMs </strong>are disconnected from everything else, like your Posts and Notes</p></li><li><p><strong>Email feels like shouting into the void</strong>, with no memory of what resonated</p></li></ul><p>Every platform gives you data, but none of them give you <strong>context</strong>. And context is what turns a subscriber into a relationship.</p><p>I needed a place to connect the dots. Not just <em>&#8220;Emily bought my product,&#8221;</em> but:</p><ul><li><p><em>What does Emily actually do?</em></p></li><li><p><em>What feedback has she given?</em></p></li><li><p><em>When did she last engage?</em></p></li><li><p><em>What should I follow up on?</em></p></li></ul><p>Traditional CRMs felt like overkill. I&#8217;m not managing a sales pipeline to close a deal - I&#8217;m trying to remember people like a human being.</p><p>So I built it differently.</p><h2><strong>Real-World Example: What This Actually Looks Like</strong></h2><p>Let me show you why this matters with a real customer story.</p><p><strong>November 3, 2025</strong> - Emily signs up for my newsletter</p><ul><li><p>Reads the <a href="https://finntropy.substack.com/p/substack-pro-studio-user-guide">Substack Pro Studio guide</a> <strong>3 times</strong></p></li><li><p>Purchases <a href="https://finntropy.gumroad.com/l/substack_pro_studio">the product</a> <strong>5 hours later</strong> for $79</p></li><li><p>I create her person file, note the fast conversion</p></li></ul><p><strong>November 21, 2025</strong> - She buys a second product ($25)</p><ul><li><p>Update her file: <code>total_revenue: $104</code></p></li><li><p>Tag her as <code>power_user</code></p></li><li><p>Note: Multi-product buyers are rare, high-value</p></li></ul><p><strong>December 31, 2025</strong> - She comments with a bug report</p><ul><li><p>I copy her feedback into her timeline</p></li><li><p>Link to the development task to fix it</p></li><li><p>Add to recommended actions: &#8220;Reply and thank her&#8221;</p></li></ul><p><strong>January 6, 2026</strong> - I review her file for this article</p><ul><li><p>See she&#8217;s been active, but no direct DM yet</p></li><li><p>Notice she runs her own Substack on trauma healing</p></li></ul><p><strong>Today</strong> - Emily comments on my post. I open her file. Saw she&#8217;d been a customer for over two months, gave great feedback on scheduling features, and mentioned struggling with subscriber churn.</p><p>I replied with a specific answer about churn tracking&#8212;because I <em>remembered</em>.</p><p>Without this system, Emily is just <em>&#8220;another customer who bought something.&#8221;</em></p><p>With it, she&#8217;s:</p><ul><li><p>A <strong>power user</strong> who converts fast ($104 in 18 days)</p></li><li><p>A <strong>feedback provider</strong> improving my products</p></li><li><p>A <strong>potential collaborator</strong> with an aligned audience</p></li><li><p>Someone I need <strong>personally to reach out to</strong></p></li></ul><p>That&#8217;s the difference between data and context.</p><h2><strong>The Secret: I Don&#8217;t Do This Manually</strong></h2><p>Here&#8217;s where it gets interesting.</p><p>I don&#8217;t manually write Emily&#8217;s 405-line dossier by hand. That would be insane.</p><p>Instead, I use the <strong><a href="https://cursor.com/download">Cursor</a></strong><a href="https://cursor.com/download"> app</a> (an AI code editor) to automatically generate and update markdown files by querying my <a href="https://stackcontacts.com/">StackContacts database</a>.</p><h3><strong>How It Works</strong></h3><p>I type a slash command: <code>/subscriber_analysis_prompt Emily</code></p><p><strong>30 seconds later, I have:</strong></p><ul><li><p>Full profile with membership status and revenue</p></li><li><p>Complete timeline of all 22 engagement events</p></li><li><p>Exact text of her bug report DM</p></li><li><p>Her publication details and bio</p></li><li><p>Purchase history with order IDs</p></li><li><p>Recommended next actions</p></li><li><p>Everything formatted in markdown, ready to use</p></li></ul><p><strong>Before (manual copy/paste hell):</strong></p><ul><li><p>Open Substack, find Emily&#8217;s email</p></li><li><p>Check the subscriber dashboard for event activity</p></li><li><p>Go to Gumroad, search for purchases</p></li><li><p>Check my DMs for conversations</p></li><li><p>Go to the comments section, search for her comments</p></li><li><p>Copy/paste everything into a note</p></li><li><p>Try to remember what I wanted to follow up on</p></li><li><p>Give up halfway through because it takes an hour</p></li></ul><p><strong>After (Cursor + StackContacts):</strong></p><pre><code><code>/subscriber_analysis_prompt Emily
</code></code></pre><p>Done. 30 seconds.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!W92r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54cc3f9b-00cd-4368-867c-178afe247e70_3232x2190.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W92r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54cc3f9b-00cd-4368-867c-178afe247e70_3232x2190.png 424w, https://substackcdn.com/image/fetch/$s_!W92r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54cc3f9b-00cd-4368-867c-178afe247e70_3232x2190.png 848w, https://substackcdn.com/image/fetch/$s_!W92r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54cc3f9b-00cd-4368-867c-178afe247e70_3232x2190.png 1272w, https://substackcdn.com/image/fetch/$s_!W92r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54cc3f9b-00cd-4368-867c-178afe247e70_3232x2190.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!W92r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54cc3f9b-00cd-4368-867c-178afe247e70_3232x2190.png" width="1456" height="987" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/54cc3f9b-00cd-4368-867c-178afe247e70_3232x2190.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:987,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1063840,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/184148717?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54cc3f9b-00cd-4368-867c-178afe247e70_3232x2190.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!W92r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54cc3f9b-00cd-4368-867c-178afe247e70_3232x2190.png 424w, https://substackcdn.com/image/fetch/$s_!W92r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54cc3f9b-00cd-4368-867c-178afe247e70_3232x2190.png 848w, https://substackcdn.com/image/fetch/$s_!W92r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54cc3f9b-00cd-4368-867c-178afe247e70_3232x2190.png 1272w, https://substackcdn.com/image/fetch/$s_!W92r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54cc3f9b-00cd-4368-867c-178afe247e70_3232x2190.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Obsidian People View</figcaption></figure></div><h3><strong>It&#8217;s Not Just People&#8212;It&#8217;s Everything</strong></h3><p>I have three slash commands for three types of business intelligence:</p><p><strong>1. </strong><code>/subscriber_analysis_prompt</code><strong> - People analytics</strong></p><ul><li><p>Queries 15+ database tables</p></li><li><p>Analyzes subscriber details, events, comments, DMs, and purchases</p></li><li><p>Generates comprehensive relationship profiles</p></li><li><p>Example: Emily&#8217;s 405-line customer dossier</p></li></ul><p><strong>2. </strong><code>/update_product_metrics</code><strong> - Product analytics</strong></p><ul><li><p>Reads Gumroad sales data</p></li><li><p>Calculates revenue, trends, and customer metrics</p></li><li><p>Updates product files with formatted tables</p></li><li><p>Example output:</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!054t!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87a66d5-2bbd-41d8-a25f-55d04137296e_3144x2102.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!054t!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87a66d5-2bbd-41d8-a25f-55d04137296e_3144x2102.png 424w, https://substackcdn.com/image/fetch/$s_!054t!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87a66d5-2bbd-41d8-a25f-55d04137296e_3144x2102.png 848w, https://substackcdn.com/image/fetch/$s_!054t!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87a66d5-2bbd-41d8-a25f-55d04137296e_3144x2102.png 1272w, https://substackcdn.com/image/fetch/$s_!054t!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87a66d5-2bbd-41d8-a25f-55d04137296e_3144x2102.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!054t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87a66d5-2bbd-41d8-a25f-55d04137296e_3144x2102.png" width="1456" height="973" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e87a66d5-2bbd-41d8-a25f-55d04137296e_3144x2102.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:973,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:936711,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/184148717?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87a66d5-2bbd-41d8-a25f-55d04137296e_3144x2102.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!054t!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87a66d5-2bbd-41d8-a25f-55d04137296e_3144x2102.png 424w, https://substackcdn.com/image/fetch/$s_!054t!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87a66d5-2bbd-41d8-a25f-55d04137296e_3144x2102.png 848w, https://substackcdn.com/image/fetch/$s_!054t!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87a66d5-2bbd-41d8-a25f-55d04137296e_3144x2102.png 1272w, https://substackcdn.com/image/fetch/$s_!054t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe87a66d5-2bbd-41d8-a25f-55d04137296e_3144x2102.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Obsidian Product View</figcaption></figure></div><p><strong>3. </strong><code>/update_post_data</code><strong> - Content performance</strong></p><ul><li><p>Queries Substack post metrics</p></li><li><p>Analyzes engagement, open rates, conversions</p></li><li><p>Compares to publication benchmarks</p></li><li><p>Example outputs:</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EUJH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140d4b3f-1128-4d11-a089-ce507d77dbf6_3296x2268.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EUJH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140d4b3f-1128-4d11-a089-ce507d77dbf6_3296x2268.png 424w, https://substackcdn.com/image/fetch/$s_!EUJH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140d4b3f-1128-4d11-a089-ce507d77dbf6_3296x2268.png 848w, https://substackcdn.com/image/fetch/$s_!EUJH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140d4b3f-1128-4d11-a089-ce507d77dbf6_3296x2268.png 1272w, https://substackcdn.com/image/fetch/$s_!EUJH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140d4b3f-1128-4d11-a089-ce507d77dbf6_3296x2268.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EUJH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140d4b3f-1128-4d11-a089-ce507d77dbf6_3296x2268.png" width="1456" height="1002" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/140d4b3f-1128-4d11-a089-ce507d77dbf6_3296x2268.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1002,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1215916,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/184148717?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140d4b3f-1128-4d11-a089-ce507d77dbf6_3296x2268.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EUJH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140d4b3f-1128-4d11-a089-ce507d77dbf6_3296x2268.png 424w, https://substackcdn.com/image/fetch/$s_!EUJH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140d4b3f-1128-4d11-a089-ce507d77dbf6_3296x2268.png 848w, https://substackcdn.com/image/fetch/$s_!EUJH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140d4b3f-1128-4d11-a089-ce507d77dbf6_3296x2268.png 1272w, https://substackcdn.com/image/fetch/$s_!EUJH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F140d4b3f-1128-4d11-a089-ce507d77dbf6_3296x2268.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Obsidian - Post metrics and engagement</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UAPC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc389f3f2-7336-4950-b266-57164439e26a_3208x2180.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UAPC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc389f3f2-7336-4950-b266-57164439e26a_3208x2180.png 424w, https://substackcdn.com/image/fetch/$s_!UAPC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc389f3f2-7336-4950-b266-57164439e26a_3208x2180.png 848w, https://substackcdn.com/image/fetch/$s_!UAPC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc389f3f2-7336-4950-b266-57164439e26a_3208x2180.png 1272w, https://substackcdn.com/image/fetch/$s_!UAPC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc389f3f2-7336-4950-b266-57164439e26a_3208x2180.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UAPC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc389f3f2-7336-4950-b266-57164439e26a_3208x2180.png" width="1456" height="989" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c389f3f2-7336-4950-b266-57164439e26a_3208x2180.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:989,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1138459,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/184148717?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc389f3f2-7336-4950-b266-57164439e26a_3208x2180.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UAPC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc389f3f2-7336-4950-b266-57164439e26a_3208x2180.png 424w, https://substackcdn.com/image/fetch/$s_!UAPC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc389f3f2-7336-4950-b266-57164439e26a_3208x2180.png 848w, https://substackcdn.com/image/fetch/$s_!UAPC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc389f3f2-7336-4950-b266-57164439e26a_3208x2180.png 1272w, https://substackcdn.com/image/fetch/$s_!UAPC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc389f3f2-7336-4950-b266-57164439e26a_3208x2180.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Obsidian - Post view - Key Insights </figcaption></figure></div><p>So I have three parallel systems:</p><ul><li><p><strong>People tracking</strong>: Deep relationship context</p></li><li><p><strong>Product tracking</strong>: Revenue and sales analytics</p></li><li><p><strong>Post tracking</strong>: Content performance and audience response</p></li></ul><p>All living in markdown files. All updated on demand with a slash command. </p><p>In 30 seconds. </p><h3><strong>Why This Changes Everything</strong></h3><p>This isn&#8217;t just &#8220;automation.&#8221; It&#8217;s <strong>augmented memory</strong>.</p><p><strong>The AI handles data gathering</strong> (the tedious part):</p><ul><li><p>Querying multiple database tables</p></li><li><p>Correlating events across platforms</p></li><li><p>Calculating metrics and timelines</p></li><li><p>Finding patterns in engagement data</p></li></ul><p><strong>I handle relationship building</strong> (the human part):</p><ul><li><p>Reading the context and adding my observations</p></li><li><p>Deciding who to reach out to and why</p></li><li><p>Crafting personalized messages</p></li><li><p>Responding to DMs and comments</p></li><li><p>Updating the file with new interactions</p></li></ul><p>The markdown file becomes a <strong>collaboration space</strong> between:</p><ul><li><p>The AI&#8217;s perfect memory of data</p></li><li><p>My human judgment about relationships</p></li></ul><h3><strong>The Real Power: Query Anything Instantly</strong></h3><p>I can ask Cursor AI questions like:</p><p><strong>People queries:</strong></p><ul><li><p><em>&#8220;Who are my top 10 customers by revenue?&#8221;</em></p></li><li><p><em>&#8220;Show me everyone who commented but never bought anything.&#8221;</em></p></li><li><p><em>&#8220;Find people who signed up in November and went silent.&#8221;</em></p></li><li><p><em>&#8220;Who mentioned &#8216;churn&#8217; in a DM or comment?&#8221;</em></p></li></ul><p><strong>Product queries:</strong></p><ul><li><p><em>&#8220;Update all product metrics for January.&#8221;</em></p></li><li><p><em>&#8220;Which product has the highest revenue per customer?&#8221;</em></p></li><li><p><em>&#8220;Show me products with declining sales trends.&#8221;</em></p></li><li><p><em>&#8220;Compare performance across all 6 products.&#8221;</em></p></li></ul><p><strong>Post queries:</strong></p><ul><li><p><em>&#8220;Update metrics for my last 5 posts.&#8221;</em></p></li><li><p><em>&#8220;Which posts have the highest engagement rates?&#8221;</em></p></li><li><p><em>&#8220;Show me posts that drove paid conversions.&#8221;</em></p></li><li><p><em>&#8220;Find posts with high open rates but low read completion.&#8221;</em></p></li></ul><p><strong>Cross-entity queries:</strong></p><ul><li><p><em>&#8220;Find customers who bought multiple products.&#8221;</em></p></li><li><p><em>&#8220;Which people should I reach out to this week?&#8221;</em></p></li><li><p><em>&#8220;Show me high-value customers with recent engagement.&#8221;</em></p></li><li><p><em>&#8220;Create a project file for the next product launch.&#8221;</em></p></li></ul><p>It queries the database, analyzes results, and either:</p><ul><li><p>Updates existing people/product/post/support files with insights</p></li><li><p>Generates summary lists with recommendations</p></li><li><p>Creates new project files with follow-up actions</p></li><li><p>Writes comparative analysis across entities</p></li></ul><p>It&#8217;s like having a junior data analyst who never sleeps and has perfect recall.</p><h2><strong>Why Obsidian + Markdown, Not a Real CRM?</strong></h2><p>I&#8217;ve tried &#8220;proper&#8221; CRMs. Notion databases, Airtable, TwentyCRM, Odoo, and even custom spreadsheets.</p><p>They all failed because they optimized for <em><strong>capture</strong></em> over <em><strong>recall</strong></em>.</p><p>Here&#8217;s why this system works:</p><h3><strong>1. It&#8217;s Where I Already Think</strong></h3><p>I don&#8217;t have to &#8220;go into the CRM.&#8221; </p><p>I&#8217;m already writing daily notes, logging ideas, and planning projects. People just live in the same space where I do my daily work.</p><h3><strong>2. Markdown is Portable</strong></h3><p>All my relationship data is just text files. If the <a href="https://obsidian.md/download">Obsidian app</a> dies tomorrow, I still have my markdown files that work in any text editor.</p><h3><strong>3. Links Create Memory</strong></h3><p>Traditional CRMs have &#8220;related records.&#8221; Obsidian has <strong>bidirectional links</strong> that show context everywhere. It&#8217;s not a feature&#8212;it&#8217;s how the whole system works.</p><p>When I mention Emily in a daily note, it automatically appears on her timeline. When she comments on a product, it&#8217;s linked in both her file and the product file. Write it once, see it everywhere it matters. </p><p>I can navigate through links, instead of spending time searching for what I don&#8217;t fully remember.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ldni!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F572de516-ff76-490a-887d-4f8accef02e5_3174x2040.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ldni!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F572de516-ff76-490a-887d-4f8accef02e5_3174x2040.png 424w, https://substackcdn.com/image/fetch/$s_!ldni!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F572de516-ff76-490a-887d-4f8accef02e5_3174x2040.png 848w, https://substackcdn.com/image/fetch/$s_!ldni!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F572de516-ff76-490a-887d-4f8accef02e5_3174x2040.png 1272w, https://substackcdn.com/image/fetch/$s_!ldni!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F572de516-ff76-490a-887d-4f8accef02e5_3174x2040.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ldni!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F572de516-ff76-490a-887d-4f8accef02e5_3174x2040.png" width="1456" height="936" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/572de516-ff76-490a-887d-4f8accef02e5_3174x2040.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:936,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:912652,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/184148717?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F572de516-ff76-490a-887d-4f8accef02e5_3174x2040.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ldni!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F572de516-ff76-490a-887d-4f8accef02e5_3174x2040.png 424w, https://substackcdn.com/image/fetch/$s_!ldni!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F572de516-ff76-490a-887d-4f8accef02e5_3174x2040.png 848w, https://substackcdn.com/image/fetch/$s_!ldni!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F572de516-ff76-490a-887d-4f8accef02e5_3174x2040.png 1272w, https://substackcdn.com/image/fetch/$s_!ldni!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F572de516-ff76-490a-887d-4f8accef02e5_3174x2040.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Obsidian - Daily Notes connects the notes I worked on that day</figcaption></figure></div><h3><strong>4. Friction is Near-Zero</strong></h3><p>Creating a new person takes 5 seconds. Updating a note takes 2 seconds. </p><p>If your CRM has loading spinners, you&#8217;ve already lost.</p><h3><strong>5. It Scales with Complexity</strong></h3><p>Early on, person files were simple. </p><p>Now they have executive summaries, commercial analysis, collaboration potential, and recommended actions. The system evolved naturally because it&#8217;s just... notes.</p><h3><strong>6. AI Integration is Native</strong></h3><p>Cursor AI can read and write local markdown files directly. </p><p>No export/import steps. Super fast. Secure.</p><p>The AI assistant works with the same files I work with. It updates them from Substack, Gumroad, and Kit data in a few seconds. Subscriber details, events, DMs, posts, comments, products, sales, etc. </p><h2><strong>The Meta-Irony</strong></h2><p>I built <a href="https://stackcontacts.com/">StackContacts</a> (a CRM for Substack creators) to help people track their subscribers.</p><p>But I use an Obsidian vault + Cursor AI to sync <em>my</em> subscribers from <em>StackContacts</em>.<br>The CRM builder uses a note-taking app to remember his customers.</p><p>Why? Because:</p><ol><li><p><strong>My vault evolves faster</strong> - I can add fields/sections instantly</p></li><li><p><strong>Markdown is more flexible</strong> - I can embed diagrams, add context, and add bi-directional links freely</p></li><li><p><strong>AI integration is seamless</strong> - Cursor AI can read/write markdown natively</p></li><li><p><strong>It&#8217;s all local</strong> - Super fast updates, complete control, I own all my data on my computer.</p></li></ol><h2><strong>What I&#8217;ve Learned Running This for 2+ Months</strong></h2><h3><strong>It Forces You to Pay Attention</strong></h3><p>When you write &#8220;Emily left a 5-star review and bought a second product,&#8221; you <em>notice</em> that. You don&#8217;t just see a conversion metric&#8212;you see a <em><strong>person</strong></em> who trusts your work.</p><h3><strong>Patterns Emerge from Notes</strong></h3><p>I didn&#8217;t plan to identify &#8220;fast converters&#8221; or &#8220;multi-product buyers.&#8221; But when you review 10 unique person files, you start seeing patterns. Their DMs, comments, and questions.</p><p>Those patterns inform product strategy. And Gumroad upsell messages. And the next piece of content to write.</p><h3><strong>Context Compounds Over Time</strong></h3><p>The first interaction is just data. The tenth interaction is a story. The twentieth is a relationship. </p><p>Obsidian captures all of it in one place. StackContacts syncs data from the source, and AI updates your markdown files.</p><h3><strong>It&#8217;s Only As Good As Your Discipline</strong></h3><p>This system requires <em>writing things down</em>. If you don&#8217;t care about your interactions with people, you lose the value. But if you do it consistently, <em><strong>the compound interest is massive.</strong></em></p><p>But here&#8217;s the thing: with AI automation handling the data gathering, the <em><strong>&#8220;discipline&#8221;</strong></em> part becomes way easier. I just need to add my human observations to what the AI already compiled.</p><h2><strong>Who This System Is For (And Who It Isn&#8217;t)</strong></h2><p><strong>This works if you:</strong></p><ul><li><p>Manage 20 -1,000 human relationships (past that, automation matters more)</p></li><li><p>Sell products or services where <em><strong>context</strong></em> matters more than <em><strong>volume</strong></em></p></li><li><p>Value <em><strong>deep relationships</strong></em> over <em><strong>conversion funnels</strong></em></p></li><li><p>Want perfect memory without manual data entry</p></li><li><p>Willing to set up the technical foundation once</p></li></ul><p><strong>This doesn&#8217;t work if you:</strong></p><ul><li><p>Need fully automated sales pipelines and email sequences</p></li><li><p>Manage tens of thousands of transactional customers</p></li><li><p>Want visual dashboards and corporate style reporting</p></li><li><p>Need team collaboration (Obsidian is local-first, not cloud-based)</p></li><li><p>Don&#8217;t have queryable data sources</p></li></ul><p>It&#8217;s not for everyone. </p><p>But if you&#8217;re a s<em><strong>olo founder, creator, or consultant</strong></em> trying to remember people better than platforms remember them, this system might change how you work.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/p/how-i-track-974-customers-better/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://stackcontacts.substack.com/p/how-i-track-974-customers-better/comments"><span>Leave a comment</span></a></p><h2><strong>How the System Actually Works (The Technical Part)</strong></h2><p>Okay, now for the details. If you want to build something like this, here&#8217;s what&#8217;s under the hood:</p>
      <p>
          <a href="https://stackcontacts.substack.com/p/how-i-track-974-customers-better">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How To Analyze Your Substack DM Usage (Without Burning Out)]]></title><description><![CDATA[The 5-Step Method I Built After Realizing I Spent 46 Hours in My DMs in 30 days]]></description><link>https://stackcontacts.substack.com/p/how-to-analyze-your-substack-dm-usage</link><guid isPermaLink="false">https://stackcontacts.substack.com/p/how-to-analyze-your-substack-dm-usage</guid><dc:creator><![CDATA[Finn Tropy | StackContacts]]></dc:creator><pubDate>Fri, 09 Jan 2026 18:16:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_O3d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98621cf8-5a07-41b9-9890-338c00cba389_1024x1536.webp" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_O3d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98621cf8-5a07-41b9-9890-338c00cba389_1024x1536.webp" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_O3d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98621cf8-5a07-41b9-9890-338c00cba389_1024x1536.webp 424w, https://substackcdn.com/image/fetch/$s_!_O3d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98621cf8-5a07-41b9-9890-338c00cba389_1024x1536.webp 848w, https://substackcdn.com/image/fetch/$s_!_O3d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98621cf8-5a07-41b9-9890-338c00cba389_1024x1536.webp 1272w, https://substackcdn.com/image/fetch/$s_!_O3d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98621cf8-5a07-41b9-9890-338c00cba389_1024x1536.webp 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_O3d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98621cf8-5a07-41b9-9890-338c00cba389_1024x1536.webp" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/98621cf8-5a07-41b9-9890-338c00cba389_1024x1536.webp&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:89788,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/webp&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/184037124?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98621cf8-5a07-41b9-9890-338c00cba389_1024x1536.webp&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_O3d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98621cf8-5a07-41b9-9890-338c00cba389_1024x1536.webp 424w, https://substackcdn.com/image/fetch/$s_!_O3d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98621cf8-5a07-41b9-9890-338c00cba389_1024x1536.webp 848w, https://substackcdn.com/image/fetch/$s_!_O3d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98621cf8-5a07-41b9-9890-338c00cba389_1024x1536.webp 1272w, https://substackcdn.com/image/fetch/$s_!_O3d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F98621cf8-5a07-41b9-9890-338c00cba389_1024x1536.webp 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Hi, I&#8217;m Finn - a recovering Substack enthusiast.</figcaption></figure></div><p>A month ago, I asked AI a simple question:</p><pre><code><code>Summarize how much time I have spent on my DMs over the last 30 days.</code></code></pre><p>The answer: <strong>46.3 hours in DMs. 1,723 messages sent. Active 28 out of 30 days.</strong></p><p>That&#8217;s a full work week. In my inbox. In one month.</p><p>Between <strong>Dec 2-5</strong>, I sent <strong>811 messages</strong> - that&#8217;s not writing, that&#8217;s operating a customer support department I don&#8217;t have.</p><h2><strong>The Real Problem (And Why Most Creators Don&#8217;t See It)</strong></h2><p>Most creators have <em><strong>no idea how much time they spend</strong></em> responding, reacting, engaging, and generally being a good Substack citizen.</p><blockquote><p><em>We tell ourselves we&#8217;re <strong>&#8220;just checking in.&#8221;<br></strong>We&#8217;re not. <br>We&#8217;re running micro-conversations all day long without realizing it.</em></p></blockquote><p><strong>The truth:</strong> Creators don&#8217;t burn out from writing. They burn out from the invisible work around writing.</p><p>The only way to get control is to do what any data-loving creator eventually does:</p><p><strong>Measure &#8594; Analyze &#8594; Systemize.</strong></p><p>Let me show you exactly how.</p><h2><strong>How to Analyze Your Substack Usage (So You Don&#8217;t Burn Out Like I Almost Did)</strong></h2><h3><strong>Step 1 &#8212; Measure What Actually Happens</strong></h3><p>Not what you <em>think</em> happens. What actually happens.</p><p>Ask your Claude AI app something like:</p><blockquote><p><em>&#8220;Summarize how much time I have spent on my DMs over the last 30 days.&#8221;</em></p></blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iA4Q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3efc5fb-ea7f-4c9e-bb53-dd403b540840_1644x1144.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iA4Q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3efc5fb-ea7f-4c9e-bb53-dd403b540840_1644x1144.png 424w, https://substackcdn.com/image/fetch/$s_!iA4Q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3efc5fb-ea7f-4c9e-bb53-dd403b540840_1644x1144.png 848w, https://substackcdn.com/image/fetch/$s_!iA4Q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3efc5fb-ea7f-4c9e-bb53-dd403b540840_1644x1144.png 1272w, https://substackcdn.com/image/fetch/$s_!iA4Q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3efc5fb-ea7f-4c9e-bb53-dd403b540840_1644x1144.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iA4Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3efc5fb-ea7f-4c9e-bb53-dd403b540840_1644x1144.png" width="1456" height="1013" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3efc5fb-ea7f-4c9e-bb53-dd403b540840_1644x1144.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1013,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iA4Q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3efc5fb-ea7f-4c9e-bb53-dd403b540840_1644x1144.png 424w, https://substackcdn.com/image/fetch/$s_!iA4Q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3efc5fb-ea7f-4c9e-bb53-dd403b540840_1644x1144.png 848w, https://substackcdn.com/image/fetch/$s_!iA4Q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3efc5fb-ea7f-4c9e-bb53-dd403b540840_1644x1144.png 1272w, https://substackcdn.com/image/fetch/$s_!iA4Q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3efc5fb-ea7f-4c9e-bb53-dd403b540840_1644x1144.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Actual Claude AI app query</p><p>You&#8217;ll learn:</p><ul><li><p>How many messages do you send</p></li><li><p>How many do you receive</p></li><li><p>Active days</p></li><li><p>Character counts</p></li><li><p>Peak periods</p></li><li><p>Time spent</p></li><li><p>Outliers (your personal &#8220;<em>DM black holes</em>&#8220;)</p></li></ul><p>You&#8217;re not doing this to judge yourself.<br>You&#8217;re doing it because burnout thrives in vagueness.</p><p>The moment you see the number, power returns to your hands.</p><h2><strong>How to Actually Do This (Two Paths)</strong></h2><p>You have two options:</p><p><strong>Fast (5 minutes, paid):</strong> Automated sync with StackContacts  </p><p><strong>Free (3+ hours, extremely tedious):</strong> Manual CSV export for every single DM thread you have. </p><p>If you have 50+ DM threads, the free method becomes impractical. <br>Choose based on your constraint: time or money.</p><p>Here&#8217;s precisely how to get started:</p><h3><strong>Path 1: The Automated Method (5 minutes)</strong></h3><p>What you need:</p><ul><li><p>Claude AI <a href="https://claude.com/download">desktop app</a> (free)</p></li><li><p><a href="https://finntropy.gumroad.com/l/stackcontacts">StackContacts app</a> for MacOS or Windows (one-time fee)</p></li><li><p>5 minutes for initial setup</p></li><li><p>Initial Sync (depends on total DM message count - can be scheduled to sync automatically)</p></li></ul><p><strong>How it works:</strong></p><p>StackContacts automatically syncs all your Substack DMs (and a lot of other data if needed) and provides an MCP server connected to the Claude app:</p><p>&#9989; Fast analytics queries across all DMs<br>&#9989; Top 10 most time-intensive conversations<br>&#9989; Weekly trend analysis with spike detection<br>&#9989; Peak activity periods by day/hour<br>&#9989; Character count and message patterns<br>&#9989; Contact-level insights (response time, message frequency)</p><p><strong>The difference:</strong></p><ul><li><p><strong>StackContacts</strong>: Fully automated sync, instant insights, no manual work. Free AI credits can produce this report (I tested it).</p></li><li><p><strong>Semi-automated method</strong>: Great for one-time analysis, requires monthly manual exports, and you may run out of free AI credits quickly</p></li></ul><p>I<strong>f you&#8217;re spending over 20 hours/month in DMs</strong> like I was, the automation pays for itself in saved time.</p><h3><strong>Path 2: The Free Semi-Automated Method (3 hours)</strong></h3><p>What you need:</p><ul><li><p>Your Substack DM data in CSV files</p></li><li><p>Claude or ChatGPT (free tier works)</p></li><li><p><em><strong>a lot of patience</strong></em></p></li></ul><p><strong>Step-by-step:</strong></p><p><strong>1. Export your DM data from Substack</strong></p><p>Unfortunately, Substack does not offer export DM messages capability yet, but there is an easy way to do this using AI:</p><ul><li><p>Install <a href="https://github.com/microsoft/playwright-mcp/releases">Microsoft playwright-mcp</a> Chrome extension on your browser</p></li><li><p>Use the instructions in the <a href="https://github.com/microsoft/playwright-mcp">Playwright MCP README</a> file to install the Playwright MCP server configuration with your AI client, like <a href="https://claude.com/download">Claude</a> or <a href="https://cursor.com/download">Cursor</a>.</p></li><li><p>Go to your <a href="https://substack.com/chat">Substack Chat page</a> &#8594; Direct - select a thread URL and copy to clipboard</p></li></ul><p>Paste the DM thread URL on your AI Client and ask if it has access:</p><pre><code><code>Do you have access to this web page https://substack.com/chat/&lt;thread_id_redacted&gt;
</code></code></pre><p>You can see this message <em><strong>&#8220;Playwright MCP Bridge&#8221; started debugging this browser</strong></em>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fzZ8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577e192-3ca4-4c36-a27f-d44465a9a331_1082x812.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fzZ8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577e192-3ca4-4c36-a27f-d44465a9a331_1082x812.png 424w, https://substackcdn.com/image/fetch/$s_!fzZ8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577e192-3ca4-4c36-a27f-d44465a9a331_1082x812.png 848w, https://substackcdn.com/image/fetch/$s_!fzZ8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577e192-3ca4-4c36-a27f-d44465a9a331_1082x812.png 1272w, https://substackcdn.com/image/fetch/$s_!fzZ8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577e192-3ca4-4c36-a27f-d44465a9a331_1082x812.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fzZ8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577e192-3ca4-4c36-a27f-d44465a9a331_1082x812.png" width="1082" height="812" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4577e192-3ca4-4c36-a27f-d44465a9a331_1082x812.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:812,&quot;width&quot;:1082,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!fzZ8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577e192-3ca4-4c36-a27f-d44465a9a331_1082x812.png 424w, https://substackcdn.com/image/fetch/$s_!fzZ8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577e192-3ca4-4c36-a27f-d44465a9a331_1082x812.png 848w, https://substackcdn.com/image/fetch/$s_!fzZ8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577e192-3ca4-4c36-a27f-d44465a9a331_1082x812.png 1272w, https://substackcdn.com/image/fetch/$s_!fzZ8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4577e192-3ca4-4c36-a27f-d44465a9a331_1082x812.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Playwright MCP Bridge in action</figcaption></figure></div><p>If the AI confirms it has access, you can ask the AI to do the work:</p><pre><code><code>Read this DM thread https://substack.com/chat/&lt;thread_id_redacted&gt;
1. Create a table that contains the chat thread id, timestamp, sender, and the message for all the messages in this thread 
2. Save the table  in a CSV file
</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Gfjq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23e9bb42-57ed-4611-9d75-fb35a59cee29_1792x1552.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gfjq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23e9bb42-57ed-4611-9d75-fb35a59cee29_1792x1552.png 424w, https://substackcdn.com/image/fetch/$s_!Gfjq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23e9bb42-57ed-4611-9d75-fb35a59cee29_1792x1552.png 848w, https://substackcdn.com/image/fetch/$s_!Gfjq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23e9bb42-57ed-4611-9d75-fb35a59cee29_1792x1552.png 1272w, https://substackcdn.com/image/fetch/$s_!Gfjq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23e9bb42-57ed-4611-9d75-fb35a59cee29_1792x1552.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gfjq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23e9bb42-57ed-4611-9d75-fb35a59cee29_1792x1552.png" width="1456" height="1261" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23e9bb42-57ed-4611-9d75-fb35a59cee29_1792x1552.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1261,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Gfjq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23e9bb42-57ed-4611-9d75-fb35a59cee29_1792x1552.png 424w, https://substackcdn.com/image/fetch/$s_!Gfjq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23e9bb42-57ed-4611-9d75-fb35a59cee29_1792x1552.png 848w, https://substackcdn.com/image/fetch/$s_!Gfjq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23e9bb42-57ed-4611-9d75-fb35a59cee29_1792x1552.png 1272w, https://substackcdn.com/image/fetch/$s_!Gfjq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23e9bb42-57ed-4611-9d75-fb35a59cee29_1792x1552.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Smillew is giving some professional advice to me</figcaption></figure></div><p>Now repeat this process for each DM thread (I have 230 DM threads) - this is where patience is needed. You may need to adjust timestamps manually, as Claude suggests.</p><p>You may find a way to ask Claude AI to do all the heavy lifting for you, but you may also run out of daily free credits quickly &#128516;.</p><p><strong>2. Upload CSV files to Claude or ChatGPT</strong></p><ul><li><p>Open claude.ai or chatgpt.com</p></li><li><p>Start a new conversation</p></li><li><p>Upload all the CSV files (you may hit some limits on a free plan, though)</p></li></ul><p><strong>3. Ask the magic question:</strong></p><p>Copy this exact prompt:</p><pre><code><code>Analyze my Substack DM activity over the last 30 days using attached CSV files. 
Show me:
   - Total messages sent and received
   - Total estimated time spent (assume ~3 min per message)
   - Active days vs inactive days
   - My top 10 most time-intensive conversations
   - Weekly trends with spikes highlighted
   - Average message length by contact
Present findings in a clear summary with charts if possible.
</code></code></pre><p><strong>4. Review the results</strong></p><ul><li><p>Save the analysis to a doc</p></li><li><p>Identify your personal patterns</p></li><li><p>Note your &#8220;spike weeks&#8221;</p></li></ul><p><strong>Time investment:</strong> estimated 3 hours each/month to track trends</p><p><strong>Cost:</strong> $0 (if using free AI tiers, but you may run out of credits)</p><p><strong>My recommendation:</strong>  I built StackContacts because doing this manually is brutal. But if you want proof before buying, export 5-10 of your most active threads and run the analysis on just those. You&#8217;ll get a taste of the insights and can decide if you want to scale it up.</p><h2><strong>Step 2 &#8212; Find Your Spikes and Patterns</strong></h2><p>Every creator has invisible danger zones:</p><ul><li><p>Launch weeks ( or <em>final beta testing weeks</em>)</p></li><li><p>Viral Notes</p></li><li><p>When you publish a strong post</p></li><li><p>When someone large replies or boosts</p></li><li><p>When you respond to everyone at once</p></li><li><p>Your personal &#8220;flow days.&#8221;</p></li></ul><p>Your patterns might <em><strong>explain your fatigue</strong></em><strong>. </strong></p><h2><strong>Step 3 &#8212; Identify High-Value vs. Low-Value Conversations</strong></h2><p>Not all engagement is equal.</p><p>You&#8217;ll see:</p><ul><li><p>Conversations that <em><strong>grow</strong></em> your community</p></li><li><p>Conversations that <em><strong>deepen trust</strong></em></p></li><li><p>Conversations that <em><strong>help your readers</strong></em> or help to <em><strong>improve your products</strong></em></p></li><li><p>And conversations that&#8230; well&#8230; eat half your afternoon</p></li></ul><p>This is where creators get trapped: <em><strong>We distribute our attention evenly rather than strategically.</strong></em></p><h2><strong>Step 4 &#8212; Expose Your Hidden Time Sinks</strong></h2><p>Everyone has them.</p><p>Common time sinks include:</p><ul><li><p>Answering the same onboarding questions repeatedly</p></li><li><p>Explaining product features one DM at a time</p></li><li><p>Unintended back-and-forths that stretch into days</p></li><li><p>Copy/pasting invite codes</p></li><li><p><em>&#8220;Quick&#8221;</em> replies that turn into micro-essays</p></li><li><p>Responding instantly instead of batching</p></li></ul><p>These aren&#8217;t bad things.<br>They&#8217;re just things you should systemize.</p><p>Which brings us to&#8230;</p><h2><strong>Step 5 &#8212; Turn Insight Into Systems (Not New Year Resolutions)</strong></h2><p>Creators don&#8217;t need more discipline.<br>We need better systems.</p><p>Try:</p><ul><li><p><strong>Batching DM time</strong><br>e.g., two 15&#8211;20 minute sessions per day</p></li><li><p><strong>Template replies</strong><br>for onboarding, invite codes, discount codes, and common questions</p></li><li><p><strong>Redirect rules</strong><br>Long conversations &#8594; <em>email</em><br>Product questions &#8594; <em>a user guide</em><br>Support issues &#8594; <em>a Google form or a dedicated support site</em><br>Repeat questions <strong>&#8594;</strong> <em>an FAQ</em></p></li><li><p><strong>Automated calendar invites</strong><br>There are many alternative services with a free tier to let customers book a time that works for them. I&#8217;ve started testing <a href="https://calendly.com/pricing">Calendly</a> recently.</p></li><li><p><strong>Micro-CRM tags for your contacts</strong><br>Even simple tags like <strong>*new***</strong>,<strong> *</strong>customer<strong>*</strong>,<strong> *</strong>collab potential<strong>*</strong>,<strong> *</strong>and VIP*** allow you to segment your customer base and allocate your time more effectively.</p></li></ul><p>Systems aren&#8217;t rigid.<br>They protect your creative energy.</p><p>You&#8217;re not removing the human touch.<br>You&#8217;re <em>protecting</em> it.</p><h2><strong>My Numbers: The Wake-Up Call</strong></h2><p>When I ran this analysis myself, here&#8217;s what AI showed me:</p><h3><strong>The Numbers Don&#8217;t Lie (But They Do Hurt a Little)</strong></h3><ul><li><p><strong>46.3 hours</strong> in DMs.<br><em>A full work week in a month. I could have learned how to speak Chinese.</em></p></li><li><p><strong>1,723 messages sent</strong><br><em>I&#8217;m supposed to be retired. This is crazy.</em></p></li><li><p><strong>Active 28 out of 30 days</strong><br><em>My streak rivaled Duolingo&#8217;s owl.</em></p></li><li><p><strong>267,586 characters written</strong><br><em>Equivalent to a short book. In the last month. Inside my inbox.</em></p></li></ul><p>And then it kept going. A full breakdown. It even counted my thinking time - scary.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mrAk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f0e23a-734b-414e-a357-6f8a742de355_1326x574.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mrAk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f0e23a-734b-414e-a357-6f8a742de355_1326x574.png 424w, https://substackcdn.com/image/fetch/$s_!mrAk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f0e23a-734b-414e-a357-6f8a742de355_1326x574.png 848w, https://substackcdn.com/image/fetch/$s_!mrAk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f0e23a-734b-414e-a357-6f8a742de355_1326x574.png 1272w, https://substackcdn.com/image/fetch/$s_!mrAk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f0e23a-734b-414e-a357-6f8a742de355_1326x574.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mrAk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f0e23a-734b-414e-a357-6f8a742de355_1326x574.png" width="1326" height="574" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/20f0e23a-734b-414e-a357-6f8a742de355_1326x574.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:574,&quot;width&quot;:1326,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mrAk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f0e23a-734b-414e-a357-6f8a742de355_1326x574.png 424w, https://substackcdn.com/image/fetch/$s_!mrAk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f0e23a-734b-414e-a357-6f8a742de355_1326x574.png 848w, https://substackcdn.com/image/fetch/$s_!mrAk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f0e23a-734b-414e-a357-6f8a742de355_1326x574.png 1272w, https://substackcdn.com/image/fetch/$s_!mrAk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20f0e23a-734b-414e-a357-6f8a742de355_1326x574.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>With charts.<br>With trend lines.<br>With&#8230; rankings.</p><p>AI actually <em><strong>ranked the people I spent a whole work week with during the previous month.</strong></em><br>My top 10 DM chats, ranked by hours spent (not insights gained), so I was disappointed.<br>With the average message length exposed.</p><pre><code><code>Contact Messages Sent Estimated Time Avg Message Length 
C.E     158           ~1.7 hours     126 chars 
N.H     170           ~1.5 hours     105 chars 
J.S.R   76            ~1.1 hours     177 chars 
R.G     99            ~51 min        103 chars 
G.W     71            ~50 min        141 chars 
M.B     59            ~47 min        160 chars 
E.C     70            ~41 min        116 chars 
K.B     55            ~41 min        149 chars 
P.P     64            ~39 min        123 chars 
K.K     103           ~39 min        75 chars
</code></code></pre><p>Apparently, I have &#8220;favorite people&#8221; in my DMs, and I didn&#8217;t know it until the robot told me. I must admit that December went by way too quickly for me even to notice these patterns.</p><h3><strong>The Spike That Broke Me</strong></h3><p>The scariest part wasn&#8217;t the totals.<br>It was the pattern.</p><p>Between <strong>Dec 2 and Dec 5</strong>, I sent <strong>811 messages</strong>.</p><blockquote><p><em>That&#8217;s not writing.<br>That&#8217;s not communicating.<br>That&#8217;s&#8230; <strong>operating a customer support department</strong>.</em></p></blockquote><p>And I don&#8217;t have a customer support department.<br>I <em><strong>am</strong></em> the customer support department.</p><p>There was a moment during this analysis &#8212; somewhere between &#8220;286 messages sent on Dec 3&#8221; and &#8220;avg. 155 characters per message&#8221; &#8212; when it hit me:</p><p><em><strong>This is not a side gig.<br>This is a whole frigging job.</strong></em></p><h3><strong>My Weekly Pattern</strong></h3><p>&#128200; <strong>Weekly Trends Report</strong></p><p><strong>Week 1 (Nov 12-18):</strong> 168 messages &#8594; ~4.1 hours<br><strong>Week 2 (Nov 19-25):</strong> 433 messages &#8594; ~13.7 hours &#9888;&#65039; <em>Spike</em><br><strong>Week 3 (Nov 26-Dec 2):</strong> 589 messages &#8594; ~11.8 hours<br><strong>Week 4 (Dec 3-9):</strong> 947 messages &#8594; <em><strong>~19.2 hours &#9888;&#65039; Peak activity</strong></em><br><strong>Week 5 (Dec 10-11):</strong> 81 messages &#8594; ~2.5 hours</p><blockquote><p>Dec 3&#8211;9 was a perfect storm of engagement due to the <strong>StackContacts</strong> beta launch<em>.<br>I said yes to everything.</em><br>My reward was <strong>19.2 hours of DM time</strong> in a single week.</p></blockquote><p>That&#8217;s not sustainable.<br>That&#8217;s a slow drip to creative collapse.</p><p>For me, these patterns included:</p><ul><li><p>Answering the same onboarding questions 42 times (yes, I do have <a href="https://finntropy.substack.com/i/169826194/faq-and-best-practices">a FAQ</a> that could be better)</p></li><li><p>Explaining product features one DM at a time, for the 89th time</p></li><li><p>Unintended back-and-forths that stretch into days</p></li><li><p>Copy/pasting invite codes to my <a href="https://chat.stackcontacts.com/">fancy new private chat support system</a></p></li><li><p><em>&#8220;Quick&#8221;</em> replies that turn into micro-essays</p></li><li><p>Responding instantly instead of batching</p></li></ul><p>My top 10 conversations alone took almost <strong>10 hours</strong>.</p><p>But they were <em><strong>meaningful.</strong></em><br>The <em>other</em> 33 threads?<br>Not all of them were worth the same energy.</p><h2><strong>What Changed When I Actually Implemented This System</strong></h2><p>I ran this analysis for the first time on December 10th.</p><p>The numbers terrified me enough to take action immediately.<br>Here&#8217;s what happened over the next 30 days:</p><h3><strong>Before Systems (Nov 12 - Dec 11):</strong></h3><ul><li><p>&#9200; <strong>46.3 hours</strong> total in DMs</p></li><li><p>&#128202; <strong>1,723 messages</strong> sent</p></li><li><p>&#128293; <strong>28 out of 30 days</strong> active</p></li><li><p>&#128560; <strong>19.2 hours</strong> in my worst week</p></li><li><p>&#129504; Mental state: Exhausted, reactive, always <em>&#8220;catching up&#8221;</em></p></li></ul><h3><strong>After Systems (Dec 12 - Jan 9):</strong></h3><ul><li><p>&#9200; <strong>18.6 hours</strong> total in DMs (&#8595; 59%)</p></li><li><p>&#128202; <strong>428 messages</strong> sent (&#8595; 75%)</p></li><li><p>&#128293; <strong>18 out of 30 days</strong> active (&#8595; 10 days)</p></li><li><p>&#128524; <strong>6.2 hours</strong> in my worst week (&#8595; 68%)</p></li><li><p>&#129504; Mental state: Focused, intentional, creative energy restored</p></li></ul><h3><strong>The Systems That Made the Difference</strong></h3><p><strong>1. Batching DM Time (Saved ~8 hours/week)</strong></p><p><strong>Before:</strong> Checked DMs constantly throughout the day<br><strong>After:</strong> Two 20-minute DM sessions (8:30 am, 4 pm)</p><p><strong>Result:</strong></p><ul><li><p>Stopped context-switching 15+ times/day</p></li><li><p>Responses became more thoughtful (not reactive)</p></li><li><p>No loss in relationship quality</p></li></ul><p><strong>2. Template Library (Saved ~5 hours/week)</strong></p><p>I created 8 template responses for recurring questions:</p><ul><li><p>Beta invite code request</p></li><li><p>Product feature question</p></li><li><p>Onboarding help</p></li><li><p>Discount code inquiry</p></li><li><p>&#8220;How do I get started?&#8221;</p></li><li><p>Technical troubleshooting</p></li><li><p>Collaboration interest</p></li><li><p>General thank you</p></li></ul><p><strong>Before:</strong> Wrote every response from scratch<br><strong>After:</strong> 60% of messages now use templates (customized slightly)</p><p><strong>Result:</strong></p><ul><li><p>Faster response times (better user experience)</p></li><li><p>More consistent messaging</p></li><li><p>Less mental energy per response</p></li></ul><p>Here&#8217;s my most-used template (feel free to steal):</p><pre><code>Hi [Name]! &#128075;

Thanks for your interest in [Product].
Here&#8217;s your beta invite code: [CODE]
Quick Start: Download from [link]
Follow the setup guide: [link]
Join support chat: [link]

Most common questions answered here: [FAQ link]
Let me know if you hit any snags!
&#8212; Finn</code></pre><p><strong>3. Redirect Rules (Saved ~4 hours/week)</strong></p><p>I stopped trying to answer everything in DMs.</p><p><strong>New routing system:</strong></p><ul><li><p>&#128231; Complex questions &#8594; <em>&#8220;Let&#8217;s continue this via email: <a href="mailto:finntropy@...">finntropy@...</a>&#8220;</em></p></li><li><p>&#128218; Product features &#8594; <em>&#8220;Great question! Full guide here: [link]&#8221;</em></p></li><li><p>&#128027; Bug reports &#8594; <em>&#8220;Please submit here so I don&#8217;t lose track: [form]&#8221;</em></p></li><li><p>&#128172; Long strategy convos &#8594; <em>&#8220;This deserves a proper chat. Book 15 min: [cal link]&#8221;</em></p></li></ul><p><strong>Result:</strong></p><ul><li><p>Better answers (right medium for the question)</p></li><li><p>Nothing gets lost</p></li><li><p>DMs stay short and actionable</p></li></ul><p><strong>4. The &#8220;24-Hour Rule&#8221; (Saved sanity)</strong></p><p><strong>New personal policy:</strong></p><p>I don&#8217;t respond to non-urgent DMs within 24 hours.</p><p><strong>Why this works:</strong></p><ul><li><p>Kills the expectation of instant replies</p></li><li><p>Let me batch responses thoughtfully</p></li><li><p>Readers still get great answers (just not instantly)</p></li><li><p>No one has complained</p></li></ul><p><strong>Exception:</strong> Paying customers or critical bugs get same-day responses.</p><h3><strong>The Surprising Benefits</strong></h3><p>Beyond just time savings, the systems created:</p><ul><li><p><strong>Better relationships: </strong>Ironically, batching DMs made my responses more thoughtful. People noticed.</p></li><li><p><strong>Clearer boundaries: </strong>Readers respect the structure. No one expects instant replies.</p></li><li><p><strong>More creative energy: </strong>The 27.7 hours I reclaimed went into writing, building, and actual rest.</p></li><li><p><strong>Higher quality conversations: </strong>By routing complex topics to email or calls, we have deeper discussions.</p></li></ul><h3><strong>The One Thing I Wish I&#8217;d Known Earlier</strong></h3><p>Systems don&#8217;t make you less human.</p><p><em><strong>Systems protect your humanity.</strong></em></p><p>When you&#8217;re drowning in 46 hours of DMs, you:</p><ul><li><p>Rush responses</p></li><li><p>Copy-paste generic answers</p></li><li><p>Miss important signals</p></li><li><p>Resent the work</p></li></ul><p>When you have systems, you:</p><ul><li><p>Give thoughtful responses</p></li><li><p>Have energy for the critical conversations</p></li><li><p>Notice patterns and opportunities</p></li><li><p>Actually enjoy the community</p></li></ul><p>The goal isn&#8217;t to ignore your readers.<br><em><strong>The goal is to serve them better with less chaos.</strong></em></p><h2><strong>Why This Matters</strong></h2><p>Creators don&#8217;t burn out from writing.</p><p>They burn out from:</p><ul><li><p>the friction around writing</p></li><li><p>the endless context switching</p></li><li><p>the invisible energy leaks</p></li><li><p>the belief that &#8220; <em>we have to do everything ourselves.</em>&#8220;</p></li></ul><blockquote><p><em>Substack is meant to be joyful.<br>Human.<br>Sustainable.</em></p></blockquote><p>Your DMs should <em><strong>enhance your creativity</strong></em> - not quietly consume it.</p><p>When you understand your patterns, you can design your days around:</p><ul><li><p>deeper focus</p></li><li><p>better boundaries</p></li><li><p>higher-quality connections</p></li><li><p>and actual rest</p></li></ul><p>That&#8217;s how you grow without breaking.</p><h2><strong>The Bottom Line: Measure, Systemize, Protect</strong></h2><p>Here&#8217;s what I learned from analyzing 46.3 hours of DM time:</p><p><em><strong>Most creators aren&#8217;t burning out from writing.</strong></em></p><p>They&#8217;re burning out from the invisible work around writing.</p><blockquote><p><em>The DMs.<br>The context switching.<br>The belief that &#8220;being available&#8221; means &#8220;being always on.&#8221;</em></p></blockquote><p><em>It doesn&#8217;t.</em></p><p>You can be:</p><ul><li><p>Highly responsive AND have boundaries</p></li><li><p>Community-focused AND protect your creative time</p></li><li><p>Human AND systematic</p></li></ul><p>The data permits you to build systems.</p><h2><strong>Your Next Steps</strong></h2><p><strong>This week:</strong></p><ol><li><p>Run the DM analysis (use the prompt above)</p></li><li><p>Identify your personal &#8220;spike weeks.&#8221;</p></li><li><p>Create one template response for your most common question</p></li></ol><p><strong>This month:</strong></p><ol><li><p>Implement batching (two 20-minute DM sessions/day)</p></li><li><p>Build your redirect rules (email, forms, guides)</p></li><li><p>Track your time savings</p></li></ol><p><strong>This quarter:</strong></p><ol><li><p>Refine your systems based on what works</p></li><li><p>Measure the impact on your creative output</p></li><li><p>Decide if automation makes sense for your volume</p></li></ol><h2><strong>Want This Automated?</strong></h2><p>If you discovered you&#8217;re spending 15+ hours/month in DMs (like most active Substack creators), manually tracking this becomes tedious.</p><p><em><strong>That&#8217;s why I built StackContacts.</strong></em></p><p>It includes Substack DM data that you can ask questions with AI:</p><ul><li><p>Time spent per conversation</p></li><li><p>Weekly trends and spikes</p></li><li><p>Your top 10 most time-intensive DMs</p></li><li><p>Peak activity patterns</p></li><li><p>Template usage and response times</p></li></ul><p><em><strong>All data synced as you use Substack.</strong></em></p><p><strong>The goal:</strong> Spend less time analyzing, more time creating.</p><p><strong>Current status</strong>: StackContacts for Mac and Windows is available<br>(macOS with Apple silicon M series CPU only)<br><strong>Setup time:</strong> 5 minutes</p><p><strong>&#8594; <a href="https://finntropy.gumroad.com/l/stackcontacts">Get the StackContacts app</a></strong></p><p>If you prefer the manual method, that&#8217;s great too. The important thing is to measure and protect your creative energy.</p><p>&#8212; Finn</p><p><strong>P.S.</strong> If you run this analysis and discover something surprising, I&#8217;d love to hear what patterns you find. Reply or leave a comment.</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/p/how-to-analyze-your-substack-dm-usage/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://stackcontacts.substack.com/p/how-to-analyze-your-substack-dm-usage/comments"><span>Leave a comment</span></a></p><h4>PS. I&#8217;m Still Below The Average Joe</h4><p>Over the last 30 days, I spent 10.26 hours per week on Substack, which is about <strong>1.46 hours</strong> per day.  According to the Internet, <strong>people spend 2.4 hours per day</strong> on social media.  <br>I&#8217;m trying to keep my social media usage below the average and focus on bringing value to my readers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fX_G!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c888b0-6542-4c6f-931e-e54c1f1052d8_1544x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fX_G!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c888b0-6542-4c6f-931e-e54c1f1052d8_1544x600.png 424w, https://substackcdn.com/image/fetch/$s_!fX_G!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c888b0-6542-4c6f-931e-e54c1f1052d8_1544x600.png 848w, https://substackcdn.com/image/fetch/$s_!fX_G!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c888b0-6542-4c6f-931e-e54c1f1052d8_1544x600.png 1272w, https://substackcdn.com/image/fetch/$s_!fX_G!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c888b0-6542-4c6f-931e-e54c1f1052d8_1544x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fX_G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c888b0-6542-4c6f-931e-e54c1f1052d8_1544x600.png" width="1456" height="566" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/50c888b0-6542-4c6f-931e-e54c1f1052d8_1544x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:566,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:132340,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://finntropy.substack.com/i/181401154?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c888b0-6542-4c6f-931e-e54c1f1052d8_1544x600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!fX_G!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c888b0-6542-4c6f-931e-e54c1f1052d8_1544x600.png 424w, https://substackcdn.com/image/fetch/$s_!fX_G!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c888b0-6542-4c6f-931e-e54c1f1052d8_1544x600.png 848w, https://substackcdn.com/image/fetch/$s_!fX_G!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c888b0-6542-4c6f-931e-e54c1f1052d8_1544x600.png 1272w, https://substackcdn.com/image/fetch/$s_!fX_G!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F50c888b0-6542-4c6f-931e-e54c1f1052d8_1544x600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Average social media usage</figcaption></figure></div><div data-component-name="FragmentNodeToDOM"><h3><strong>Methodology</strong></h3><p>This is how Claude AI answered my simple question, using my Substack DM data. </p></div>
      <p>
          <a href="https://stackcontacts.substack.com/p/how-to-analyze-your-substack-dm-usage">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Automatic Sync, Churn Tracking, and Office Hours]]></title><description><![CDATA[StackContacts Update: What's New and What's Next]]></description><link>https://stackcontacts.substack.com/p/automatic-sync-churn-tracking-and</link><guid isPermaLink="false">https://stackcontacts.substack.com/p/automatic-sync-churn-tracking-and</guid><dc:creator><![CDATA[Finn Tropy | StackContacts]]></dc:creator><pubDate>Mon, 29 Dec 2025 19:56:04 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!r3zN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4decc145-7327-44f9-924b-485089d3da61_1024x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r3zN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4decc145-7327-44f9-924b-485089d3da61_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r3zN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4decc145-7327-44f9-924b-485089d3da61_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!r3zN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4decc145-7327-44f9-924b-485089d3da61_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!r3zN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4decc145-7327-44f9-924b-485089d3da61_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!r3zN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4decc145-7327-44f9-924b-485089d3da61_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r3zN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4decc145-7327-44f9-924b-485089d3da61_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4decc145-7327-44f9-924b-485089d3da61_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!r3zN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4decc145-7327-44f9-924b-485089d3da61_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!r3zN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4decc145-7327-44f9-924b-485089d3da61_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!r3zN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4decc145-7327-44f9-924b-485089d3da61_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!r3zN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4decc145-7327-44f9-924b-485089d3da61_1024x608.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Automatic Subscriber Data Sync Feature Now Available</figcaption></figure></div><p>Four days after launching this newsletter on Christmas Eve, something happened that changed everything.</p><p>I got my <em><strong>first annual paid</strong></em> subscriber.</p><p>But that&#8217;s not the only thing that&#8217;s been happening. I&#8217;ve been heads-down building features you asked for, fixing bugs you found, and making StackContacts work better for you every day.</p><p>This update covers:</p><ul><li><p><strong>Automatic Sync</strong> - Your subscriber data stays fresh without you lifting a finger</p></li><li><p><strong>Churn Tracking</strong> - Get your churn metrics and analyze patterns for unsubscribes</p></li><li><p><strong>Two bug fixes</strong> - Events and DMs data collection fixed</p></li><li><p><strong>A milestone</strong> - First annual subscriber in 4 days</p></li><li><p><strong>An announcement</strong> - Office hours starting January 7, 2026</p></li></ul><p>Let me walk you through what&#8217;s new and what&#8217;s next.</p><h2><strong>Feature #1: Automatic Sync</strong></h2><h3><strong>What It Is</strong></h3><p>StackContacts now syncs your subscriber summary data automatically in the background. No more remembering to click the sync button. No more stale data when you need it most. This feature is available from version <strong>0.1.24</strong> onwards.</p><p>Here&#8217;s how it works: When StackContacts is running, it periodically checks for new subscriber summary data from Substack. If there are new subscribers or churned ones, it syncs them automatically. You don&#8217;t have to do anything. Just leave the StackContacts app running in the background.</p><h3><strong>Before vs. After</strong></h3><p><strong>Before:</strong></p><ul><li><p>Open the StackContacts app</p></li><li><p>Click the Sync button</p></li><li><p>Wait for it to complete</p></li><li><p>Remember to do this regularly</p></li><li><p>What happens when you forget? Stale data, missed insights</p></li></ul><p><strong>After:</strong></p><ul><li><p>StackContacts runs in the background</p></li><li><p>Data syncs automatically on a daily or weekly schedule</p></li><li><p>Your database stays fresh without manual intervention</p></li><li><p>Wake up to updated data every morning or on Monday at 9:05 AM</p></li></ul><h3><strong>How to Use It</strong></h3><p>Automatic sync is enabled by clicking the &#8220;Enable scheduled sync&#8221; checkbox. Select the Frequency (Daily or Weekly), and set the time (it uses your local time from the browser).</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gndy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2da48c-6bcc-453c-9e8b-a47f024e5a0c_2480x2148.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gndy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2da48c-6bcc-453c-9e8b-a47f024e5a0c_2480x2148.png 424w, https://substackcdn.com/image/fetch/$s_!gndy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2da48c-6bcc-453c-9e8b-a47f024e5a0c_2480x2148.png 848w, https://substackcdn.com/image/fetch/$s_!gndy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2da48c-6bcc-453c-9e8b-a47f024e5a0c_2480x2148.png 1272w, https://substackcdn.com/image/fetch/$s_!gndy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2da48c-6bcc-453c-9e8b-a47f024e5a0c_2480x2148.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gndy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2da48c-6bcc-453c-9e8b-a47f024e5a0c_2480x2148.png" width="2480" height="2148" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa2da48c-6bcc-453c-9e8b-a47f024e5a0c_2480x2148.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2148,&quot;width&quot;:2480,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1134186,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/182881670?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75d2a974-57b4-4368-8049-a4299114ccdb_2480x2148.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gndy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2da48c-6bcc-453c-9e8b-a47f024e5a0c_2480x2148.png 424w, https://substackcdn.com/image/fetch/$s_!gndy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2da48c-6bcc-453c-9e8b-a47f024e5a0c_2480x2148.png 848w, https://substackcdn.com/image/fetch/$s_!gndy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2da48c-6bcc-453c-9e8b-a47f024e5a0c_2480x2148.png 1272w, https://substackcdn.com/image/fetch/$s_!gndy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa2da48c-6bcc-453c-9e8b-a47f024e5a0c_2480x2148.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Automatic Sync - Daily option</figcaption></figure></div><p>You need to run it at least once manually using &#8220;Run Sync now&#8221; to add the credentials to an internal database that tracks the scheduled jobs. Your selected publication is also stored there.</p><p>The UI shows the Next run, and if you want to stop automatic Sync, click the &#8220;Disable&#8221; button.</p><p>Just keep StackContacts running (it can run in the background), and your Subscriber Summary data will stay up to date.</p><p>If you want to verify it&#8217;s working, check the sync status in the app. You&#8217;ll see when the last sync completed and when the next one is scheduled.</p><p>Here are the Weekly Frequency options. You can select the Day of Week - this helps you to get fresh data before your weekly review, for example.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!h68c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7737f577-2f71-4611-84a5-828c1f6f399e_2480x2148.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!h68c!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7737f577-2f71-4611-84a5-828c1f6f399e_2480x2148.png 424w, https://substackcdn.com/image/fetch/$s_!h68c!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7737f577-2f71-4611-84a5-828c1f6f399e_2480x2148.png 848w, https://substackcdn.com/image/fetch/$s_!h68c!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7737f577-2f71-4611-84a5-828c1f6f399e_2480x2148.png 1272w, https://substackcdn.com/image/fetch/$s_!h68c!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7737f577-2f71-4611-84a5-828c1f6f399e_2480x2148.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!h68c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7737f577-2f71-4611-84a5-828c1f6f399e_2480x2148.png" width="1456" height="1261" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7737f577-2f71-4611-84a5-828c1f6f399e_2480x2148.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1261,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:923610,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/182881670?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7737f577-2f71-4611-84a5-828c1f6f399e_2480x2148.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!h68c!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7737f577-2f71-4611-84a5-828c1f6f399e_2480x2148.png 424w, https://substackcdn.com/image/fetch/$s_!h68c!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7737f577-2f71-4611-84a5-828c1f6f399e_2480x2148.png 848w, https://substackcdn.com/image/fetch/$s_!h68c!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7737f577-2f71-4611-84a5-828c1f6f399e_2480x2148.png 1272w, https://substackcdn.com/image/fetch/$s_!h68c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7737f577-2f71-4611-84a5-828c1f6f399e_2480x2148.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Automatic Sync - Weekly option</figcaption></figure></div><h3><strong>Why This Matters</strong></h3><p>Fresh data means better insights. When your churn tracking analysis runs, it uses the latest subscriber data. When you&#8217;re looking for revenue attribution, you&#8217;re seeing the most recent sales. Automatic sync ensures you&#8217;re always working with current subscriber information.</p><p>This also sets the foundation for future features that need real-time data - like alerts when high-value subscribers disengage, or notifications when specific content drives sales.</p><p>We start this feature with Subscriber Summary data because it is critical to capturing churned subscribers and to adding other data sources in the future roadmap.</p><h2><strong>Feature #2: Subscriber Churn Tracking</strong></h2><h3><strong>What It Is</strong></h3><p>Churn tracking identifies subscribers who have left your publication by comparing historical snapshots of your subscriber base. It automatically creates a dated snapshot of all current subscribers every time you sync, building a historical record that lets you identify exactly when subscribers churn.</p><p>The feature uses two tables: <code>subscribers_snapshots</code> (append-only historical records) and <code>subscriber_events</code> (an engagement timeline with a merge mode to prevent duplicates). You can query these tables to analyze churn patterns and review engagement history for churned subscribers.</p><h3><strong>The Problem It Solves</strong></h3><p>Substack only shows you unsubscribes after they happen. By then, it&#8217;s too late&#8212;the subscriber is gone, and you&#8217;ve lost the opportunity to re-engage them or understand why they left.</p><p>With churn tracking, you can:</p><ul><li><p>See exactly when subscribers churned by comparing snapshots across dates</p></li><li><p>Analyze engagement patterns for churned subscribers to identify warning signs</p></li><li><p>Track churn trends over time to spot patterns</p></li><li><p>Review the complete event history of churned subscribers (emails opened, posts seen, etc.)</p></li></ul><h3><strong>How It Works</strong></h3><p>StackContacts maintains two tables to track subscribers:</p><ol><li><p><code>subscribers_summary</code> &#8212; Current subscribers (updated on each sync using merge mode)</p></li><li><p><code>subscribers_snapshots</code> &#8212; Historical snapshots (append-only, never deleted)</p></li></ol><p><strong>Automatic snapshot creation:</strong></p><p>When you sync subscriber data (<code>Subscriber Summary</code> checked), the app automatically:</p><ul><li><p>Updates <code>subscribers_summary</code> with your current subscriber list</p></li><li><p>Creates a new snapshot in <code>subscribers_snapshots</code> with today&#8217;s date (YYYY-MM-DD format)</p></li><li><p>Each snapshot record includes a <code>snapshot_date</code> field plus all subscriber data from that day</p></li></ul><p><strong>Key implementation details:</strong></p><ul><li><p><strong>Primary key:</strong> <code>["snapshot_date", "subscription_id"]</code> ensures one record per subscriber per date</p></li><li><p><strong>Write mode:</strong> Append-only (<code>write_disposition="append"</code>) preserves all historical snapshots</p></li><li><p><strong>Automatic:</strong> Snapshots are created automatically whenever you sync subscriber summary data</p></li><li><p><strong>Event tracking:</strong> The <code>subscriber_events</code> table uses merge mode to prevent duplicate events so that you can analyze engagement history for churned subscribers without table bloat</p></li></ul><p><strong>Finding churned subscribers:</strong></p><p>Compare snapshots from different dates using SQL queries. A subscriber who appears in an older snapshot but not in a newer one has churned between those dates.</p><h3><strong>What You Can Do With It</strong></h3><ul><li><p><strong>Identify churn dates:</strong> Compare any two snapshot dates to see who churned in that period</p></li><li><p><strong>Analyze churn patterns:</strong> Track churn rates over time, by subscription tier, or by other attributes</p></li><li><p><strong>Review engagement history:</strong> Query <code>subscriber_events</code> for churned subscribers to see their last activities (emails opened, posts seen, etc.)</p></li><li><p><strong>Build retention reports:</strong> Calculate retention rates between snapshot dates</p></li><li><p><strong>Segment analysis:</strong> Compare churn rates across different subscriber segments</p></li></ul><h3><strong>Example Use Case</strong></h3><p><strong>Scenario:</strong> You want to find subscribers who were active on December 15th but churned by December 22nd, and see what their engagement looked like before they left.</p><p><strong>Step 1: Identify churned subscribers</strong></p><pre><code><code>-- Find subscribers who were active on Dec 15 but churned by Dec 22
USE pub_finntropy_substack_com; 

SELECT 
    old.subscription_id,
    old.user_email_address,
    old.subscription_interval,
    old.subscription_created_at
FROM subscribers_snapshots old
WHERE old.snapshot_date = '2025-12-15'
  AND NOT EXISTS (
    SELECT 1 FROM subscribers_snapshots new
    WHERE new.subscription_id = old.subscription_id
      AND new.snapshot_date = '2025-12-22'
  )
-- See the last 10 events for each churned subscriber
SELECT 
    se.subscriber_email,
    se.text AS event_type,
    se.timestamp,
    se.post_title
FROM subscriber_events se
WHERE se.subscriber_email IN (
    -- Subquery from Step 1
    SELECT old.user_email_address
    FROM subscribers_snapshots old
    WHERE old.snapshot_date = '2025-12-15'
      AND NOT EXISTS (
        SELECT 1 FROM subscribers_snapshots new
        WHERE new.subscription_id = old.subscription_id
          AND new.snapshot_date = '2025-12-22'
      )
)
ORDER BY se.subscriber_email, se.timestamp DESC
LIMIT 10
</code></code></pre><p>This shows you exactly when subscribers churned and what their engagement looked like before they left, giving you insights to prevent future churn.</p><div><hr></div><h2><strong>Bug Fixes: What We Fixed</strong></h2><h3><strong>Bug #1: Duplicate Subscriber Events Causing Database Bloat</strong></h3><p><strong>What the bug was:</strong> Every time you synced subscriber events (like &#8220;Received email&#8221;, &#8220;Opened email&#8221;, &#8220;Post seen&#8221;), the app was adding all events to the database again, even if those events were already stored from a previous sync. This created duplicate rows for the same events.</p><p><strong>How it affected users:</strong></p><ul><li><p>Your database grew much faster than it should have (we saw cases where the events table tripled in size)</p></li><li><p>Queries became slower as the table filled with duplicate data</p></li><li><p>Storage space was wasted on redundant information</p></li><li><p>It made it harder to analyze engagement patterns accurately</p></li></ul><p><strong>What we fixed:</strong> We changed the events table to use &#8220;merge&#8221; mode instead of &#8220;append&#8221; mode. Now, when the same event is synced again, it updates the existing record instead of creating a duplicate. Each event is uniquely identified by its timestamp, subscriber email, and event type, preventing duplicates.</p><p><strong>How to verify it&#8217;s fixed:</strong> After syncing subscriber events multiple times, check your <code>subscriber_events</code> table. You should see approximately the same number of unique events even after numerous syncs, rather than the count growing rapidly each time. The table size should grow only at the rate of new events, not continuously multiplying in size.</p><h3><strong>Bug #2: Duplicate Direct Messages Causing Database Bloat</strong></h3><p><strong>What the bug was:</strong> Similar to the events bug, every time you synced direct messages (DMs), the app was adding all messages to the database again, even if those messages were already stored from a previous sync. This created duplicate rows for the same messages.</p><p><strong>How it affected users:</strong></p><ul><li><p>Your database grew unnecessarily large with duplicate message records</p></li><li><p>Queries on DM data became slower</p></li><li><p>Storage space was wasted</p></li><li><p>Made it challenging to track message history and conversations accurately</p></li></ul><p><strong>What we fixed:</strong> We changed the DM messages table to use &#8220;merge&#8221; mode instead of &#8220;append&#8221; mode. Now, when the same message is synced again, it updates the existing record instead of creating a duplicate. Each message is uniquely identified by its message ID (either from the API or generated from thread ID, timestamp, sender, and content).</p><p><strong>How to verify it&#8217;s fixed:</strong> After syncing DM messages multiple times, check your <code>dm_messages</code> table. You should see roughly the same number of unique messages even after numerous syncs, rather than the count growing rapidly each time. The table size should grow only at the rate of new DMs, not continuously multiplying in size.</p><h3><strong>The Process</strong></h3><p>These bugs were found through my beta testing program. I&#8217;m grateful for everyone who took the time to report issues - it&#8217;s the only way StackContacts gets better.</p><p>Fixing bugs quickly matters. When something breaks, it breaks your workflow. That&#8217;s why I prioritize bug fixes and get them resolved as soon as possible.</p><p>If you find something that doesn&#8217;t work right, please report it. Your feedback directly shapes what gets fixed next.</p><h2><strong>Milestone: First Annual Paid Subscriber</strong></h2><h3><strong>The Story</strong></h3><p>Four days after launching this newsletter, I got my first annual paid subscriber.</p><p>That&#8217;s not just a number. That&#8217;s someone who saw value in what I&#8217;m building and committed to supporting it for a full year. That&#8217;s trust. That&#8217;s validation that this newsletter is worth paying for.</p><h3><strong>The Context</strong></h3><p>I launched this newsletter on Christmas Eve with a simple goal: help StackContacts users extract maximum value from their data. I didn&#8217;t know if anyone would pay for it. I didn&#8217;t know if the content would resonate.</p><p>Four days later, I had my answer.</p><h3><strong>Gratitude</strong></h3><p>To that first annual subscriber: <em><strong>Thank you</strong></em>!</p><p>Your support means more than you know. You&#8217;re not just a subscriber - you&#8217;re a co-builder. Your feedback, your questions, and your engagement shape what this newsletter becomes.</p><p>And to all the early supporters who signed up in those first days: Thank you for taking a chance on something new. You&#8217;re the foundation this community is built on.</p><h3><strong>What&#8217;s Next</strong></h3><p>This milestone isn&#8217;t an endpoint - it&#8217;s a starting point. It&#8217;s proof that there&#8217;s demand for deep, practical content about data-driven growth. It&#8217;s motivation to keep building, keep writing, keep helping creators see what their data is really telling them.</p><p>I&#8217;m committed to making this newsletter worth every dollar you invest in it. That means more weekly posts, more AI prompts, more case studies, and more ways to turn your StackContacts data into actionable insights.</p><p>If you&#8217;re reading this and haven&#8217;t upgraded yet, I&#8217;d love to have you join. You&#8217;ll get access to all the weekly analysis posts, the full AI prompt library, and direct support when you need it.</p><h2><strong>Announcement: Office Hours Starting Jan 7, 2026</strong></h2><h3><strong>What Are Office Hours</strong></h3><p>Starting January 7, 2026, I&#8217;ll be hosting weekly office hours for paid StackContacts subscribers. These are live calls where you can bring your questions, your data, and your challenges - and we&#8217;ll work through them together.</p>
      <p>
          <a href="https://stackcontacts.substack.com/p/automatic-sync-churn-tracking-and">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How to Export Your Full StackContacts Dataset (Without Hitting the 500-Row Wall)]]></title><description><![CDATA[For: Creators with large lists doing outreach, segmentation, or revenue analysis Reading time: 8 minutes Difficulty: Intermediate]]></description><link>https://stackcontacts.substack.com/p/how-to-export-your-full-stackcontacts</link><guid isPermaLink="false">https://stackcontacts.substack.com/p/how-to-export-your-full-stackcontacts</guid><dc:creator><![CDATA[Finn Tropy | StackContacts]]></dc:creator><pubDate>Sat, 27 Dec 2025 21:01:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!v5Xb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6129c4-fa1a-449b-8561-f606ecb066a0_1024x608.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>The Problem Every Power User Hits</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!v5Xb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6129c4-fa1a-449b-8561-f606ecb066a0_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!v5Xb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6129c4-fa1a-449b-8561-f606ecb066a0_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!v5Xb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6129c4-fa1a-449b-8561-f606ecb066a0_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!v5Xb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6129c4-fa1a-449b-8561-f606ecb066a0_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!v5Xb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6129c4-fa1a-449b-8561-f606ecb066a0_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!v5Xb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6129c4-fa1a-449b-8561-f606ecb066a0_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe6129c4-fa1a-449b-8561-f606ecb066a0_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!v5Xb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6129c4-fa1a-449b-8561-f606ecb066a0_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!v5Xb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6129c4-fa1a-449b-8561-f606ecb066a0_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!v5Xb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6129c4-fa1a-449b-8561-f606ecb066a0_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!v5Xb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6129c4-fa1a-449b-8561-f606ecb066a0_1024x608.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Do you want to unlock your complete StackContacts database or view the insights through the AI context window?  </figcaption></figure></div><p>You&#8217;re running a query in Claude. You want to export your most engaged subscribers for an outreach campaign. You have 23,000 active readers.</p><p>The AI returns 487 rows and says &#8220;results truncated.&#8221;</p><p>You try again. Maybe 503 rows this time. Still truncated.</p><p>The data is <em>definitely</em> there&#8212;you can see the counts, query it, and analyze it. But you can&#8217;t get it <em>out</em> in a usable format.</p><p>This isn&#8217;t a bug. It&#8217;s not a StackContacts limitation. Your database has no problem with 3,000 rows or 300,000.</p><p>You&#8217;re hitting the ceiling of the <strong>conversation layer</strong>.</p><p>And if you&#8217;re doing any serious outreach, enrichment, or cross-platform analysis, this limitation will cost you time, opportunities, and money.</p><p>Let me show you what&#8217;s actually happening&#8212;and then how to route around it completely.</p><h2><strong>Why Exports Cap Around ~500 Rows</strong></h2><p>Here&#8217;s the confusion: <strong>The data is there, so why can&#8217;t I export it?</strong></p><p>The answer is in the architecture.</p><p>StackContacts uses something called an MCP (Model Context Protocol) server. It sits between the AI and your database:</p><pre><code><code>AI (Claude / Cursor)
        &#8595;
MCP Server (context-limited)
        &#8595;
Database (no row limits)
</code></code></pre><p>When you ask Claude to query your data, the MCP server fetches the results and passes them back through the AI&#8217;s <strong>context window</strong>.</p><p>Here&#8217;s the problem: AI models have a <em>finite</em> context window. They can only hold so much text at once. Large result sets&#8212;especially with many columns&#8212;quickly exceed that limit.</p><p>When that happens:</p><ul><li><p>The MCP server truncates results</p></li><li><p>The AI tells you &#8220;results limited to 500 rows&#8221;</p></li><li><p>Your export is incomplete</p></li></ul><p><strong>Important:</strong> This is <strong>not</strong> a database limit. Your database has no 500-row cap. The data isn&#8217;t missing. You&#8217;re just trying to pass too much information through a channel that was designed for <em>conversation</em>, not <em>bulk data transfer</em>.</p><blockquote><p><em>Think of MCP as a reading window, not the filing cabinet.</em></p></blockquote><p>MCP is brilliant for exploration, pattern recognition, and ad-hoc analysis. It&#8217;s what makes talking to your database feel natural.</p><p>But when you need to <em>extract</em> large datasets&#8212;for outreach tools, CRM imports, or enrichment pipelines&#8212;you&#8217;re using the wrong tool for the job.</p><h2><strong>The Mental Model: Two Layers, Two Use Cases</strong></h2><p>Understanding this architecture changes how you work with StackContacts.</p><p><strong>Layer 1: The MCP Server (Exploration)</strong></p><ul><li><p>Great for: &#8220;Show me my top posts by engagement.&#8221;</p></li><li><p>Great for: &#8220;Which subscribers opened in the last week?&#8221;</p></li><li><p>Great for: Summarization, pattern finding, quick samples</p></li><li><p>Limited by: AI context window (~500-1000 rows depending on columns)</p></li></ul><p><strong>Layer 2: The Database (Extraction)</strong></p><ul><li><p>Great for: &#8220;Export all active subscribers with &gt;3 opens&#8221;</p></li><li><p>Great for: Bulk operations, outreach lists, data migrations</p></li><li><p>Great for: Feeding other systems (CRM, email tools, enrichment APIs)</p></li><li><p>Limited by: Your disk space (effectively unlimited)</p></li></ul><p>Most StackContacts users only use Layer 1 because it&#8217;s easy and conversational.</p><p>But if you want to do anything at scale&#8212;outreach, partnerships, enrichment, cross-platform matching&#8212;you need Layer 2.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!J3a2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6010bf6b-3d29-4677-8d9d-8ef729050274_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!J3a2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6010bf6b-3d29-4677-8d9d-8ef729050274_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!J3a2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6010bf6b-3d29-4677-8d9d-8ef729050274_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!J3a2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6010bf6b-3d29-4677-8d9d-8ef729050274_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!J3a2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6010bf6b-3d29-4677-8d9d-8ef729050274_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!J3a2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6010bf6b-3d29-4677-8d9d-8ef729050274_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6010bf6b-3d29-4677-8d9d-8ef729050274_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1566032,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/182708095?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6010bf6b-3d29-4677-8d9d-8ef729050274_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!J3a2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6010bf6b-3d29-4677-8d9d-8ef729050274_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!J3a2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6010bf6b-3d29-4677-8d9d-8ef729050274_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!J3a2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6010bf6b-3d29-4677-8d9d-8ef729050274_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!J3a2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6010bf6b-3d29-4677-8d9d-8ef729050274_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Simplified architecture of StackContacts</figcaption></figure></div><p></p><h2><strong>The Solution: Step Outside the Conversation Layer</strong></h2><p>Here&#8217;s the high-level workflow:</p><ol><li><p><strong>Use AI to design the query</strong> (still valuable!)</p></li><li><p><strong>Run the query directly against the database</strong> (bypassing MCP)</p></li><li><p><strong>Export results to CSV</strong> (outside the AI context window)</p></li><li><p><strong>Use the file however you want</strong> (outreach, CRM, analysis tools)</p></li></ol><p>This works because:</p><ul><li><p>SQL runs where the data lives (no data transfer limits)</p></li><li><p>CSV export happens outside the AI context</p></li><li><p>You get complete, untruncated results</p></li><li><p>No row limits except disk space</p></li></ul><p>The AI is still useful&#8212;it helps you <em>write</em> the query. But you don&#8217;t ask it to <em>return</em> 3,000 rows. You ask it to <em>generate SQL</em>, then you run that SQL directly.</p><h2><strong>What This Unlocks</strong></h2><p>Once you have this workflow, you can:</p><ul><li><p><strong>Export your full subscriber list</strong> for outreach tools</p></li><li><p><strong>Pull high-intent leads</strong> for manual follow-up</p></li><li><p><strong>Create segmented lists</strong> for different campaigns</p></li><li><p><strong>Feed enrichment APIs</strong> with complete contact data</p></li><li><p><strong>Build source-of-truth CSVs</strong> for cross-platform analysis</p></li><li><p><strong>Archive snapshots</strong> for historical comparison</p></li></ul><p>No truncation. No missing data. No &#8220;results limited&#8221; warnings.</p><p>You separate <strong>exploration</strong> (AI + MCP) from <strong>extraction</strong> (SQL + CSV).</p><p>And suddenly StackContacts stops feeling like a conversation tool with limits&#8212;and starts feeling like infrastructure.</p><p>Below &#128071; are the details on how you unlock your <strong>next StackContacts superpower</strong>. </p><div class="paywall-jump" data-component-name="PaywallToDOM"></div><h2><strong>Critical First Step: Finding Your Schema Name</strong></h2><p>Before running any queries, you need to know your <strong>schema name</strong>. StackContacts creates a separate schema for each publication, based on your publication name.</p><h3><strong>What&#8217;s a Schema?</strong></h3><p>Think of schemas as folders in your database. Instead of:</p><pre><code><code>SELECT * FROM subscribers_detail
</code></code></pre><p>You&#8217;ll actually query:</p><pre><code><code>SELECT * FROM pub_yourname_substack_com.subscribers_detail
</code></code></pre><p>StackContacts uses the pattern: <code>pub_&lt;your-publication-slug&gt;</code></p><h3><strong>How to Find Your Schema Name</strong></h3><p><strong>Option 1: Ask Claude (Easiest)</strong></p><p>Simply ask through the MCP connection:</p><blockquote><p>&#8220;What schemas exist in my StackContacts database?&#8221;</p></blockquote><p>Or:</p><blockquote><p>&#8220;Show me the list of tables in my database&#8221;</p></blockquote><p>Claude will respond with something like:</p><pre><code><code>pub_finntropy_substack_com.subscribers_detail
pub_finntropy_substack_com.substack_posts
pub_finntropy_substack_com.gumroad_sales
...
</code></code></pre><p>The prefix (<code>pub_finntropy_substack_com</code> in this example) is your schema name.</p><p><strong>Option 2: Query Directly</strong></p><p>If you&#8217;re using Python or the DuckDB CLI:</p><pre><code><code>import duckdb
import os

db_path = os.path.expanduser("~/Library/Application Support/StackContacts/app_db.duckdb")
con = duckdb.connect(db_path, read_only=True)

# List all publication schemas
schemas = con.execute("SELECT schema_name FROM information_schema.schemata WHERE schema_name LIKE 'pub_%'").fetchall()
print("Your publication schemas:")
for schema in schemas:
    print(f"  - {schema[0]}")

# Or list all tables with their schemas
tables = con.execute("""
    SELECT table_schema, table_name 
    FROM information_schema.tables 
    WHERE table_schema LIKE 'pub_%' 
    ORDER BY table_schema, table_name
""").fetchall()
print("\nAvailable tables:")
for schema, table in tables[:10]:  # Show first 10
    print(f"  {schema}.{table}")
</code></code></pre><p><strong>Option 3: Derive from Your Substack URL</strong></p><p>Your schema name follows this pattern:</p><ul><li><p>Substack URL: <code>yourname.substack.com</code></p></li><li><p>Schema name: <code>pub_yourname_substack_com</code></p></li></ul><p>Examples:</p><ul><li><p><code>finntropy.substack.com</code> &#8594; <code>pub_finntropy_substack_com</code></p></li><li><p><code>my-newsletter.substack.com</code> &#8594; <code>pub_my_newsletter_substack_com</code> (hyphens become underscores)</p></li><li><p>Custom domain users may also have schemas like <code>pub_www_yourdomain_com</code></p></li></ul><h3><strong>Using Your Schema in Queries</strong></h3><p>Once you know your schema, you have two options:</p><p><strong>Option 1: Set the default schema (Simplest)</strong></p><p>Set your schema once at the start of your session, then use simple table names:</p><pre><code><code>-- Set your default schema
SET schema 'pub_finntropy_substack_com';

-- Now you can query without prefixes
SELECT * FROM subscribers_detail;
SELECT * FROM gumroad_sales;
</code></code></pre><p><strong>Option 2: Use fully-qualified table names</strong></p><p>Prefix every table with the schema name:</p><pre><code><code>-- No SET schema needed, but more typing
SELECT * FROM pub_finntropy_substack_com.subscribers_detail;
SELECT * FROM pub_finntropy_substack_com.gumroad_sales;
</code></code></pre><p><strong>Recommendation:</strong> Use <code>SET schema</code> at the beginning of your session or script. It&#8217;s cleaner and all the examples in this article will work without modification.</p><p><strong>Pro tip:</strong> If you have multiple publications synced to StackContacts, you&#8217;ll have multiple <code>pub_*</code> schemas. Use <code>SET schema</code> to switch between them easily.</p><div><hr></div><h2><strong>Step-by-Step: Generating the Right SQL with AI</strong></h2><p>You still want the AI to help you write queries&#8212;SQL is precise, and Claude knows your schema. Here&#8217;s how to prompt it effectively.</p><h3><strong>Prompt Template</strong></h3><p>Use this format when asking Claude to generate export queries:</p><pre><code><code>Generate a SQL query for StackContacts that exports all active subscribers where:
- membership_state IN ('free_signup', 'subscribed') (includes free and paid subscribers)
- email_disabled = false (actively receiving emails)
- last_opened_at is within the last 90 days
- Include these columns: email, name, source, num_emails_opened, last_opened_at, membership_state
- Order by num_emails_opened descending
- Assume I've already set my schema with "SET schema 'pub_...';"
- Format it for direct execution against DuckDB

IMPORTANT: Do not execute this query. Just show me the SQL.
</code></code></pre><p><strong>Why this works:</strong></p><ul><li><p>You explicitly say &#8220;do not execute&#8221; (prevents MCP truncation)</p></li><li><p>You mention the schema is already set (Claude will use simple table names)</p></li><li><p>You specify exact columns that exist in <code>subscribers_detail</code> table</p></li><li><p>You filter early (reduces noise in your export)</p></li></ul><p><strong>Important field clarifications:</strong></p><ul><li><p><code>is_subscribed = true</code> means <strong>PAID subscriber</strong> (not &#8220;subscribed to emails&#8221;)</p></li><li><p><code>is_subscribed = false</code> means <strong>FREE subscriber</strong></p></li><li><p>Use <code>membership_state</code> to filter by subscriber type:</p><ul><li><p><code>'free_signup'</code> = free subscribers receiving emails</p></li><li><p><code>'subscribed'</code> = paid subscribers</p></li></ul></li><li><p>Use <code>email_disabled = false</code> to get only active email recipients</p></li></ul><p><strong>Common field names in StackContacts:</strong></p><ul><li><p><strong>Identifiers:</strong> <code>email</code>, <code>name</code>, <code>user_id</code></p></li><li><p><strong>Status:</strong> <code>membership_state</code>, <code>email_disabled</code>, <code>is_paused</code>, <code>is_paying_regular_member</code></p></li><li><p><strong>Dates:</strong> <code>last_opened_at</code>, <code>last_clicked_at</code>, <code>subscription_created_at</code>, <code>last_subscribed_at</code></p></li><li><p><strong>Engagement:</strong> <code>num_emails_opened</code>, <code>num_email_opens</code>, <code>links_clicked</code>, <code>num_web_post_views</code>, <code>num_comments</code></p></li><li><p><strong>Revenue:</strong> <code>is_paying_regular_member</code>, <code>amount_paid</code>, <code>total_revenue_generated</code></p></li><li><p><strong>Attribution:</strong> <code>source</code>, <code>free_attribution</code>, <code>referring_pub_id</code></p></li></ul><p><strong>If you want fully-qualified names instead:</strong><br>Add this line to your prompt: &#8220;Include the full schema prefix in table names (pub_.)&#8221;</p><h3><strong>Key Tips</strong></h3><p><strong>Be explicit about columns:</strong> Don&#8217;t use <code>SELECT *</code>. Specify exactly what you need. This keeps your CSV clean and reduces file size.</p><p><strong>Filter early:</strong> Apply WHERE clauses to narrow results <em>before</em> export. Don&#8217;t export 30,000 rows and filter in Excel. Filter in SQL.</p><p><strong>Sanity-check the WHERE clause:</strong> Make sure the conditions make sense. Common mistakes:</p><ul><li><p>Excluding subscribers you actually want</p></li><li><p>Using the wrong date columns</p></li><li><p>Forgetting to handle NULL values</p></li></ul><p><strong>Example queries you might generate:</strong></p><p><strong>Note:</strong> These examples assume you&#8217;ve set your schema first with <code>SET schema 'pub_&lt;yourname&gt;_substack_com';</code></p><pre><code><code>-- Set your schema once
SET schema 'pub_finntropy_substack_com';

-- All active subscribers (free and paid) who opened recently
SELECT 
  email, 
  name, 
  source, 
  num_emails_opened,
  last_opened_at,
  membership_state
FROM subscribers_detail
WHERE membership_state IN ('free_signup', 'subscribed')
  AND email_disabled = false
  AND last_opened_at &gt; NOW() - INTERVAL '90 days'
ORDER BY num_emails_opened DESC;
</code></code></pre><pre><code><code>-- Free subscribers with high engagement (potential upgrade candidates)
SELECT 
  email, 
  name, 
  num_web_post_views, 
  num_comments,
  links_clicked,
  num_emails_opened
FROM subscribers_detail
WHERE membership_state = 'free_signup'
  AND email_disabled = false
  AND num_web_post_views &gt; 5
ORDER BY num_web_post_views DESC;
</code></code></pre><pre><code><code>-- High-engagement subscribers for partnership outreach
SELECT 
  email, 
  name, 
  num_emails_opened,
  num_web_post_views,
  last_opened_at,
  activity_rating
FROM subscribers_detail
WHERE membership_state IN ('free_signup', 'subscribed')
  AND email_disabled = false
  AND num_emails_opened &gt; 10
  AND last_opened_at &gt; NOW() - INTERVAL '30 days'
ORDER BY activity_rating DESC;
</code></code></pre><p><strong>Remember:</strong> Just run <code>SET schema 'pub_&lt;yourname&gt;_substack_com';</code> once, then all your queries use simple table names.</p><p>Once you have the SQL, you&#8217;re ready to run it.</p><h2><strong>Running the Query Against the Database</strong></h2><p>StackContacts uses a local DuckDB database&#8212;a single file stored on your machine. This makes direct access straightforward: no server setup, no authentication, just point a tool at the file.</p><h3><strong>Locating Your StackContacts Database File</strong></h3><p>Your DuckDB database is at:</p><pre><code><code>/Users/&lt;your-username&gt;/Library/Application Support/StackContacts/app_db.duckdb
</code></code></pre><p>Replace <code>&lt;your-username&gt;</code> with your actual Mac username. To find your username, open Terminal and run:</p><pre><code><code>echo $HOME
</code></code></pre><p>Or ask Claude: &#8220;Where is my StackContacts database file located?&#8221; &#8212; the MCP server knows the exact path. </p><p>If you open your StackContacts application, the Data tab / Database Management shows you the database location, see screenshot below:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pmzT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1c790-75ad-4f06-b7f3-01eb8b30b79b_1123x970.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pmzT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1c790-75ad-4f06-b7f3-01eb8b30b79b_1123x970.png 424w, https://substackcdn.com/image/fetch/$s_!pmzT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1c790-75ad-4f06-b7f3-01eb8b30b79b_1123x970.png 848w, https://substackcdn.com/image/fetch/$s_!pmzT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1c790-75ad-4f06-b7f3-01eb8b30b79b_1123x970.png 1272w, https://substackcdn.com/image/fetch/$s_!pmzT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1c790-75ad-4f06-b7f3-01eb8b30b79b_1123x970.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pmzT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1c790-75ad-4f06-b7f3-01eb8b30b79b_1123x970.png" width="1123" height="970" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3fc1c790-75ad-4f06-b7f3-01eb8b30b79b_1123x970.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:970,&quot;width&quot;:1123,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:282285,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/182708095?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1c790-75ad-4f06-b7f3-01eb8b30b79b_1123x970.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pmzT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1c790-75ad-4f06-b7f3-01eb8b30b79b_1123x970.png 424w, https://substackcdn.com/image/fetch/$s_!pmzT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1c790-75ad-4f06-b7f3-01eb8b30b79b_1123x970.png 848w, https://substackcdn.com/image/fetch/$s_!pmzT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1c790-75ad-4f06-b7f3-01eb8b30b79b_1123x970.png 1272w, https://substackcdn.com/image/fetch/$s_!pmzT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3fc1c790-75ad-4f06-b7f3-01eb8b30b79b_1123x970.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Database location</figcaption></figure></div><p></p><p></p><h3><strong>Install DuckDB CLI (One Command)</strong></h3><p>Open Terminal and run this single command:</p><pre><code><code>curl -L https://github.com/duckdb/duckdb/releases/download/v1.4.3/duckdb_cli-osx-universal.zip -o /tmp/duckdb.zip &amp;&amp; unzip -o /tmp/duckdb.zip -d /tmp &amp;&amp; sudo mv /tmp/duckdb /usr/local/bin/ &amp;&amp; rm /tmp/duckdb.zip &amp;&amp; echo "DuckDB installed successfully!"
</code></code></pre><p><strong>What this does:</strong></p><ul><li><p>Downloads DuckDB CLI</p></li><li><p>Unzips it</p></li><li><p>Moves it to a folder in your system path</p></li><li><p>Cleans up temporary files</p></li><li><p>You&#8217;ll be asked for your Mac password (this is normal for <code>sudo</code>)</p></li></ul><p><strong>To verify it worked:</strong></p><pre><code><code>duckdb --version
</code></code></pre><p>You should see something like <code>v1.4.3</code>.</p><h3><strong>Find Your Schema Name (Required First Step)</strong></h3><p>Before running any exports, you need to know your publication&#8217;s schema name. Open Terminal and run:</p><pre><code><code>duckdb "$HOME/Library/Application Support/StackContacts/app_db.duckdb" "SELECT schema_name FROM information_schema.schemata WHERE schema_name LIKE 'pub_%'"
</code></code></pre><p>You&#8217;ll see output like this (if you have multiple publications):</p><pre><code><code>&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474;              schema_name               &#9474;
&#9474;                varchar                 &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
&#9474; pub_finntropy_substack_com             &#9474;
&#9474; pub_finntropy_substack_com_staging     &#9474;
&#9474; pub_stackcontacts_substack_com         &#9474;
&#9474; pub_stackcontacts_substack_com_staging &#9474;
&#9474; pub_www_finnsights_com                 &#9474;
&#9474; pub_www_finnsights_com_staging         &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
</code></code></pre><p><strong>Copy this schema name</strong> &#8212; <code>pub_finntropy_substack_com - </code>you&#8217;ll use it in all your export commands below. If you are using a Substack custom domain, you would look for something like <code>pub_www_finnsights_com </code></p><h3><strong>Export Your Data (Copy-Paste Ready Commands)</strong></h3><p>Replace <code>pub_YOUR_SCHEMA_HERE</code> with your actual schema name from above.</p><p><strong>Export all active subscribers (free and paid):</strong></p><pre><code><code>duckdb "$HOME/Library/Application Support/StackContacts/app_db.duckdb" "SET schema 'pub_YOUR_SCHEMA_HERE'; COPY (SELECT email, name, source, num_emails_opened, last_opened_at, membership_state FROM subscribers_detail WHERE membership_state IN ('free_signup', 'subscribed') AND email_disabled = false ORDER BY num_emails_opened DESC) TO '$HOME/Downloads/active_subscribers.csv' WITH (HEADER true)"
</code></code></pre><p><strong>Export subscribers who opened recently (last 90 days):</strong></p><pre><code><code>duckdb "$HOME/Library/Application Support/StackContacts/app_db.duckdb" "SET schema 'pub_YOUR_SCHEMA_HERE'; COPY (SELECT email, name, num_emails_opened, last_opened_at FROM subscribers_detail WHERE membership_state IN ('free_signup', 'subscribed') AND email_disabled = false AND last_opened_at &gt; NOW() - INTERVAL '90 days' ORDER BY num_emails_opened DESC) TO '$HOME/Downloads/recent_openers.csv' WITH (HEADER true)"
</code></code></pre><p><strong>Export high-engagement subscribers (10+ opens, active last 30 days):</strong></p><pre><code><code>duckdb "$HOME/Library/Application Support/StackContacts/app_db.duckdb" "SET schema 'pub_YOUR_SCHEMA_HERE'; COPY (SELECT email, name, num_emails_opened, num_web_post_views, last_opened_at FROM subscribers_detail WHERE membership_state IN ('free_signup', 'subscribed') AND email_disabled = false AND num_emails_opened &gt; 10 AND last_opened_at &gt; NOW() - INTERVAL '30 days' ORDER BY num_emails_opened DESC) TO '$HOME/Downloads/high_engagement.csv' WITH (HEADER true)"
</code></code></pre><p><strong>Export free subscribers with high engagement (potential upgrade candidates):</strong></p><pre><code><code>duckdb "$HOME/Library/Application Support/StackContacts/app_db.duckdb" "SET schema 'pub_YOUR_SCHEMA_HERE'; COPY (SELECT email, name, num_web_post_views, num_comments, links_clicked FROM subscribers_detail WHERE membership_state = 'free_signup' AND email_disabled = false AND num_web_post_views &gt; 5 ORDER BY num_web_post_views DESC) TO '$HOME/Downloads/potential_upgrades.csv' WITH (HEADER true)"
</code></code></pre><p><strong>Your CSV files will be saved to your Downloads folder.</strong></p><h3><strong>Test Before Exporting (Optional but Recommended)</strong></h3><p>Want to see a preview before exporting? Run this to see the first 10 rows:</p><pre><code><code>duckdb "$HOME/Library/Application Support/StackContacts/app_db.duckdb" "SET schema 'pub_YOUR_SCHEMA_HERE'; SELECT email, name, num_emails_opened, membership_state FROM subscribers_detail WHERE membership_state IN ('free_signup', 'subscribed') AND email_disabled = false LIMIT 10"
</code></code></pre><p>Check the count of rows you&#8217;ll export:</p><pre><code><code>duckdb "$HOME/Library/Application Support/StackContacts/app_db.duckdb" "SET schema 'pub_YOUR_SCHEMA_HERE'; SELECT COUNT(*) FROM subscribers_detail WHERE membership_state IN ('free_signup', 'subscribed') AND email_disabled = false"
</code></code></pre><div><hr></div><h2><strong>Exporting to CSV (The Clean Way)</strong></h2><p>All the export commands above will create CSV files in your Downloads folder. The files will have headers (column names) and be formatted for easy import into Excel, Google Sheets, or any other tool.</p><h3><strong>What You Get</strong></h3><p>Each CSV export includes:</p><ul><li><p><strong>Headers</strong> - First row has column names</p></li><li><p><strong>Clean data</strong> - Properly formatted for spreadsheets</p></li><li><p><strong>No row limits</strong> - Complete, untruncated results</p></li></ul><h3><strong>Common Fields You Can Export</strong></h3><p>When creating your own export commands, here are the most useful fields:</p><p><strong>Basic Info:</strong></p><ul><li><p><code>email</code> - Email address</p></li><li><p><code>name</code> - Subscriber name</p></li><li><p><code>source</code> - Where they signed up</p></li></ul><p><strong>Engagement:</strong></p><ul><li><p><code>num_emails_opened</code> - Total emails opened</p></li><li><p><code>num_email_opens</code> - Total open events (can open same email multiple times)</p></li><li><p><code>num_web_post_views</code> - Web post views</p></li><li><p><code>num_comments</code> - Comments left</p></li><li><p><code>links_clicked</code> - Links clicked</p></li></ul><p><strong>Status:</strong></p><ul><li><p><code>membership_state</code> - Subscriber type: <code>'free_signup'</code> (free) or <code>'subscribed'</code> (paid)</p></li><li><p><code>email_disabled</code> - Whether emails are disabled (true/false)</p></li><li><p><code>is_paused</code> - Subscription paused (true/false)</p></li><li><p><code>is_paying_regular_member</code> - Paying subscriber (true/false)</p></li></ul><p><strong>Important:</strong> <code>is_subscribed = true</code> means PAID subscriber, not &#8220;receiving emails&#8221;. Use <code>membership_state = 'free_signup'</code> for free subscribers and <code>email_disabled = false</code> for active email recipients.</p><p><strong>Dates:</strong></p><ul><li><p><code>last_opened_at</code> - Last email open date</p></li><li><p><code>last_clicked_at</code> - Last link click date</p></li><li><p><code>subscription_created_at</code> - When they subscribed</p></li></ul><h3><strong>Creating Your Own Export</strong></h3><p>To modify the exports above:</p><ol><li><p><strong>Change the filename:</strong> Replace the part after <code>TO</code></p></li></ol><pre><code><code>TO '$HOME/Downloads/MY_CUSTOM_NAME.csv'
</code></code></pre><ol><li><p><strong>Change the columns:</strong> Edit the SELECT clause</p></li></ol><pre><code><code>SELECT email, name, num_emails_opened
</code></code></pre><ol><li><p><strong>Change the filters:</strong> Edit the WHERE clause</p></li></ol><pre><code><code>WHERE is_subscribed = true AND num_emails_opened &gt; 5
</code></code></pre><ol><li><p><strong>Change the sorting:</strong> Edit the ORDER BY clause</p></li></ol><pre><code><code>ORDER BY num_emails_opened DESC
</code></code></pre><h3><strong>Troubleshooting</strong></h3><p><strong>Error: &#8220;command not found: duckdb&#8221;</strong></p><ul><li><p>The installation didn&#8217;t complete. Try running the install command again.</p></li></ul><p><strong>Error: &#8220;No such file or directory&#8221;</strong></p><ul><li><p>Your database path is different. Ask Claude: &#8220;Where is my StackContacts database?&#8221;</p></li></ul><p><strong>Error: &#8220;Schema does not exist&#8221;</strong></p><ul><li><p>You didn&#8217;t replace <code>pub_YOUR_SCHEMA_HERE</code> with your actual schema name</p></li><li><p>Run the &#8220;Find Your Schema Name&#8221; command above to get it</p></li></ul><p><strong>Empty CSV file</strong></p><ul><li><p>Your WHERE clause filtered out all rows</p></li><li><p>Try running the &#8220;Check count&#8221; command to see how many rows match</p></li></ul><div><hr></div><h2><strong>Common Pitfalls (and How to Avoid Them)</strong></h2><h3><strong>Pitfall 1: Pulling Everything Instead of Intent-Driven Subsets</strong></h3><p><strong>The mistake:</strong> Running <code>SELECT * FROM subscribers_detail</code> because you want &#8220;all the data.&#8221;</p><p><strong>Why it&#8217;s bad:</strong></p><ul><li><p>Huge file with columns you don&#8217;t need</p></li><li><p>Harder to process and analyze</p></li><li><p>Often includes sensitive fields you shouldn&#8217;t export</p></li></ul><p><strong>Fix:</strong> Always start with the use case.</p><ul><li><p><em>Why</em> am I exporting this?</p></li><li><p><em>What</em> will I do with it?</p></li><li><p><em>Which</em> columns do I actually need?</p></li></ul><p>Then write your query accordingly.</p><h3><strong>Pitfall 2: Forgetting to Exclude Churned/Unsubscribed Users</strong></h3><p><strong>The mistake:</strong> Exporting subscribers without checking their status.</p><p><strong>Why it&#8217;s bad:</strong></p><ul><li><p>You might contact people who unsubscribed (bad for deliverability and reputation)</p></li><li><p>You waste enrichment credits on dead leads</p></li><li><p>Your outreach list is polluted</p></li></ul><p><strong>Fix:</strong> Always filter on subscription status and email preferences:</p><pre><code><code>-- For all active email recipients (free and paid)
WHERE membership_state IN ('free_signup', 'subscribed')
  AND email_disabled = false

-- For only free subscribers receiving emails
WHERE membership_state = 'free_signup'
  AND email_disabled = false
</code></code></pre><h3><strong>Pitfall 3: Exporting PII Without a Plan</strong></h3><p><strong>The mistake:</strong> Creating CSV files with full names, emails, and engagement data, then leaving them in Downloads.</p><p><strong>Why it&#8217;s bad:</strong></p><ul><li><p>Privacy risk</p></li><li><p>Compliance issues (GDPR, CCPA)</p></li><li><p>Data leak potential</p></li></ul><p><strong>Fix:</strong></p><ul><li><p>Only export what you need</p></li><li><p>Store exports securely (encrypted folders, password-protected)</p></li><li><p>Delete exports when you&#8217;re done with them</p></li><li><p>Never commit CSVs to public repos</p></li></ul><h3><strong>Pitfall 4: Re-Running Massive Queries Unnecessarily</strong></h3><p><strong>The mistake:</strong> Running a 10,000-row export every time you want to check one thing.</p><p><strong>Why it&#8217;s bad:</strong></p><ul><li><p>Slow</p></li><li><p>Wastes database resources</p></li><li><p>Creates unnecessary files</p></li></ul><p><strong>Fix:</strong></p><ul><li><p>Use LIMIT during testing</p></li><li><p>Save your verified exports and reuse them</p></li><li><p>Use AI + MCP for quick spot-checks, SQL + CSV for bulk operations</p></li></ul><div><hr></div><h2><strong>When to Use MCP vs. Direct DB Access</strong></h2><p>You now have two tools. Here&#8217;s when to use each.</p><h3><strong>Use MCP (AI + Conversational Queries) When:</strong></h3><ul><li><p><strong>Exploring patterns:</strong> &#8220;What are my top posts by engagement?&#8221;</p></li><li><p><strong>Asking open-ended questions:</strong> &#8220;What&#8217;s interesting about my subscribers?&#8221;</p></li><li><p><strong>Pulling small, focused samples:</strong> &#8220;Show me 10 subscribers who opened recently&#8221;</p></li><li><p><strong>Iterating quickly:</strong> You&#8217;re not sure what you&#8217;re looking for yet</p></li><li><p><strong>Summarizing and analyzing:</strong> The AI provides insights, not just data</p></li></ul><p><strong>Example:</strong> &#8220;Which of my Notes performed best last month?&#8221;</p><h3><strong>Use Direct SQL + CSV Export When:</strong></h3><ul><li><p><strong>Doing outreach:</strong> You need a clean list for email tools, CRM, or manual follow-up</p></li><li><p><strong>Feeding another system:</strong> Enrichment APIs, analytics platforms, partner dashboards</p></li><li><p><strong>Creating a source-of-truth dataset:</strong> Archival snapshots, cross-platform joins</p></li><li><p><strong>You care about completeness:</strong> Missing 200 rows because of truncation isn&#8217;t acceptable</p></li><li><p><strong>Repeatability matters:</strong> You&#8217;ll run this export weekly or monthly</p></li></ul><p><strong>Example:</strong> &#8220;Export all active subscribers with &gt;5 post views for a partnership outreach campaign.&#8221;</p><div><hr></div><h2><strong>Turning This Into a Repeatable System</strong></h2><p>Once you&#8217;ve done this once, make it systematic.</p><h3><strong>Suggested Export Cadence</strong></h3><p><strong>Weekly:</strong></p><ul><li><p>High-intent leads for outreach</p></li><li><p>New subscribers to welcome/segment</p></li><li><p>Active but non-converting subscribers</p></li></ul><p><strong>Monthly:</strong></p><ul><li><p>Full active subscriber snapshot</p></li><li><p>Engagement metrics for reporting</p></li><li><p>Churn risk analysis exports</p></li></ul><p><strong>Quarterly:</strong></p><ul><li><p>Complete historical archive</p></li><li><p>Deep segmentation analysis</p></li><li><p>Cross-platform matching (Substack + Gumroad + Twitter, etc.)</p></li></ul><h3><strong>Save Your SQL Queries</strong></h3><p>Create a <code>queries/</code> folder and save your verified SQL:</p><pre><code><code>queries/
  export_active_subscribers.sql
  export_highintent_leads.sql
  export_monthly_snapshot.sql
  export_to_csv.sh  # Shell script wrapper
</code></code></pre><p>Each file contains the full query, ready to run. Add comments for context:</p><pre><code><code>-- High-Intent Leads Export
-- Purpose: Free subscribers with high web engagement, active recently (potential upgrades)
-- Use case: Manual outreach, upgrade campaigns
-- Expected rows: ~200-500 depending on publication size

-- Set your schema first
SET schema 'pub_finntropy_substack_com';

-- Then run the query with simple table names
SELECT 
  email, 
  name, 
  num_web_post_views,
  num_comments,
  last_opened_at,
  activity_rating
FROM subscribers_detail
WHERE membership_state = 'free_signup'
  AND email_disabled = false
  AND num_web_post_views &gt; 5
  AND last_opened_at &gt; NOW() - INTERVAL '30 days'
ORDER BY activity_rating DESC;
</code></code></pre><p><strong>Shell script wrapper for automation:</strong></p><pre><code><code>#!/bin/bash
# export_to_csv.sh

DB_PATH="$HOME/Library/Application Support/StackContacts/app_db.duckdb"
EXPORT_DIR="$HOME/stackcontacts_exports"
DATE=$(date +%Y-%m-%d)

mkdir -p "$EXPORT_DIR"

python3 &lt;&lt; EOF
import duckdb
import os

con = duckdb.connect("$DB_PATH", read_only=True)

# Read query from file
with open('queries/export_active_subscribers.sql', 'r') as f:
    query = f.read()

# Export to CSV
con.execute(f"""
  COPY ({query})
  TO '$EXPORT_DIR/active_subscribers_$DATE.csv'
  WITH (HEADER true)
""")

print(f"Export complete: $EXPORT_DIR/active_subscribers_$DATE.csv")
EOF
</code></code></pre><p>Now running exports takes 30 seconds, not 30 minutes.</p><h3><strong>Optional Upgrades (Future Roadmap Ideas)</strong></h3><p>As you get comfortable with this workflow, you might want:</p><ul><li><p><strong>Scheduled exports:</strong> Cron jobs that run your export scripts daily/weekly</p></li></ul><pre><code><code># Add to crontab: Run every Monday at 9am
0 9 * * 1 /path/to/export_to_csv.sh
</code></code></pre><ul><li><p><strong>Export pipelines:</strong> DuckDB &#8594; CSV &#8594; enrichment API &#8594; CRM, fully automated</p></li><li><p><strong>Custom dashboards:</strong> Tools like Metabase or Superset that query DuckDB directly</p></li><li><p><strong>Alerting:</strong> Watch your database for conditions and notify you</p></li></ul><pre><code><code># Check for high-intent subscribers daily
import duckdb, os
con = duckdb.connect(os.path.expanduser("~/Library/Application Support/StackContacts/app_db.duckdb"), read_only=True)

# Set your schema (replace with yours)
con.execute("SET schema 'pub_finntropy_substack_com'")

# Query with simple table name and actual fields
count = con.execute("SELECT COUNT(*) FROM subscribers_detail WHERE num_web_post_views &gt; 10 AND last_opened_at &gt; NOW() - INTERVAL '7 days'").fetchone()[0]
if count &gt; 50:
    print(f"Alert: {count} high-intent subscribers!")
</code></code></pre><p>These are all possible because you have direct access to the database file.</p><div><hr></div><h2><strong>Power Users Don&#8217;t Fight Limits&#8212;They Route Around Them</strong></h2><p>MCP limits aren&#8217;t a bug. They&#8217;re a design decision optimized for conversation, not extraction.</p><p>Once you understand that, the path forward is obvious:</p><ul><li><p>Use MCP for exploration and pattern recognition</p></li><li><p>Use SQL for extraction and bulk operations</p></li><li><p>Keep them separate, and both work beautifully</p></li></ul><p>The 500-row wall isn&#8217;t a wall. It&#8217;s a sign you&#8217;ve graduated to power user territory.</p><p>Most creators will stay in Layer 1 (MCP) because it&#8217;s comfortable. But if you&#8217;re doing serious outreach, segmentation, or cross-platform work, Layer 2 (direct SQL) is where the leverage is.</p><p>StackContacts gives you both layers. Now you know when to use each.</p><div><hr></div><h2><strong>Key Takeaways</strong></h2><ul><li><p><strong>MCP is for exploration, SQL is for extraction</strong> &#8212; Learn which layer to use for each task</p></li><li><p><strong>The 500-row limit is a context window issue, not a database limit</strong> &#8212; Your data is complete, you&#8217;re just accessing it through the wrong layer</p></li><li><p><strong>Use AI to write queries, but run them directly against the database</strong> &#8212; Best of both worlds: AI assistance + complete results</p></li><li><p><strong>Always test with LIMIT before running full exports</strong> &#8212; Prevents &#8220;oops I exported garbage&#8221; moments</p></li><li><p><strong>Save your verified queries for reuse</strong> &#8212; Turn one-off exports into repeatable systems</p></li><li><p><strong>Be intentional about what you export and why</strong> &#8212; Start with the use case, not &#8220;SELECT *&#8221;</p></li><li><p><strong>Name your exports with timestamps and descriptions</strong> &#8212; Future you will thank past you</p></li></ul><div><hr></div><h2><strong>Your Turn</strong></h2><p>If you&#8217;ve hit the 500-row wall before, try this workflow:</p><ol><li><p>Pick one use case (outreach, segmentation, enrichment)</p></li><li><p>Use Claude to generate the SQL</p></li><li><p>Run it directly against your database</p></li><li><p>Export the full, untruncated results</p></li><li><p>Share what you built (community, office hours, or just reply to this post)</p></li></ol><p>Questions? Bring your specific export scenario to office hours and we&#8217;ll debug it together.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/p/how-to-export-your-full-stackcontacts/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://stackcontacts.substack.com/p/how-to-export-your-full-stackcontacts/comments"><span>Leave a comment</span></a></p><p></p><p><strong>Related:</strong></p><ul><li><p>Revenue Attribution: Which Content Actually Drives Sales</p></li><li><p>Advanced Segmentation: Finding Your Superfans</p></li><li><p>Predictive Analytics: Spotting High-Intent Subscribers</p></li></ul>]]></content:encoded></item><item><title><![CDATA[I Ran My Own Newsletter Through My AI Analysis Tool. Here's What I Found (And Why It Hurt)]]></title><description><![CDATA[Or: How I Discovered I Was Failing 100% of My New Subscribers]]></description><link>https://stackcontacts.substack.com/p/i-ran-my-own-newsletter-through-my</link><guid isPermaLink="false">https://stackcontacts.substack.com/p/i-ran-my-own-newsletter-through-my</guid><dc:creator><![CDATA[Finn Tropy | StackContacts]]></dc:creator><pubDate>Fri, 26 Dec 2025 16:49:51 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1692906456159-f93a6f3df407?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNHx8cHVwcHklMjBmb29kfGVufDB8fHx8MTc2Njc2Mjg0MHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1692906456159-f93a6f3df407?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNHx8cHVwcHklMjBmb29kfGVufDB8fHx8MTc2Njc2Mjg0MHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1692906456159-f93a6f3df407?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNHx8cHVwcHklMjBmb29kfGVufDB8fHx8MTc2Njc2Mjg0MHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1692906456159-f93a6f3df407?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNHx8cHVwcHklMjBmb29kfGVufDB8fHx8MTc2Njc2Mjg0MHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1692906456159-f93a6f3df407?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNHx8cHVwcHklMjBmb29kfGVufDB8fHx8MTc2Njc2Mjg0MHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1692906456159-f93a6f3df407?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNHx8cHVwcHklMjBmb29kfGVufDB8fHx8MTc2Njc2Mjg0MHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1692906456159-f93a6f3df407?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNHx8cHVwcHklMjBmb29kfGVufDB8fHx8MTc2Njc2Mjg0MHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" width="2213" height="3320" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1692906456159-f93a6f3df407?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNHx8cHVwcHklMjBmb29kfGVufDB8fHx8MTc2Njc2Mjg0MHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3320,&quot;width&quot;:2213,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;a husky dog eating out of a metal bowl&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="a husky dog eating out of a metal bowl" title="a husky dog eating out of a metal bowl" srcset="https://images.unsplash.com/photo-1692906456159-f93a6f3df407?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNHx8cHVwcHklMjBmb29kfGVufDB8fHx8MTc2Njc2Mjg0MHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1692906456159-f93a6f3df407?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNHx8cHVwcHklMjBmb29kfGVufDB8fHx8MTc2Njc2Mjg0MHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1692906456159-f93a6f3df407?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNHx8cHVwcHklMjBmb29kfGVufDB8fHx8MTc2Njc2Mjg0MHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1692906456159-f93a6f3df407?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNHx8cHVwcHklMjBmb29kfGVufDB8fHx8MTc2Njc2Mjg0MHww&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">I decided to eat my own dog food, and I was not a happy dog. Photo by <a href="https://unsplash.com/@xingchenyan">Xingchen Yan</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>I build tools for Substack creators.</p><p>Specifically, I built <a href="https://stackcontacts.com/">StackContacts</a> - a tool that pulls all your Substack data onto your own computer and uses AI to find patterns you can&#8217;t see in Substack&#8217;s dashboard.</p><p>For months, I&#8217;ve been telling other creators: <em>&#8220;You need to understand your data. Growth isn&#8217;t random. Your audience is sending you signals.&#8221;</em></p><p>But here&#8217;s the embarrassing truth: <em><strong>I hadn&#8217;t run my own newsletter through the complete analysis.</strong></em></p><p>Sure, I&#8217;d checked my subscriber count. Glanced at my stats. Told myself things were <em>&#8220;pretty good.&#8221;</em></p><p>Then, last week, I decided actually to eat my own dog food. </p><p>I ran <a href="https://finntropy.substack.com/">finntropy.substack.com</a> through the <a href="https://stackcontacts.substack.com/p/stop-flying-blind-get-data-driven">same AI analysis</a> I&#8217;ve been building for other creators.</p><p>What I found made me want to delete my LinkedIn profile and become a shepherd in New Zealand.</p><p>But it also showed me exactly why most Substack creators feel like they&#8217;re shouting into the void.</p><h2><strong>The Good News (That Made Me Feel Smart)</strong></h2><p>Let me start with the wins, because I need the dopamine (and more coffee):</p><p><strong>86.8% of my subscribers are highly engaged.</strong></p><p>Not <em>&#8220;opened an email once&#8221;</em> engaged. I&#8217;m talking 10+ interactions - opens, clicks, comments, the works.</p><p>The industry average? Somewhere between 20% and 30% if you&#8217;re doing well.</p><p>My average subscriber has engaged with <strong>19.3 different posts</strong>. They&#8217;re clicking links (7.4 clicks per subscriber). They&#8217;re active across an average of 22 days.</p><p>My top-performing posts? They&#8217;re crushing it:</p><ul><li><p><a href="https://finntropy.substack.com/p/how-to-schedule-notes-on-substack">&#8220;How To Schedule Notes on Substack&#8221;</a> - 3,806 views, 188 reactions, 91 comments</p></li><li><p>&#8220;<a href="https://finntropy.substack.com/p/how-often-should-you-publish-notes">How Often Should You Publish Notes...</a>&#8221; - 2,919 views, 237 reactions, 95 comments</p></li><li><p>&#8220;<a href="https://finntropy.substack.com/p/how-i-turned-my-substack-posts-into">How I Turned My Substack Posts into Dividend-Paying Assets</a>&#8221; - 1,545 views, 105 reactions</p></li></ul><p>For a newsletter with 1,193 subscribers and an annual sales revenue over $20k, these are legitimately strong numbers.</p><p>I felt pretty good about myself. <br><em><strong>Look at me, crushing it with my engaged audience!</strong></em></p><p>And then the AI showed me the ugly truth.</p><h2><strong>The Ugly Truth (That Made Me Want to Quit)</strong></h2><p>Here&#8217;s the data point that punched me in the throat:</p><p><strong>100% of my new subscribers (who joined in the last 7 days) have never engaged with anything.</strong></p><p>Not a single open. Not one click. Zero.</p><p>Twelve people signed up for my newsletter in the past week, excited enough to give me their email address, and <em><strong>I&#8217;ve done absolutely nothing to welcome them</strong></em>.</p><p>No welcome sequence. No &#8220;start here&#8221; post. No personal message.</p><p>I literally ghosted 100% of my new subscribers.</p><p>And it gets worse.</p><p><strong>268 of my long-term subscribers haven&#8217;t engaged in 30+ days.</strong></p><p>That&#8217;s 27% of my loyal readers slowly going dormant while I publish posts about <em><strong>&#8220;engagement strategies&#8221;</strong></em> and <em><strong>&#8220;audience building.&#8221;</strong></em></p><p>The irony is so thick you could cut it with a knife.</p><p>But here&#8217;s where it gets truly painful:</p><p><strong>I haven&#8217;t published a post in 22 days. Only three posts in the last 30 days.</strong></p><p>The AI analysis showed my publishing frequency dropped from 11 posts in December 2024 to just 2-4 posts per month recently.</p><p>My newsletter about Substack growth strategies... has stopped growing because I stopped showing up consistently.</p><p>I am literally the person I write about helping.</p><h2><strong>The Pattern I Couldn&#8217;t See (Until AI Found It)</strong></h2><p>Here&#8217;s why this matters for you:</p><p>When I looked at my Substack dashboard, I saw:</p><ul><li><p><strong>&#8220;Engagement is strong&#8221;</strong> &#9989;</p></li><li><p><strong>&#8220;Subscribers keep joining&#8221;</strong> &#9989;</p></li><li><p><strong>&#8220;Popular posts are performing well&#8221;</strong> &#9989;</p></li></ul><p>What I couldn&#8217;t see without AI analysis:</p><h4><strong>My New Subscriber Onboarding Is Broken</strong></h4><p>The AI compared engagement rates across subscriber cohorts:</p><ul><li><p>New subscribers (0-7 days): 0% engaged</p></li><li><p>Recent subscribers (8-30 days): 94% engaged</p></li><li><p>Established subscribers (31-90 days): 100% engaged (none never-engaged)</p></li></ul><p>The pattern was evident: If subscribers stick around past the first week, they become superfans. But I&#8217;m losing people in the first 7 days because I&#8217;m not giving them a reason to care.</p><h4><strong>My Publishing Frequency Directly Impacts Growth</strong></h4><p>The AI mapped posts published vs. new subscribers by month:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pwqp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b3500c1-6e59-40ee-a0b4-2a4cd335b418_856x322.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pwqp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b3500c1-6e59-40ee-a0b4-2a4cd335b418_856x322.png 424w, https://substackcdn.com/image/fetch/$s_!pwqp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b3500c1-6e59-40ee-a0b4-2a4cd335b418_856x322.png 848w, https://substackcdn.com/image/fetch/$s_!pwqp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b3500c1-6e59-40ee-a0b4-2a4cd335b418_856x322.png 1272w, https://substackcdn.com/image/fetch/$s_!pwqp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b3500c1-6e59-40ee-a0b4-2a4cd335b418_856x322.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pwqp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b3500c1-6e59-40ee-a0b4-2a4cd335b418_856x322.png" width="856" height="322" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4b3500c1-6e59-40ee-a0b4-2a4cd335b418_856x322.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:322,&quot;width&quot;:856,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:44630,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/182631953?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b3500c1-6e59-40ee-a0b4-2a4cd335b418_856x322.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pwqp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b3500c1-6e59-40ee-a0b4-2a4cd335b418_856x322.png 424w, https://substackcdn.com/image/fetch/$s_!pwqp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b3500c1-6e59-40ee-a0b4-2a4cd335b418_856x322.png 848w, https://substackcdn.com/image/fetch/$s_!pwqp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b3500c1-6e59-40ee-a0b4-2a4cd335b418_856x322.png 1272w, https://substackcdn.com/image/fetch/$s_!pwqp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b3500c1-6e59-40ee-a0b4-2a4cd335b418_856x322.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>More posts &#8800; more subscribers. </p><p>But <strong>consistent publishing</strong> = predictable growth.</p><p>My best month (July 2025) had only 3 posts but 54.33 subscribers per post. <br>My worst efficiency (December 2024) had 11 posts but only 7.45 subscribers per post.</p><p>The difference? Quality + timing + consistency.</p><h4><strong>I Know Exactly Which Content Types Work</strong></h4><p>The AI categorized all 75 of my posts and calculated performance by content type:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rc8J!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7f0b18-5801-419a-b02e-6c9e8de94406_1200x342.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rc8J!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7f0b18-5801-419a-b02e-6c9e8de94406_1200x342.png 424w, https://substackcdn.com/image/fetch/$s_!rc8J!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7f0b18-5801-419a-b02e-6c9e8de94406_1200x342.png 848w, https://substackcdn.com/image/fetch/$s_!rc8J!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7f0b18-5801-419a-b02e-6c9e8de94406_1200x342.png 1272w, https://substackcdn.com/image/fetch/$s_!rc8J!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7f0b18-5801-419a-b02e-6c9e8de94406_1200x342.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rc8J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7f0b18-5801-419a-b02e-6c9e8de94406_1200x342.png" width="1200" height="342" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5e7f0b18-5801-419a-b02e-6c9e8de94406_1200x342.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:342,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:77795,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/182631953?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7f0b18-5801-419a-b02e-6c9e8de94406_1200x342.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rc8J!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7f0b18-5801-419a-b02e-6c9e8de94406_1200x342.png 424w, https://substackcdn.com/image/fetch/$s_!rc8J!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7f0b18-5801-419a-b02e-6c9e8de94406_1200x342.png 848w, https://substackcdn.com/image/fetch/$s_!rc8J!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7f0b18-5801-419a-b02e-6c9e8de94406_1200x342.png 1272w, https://substackcdn.com/image/fetch/$s_!rc8J!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5e7f0b18-5801-419a-b02e-6c9e8de94406_1200x342.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I have 36 posts in the &#8220;Other&#8221; category - basically filler content I published when I didn&#8217;t know what to write.</p><p>Those 36 posts got the lowest average views (457.8) and reactions (13.9).</p><p>Meanwhile, my 5 Strategy/Advice posts averaged 1,277.8 views and 96.4 reactions.</p><p><em><strong>I&#8217;ve been publishing the wrong content 48% of the time.</strong></em></p><p>And I had no idea until the AI showed me the pattern.</p><h2><strong>The Moment Everything Changed</strong></h2><p>I&#8217;ve built analysis tools professionally for years. I understand data. I know how to read spreadsheets.</p><p>But seeing my own publication laid out like this - with every pattern exposed, every failure highlighted, every missed opportunity quantified - hit different.</p><p>Because here&#8217;s what I realized:</p><p><em><strong>Every Substack creator is flying blind.</strong></em><strong><br></strong>Not because we&#8217;re stupid. Not because we don&#8217;t care.</p><p>But because the Substack dashboard shows you <em><strong>what happened</strong></em>, not <em><strong>why it happened</strong></em> or <em><strong>what to do about it</strong></em><strong>.</strong></p><p>You know you have 847 subscribers. Great. </p><p>How many are actually engaged? Which cohorts are at risk? What content types are working? When should you publish? Who are your superfans you should be building relationships with?</p><p>The dashboard can&#8217;t tell you.</p><p>So we make decisions based on vibes:</p><ul><li><p><em><strong>&#8220;Engagement feels low&#8221;</strong></em> (but is it actually low or just normal?)</p></li><li><p><em><strong>&#8220;Growth feels random&#8221;</strong></em> (but is there a pattern you&#8217;re missing?)</p></li><li><p><em><strong>&#8220;I don&#8217;t understand my audience&#8221;</strong></em> (but what if the data already shows you who they are?)</p></li></ul><p>It&#8217;s like trying to drive across the country with a map that only shows which state you&#8217;re in. Technically useful. Practically useless.</p><h2><strong>What I Did Next (And What You Can Do Too)</strong></h2><p>I&#8217;m not going to pretend this article is purely altruistic.</p><p>I built <a href="https://stackcontacts.com/">StackContacts</a> because I got tired of seeing talented creators give up because they couldn&#8217;t figure out what was working.</p><p>But after running my own analysis, here&#8217;s what I&#8217;m doing differently:</p><p><strong>This Week:</strong></p><ol><li><p>&#9989; Creating a welcome sequence for new subscribers (no more 100% non-engagement)</p></li><li><p>&#9989; Sending a &#8220;I Miss You&#8221; email to those 268 dormant subscribers</p></li><li><p>&#9989; Publishing this post (getting back to consistency)</p></li><li><p>&#9989; Reaching out personally to my top 20 superfans (they&#8217;ve earned it)</p></li></ol><p><strong>This Month:</strong></p><ol><li><p>Publishing 1-2 posts per week minimum (no more excuses)</p></li><li><p>Doubling down on Strategy/Advice content (1,277.8 avg views vs 457.8 for &#8220;Other&#8221;)</p></li><li><p>Reducing filler &#8220;Other&#8221; content by 50%</p></li><li><p>Tracking which posts drive subscribers (using data, not vibes)</p></li></ol><p><strong>This Quarter:</strong></p><ol><li><p>Running this analysis monthly to track progress</p></li><li><p>Building relationships with the subscribers who are already engaged</p></li><li><p>Creating a content series based on my top-performing posts</p></li><li><p>Actually using my own tool consistently (<em>shocking concept, I know</em>)</p></li></ol><h2><strong>The Uncomfortable Question</strong></h2><p>If you&#8217;re still reading, you probably recognize yourself in this story.</p><p>You&#8217;ve got subscribers. You publish (sometimes). Engagement feels... fine?</p><p>But deep down, you know you&#8217;re flying blind. You&#8217;re making decisions based on what <em><strong>feels</strong></em> right instead of what the data shows.</p><p>And the Substack dashboard isn&#8217;t helping because it&#8217;s not designed to show you patterns - just metrics.</p><p>Here&#8217;s my uncomfortable question for you:</p><p><strong>What if you&#8217;re making the same mistakes I was making?</strong></p><p>What if you&#8217;re:</p><ul><li><p>Ignoring your new subscribers without realizing it</p></li><li><p>Publishing the wrong content types 48% of the time</p></li><li><p>Watching engaged subscribers go dormant while you focus on vanity metrics</p></li><li><p>Missing obvious patterns in your growth because you don&#8217;t have the tools to see them</p></li></ul><p>I built <a href="https://stackcontacts.com/landing-v2.html">StackContacts</a> to solve this exact problem.</p><p>Not because I&#8217;m a data genius (clearly, since I ghosted 100% of my new subscribers).</p><p>But because I got tired of watching creators - including myself - make preventable mistakes.</p><h2><strong>How This Actually Works (The Technical Bits)</strong></h2><p>Here&#8217;s what happens when you use StackContacts:</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://stackcontacts.substack.com/subscribe?"><span>Subscribe now</span></a></p><h4><strong>1. You Download Your Data</strong></h4><p>StackContacts pulls all your Substack data onto your own computer. <br>Subscribers, followers, events, posts, notes, engagement, everything.</p><p>Why your own computer? Because:</p><ul><li><p>Your data stays private (no third-party storage)</p></li><li><p>You can analyze it offline anytime</p></li><li><p>No subscription fees for &#8220;data storage.&#8221;</p></li><li><p>You actually own your audience insights</p></li></ul><h4><strong>2. AI Analyzes the Patterns</strong></h4><p>The tool runs your data through AI analysis to find:</p><ul><li><p>Engagement patterns by subscriber cohort</p></li><li><p>Content performance by type</p></li><li><p>Growth correlations (publishing frequency, timing, topics)</p></li><li><p>At-risk subscribers who are going dormant</p></li><li><p>Your superfans who could become advocates</p></li><li><p>Specific, actionable recommendations</p></li></ul><h4><strong>3. You Get Actual Insights</strong></h4><p>Not generic advice like &#8220;<em>post more consistently.</em>&#8221;</p><p>Specific insights like:</p><ul><li><p>&#8220;Your Strategy/Advice posts get 2.8x more views than your Other content&#8221;</p></li><li><p>&#8220;100% of subscribers who make it past day 7 become highly engaged&#8221;</p></li><li><p>&#8220;268 subscribers haven&#8217;t engaged in 30+ days - here&#8217;s how to re-engage them&#8221;</p></li><li><p>&#8220;July 2025 had 54.33 subscribers per post vs December 2024&#8217;s 7.45 - here&#8217;s why&#8221;</p></li></ul><h2><strong>The Real Reason This Matters</strong></h2><p>I spent the last 18 months building tools to help other creators grow.</p><p>Then I discovered I was failing at the basics.<br>Not because I didn&#8217;t care. Not because I&#8217;m lazy.</p><p>But because <em><strong>you can&#8217;t optimize what you can&#8217;t measure, and you can&#8217;t measure what you can&#8217;t see</strong>.</em></p><p>The Substack dashboard shows you the <em><strong>what</strong></em>.<br>AI analysis shows you the <em><strong>why</strong></em> and the <em><strong>what to do about it</strong></em>.</p><p>That&#8217;s the difference between &#8220;my growth feels random&#8221; and &#8220;I know exactly which content types drive subscribers and when to publish them.&#8221;</p><p>Between &#8220;I think engagement is okay?&#8221; and &#8220;86.8% of my subscribers are highly engaged, but 100% of new subscribers aren&#8217;t engaging because I don&#8217;t have a welcome sequence.&#8221;</p><p>Between guessing and knowing.</p><h2><strong>Try This Yourself</strong></h2><p>I&#8217;m not going to do a hard sell here.</p><p>If you&#8217;re skeptical about AI analysis tools, you should be. Most of them are garbage that spit out generic advice you could get from a blog post.</p><p>But here&#8217;s what I&#8217;ll offer:</p><p><strong>Run your own analysis with the tool you can get from <a href="https://stackcontacts.com/">StackContacts.com</a><br></strong>See what patterns you&#8217;re missing. Find out which content actually works. <br>Discover which subscribers are at risk.</p><p>If it&#8217;s useless, you&#8217;ll know in 10 minutes. </p><p>If it&#8217;s useful, you&#8217;ll have the exact same uncomfortable awakening I had:</p><p><em><strong>&#8220;Oh no. I&#8217;ve been doing this wrong the whole time.&#8221;</strong></em></p><p>And then you can actually fix it.</p><p>Because the only thing worse than discovering you&#8217;re failing 100% of your new subscribers...</p><p>...is never discovering it at all.</p><h2><strong>The Bottom Line</strong></h2><p>I built <a href="https://stackcontacts.com/landing-v2.html">StackContacts</a> to help creators grow.</p><p>Then I discovered I needed it more than anyone.</p><p>My <a href="https://finntropy.substack.com/">newsletter</a> has:</p><ul><li><p>1,193 subscribers</p></li><li><p>86.8% highly engaged audience</p></li><li><p>Strong content performance</p></li><li><p>Proven content types that work</p></li></ul><p>And I was still making critical mistakes I couldn&#8217;t see.</p><p>If I&#8217;m flying blind with tools and data experience, what chance do you have with just the Substack dashboard?</p><p>The answer isn&#8217;t to give up.</p><p>The answer is actually to look at the data.</p><ul><li><p>Find the patterns. </p></li><li><p>Fix the problems. </p></li><li><p>Focus on what works.</p></li></ul><p>And maybe - just maybe - stop ghosting 100% of your new subscribers.</p><p></p><h2><strong>Want to run your own analysis?</strong></h2><p>Download your Substack data and analyze it with AI using the <a href="https://stackcontacts.com/index.html">StackContacts</a> tool. </p><p>See what you&#8217;re missing. Fix what&#8217;s broken. Grow what&#8217;s working.</p><p>Your uncomfortable awakening is waiting.</p><p>&#8212; Finn </p><p><em>P.S. - After publishing this post, I&#8217;m sending welcome emails to those 12 new subscribers I ghosted. If you&#8217;re one of them and you&#8217;re reading this: I&#8217;m sorry. I was too busy building tools to help creators engage with their audiences, actually, to engage with my own. The irony is not lost on me.</em></p><p><em>P.P.S. - If you found this useful, reply and let me know what patterns you&#8217;re blind to in your own newsletter. I&#8217;m genuinely curious what other creators are missing that AI could help uncover.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/p/i-ran-my-own-newsletter-through-my/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://stackcontacts.substack.com/p/i-ran-my-own-newsletter-through-my/comments"><span>Leave a comment</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Stop Flying Blind: Get Data-Driven Growth Insights for Your First 500 Subscribers]]></title><description><![CDATA[For writers building their first 500 subscribers]]></description><link>https://stackcontacts.substack.com/p/stop-flying-blind-get-data-driven</link><guid isPermaLink="false">https://stackcontacts.substack.com/p/stop-flying-blind-get-data-driven</guid><dc:creator><![CDATA[Finn Tropy | StackContacts]]></dc:creator><pubDate>Fri, 26 Dec 2025 01:30:06 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1496449903678-68ddcb189a24?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxyYW5kb218ZW58MHx8fHwxNzY2NTkyMjY5fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>The Problem: Growth Feels Random</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1496449903678-68ddcb189a24?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxyYW5kb218ZW58MHx8fHwxNzY2NTkyMjY5fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1496449903678-68ddcb189a24?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxyYW5kb218ZW58MHx8fHwxNzY2NTkyMjY5fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1496449903678-68ddcb189a24?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxyYW5kb218ZW58MHx8fHwxNzY2NTkyMjY5fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1496449903678-68ddcb189a24?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxyYW5kb218ZW58MHx8fHwxNzY2NTkyMjY5fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1496449903678-68ddcb189a24?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxyYW5kb218ZW58MHx8fHwxNzY2NTkyMjY5fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1496449903678-68ddcb189a24?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxyYW5kb218ZW58MHx8fHwxNzY2NTkyMjY5fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" width="5184" height="3456" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1496449903678-68ddcb189a24?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxyYW5kb218ZW58MHx8fHwxNzY2NTkyMjY5fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3456,&quot;width&quot;:5184,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;This is the sign you've been looking for neon signage&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="This is the sign you've been looking for neon signage" title="This is the sign you've been looking for neon signage" srcset="https://images.unsplash.com/photo-1496449903678-68ddcb189a24?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxyYW5kb218ZW58MHx8fHwxNzY2NTkyMjY5fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1496449903678-68ddcb189a24?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxyYW5kb218ZW58MHx8fHwxNzY2NTkyMjY5fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1496449903678-68ddcb189a24?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxyYW5kb218ZW58MHx8fHwxNzY2NTkyMjY5fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1496449903678-68ddcb189a24?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxyYW5kb218ZW58MHx8fHwxNzY2NTkyMjY5fDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@austinchan">Austin Chan</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>Substack&#8217;s dashboard tells you subscriber counts and post views. But it doesn&#8217;t answer the questions that keep you up at night:</p><ul><li><p><em><strong>&#8220;Why isn&#8217;t my content getting engagement?&#8221;</strong></em></p></li><li><p><em><strong>&#8220;Which posts are actually driving growth?&#8221;</strong></em></p></li><li><p><em><strong>&#8220;Am I publishing enough? Too much?&#8221;</strong></em></p></li><li><p><em><strong>&#8220;Where are my subscribers coming from?&#8221;</strong></em></p></li><li><p><em><strong>&#8220;What&#8217;s working and what&#8217;s not?&#8221;</strong></em></p></li></ul><p>You&#8217;re flying blind without data. You&#8217;re guessing instead of making decisions.</p><p><strong>The StackContacts advantage:</strong> With your raw data locally, you can answer these questions in minutes - not hours of manual spreadsheet work.</p><p>You can grab your copy of the <a href="https://www.stackcontacts.com/">StackContacts</a> tool - only $19 one-time fee to get detailed insights into your Substack data and start growing!  </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">StackContacts newsletter will help you turn your subscriber data into revenue. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><h2><strong>Ready-to-Use StackContacts AI Prompt</strong></h2><p>Copy the prompt below, replace <code>[publication]</code> with your publication name, and paste it into Claude (Cursor IDE or Claude Desktop) connected to your StackContacts database.</p><p><strong>To find your schema name:</strong> Ask Claude, <em><strong>&#8220;What tables are in my StackContacts database? Show me the full table names with schema prefix.&#8221;</strong></em> </p><p>Your schema follows the pattern: <code>pub_[your_publication]_substack_com</code></p><pre><code># New Writer Growth Analysis Prompt

## Primary Instructions

Using the StackContacts database, analyze the growth patterns and engagement data for a new writer with less than 100 subscribers. Identify what's working, what's not working, compare to successful growth patterns, and provide concrete, actionable recommendations to help them grow from zero to their first 100 subscribers.

Your analysis should be empathetic, address the specific pain points new writers face (distribution struggles, no interaction, confusion about growth, feeling like they're flying blind), and provide data-driven insights with clear next steps.

---

## INPUTS: [publication] use [your publication schema name]
## Parameters: None (analyzes all subscribers and content)

**IMPORTANT - Schema Customization:**
Before using this prompt, you must replace `[publication]` with your actual schema name.
- Your schema follows the pattern: `pub_[your_publication]_substack_com`
- To find your schema: Ask Claude "What tables are in my StackContacts database? Show me the full table names with schema prefix."
- Replace all instances of `[publication]` in the queries below with your schema name.

**IMPORTANT - Database Syntax:**
- This prompt uses DuckDB syntax. Date functions use `CURRENT_TIMESTAMP - INTERVAL 'X days'` format
- The `subscriber_events` table only has `subscriber_email` column (not `email`)
- Use `CURRENT_TIMESTAMP` for date comparisons, not `CURRENT_DATE`

---

## Step 1: Current State Assessment

### A. Subscriber Base Overview

Understand the current subscriber situation:

```sql
-- Current Subscriber Base Overview
SELECT 
  COUNT(*) as total_subscribers,
  COUNT(CASE WHEN is_subscribed = True THEN 1 END) as active_subscribers,
  COUNT(CASE WHEN is_subscribed = False THEN 1 END) as inactive_subscribers,
  COUNT(CASE WHEN membership_state = 'free_signup' THEN 1 END) as free_subscribers,
  COUNT(CASE WHEN membership_state LIKE '%paid%' THEN 1 END) as paid_subscribers,
  MIN(created_at) as first_subscriber_date,
  MAX(created_at) as most_recent_subscriber_date,
  DATEDIFF('day', MIN(created_at), CURRENT_TIMESTAMP) as days_since_first_subscriber,
  ROUND(COUNT(*) * 1.0 / NULLIF(DATEDIFF('day', MIN(created_at), CURRENT_TIMESTAMP), 0), 2) as avg_subscribers_per_day
FROM [publication].subscribers_detail;

Extract:

Total subscriber count
Active vs. inactive breakdown
Free vs. paid breakdown
How long they've been publishing
Average subscribers per day

### B. Growth Trajectory
Analyze growth over time:

-- Growth Trajectory Analysis
WITH monthly_subscribers AS (
  SELECT 
    DATE_TRUNC('month', created_at) as month,
    COUNT(*) as new_subscribers
  FROM [publication].subscribers_detail
  GROUP BY DATE_TRUNC('month', created_at)
)
SELECT 
  month,
  new_subscribers,
  SUM(new_subscribers) OVER (ORDER BY month) as cumulative_subscribers,
  LAG(new_subscribers) OVER (ORDER BY month) as previous_month,
  CASE 
    WHEN LAG(new_subscribers) OVER (ORDER BY month) IS NOT NULL 
    THEN ROUND((new_subscribers - LAG(new_subscribers) OVER (ORDER BY month)) * 100.0 / 
               NULLIF(LAG(new_subscribers) OVER (ORDER BY month), 0), 2)
    ELSE NULL
  END as month_over_month_growth_pct
FROM monthly_subscribers
ORDER BY month DESC;

**Extract:**
- Monthly subscriber growth
- Cumulative growth over time
- Month-over-month growth rate
- Growth trends (accelerating, steady, declining)

### C. Content Publishing Activity

Assess content output:

-- Content Publishing Activity
SELECT 
  COUNT(*) as total_posts,
  COUNT(CASE WHEN post_date &gt;= CURRENT_TIMESTAMP - INTERVAL '30 days' THEN 1 END) as posts_last_30d,
  COUNT(CASE WHEN post_date &gt;= CURRENT_TIMESTAMP - INTERVAL '7 days' THEN 1 END) as posts_last_7d,
  MIN(post_date) as first_post_date,
  MAX(post_date) as last_post_date,
  DATEDIFF('day', MIN(post_date), CURRENT_TIMESTAMP) as days_since_first_post,
  ROUND(COUNT(*) * 1.0 / NULLIF(DATEDIFF('day', MIN(post_date), CURRENT_TIMESTAMP), 0), 2) as avg_posts_per_day,
  ROUND(COUNT(*) * 1.0 / NULLIF(DATEDIFF('day', MIN(post_date), CURRENT_TIMESTAMP), 0) * 7, 2) as avg_posts_per_week,
  SUM(stat_views) as total_views,
  SUM(reaction_count) as total_reactions,
  SUM(comment_count) as total_comments,
  ROUND(AVG(stat_views), 1) as avg_views_per_post,
  ROUND(AVG(reaction_count), 1) as avg_reactions_per_post
FROM [publication].substack_posts;

**Extract:**
- Total posts published
- Recent publishing frequency
- Publishing consistency
- Average engagement metrics
- Views, reactions, comments per post

---

## Step 2: Engagement Analysis

### A. Subscriber Engagement Levels

Understand how engaged current subscribers are:

-- Subscriber Engagement Levels
WITH subscriber_engagement AS (
  SELECT 
    sd.email,
    sd.created_at as subscriber_since,
    COUNT(se.event_id) as total_events,
    COUNT(DISTINCT se.post_title) as posts_engaged,
    COUNT(CASE WHEN se.text LIKE '%Clicked link%' OR se.text LIKE '%clicked%' THEN 1 END) as link_clicks,
    COUNT(DISTINCT DATE(se.timestamp)) as active_days,
    MIN(se.timestamp) as first_engagement,
    MAX(se.timestamp) as last_engagement,
    DATEDIFF('day', MAX(se.timestamp), CURRENT_TIMESTAMP) as days_since_last_engagement
  FROM [publication].subscribers_detail sd
  LEFT JOIN [publication].subscriber_events se ON sd.email = se.subscriber_email
  GROUP BY sd.email, sd.created_at
)
SELECT 
  COUNT(*) as total_subscribers,
  COUNT(CASE WHEN total_events = 0 THEN 1 END) as never_engaged,
  COUNT(CASE WHEN total_events &gt; 0 AND total_events &lt;= 2 THEN 1 END) as low_engagement,
  COUNT(CASE WHEN total_events &gt; 2 AND total_events &lt;= 10 THEN 1 END) as medium_engagement,
  COUNT(CASE WHEN total_events &gt; 10 THEN 1 END) as high_engagement,
  ROUND(AVG(total_events), 1) as avg_events_per_subscriber,
  ROUND(AVG(posts_engaged), 1) as avg_posts_engaged,
  ROUND(AVG(link_clicks), 1) as avg_link_clicks,
  ROUND(AVG(active_days), 1) as avg_active_days,
  ROUND(AVG(days_since_last_engagement), 1) as avg_days_since_last_engagement
FROM subscriber_engagement;

**Extract:**
- Engagement distribution (never, low, medium, high)
- Average engagement metrics
- How many subscribers are actually reading
- Days since last engagement

### B. Content Performance Analysis

Identify which content resonates:

-- Content Performance Analysis
SELECT 
  title,
  post_date,
  stat_views,
  reaction_count,
  comment_count,
  ROUND(reaction_count * 100.0 / NULLIF(stat_views, 0), 2) as reaction_rate_pct,
  ROUND(comment_count * 100.0 / NULLIF(stat_views, 0), 2) as comment_rate_pct,
  COUNT(DISTINCT se.subscriber_email) as unique_engagements,
  COUNT(CASE WHEN se.text LIKE '%Clicked link%' OR se.text LIKE '%clicked%' THEN 1 END) as link_clicks
FROM [publication].substack_posts sp
LEFT JOIN [publication].subscriber_events se ON sp.title = se.post_title
GROUP BY title, post_date, stat_views, reaction_count, comment_count
ORDER BY stat_views DESC
LIMIT 20;

Extract:**
- Top 20 posts by views
- Engagement rates (reactions, comments)
- Which posts drive link clicks
- Content that resonates vs. doesn't

### C. Subscriber Acquisition Sources

Understand where subscribers come from:

-- Subscriber Acquisition Analysis
SELECT 
  CASE 
    WHEN free_attribution LIKE '%substack-signup-flow%' OR source LIKE '%substack-signup-flow%' THEN 'Substack Signup Flow'
    WHEN free_attribution LIKE '%substack-notes%' OR source LIKE '%substack-notes%' THEN 'Substack Notes'
    WHEN free_attribution LIKE '%substack-app%' OR source LIKE '%substack-app%' THEN 'Substack App'
    WHEN free_attribution LIKE '%substack-reader-profile-discovery%' OR source LIKE '%substack-reader-profile-discovery%' THEN 'Substack Profile Discovery'
    WHEN free_attribution LIKE '%google%' OR source LIKE '%google%' THEN 'Google Search'
    WHEN free_attribution LIKE '%substack.com%' OR source LIKE '%substack.com%' THEN 'Substack.com Website'
    WHEN free_attribution LIKE '%substack-follow-recommendations%' OR source LIKE '%substack-follow-recommendations%' THEN 'Substack Recommendations'
    WHEN free_attribution LIKE '%direct%' OR source LIKE '%direct%' THEN 'Direct'
    WHEN free_attribution LIKE '%substack-chat%' OR source LIKE '%substack-chat%' THEN 'Substack Chat'
    WHEN free_attribution LIKE '%import%' OR source LIKE '%import%' THEN 'Import/Migration'
    WHEN free_attribution LIKE '%substack-mentions%' OR source LIKE '%substack-mentions%' THEN 'Substack Mentions'
    WHEN free_attribution LIKE '%post-end-cta%' OR source LIKE '%post-end-cta%' THEN 'Post End CTA'
    WHEN free_attribution LIKE '%duckduckgo%' OR source LIKE '%duckduckgo%' THEN 'DuckDuckGo Search'
    WHEN free_attribution IS NULL AND source IS NULL THEN 'Unknown'
    ELSE 'Other'
  END as acquisition_source,
  COUNT(*) as subscriber_count,
  ROUND(COUNT(*) * 100.0 / SUM(COUNT(*)) OVER (), 2) as percentage
FROM [publication].subscribers_detail
GROUP BY 
  CASE 
    WHEN free_attribution LIKE '%substack-signup-flow%' OR source LIKE '%substack-signup-flow%' THEN 'Substack Signup Flow'
    WHEN free_attribution LIKE '%substack-notes%' OR source LIKE '%substack-notes%' THEN 'Substack Notes'
    WHEN free_attribution LIKE '%substack-app%' OR source LIKE '%substack-app%' THEN 'Substack App'
    WHEN free_attribution LIKE '%substack-reader-profile-discovery%' OR source LIKE '%substack-reader-profile-discovery%' THEN 'Substack Profile Discovery'
    WHEN free_attribution LIKE '%google%' OR source LIKE '%google%' THEN 'Google Search'
    WHEN free_attribution LIKE '%substack.com%' OR source LIKE '%substack.com%' THEN 'Substack.com Website'
    WHEN free_attribution LIKE '%substack-follow-recommendations%' OR source LIKE '%substack-follow-recommendations%' THEN 'Substack Recommendations'
    WHEN free_attribution LIKE '%direct%' OR source LIKE '%direct%' THEN 'Direct'
    WHEN free_attribution LIKE '%substack-chat%' OR source LIKE '%substack-chat%' THEN 'Substack Chat'
    WHEN free_attribution LIKE '%import%' OR source LIKE '%import%' THEN 'Import/Migration'
    WHEN free_attribution LIKE '%substack-mentions%' OR source LIKE '%substack-mentions%' THEN 'Substack Mentions'
    WHEN free_attribution LIKE '%post-end-cta%' OR source LIKE '%post-end-cta%' THEN 'Post End CTA'
    WHEN free_attribution LIKE '%duckduckgo%' OR source LIKE '%duckduckgo%' THEN 'DuckDuckGo Search'
    WHEN free_attribution IS NULL AND source IS NULL THEN 'Unknown'
    ELSE 'Other'
  END
ORDER BY subscriber_count DESC;

**Extract:**
- Where subscribers are coming from
- Which channels drive most growth
- Acquisition source distribution

---

## Step 3: Compare to Growth Benchmarks

### A. Publishing Frequency vs. Growth

Compare publishing frequency to subscriber growth:

-- Publishing Frequency vs. Growth Analysis
WITH monthly_metrics AS (
  SELECT 
    DATE_TRUNC('month', sp.post_date) as month,
    COUNT(DISTINCT sp.id) as posts_published,
    COUNT(DISTINCT sd.email) as new_subscribers,
    SUM(sp.stat_views) as total_views,
    SUM(sp.reaction_count) as total_reactions
  FROM [publication].substack_posts sp
  FULL OUTER JOIN [publication].subscribers_detail sd 
    ON DATE_TRUNC('month', sp.post_date) = DATE_TRUNC('month', sd.created_at)
  GROUP BY DATE_TRUNC('month', sp.post_date)
)
SELECT 
  month,
  posts_published,
  new_subscribers,
  total_views,
  total_reactions,
  ROUND(new_subscribers * 1.0 / NULLIF(posts_published, 0), 2) as subscribers_per_post,
  ROUND(total_views * 1.0 / NULLIF(posts_published, 0), 1) as avg_views_per_post,
  ROUND(total_reactions * 1.0 / NULLIF(posts_published, 0), 1) as avg_reactions_per_post
FROM monthly_metrics
WHERE month IS NOT NULL
ORDER BY month DESC;

**Extract:**
- Posts published per month
- New subscribers per month
- Subscribers per post ratio
- Views and reactions per post
- Correlation between frequency and growth

### B. Engagement Quality Assessment

Assess if engagement is translating to growth:

-- Engagement Quality Assessment
WITH post_engagement AS (
  SELECT 
    sp.title,
    sp.post_date,
    sp.stat_views,
    sp.reaction_count,
    COUNT(DISTINCT se.subscriber_email) as unique_engagements,
    COUNT(CASE WHEN se.text LIKE '%Clicked link%' OR se.text LIKE '%clicked%' THEN 1 END) as link_clicks
  FROM [publication].substack_posts sp
  LEFT JOIN [publication].subscriber_events se ON sp.title = se.post_title
  GROUP BY sp.title, sp.post_date, sp.stat_views, sp.reaction_count
),
subscriber_growth AS (
  SELECT 
    DATE_TRUNC('month', created_at) as month,
    COUNT(*) as new_subscribers
  FROM [publication].subscribers_detail
  GROUP BY DATE_TRUNC('month', created_at)
)
SELECT 
  DATE_TRUNC('month', pe.post_date) as month,
  COUNT(*) as posts_published,
  SUM(pe.stat_views) as total_views,
  SUM(pe.reaction_count) as total_reactions,
  SUM(pe.unique_engagements) as total_engagements,
  SUM(pe.link_clicks) as total_link_clicks,
  COALESCE(sg.new_subscribers, 0) as new_subscribers,
  ROUND(COALESCE(sg.new_subscribers, 0) * 100.0 / NULLIF(SUM(pe.unique_engagements), 0), 2) as engagement_to_subscriber_rate
FROM post_engagement pe
LEFT JOIN subscriber_growth sg ON DATE_TRUNC('month', pe.post_date) = sg.month
GROUP BY DATE_TRUNC('month', pe.post_date), sg.new_subscribers
ORDER BY month DESC;

**Extract:**
- Engagement metrics by month
- New subscribers by month
- Engagement-to-subscriber conversion rate
- Whether engagement is leading to growth

## Step 4: Identify Growth Barriers

### A. Content Distribution Analysis

Check if content is being shared/distributed:
-- Content Distribution Analysis
SELECT 
  sp.title,
  sp.post_date,
  sp.stat_views,
  COUNT(DISTINCT se.subscriber_email) as unique_engagements,
  COUNT(CASE WHEN se.text LIKE '%Clicked link%' OR se.text LIKE '%clicked%' THEN 1 END) as link_clicks,
  COUNT(CASE WHEN se.text LIKE '%restack%' OR se.text LIKE '%share%' THEN 1 END) as shares,
  ROUND(COUNT(DISTINCT se.subscriber_email) * 100.0 / NULLIF(sp.stat_views, 0), 2) as engagement_rate_pct
FROM [publication].substack_posts sp
LEFT JOIN [publication].subscriber_events se ON sp.title = se.post_title
GROUP BY sp.title, sp.post_date, sp.stat_views
ORDER BY sp.post_date DESC
LIMIT 20;

**Extract:**
- Recent posts and their performance
- Engagement rates
- Share/restack activity
- Whether content is reaching subscribers

### B. Subscriber Retention Analysis

Check if subscribers are staying engaged:

-- Subscriber Retention Analysis
WITH subscriber_lifecycle AS (
  SELECT 
    sd.email,
    sd.created_at as subscribed_date,
    MIN(se.timestamp) as first_engagement,
    MAX(se.timestamp) as last_engagement,
    COUNT(se.event_id) as total_events,
    DATEDIFF('day', sd.created_at, CURRENT_TIMESTAMP) as days_since_subscribed,
    DATEDIFF('day', MAX(se.timestamp), CURRENT_TIMESTAMP) as days_since_last_engagement
  FROM [publication].subscribers_detail sd
  LEFT JOIN [publication].subscriber_events se ON sd.email = se.subscriber_email
  GROUP BY sd.email, sd.created_at
)
SELECT 
  CASE 
    WHEN days_since_subscribed &lt;= 7 THEN 'New (0-7 days)'
    WHEN days_since_subscribed &lt;= 30 THEN 'Recent (8-30 days)'
    WHEN days_since_subscribed &lt;= 90 THEN 'Established (31-90 days)'
    ELSE 'Long-term (90+ days)'
  END as subscriber_cohort,
  COUNT(*) as subscriber_count,
  COUNT(CASE WHEN total_events = 0 THEN 1 END) as never_engaged,
  COUNT(CASE WHEN days_since_last_engagement &lt;= 7 THEN 1 END) as active_last_7d,
  COUNT(CASE WHEN days_since_last_engagement &gt; 30 THEN 1 END) as inactive_30d_plus,
  ROUND(AVG(total_events), 1) as avg_events,
  ROUND(AVG(days_since_last_engagement), 1) as avg_days_since_engagement
FROM subscriber_lifecycle
GROUP BY 
  CASE 
    WHEN days_since_subscribed &lt;= 7 THEN 'New (0-7 days)'
    WHEN days_since_subscribed &lt;= 30 THEN 'Recent (8-30 days)'
    WHEN days_since_subscribed &lt;= 90 THEN 'Established (31-90 days)'
    ELSE 'Long-term (90+ days)'
  END
ORDER BY 
  CASE 
    WHEN subscriber_cohort = 'New (0-7 days)' THEN 1
    WHEN subscriber_cohort = 'Recent (8-30 days)' THEN 2
    WHEN subscriber_cohort = 'Established (31-90 days)' THEN 3
    ELSE 4
  END;

**Extract:**
- Subscriber retention by cohort
- How many never engage
- Active vs. inactive subscribers
- Engagement patterns over time

### C. Content Topic Analysis

Identify which topics/content types perform best:
-- Content Topic Performance
WITH post_topics AS (
  SELECT 
    sp.title,
    sp.post_date,
    sp.stat_views,
    sp.reaction_count,
    COUNT(DISTINCT se.subscriber_email) as unique_engagements,
    CASE 
      WHEN LOWER(sp.title) LIKE '%how to%' OR LOWER(sp.title) LIKE '%guide%' THEN 'How-To/Tutorial'
      WHEN LOWER(sp.title) LIKE '%why%' OR LOWER(sp.title) LIKE '%should%' THEN 'Strategy/Advice'
      WHEN LOWER(sp.title) LIKE '%i %' OR LOWER(sp.title) LIKE '%my %' THEN 'Personal Story'
      WHEN LOWER(sp.title) LIKE '%what%' OR LOWER(sp.title) LIKE '%which%' THEN 'Educational'
      ELSE 'Other'
    END as content_type
  FROM [publication].substack_posts sp
  LEFT JOIN [publication].subscriber_events se ON sp.title = se.post_title
  GROUP BY sp.title, sp.post_date, sp.stat_views, sp.reaction_count
)
SELECT 
  content_type,
  COUNT(*) as post_count,
  ROUND(AVG(stat_views), 1) as avg_views,
  ROUND(AVG(reaction_count), 1) as avg_reactions,
  ROUND(AVG(unique_engagements), 1) as avg_engagements,
  ROUND(SUM(stat_views), 0) as total_views
FROM post_topics
GROUP BY content_type
ORDER BY avg_views DESC;

**Extract:**
- Content types and their performance
- Which topics get most views
- Which topics drive engagement
- Content strategy insights

---

## Step 5: Growth Opportunity Identification

### A. High-Engagement Subscribers Analysis

Identify engaged subscribers who might help with growth:

-- High-Engagement Subscribers (Potential Advocates)
WITH subscriber_engagement AS (
  SELECT 
    sd.email,
    sd.created_at as subscribed_date,
    COUNT(se.event_id) as total_events,
    COUNT(DISTINCT se.post_title) as posts_engaged,
    COUNT(CASE WHEN se.text LIKE '%Clicked link%' OR se.text LIKE '%clicked%' THEN 1 END) as link_clicks,
    MAX(se.timestamp) as last_engagement,
    DATEDIFF('day', MAX(se.timestamp), CURRENT_TIMESTAMP) as days_since_last_engagement
  FROM [publication].subscribers_detail sd
  LEFT JOIN [publication].subscriber_events se ON sd.email = se.subscriber_email
  GROUP BY sd.email, sd.created_at
)
SELECT 
  email,
  total_events,
  posts_engaged,
  link_clicks,
  days_since_last_engagement,
  CASE 
    WHEN total_events &gt;= 10 AND posts_engaged &gt;= 3 THEN 'Superfan - Ask for Referral'
    WHEN total_events &gt;= 5 AND link_clicks &gt;= 1 THEN 'Engaged - Potential Advocate'
    WHEN total_events &gt;= 3 THEN 'Active - Build Relationship'
    ELSE 'Monitor'
  END as engagement_tier
FROM subscriber_engagement
WHERE total_events &gt;= 3
ORDER BY total_events DESC
LIMIT 20;

**Extract:**
- Most engaged subscribers
- Potential advocates or referral sources
- Subscribers to build relationships with

### B. Content Gaps Analysis

Identify what content is missing:

-- Content Gaps Analysis
WITH all_posts AS (
  SELECT 
    title,
    post_date,
    stat_views,
    reaction_count,
    COUNT(DISTINCT se.subscriber_email) as unique_engagements
  FROM [publication].substack_posts sp
  LEFT JOIN [publication].subscriber_events se ON sp.title = se.post_title
  GROUP BY title, post_date, stat_views, reaction_count
)
SELECT 
  'Total Posts' as metric,
  COUNT(*) as value
FROM all_posts
UNION ALL
SELECT 
  'Posts with 0 Views',
  COUNT(CASE WHEN stat_views = 0 THEN 1 END)
FROM all_posts
UNION ALL
SELECT 
  'Posts with 0 Reactions',
  COUNT(CASE WHEN reaction_count = 0 THEN 1 END)
FROM all_posts
UNION ALL
SELECT 
  'Posts with 0 Engagements',
  COUNT(CASE WHEN unique_engagements = 0 THEN 1 END)
FROM all_posts
UNION ALL
SELECT 
  'Avg Views per Post',
  ROUND(AVG(stat_views), 1)
FROM all_posts
UNION ALL
SELECT 
  'Avg Reactions per Post',
  ROUND(AVG(reaction_count), 1)
FROM all_posts;

**Extract:**
- Content performance summary
- Posts with no engagement
- Average performance metrics
- Content quality issues

---

## Output Format

Structure your analysis as follows:

### &#128203; Executive Summary
- Current subscriber count
- How long they've been publishing
- Average subscribers per day/week
- Key insight: What's the biggest growth barrier?

### &#128202; Current State Assessment

**Subscriber Base:**
- Total subscribers, active vs. inactive
- Free vs. paid breakdown
- Days since first subscriber
- Growth rate (subscribers per day)

**Growth Trajectory:**
- Monthly subscriber growth table
- Cumulative growth over time
- Month-over-month growth rate
- Growth trend (accelerating, steady, declining, stalled)

**Content Publishing:**
- Total posts published
- Publishing frequency (posts per week)
- Publishing consistency
- Recent activity (last 7 days, 30 days)

**Key Insights:**
- Are they publishing consistently?
- Is growth steady or stalled?
- What's the current growth rate?

### &#128200; Engagement Analysis

**Subscriber Engagement Levels:**
- Table: Engagement Tier, Subscriber Count, Percentage
- Never engaged, Low, Medium, High engagement breakdown
- Average events per subscriber
- Days since last engagement

**Content Performance:**
- Top 20 posts by views with engagement metrics
- Posts with highest engagement rates
- Posts with link clicks
- Content that resonates vs. doesn't

**Subscriber Acquisition:**
- Table: Acquisition Source, Subscriber Count, Percentage
- Where subscribers are coming from
- Which channels work best
- Unknown/direct vs. social media

**Key Insights:**
- What percentage of subscribers actually engage?
- Which content performs best?
- Where are subscribers coming from?
- Is engagement leading to growth?

### &#127919; Growth Barriers Identified

**Content Distribution:**
- Are posts being shared/restacked?
- Engagement rates
- Reach vs. subscriber count
- Distribution challenges

**Subscriber Retention:**
- Table: Subscriber Cohort, Count, Never Engaged, Active Last 7d, Inactive 30d+
- Retention by cohort (new, recent, established)
- Churn indicators
- Engagement patterns

**Content Strategy:**
- Content type performance (How-To, Strategy, Personal Story, etc.)
- Which topics drive engagement
- Content gaps (posts with 0 views/reactions)

**Key Insights:**
- What's preventing growth? (distribution, engagement, content quality)
- Are subscribers staying engaged?
- Which content types work best?

### &#128161; Growth Recommendations

#### For Immediate Action (This Week)

**1. Fix Content Distribution (If Struggling)**
- **Problem:** "Writing isn't the hard part. Sharing it everywhere is."
- **Action:** 
  - Create a simple distribution checklist for each post
  - Share on 2-3 platforms consistently (don't try to do all)
  - Focus on platforms where you already have presence
  - Use Notes to share post snippets

**2. Engage with Existing Subscribers**
- **Problem:** "No interaction :("
- **Action:**
  - Respond to every comment personally
  - Send welcome DMs to new subscribers
  - Ask questions in posts to encourage engagement
  - Create content based on subscriber questions

**3. Publish Consistently**
- **Problem:** "Growth feels random"
- **Action:**
  - Set a realistic schedule (1-2 posts per week minimum)
  - Stick to it for 30 days
  - Track which days/times get most engagement
  - Don't worry about perfection - consistency beats perfection

#### For Short-term Growth (This Month)

**4. Focus on One Content Type That Works**
- **Action:**
  - Identify your top 3 performing posts
  - Create more content like those
  - If How-To posts work, write more tutorials
  - If personal stories work, share more experiences
  - Double down on what resonates

**5. Build Relationships with Engaged Subscribers**
- **Action:**
  - Identify your 10 most engaged subscribers
  - Send personal thank-you messages
  - Ask for feedback on content
  - Request referrals (if appropriate)
  - Build a small community around engaged readers

**6. Optimize Content for Engagement**
- **Action:**
  - Add clear questions at the end of posts
  - Include CTAs that encourage comments
  - Share personal stories that invite connection
  - Make content shareable (clear takeaways)

#### For Long-term Growth (Next 3 Months)

**7. Establish Your Niche (If Needed)**
- **Problem:** "Do I really have to make my focus niche?"
- **Action:**
  - Analyze which topics get most engagement
  - Narrow focus to 2-3 related topics
  - Become known for something specific
  - You can still write broadly, but have a core focus

**8. Create a Content Series**
- **Action:**
  - Develop a 4-6 post series on your best topic
  - Reference previous posts in new ones
  - Build momentum with connected content
  - Series help with retention and referrals

**9. Leverage Substack Features**
- **Action:**
  - Use Notes daily (even just 1-2 per day)
  - Engage with other writers' Notes
  - Comment on posts in your niche
  - Restack valuable content
  - Build relationships on-platform

**10. Track What Works**
- **Problem:** "Flying blind without data"
- **Action:**
  - Track which posts drive new subscribers
  - Note which topics get most engagement
  - Monitor which distribution channels work
  - Adjust strategy based on data, not guesses

### &#127919; Specific Growth Tactics

#### For Writers Starting from Zero

**Tactic 1: The "First 10" Strategy**
- Focus on getting your first 10 engaged subscribers
- Personal outreach to each one
- Build relationships before scaling
- Quality over quantity at this stage

**Tactic 2: Cross-Pollination**
- Engage with 5-10 other writers in your niche daily
- Comment meaningfully on their posts
- Restack valuable content
- Build relationships that lead to discovery

**Tactic 3: Value-First Content**
- Every post should solve a problem or share insight
- Make content shareable (clear takeaways)
- Write for your ideal reader, not everyone
- Focus on value, not volume

**Tactic 4: Consistency Over Perfection**
- Publish on schedule, even if not perfect
- 1 good post per week beats 0 perfect posts
- Build the habit of publishing
- Improve as you go

#### For Writers with Stalled Growth

**Tactic 1: Re-Engage Existing Subscribers**
- Send a "What do you want to read?" email
- Ask for feedback on recent posts
- Create content based on their requests
- Reactivate dormant subscribers

**Tactic 2: Analyze and Pivot**
- Identify your 3 worst-performing posts
- Stop creating that type of content
- Double down on your 3 best-performing posts
- Pivot strategy based on data

**Tactic 3: Distribution Audit**
- List all places you share content
- Identify which channels drive subscribers
- Focus on 2-3 channels that work
- Stop wasting time on channels that don't

**Tactic 4: Content Refresh**
- Update and republish top-performing old posts
- Turn one post into multiple Notes
- Create follow-up posts to popular content
- Build on what works

### &#9888;&#65039; Common Mistakes to Avoid

**Mistake 1: Publishing Inconsistently**
- **Problem:** "6 months of consistency, no progress" (but were they actually consistent?)
- **Solution:** Set realistic schedule and stick to it for 90 days minimum

**Mistake 2: Ignoring Existing Subscribers**
- **Problem:** "No interaction" - but are you engaging with them?
- **Solution:** Respond to comments, send DMs, ask questions

**Mistake 3: Trying to Do Everything**
- **Problem:** "Sharing it everywhere is" - too overwhelming
- **Solution:** Pick 2-3 distribution channels and master them

**Mistake 4: Writing for Everyone**
- **Problem:** "Do I really have to make my focus niche?"
- **Solution:** You don't need a tiny niche, but you need focus. Write for your ideal reader.

**Mistake 5: Comparing to Big Accounts**
- **Problem:** Feeling discouraged by others' success
- **Solution:** Focus on your own growth trajectory, not others' numbers

### &#128202; Growth Benchmarks for &lt;100 Subscribers

**Healthy Growth Indicators:**
- **Publishing:** 1-2 posts per week consistently
- **Engagement:** 20-30% of subscribers engage with content
- **Growth Rate:** 2-5 new subscribers per week
- **Retention:** 60%+ of subscribers engage within 30 days

**Warning Signs:**
- **0% engagement:** Subscribers aren't reading - check content quality
- **No growth for 30+ days:** Need to change strategy
- **High churn:** Subscribers leaving faster than joining
- **0 views on posts:** Distribution problem

---

## Analysis Style Guidelines

1. **Be empathetic:** Acknowledge the frustration ("I know it feels like you're flying blind...")
2. **Be specific:** Use exact numbers, percentages, and examples
3. **Be actionable:** Every insight should lead to a specific action
4. **Be encouraging:** Highlight what's working, not just what's broken
5. **Use their language:** Reference their pain points ("no interaction", "struggling with distribution")
6. **Prioritize:** Focus on 3-5 most important actions, not 20
7. **Format for readability:** Use tables, bullets, clear headers

---

## Quality Checklist

Before finalizing the analysis, ensure you've:

- [ ] Calculated current subscriber count and growth rate
- [ ] Analyzed publishing frequency and consistency
- [ ] Assessed subscriber engagement levels
- [ ] Identified top-performing content
- [ ] Analyzed subscriber acquisition sources
- [ ] Identified growth barriers
- [ ] Compared to benchmarks
- [ ] Provided specific, actionable recommendations
- [ ] Addressed common pain points (distribution, engagement, growth confusion)
- [ ] Made the analysis encouraging and empathetic
- [ ] Included specific next steps with timeframes</code></pre><p><br></p><p></p><h2>How to Use This Prompt</h2><p><strong>Step 1: Find Your Schema Name</strong></p><ul><li><p>In Claude connected to StackContacts, ask: <em><strong>&#8220;What tables are in my StackContacts database? Show me the full table names with schema prefix.&#8221;</strong></em></p></li><li><p>Your schema follows the pattern: `pub_[your_publication]_substack_com`</p></li><li><p>Example: If you see `pub_myblog_substack_com.subscribers_detail`, your schema is `pub_myblog_substack_com`</p></li></ul><p><strong>Step 2: Replace `[publication]`</strong></p><ul><li><p>Use Find &amp; Replace in your editor</p></li><li><p>Replace all instances of `[publication]` with your actual schema name (e.g., `pub_myblog_substack_com`)</p></li></ul><p><strong>Step 3: Paste into Claude</strong></p><ul><li><p>Open Claude in the Cursor IDE or the Claude Desktop</p></li><li><p>Make sure Claude is connected to your StackContacts database</p></li><li><p>Paste the entire prompt (including all SQL queries)</p></li><li><p>Wait 1-2 minutes for the analysis to complete</p></li></ul><p><strong>Step 4: Review and Ac</strong>t</p><ul><li><p>Save the analysis to a file (e.g., `Growth_Analysis_[Date].md`)</p></li><li><p>Focus on the top 3-5 recommendations</p></li><li><p>Implement changes one at a time</p></li><li><p>Re-run monthly to track progress</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!w8we!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d087478-ce06-45f9-a791-b534a11428e6_1533x995.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!w8we!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d087478-ce06-45f9-a791-b534a11428e6_1533x995.png 424w, https://substackcdn.com/image/fetch/$s_!w8we!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d087478-ce06-45f9-a791-b534a11428e6_1533x995.png 848w, https://substackcdn.com/image/fetch/$s_!w8we!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d087478-ce06-45f9-a791-b534a11428e6_1533x995.png 1272w, https://substackcdn.com/image/fetch/$s_!w8we!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d087478-ce06-45f9-a791-b534a11428e6_1533x995.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!w8we!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d087478-ce06-45f9-a791-b534a11428e6_1533x995.png" width="1456" height="945" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6d087478-ce06-45f9-a791-b534a11428e6_1533x995.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:945,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:238733,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/182591468?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d087478-ce06-45f9-a791-b534a11428e6_1533x995.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!w8we!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d087478-ce06-45f9-a791-b534a11428e6_1533x995.png 424w, https://substackcdn.com/image/fetch/$s_!w8we!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d087478-ce06-45f9-a791-b534a11428e6_1533x995.png 848w, https://substackcdn.com/image/fetch/$s_!w8we!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d087478-ce06-45f9-a791-b534a11428e6_1533x995.png 1272w, https://substackcdn.com/image/fetch/$s_!w8we!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6d087478-ce06-45f9-a791-b534a11428e6_1533x995.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Prompt pasted to Claude - it takes 1-2 minutes to complete the analysis</figcaption></figure></div><p></p><h2>What You&#8217;ll Get</h2><p>This prompt analyzes:</p><ul><li><p>&#9989; Your current subscriber base and growth trajectory</p></li><li><p>&#9989; Publishing frequency and consistency</p></li><li><p>&#9989; Engagement levels (who&#8217;s reading, who&#8217;s not)</p></li><li><p>&#9989; Content performance (which posts work, which don&#8217;t)</p></li><li><p>&#9989; Subscriber acquisition sources (where growth comes from)</p></li><li><p>&#9989; Growth barriers (what&#8217;s preventing growth)</p></li><li><p>&#9989; Specific, actionable recommendations</p></li></ul><p><em><strong>The analysis is empathetic, data-driven, and actionable.</strong></em> It addresses real pain points like distribution struggles, low engagement, and growth confusion&#8212;and gives you concrete next steps.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dFrK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e8833d-6a17-4f58-a0af-98f74a72cd2c_1489x951.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dFrK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e8833d-6a17-4f58-a0af-98f74a72cd2c_1489x951.png 424w, https://substackcdn.com/image/fetch/$s_!dFrK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e8833d-6a17-4f58-a0af-98f74a72cd2c_1489x951.png 848w, https://substackcdn.com/image/fetch/$s_!dFrK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e8833d-6a17-4f58-a0af-98f74a72cd2c_1489x951.png 1272w, https://substackcdn.com/image/fetch/$s_!dFrK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e8833d-6a17-4f58-a0af-98f74a72cd2c_1489x951.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dFrK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e8833d-6a17-4f58-a0af-98f74a72cd2c_1489x951.png" width="1456" height="930" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/04e8833d-6a17-4f58-a0af-98f74a72cd2c_1489x951.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:930,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:219117,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/182591468?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e8833d-6a17-4f58-a0af-98f74a72cd2c_1489x951.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!dFrK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e8833d-6a17-4f58-a0af-98f74a72cd2c_1489x951.png 424w, https://substackcdn.com/image/fetch/$s_!dFrK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e8833d-6a17-4f58-a0af-98f74a72cd2c_1489x951.png 848w, https://substackcdn.com/image/fetch/$s_!dFrK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e8833d-6a17-4f58-a0af-98f74a72cd2c_1489x951.png 1272w, https://substackcdn.com/image/fetch/$s_!dFrK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F04e8833d-6a17-4f58-a0af-98f74a72cd2c_1489x951.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Example Growth Analysis Report from my data</figcaption></figure></div><p></p><h2>Key Takeaways</h2><ul><li><p><strong>Stop guessing.</strong> Get data-driven insights about your growth</p></li><li><p><strong>No SQL skills required.</strong> Just copy, paste, and get answers from Claude</p></li><li><p><strong>Works with small audiences.</strong> Designed for writers with &lt;500 subscribers</p></li><li><p><strong>Actionable recommendations.</strong> Every insight leads to a specific action</p></li><li><p><strong>Run monthly.</strong> Track your progress and adjust strategy</p></li></ul><p><strong>Try it now.</strong> Replace `[publication]` with your schema name and paste into Claude. You&#8217;ll have a complete growth analysis in minutes.</p><p></p><p><em><strong>Questions? </strong>Please share your results in the comments or bring them to office hours. We&#8217;ll help you interpret your data and build a growth strategy that works.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/p/stop-flying-blind-get-data-driven/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://stackcontacts.substack.com/p/stop-flying-blind-get-data-driven/comments"><span>Leave a comment</span></a></p><p></p><p>&#8212; Finn </p><p></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">StackContacts is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[I Got Tired of Flying Blind. So I Built Tools to See What Data Platforms Hide.]]></title><description><![CDATA[Platforms show you "followers" but hide revenue-driving insights. Here's how I pull the data they won't show you - and AI prompts to turn your subscriber data into revenue.]]></description><link>https://stackcontacts.substack.com/p/i-got-tired-of-flying-blind-so-i</link><guid isPermaLink="false">https://stackcontacts.substack.com/p/i-got-tired-of-flying-blind-so-i</guid><dc:creator><![CDATA[Finn Tropy | StackContacts]]></dc:creator><pubDate>Wed, 24 Dec 2025 14:00:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!AFvi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4940491d-86b9-4103-8066-75954aceb5fb_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AFvi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4940491d-86b9-4103-8066-75954aceb5fb_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AFvi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4940491d-86b9-4103-8066-75954aceb5fb_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!AFvi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4940491d-86b9-4103-8066-75954aceb5fb_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!AFvi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4940491d-86b9-4103-8066-75954aceb5fb_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!AFvi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4940491d-86b9-4103-8066-75954aceb5fb_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AFvi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4940491d-86b9-4103-8066-75954aceb5fb_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4940491d-86b9-4103-8066-75954aceb5fb_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2371424,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://stackcontacts.substack.com/i/182248439?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4940491d-86b9-4103-8066-75954aceb5fb_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AFvi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4940491d-86b9-4103-8066-75954aceb5fb_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!AFvi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4940491d-86b9-4103-8066-75954aceb5fb_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!AFvi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4940491d-86b9-4103-8066-75954aceb5fb_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!AFvi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4940491d-86b9-4103-8066-75954aceb5fb_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Unlocking hidden platform data to help solve the revenue puzzle for creators</figcaption></figure></div><p>You&#8217;re writing consistently. Growing slowly. But here&#8217;s what keeps you up at night:</p><p><strong>Who&#8217;s actually reading?</strong></p><p>Your dashboard shows 500 subscribers. But which 47 opened every email last month? Which 12 comment on everything but haven&#8217;t upgraded? And that superfan who used to engage with everything - when exactly did they stop?</p><p>You can&#8217;t answer because Substack doesn&#8217;t show you.</p><h2><strong>The Problem Isn&#8217;t You. It&#8217;s Visibility.</strong></h2><p>Every platform - Substack, Medium, Amazon, all of them - shows you metrics optimized for <em><strong>their</strong></em> business model, not <em><strong>yours</strong></em>.</p><p>They collect far more data than they share. That data exists in their backend APIs. They just chose not to show it to you.</p><ul><li><p><strong>Substack</strong> shows followers and open rates:  metrics for their investor pitch - but not which subscribers are ready to pay or which content drove your last Gumroad sale.</p></li><li><p><strong>Medium</strong> shows views and reads:  engagement that keeps you on their platform - but not which readers would buy your products.</p></li></ul><p>These metrics aren&#8217;t wrong. They&#8217;re just not <em><strong>yours</strong></em>.</p><p><strong>You need to see which content drives revenue, which subscribers are most likely to buy, and who&#8217;s about to leave.</strong></p><p>That&#8217;s why I built <a href="https://www.stackcontacts.com/landing-v2.html">StackContacts</a>.</p><h2><strong>Ask Your Data Anything. Get Answers You Can Act On.</strong></h2><p>No spreadsheets. No SQL. Just ask what you want to know.</p><blockquote><p><strong>&#8220;Show me everyone who clicked 3+ links but never left a comment.&#8221;</strong><br>&#8594; <strong>23 subscribers found.</strong> Your silent superfans. Perfect for a personal &#8220;I noticed you&#8217;ve been reading...&#8221; outreach.</p><p><strong>&#8220;Who opened every email last month but isn&#8217;t a paid subscriber?&#8221;</strong><br>&#8594; <strong>47 subscribers found.</strong> Your warmest leads. They read everything. They just haven&#8217;t been asked to upgrade.</p><p><strong>&#8220;Which subscribers stopped opening emails in the last 30 days?&#8221;</strong><br>&#8594; <strong>156 subscribers at risk.</strong> You have maybe 2 weeks before they&#8217;re gone forever.</p><p><strong>&#8220;Which post drove my last Gumroad sale?&#8221;</strong><br>&#8594; <strong>Your Tuesday Note about segmentation.</strong> Now you know what topics your audience will pay for.</p></blockquote><h2><strong>What You Actually Get</strong></h2><h3><strong>Find your superfans by name</strong></h3><p>See exactly which subscribers open everything, click every link, and comment on your posts. These are the people you should be talking to. Now you know who they are.</p><h3><strong>Know who&#8217;s ready to pay</strong></h3><p>Not everyone is ready to upgrade. But some people are. See who&#8217;s been engaging for months without converting - your warmest leads, ranked by likelihood to buy.</p><h3><strong>Catch subscribers before they leave</strong></h3><p>Someone who opened every email for 6 months just stopped. You have maybe 2 weeks before they&#8217;re gone. Get flagged before it&#8217;s too late.</p><h3><strong>See exactly which post drove each sale</strong></h3><p>Stop guessing which content converts. StackContacts connects your Substack posts to your Gumroad purchases, so you know exactly what topics your audience will pay for.</p><h3><strong>All your audience data in one place</strong></h3><p>Substack subscribers, Gumroad customers, Kit contacts - automatically synced into a single view. No more switching between dashboards.</p><div><hr></div><h2><strong>Your Data Never Leaves Your Mac</strong></h2><p>StackContacts runs entirely on your computer. </p><p>Your subscriber list, engagement data, and purchase history stay private. No cloud. No third-party servers. </p><p>We never see your data.</p><h2><strong>What This Newsletter Gives You</strong></h2><p>This isn&#8217;t just product support - it&#8217;s <em><strong>premium education</strong></em> to help you extract maximum value from your data.</p><h3><strong>What Free Subscribers Get</strong></h3><p>This is for people interested in learning more about StackContacts.</p><ul><li><p>Product updates</p></li><li><p>Basic StackContacts usage guides</p></li><li><p>Occasional public essays</p></li></ul><h3><strong>What Paid Subscribers Get</strong></h3><p>This is for people who already have data and want better decisions.</p><ul><li><p>Curated AI prompts ready to run against your StackContacts database</p></li><li><p>Decision-focused breakdowns (what mattered, what didn&#8217;t, why)</p></li><li><p>Advanced, real-world examples of how StackContacts data informs launches, pricing, and retention</p></li><li><p>Bi-weekly office hours - bring your specific challenges, and I&#8217;ll help to troubleshoot to get the correct answers</p></li><li><p>Private community access</p></li><li><p>Full archive of past AI prompts, articles, and recordings</p></li><li><p>20-30% off future StackContacts products</p></li></ul><h4><strong>What You&#8217;ll Learn</strong></h4><ul><li><p><strong>Revenue Attribution:</strong> See exactly which Notes or posts drove Gumroad sales</p></li><li><p><strong>Predictive Analytics:</strong> Identify subscribers 4x more likely to become customers</p></li><li><p><strong>Engagement Velocity:</strong> Target users at the perfect moment in their journey</p></li><li><p><strong>Cross-Platform Insights:</strong> Unify your Substack and Gumroad audience into one view</p></li><li><p><strong>Advanced Segmentation:</strong> Find your superfans, warm leads, and at-risk subscribers</p></li></ul><p>All without complex SQL. Just copy-paste prompts and get answers.</p><h2><strong>Your Next Paying Subscriber Is Already In Your List</strong></h2><p>They&#8217;ve been reading for months. They&#8217;re engaged. They just haven&#8217;t been asked.</p><p>The only question is whether you&#8217;ll see them in time.</p><p><strong><a href="https://www.stackcontacts.com/">See Who&#8217;s Ready &#8594;</a></strong></p><div><hr></div><h2><strong>Why I Built This</strong></h2><p>I&#8217;ve been writing software since 1976 and publishing content for 25+ years. When I got tired of Medium&#8217;s games, I started pulling data from their APIs and discovered that &#8220;followers&#8221; were a meaningless metric - prominently displayed but intentionally disconnected from revenue.</p><p>I moved to Substack and kept doing the same detective work - studying growth patterns, pulling hidden data, building tools. Just because I love solving puzzles with software.</p><p>After 40+ years in corporate and startup environments, I&#8217;ve learned that companies optimize for their own survival, not yours. Every dashboard you&#8217;ve ever used was designed to make <em><strong>them</strong></em> money. </p><p>StackContacts is designed to make <em>you</em> money.</p><p>&#8212; Finn</p><div><hr></div><p><em>I study creator growth the way engineers study systems - with experiments, dashboards, and curiosity. I built <a href="https://www.stackcontacts.com/landing-v2.html">StackContacts</a> to turn subscriber data into revenue, and I share AI prompts, research, and office hours notes to help you extract maximum value.</em></p><p><em>My tools store: <a href="https://finntropy.gumroad.com/">finntropy.gumroad.com</a></em></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://stackcontacts.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading StackContacts! Subscribe for free to receive new public posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item></channel></rss>