<?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[fullres ＋ substack]]></title><description><![CDATA[This is a demo of how you can utilize fullres for your substack publication.]]></description><link>https://substack.fullres-demos.com</link><image><url>https://substackcdn.com/image/fetch/$s_!Ag-9!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13d80ac2-91c8-4bdb-8d85-9a4a0cdd55c8_308x308.png</url><title>fullres ＋ substack</title><link>https://substack.fullres-demos.com</link></image><generator>Substack</generator><lastBuildDate>Wed, 06 May 2026 10:46:49 GMT</lastBuildDate><atom:link href="https://substack.fullres-demos.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[fullres]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[todd@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[todd@substack.com]]></itunes:email><itunes:name><![CDATA[Todd Garland]]></itunes:name></itunes:owner><itunes:author><![CDATA[Todd Garland]]></itunes:author><googleplay:owner><![CDATA[todd@substack.com]]></googleplay:owner><googleplay:email><![CDATA[todd@substack.com]]></googleplay:email><googleplay:author><![CDATA[Todd Garland]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How to integrate fullres with your Substack publication for better analytics]]></title><description><![CDATA[Learn how to effortlessly connect fullres with your Substack publication to unlock detailed analytics and enhance your audience insights.]]></description><link>https://substack.fullres-demos.com/p/how-to-log-custom-metadata-for-post</link><guid isPermaLink="false">https://substack.fullres-demos.com/p/how-to-log-custom-metadata-for-post</guid><dc:creator><![CDATA[Todd Garland]]></dc:creator><pubDate>Mon, 29 Jul 2024 23:07:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!xMoe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e4a039-0b44-4180-a5c0-8bba7f127840_2378x1704.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_!xMoe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e4a039-0b44-4180-a5c0-8bba7f127840_2378x1704.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xMoe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e4a039-0b44-4180-a5c0-8bba7f127840_2378x1704.png 424w, https://substackcdn.com/image/fetch/$s_!xMoe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e4a039-0b44-4180-a5c0-8bba7f127840_2378x1704.png 848w, https://substackcdn.com/image/fetch/$s_!xMoe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e4a039-0b44-4180-a5c0-8bba7f127840_2378x1704.png 1272w, https://substackcdn.com/image/fetch/$s_!xMoe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e4a039-0b44-4180-a5c0-8bba7f127840_2378x1704.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xMoe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e4a039-0b44-4180-a5c0-8bba7f127840_2378x1704.png" width="1456" height="1043" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/39e4a039-0b44-4180-a5c0-8bba7f127840_2378x1704.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1043,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:334801,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xMoe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e4a039-0b44-4180-a5c0-8bba7f127840_2378x1704.png 424w, https://substackcdn.com/image/fetch/$s_!xMoe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e4a039-0b44-4180-a5c0-8bba7f127840_2378x1704.png 848w, https://substackcdn.com/image/fetch/$s_!xMoe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e4a039-0b44-4180-a5c0-8bba7f127840_2378x1704.png 1272w, https://substackcdn.com/image/fetch/$s_!xMoe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F39e4a039-0b44-4180-a5c0-8bba7f127840_2378x1704.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>fullres is a powerful and lightweight analytics tool designed to help you gain deeper insights into your website's performance and audience engagement. Unlike traditional analytics platforms, fullres offers easy integration, real-time data tracking, and customizable event tracking, making it an ideal choice for publishers who want to optimize their content strategy. Whether you&#8217;re running a blog, a newsletter, or any other online publication, fullres provides the tools you need to understand your audience better and make data-driven decisions. </p><p>In this guide, we&#8217;ll walk you through the steps to integrate fullres with your Substack publication, allowing you to leverage its full potential seamlessly.</p><p>For this demo you will need three things:</p><ol><li><p><a href="https://app.fullres.com/accounts/new">A fullres account</a>.</p></li><li><p>A Substack account that is <a href="https://support.substack.com/hc/en-us/articles/360051222571-How-do-I-set-up-my-custom-domain-on-Substack">utilizing a custom domain</a>.</p></li><li><p><a href="https://dash.cloudflare.com/sign-up">A Cloudflare account</a> for DNS.</p></li></ol><p>We will be utilizing Cloudflare&#8217;s DNS Proxy and Workers features to inject the fullres tag onto your Substack domain and seamlessly add some additional fullres features.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://substack.fullres-demos.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">Hey thanks for stopping by this demo, if you would like to sign up for our list of fullres Substack users, enter your email below.</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><p><strong>Step 1: Set Up Cloudflare Worker</strong></p><p>1. Log in to Cloudflare: Go to your Cloudflare dashboard.</p><p>2. Navigate to Workers: Click on the Workers section.</p><p>3. Create a New Worker: Click on "Create a Worker" and name it (e.g., `substack-fullres-injector`).</p><p><strong>Step 2: Inject Metadata Logging Script</strong></p><p>Use the following Cloudflare Worker script to inject the custom metadata logging script into your Substack blog:</p><pre><code>addEventListener('fetch', event =&gt; {
  event.respondWith(handleRequest(event.request))
})

async function handleRequest(request) {
  const response = await fetch(request)
  const contentType = response.headers.get('content-type') || ''

  if (contentType.includes('text/html')) {
    let body = await response.text()

    // Inject the fullres script
    const fullresScript = `
      &lt;script&gt;
        (function(){
          var fullres = document.createElement('script');
          fullres.async = true;
          fullres.src = 'https://t.fullres.net/[YOUR_FULLRES_SITE_KEY].js?'+(new Date()-new Date()%43200000);
          document.head.appendChild(fullres);
        })();
      &lt;/script&gt;
    `

    // Inject the event tracking and metadata script
    const eventScript = `
      &lt;script&gt;
        window.fullres ||= { events: [], metadata: {} };

        document.addEventListener('DOMContentLoaded', function() {
          // Extract post author metadata
          const authorLink = document.querySelector('.profile-hover-card-target a[href*="@"]');
          if (authorLink) {
            const authorHref = authorLink.getAttribute('href');
            window.fullres.metadata.postAuthor = authorHref ? authorHref.split('@')[1] : 'null';
          }

          // Determine if the user is logged in
          const signInLink = document.querySelector('.topbar .navbar-buttons [data-href*="sign-in"]');
          window.fullres.metadata.isLoggedIn = signInLink ? 'false' : 'true';

          // Check for subscription confirmation URL pattern
          const params = new URLSearchParams(window.location.search);
          if (window.location.pathname === '/subscribe' &amp;&amp;
              params.get('utm_source') === 'confirmation_email' &amp;&amp;
              params.get('just_signed_up') === 'true') {
            window.fullres.events.push({ key: 'email_subscription_confirmation' });
          }

          // Track button clicks
          const buttons = [
            { selector: '.navbar-buttons [data-testid="noncontributor-cta-button"]', key: 'subscribe_button_click', label: 'top_right_navbar_button' },
            { selector: '.end-cta-container .subscribe-btn', key: 'subscribe_button_click', label: 'end_of_post_cta_button' },
            { selector: '.subscribe-footer .subscribe-btn', key: 'subscribe_button_click', 'footer_subscribe_form'},
            { selector: '.subscription-widget-wrap:first-of-type .subscribe-btn', key: 'subscribe_button_click', 'beginning_of_post_subscribe_form'},
            { selector: '.subscribe-footer .subscribe-btn', key: 'subscribe_button_click', 'end_of_post_subscribe_form'},
            { selector: '.post-footer .like-button-container a:not(.state-liked)', key: 'post_like_click', label: 'end_of_post'},
            { selector: '.like-button-container.post-ufi-button a:not(.state-liked)', key: 'post_like_click', label: 'beginning_of_post'},
            { selector: '.pencraft .like-button-container a:not(.state-liked)', key: 'post_like_click', label: 'list_of_posts'},
          ];
          buttons.forEach(({ selector, key, label }) =&gt; {
            const button = document.querySelector(selector);
            if (button) {
              button.addEventListener('click', function() {
                window.fullres.events.push({ key: key, properties: { button: label } });
              });
            }
          });
        });
      &lt;/script&gt;
    `

    body = body.replace('&lt;/body&gt;', `${fullresScript}${eventScript}&lt;/body&gt;`)
    return new Response(body, {
      headers: response.headers
    })
  }

  return response
}
</code></pre><p><strong>Step 3: Deploy the Worker</strong></p><p>1. Save and Deploy: Save the Worker script and deploy it.</p><p>2. Set Up a Route: Go to the Workers tab, click on "Add route," and enter the route pattern for your Substack custom domain (e.g., `blog.yourdomain.com/*`). Select the Worker you just created.</p><p><strong>Step 4: Verify the Integration</strong></p><p>1. Test the Integration: Visit your Substack blog at the custom domain (e.g., `blog.yourdomain.com`). Go to your fullres dashboard where stats should start to appear within a couple minutes.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://substack.fullres-demos.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">Hey thanks for stopping by this demo, if you would like to sign up for our list of fullres Substack users, enter your email below.</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></channel></rss>