Back to Blog

Build in Public: Track Which Posts Drive Signups

Build a measurable build in public system that tracks which posts drive signups and revenue. Set up UTM tagging, social media automation, and a conversion da...

Vladyslava Sirychenko
Vladyslava SirychenkoFounder & VP of Growth · July 9, 2026

The exact instrumentation setup that connects your shipping updates to real conversion data

Learn how to build a closed-loop system that ties every build-in-public post to actual signups and revenue. Set up UTM tracking, social media automation, and a single dashboard so you always know which update moved the needle.

TL;DR

  • Tag every link - Use UTM parameters on every build-in-public post so you can trace signups back to specific updates in GA4, not just count likes

  • Categorize your posts - Sort build logs into five types (Ship, Metric, Struggle, Lesson, Ask) and track which category actually converts followers into users

  • Write for your ICP, not other builders - Frame updates around problems your product solves for customers, not around the indie hacker journey itself

  • Automate distribution, not thinking - Use social media automation to schedule and cross-post, but customize each post per platform and always include a tracked link

  • Review weekly, adjust biweekly - Pull GA4 attribution data every Sunday, and after two weeks, double down on what converts and drop what doesn't

What You'll Build: A Measurable Build-in-Public System

By the end of this tutorial, you'll have a fully instrumented build in public system that connects your shipping updates to actual signups and revenue. Not just posting into the void. A closed loop where every build log you publish is tagged, tracked, and tied to conversion data you can act on.

Your success criteria: you'll be able to open a single dashboard and answer the question, "Which build-in-public post brought me paying users this week?" You'll also have a repeatable content workflow that takes under 20 minutes per day, powered by social media automation and lightweight analytics.

This is the instrumentation layer most solo founders skip entirely. They post consistently, get engagement, and still can't explain where their last 10 signups came from. You're going to fix that.

Prerequisites and Setup Checklist

Before you start, make sure you have these in place. Missing one will stall you mid-tutorial.

  • A live product or functional MVP with a signup or waitlist page (even a landing page works)

  • Google Analytics 4 installed on your site (GA4 setup guide)

  • At least one active social account where you post updates (X/Twitter, LinkedIn, or Bluesky)

  • A scheduling tool like Buffer, Typefully, or Hypefury (free tiers are fine)

  • UTM link builder bookmarked (Google's Campaign URL Builder)

  • A simple spreadsheet (Google Sheets or Notion table) for your content log

Time estimate: 90 minutes for initial setup. Then 15 to 20 minutes per day to maintain. The biggest blocker is usually not having GA4 event tracking configured, so handle that first.

Why This Approach Works (and Why Posting Alone Doesn't)

Most build-in-public advice tells you to share your journey, be transparent, post consistently. That's fine. But it treats social posting as a broadcasting habit instead of a measurable acquisition channel. The result? Founders get likes but can't trace them to revenue.

As KP, founder and host of the Build In Public Podcast, put it: "Virality is overrated, utility is underrated. Be helpful and specific with your content. Add value to a core niche group of people." That's the mindset shift. Your build logs aren't content marketing. They're targeted signals aimed at your ideal customer profile (ICP), and every signal needs a tracking wire attached.

This tutorial treats your real-time updates as a growth channel with the same rigor you'd apply to SEO or cold outreach. Only 44% of founders consistently share real-time product updates, yet those who do see 2.5x higher launch engagement. The gap isn't effort. It's instrumentation.

Step 1: Define Your Build Log Categories

Before you write a single post, you need a taxonomy. This is what lets you later analyze which type of update drives signups versus which type just gets engagement.

Create these five categories in your spreadsheet:

  • Ship — New feature, bug fix, or version release

  • Metric — Revenue milestone, user count, conversion rate

  • Struggle — Honest failure, pivot, or setback

  • Lesson — Tactical insight or process improvement

  • Ask — Direct request for feedback, beta testers, or advice

Research shows that 50% of successful build-in-public strategies balance wins and losses equally. Your taxonomy enforces that balance structurally instead of relying on gut feel.

Checkpoint: Your spreadsheet should now have columns for Date, Category, Post Text, Platform, UTM Link, and Conversions. If it does, move to Step 2.

Step 2: Build Your UTM Tagging System

This is the step that separates founders who guess from founders who know. Every link you share in a build log gets a UTM tag. No exceptions.

Open the Google Campaign URL Builder and use this naming convention:

utm_source = [platform] (e.g., twitter, linkedin)

utm_medium = social

utm_campaign = bip-[category]-[month] (e.g., bip-ship-jun)

utm_content = [short-descriptor] (e.g., dark-mode-launch)

For example, if you're posting a "Ship" update about dark mode on X in June, your tagged URL looks like:

https://yourapp.com?utm_source=twitter&utm_medium=social&utm_campaign=bip-ship-jun&utm_content=dark-mode-launch

Common failure: Using inconsistent capitalization ("Twitter" vs "twitter") splits your data in GA4. Pick lowercase for everything and stick with it.

Checkpoint: Generate three test UTM links. Paste them into your browser and confirm they load your site. Then check GA4 > Reports > Acquisition > Traffic Acquisition to verify the source/medium appears within a few minutes.

Step 3: Set Up GA4 Conversion Events

UTM tags tell you where traffic comes from. Conversion events tell you what that traffic does. You need both.

In GA4, navigate to Admin > Events and create these custom events (or mark existing ones as conversions):

  • sign_up — Fires when someone completes your signup form

  • waitlist_join — Fires when someone joins your waitlist (if applicable)

  • pricing_view — Fires when someone visits your pricing page

If you're using a no-code platform or simple landing page, you can set these up via Google Tag Manager without touching code. Create a trigger for the "thank you" or confirmation page URL, then fire a custom event.

Checkpoint: Use GA4's DebugView (Admin > DebugView) to verify events fire correctly. Sign up on your own site with the debug extension active. You should see your event appear in real time.

Common failure: Events appear in DebugView but aren't marked as conversions. Go to Admin > Conversions > New Conversion Event and add each event name manually.

Step 4: Create Your Content Assembly Line

You ship fast. You don't have time for elaborate content workflows. So build a 15-minute daily routine that turns your existing work into build-in-public posts.

The routine:

  • Minutes 1 to 5: Open your commit log, project board, or changelog. Identify one thing you shipped, learned, or struggled with today.

  • Minutes 5 to 10: Write the post. Use this formula: [What happened] + [Why it matters to your ICP] + [Tagged link]. Keep it under 280 characters for X, expand slightly for LinkedIn.

  • Minutes 10 to 15: Generate your UTM link, paste it into the post, log it in your spreadsheet, and schedule it.

90% of founders who automate content posting see 3x more consistent social activity than manual posters. Use your scheduling tool (Buffer, Typefully, or similar) to queue posts at optimal times for your audience. For most B2B SaaS audiences, that's weekday mornings between 8 and 10 AM in your target timezone.

Checkpoint: After three days, your spreadsheet should have three rows with complete data. If you're skipping the UTM column, stop and fix it now. Untagged posts are invisible to your analytics.

Step 5: Target Your ICP, Not the Build-in-Public Crowd

This is where most founders go wrong. They write for other builders instead of potential customers. One founder on Reddit reported hitting 100+ paying customers and $18,000 in revenue only after shifting their social posts from general build-in-public audiences to their actual ICP.

Before posting, run this filter on every update:

  • Would my target user care about this, or only another indie hacker?

  • Does this post demonstrate a problem my product solves?

  • Is the CTA link pointing to a page my ICP would find useful?

A "Ship" post about adding Stripe integration is interesting to builders. A "Ship" post about how customers can now upgrade in two clicks speaks to your ICP. Same feature, different framing. The UTM category stays the same, but the conversion rate changes dramatically.

Ankur Nagpal, founder of Teachable, reinforces this: "Sharing your startup's real-time story with openness and vulnerability builds trust, which is permanent and long-lasting." Trust with your customers, not just your Twitter followers.

Step 6: Automate Distribution Across Platforms

You've written the post and tagged the link. Now distribute it without spending another 30 minutes manually cross-posting.

Set up a multi-platform workflow:

  • Primary platform: Post natively (X or LinkedIn, wherever your ICP lives)

  • Secondary platforms: Use your social media automation tool to adapt and schedule the same update for one or two additional channels

  • Long-form recap: Every Friday, compile the week's build logs into a single post for your blog, Substack, or Indie Hackers profile

Don't auto-post identical text everywhere. Each platform has different norms. A thread on X becomes a single narrative post on LinkedIn. Your automation tool should let you customize per platform while scheduling from one queue.

If you're already using an AI-assisted growth workflow, tools like heycatch can help you identify which channels deserve your distribution effort based on where your ICP actually engages, so you're not spreading thin across platforms that don't convert.

Checkpoint: Schedule one week of posts across at least two platforms. Confirm every post contains a UTM-tagged link and is logged in your spreadsheet.

Step 7: Build Your Weekly Attribution Dashboard

You have tagged links going out. You have conversion events firing. Now connect them.

In GA4, go to Reports > Acquisition > Traffic Acquisition. Add a secondary dimension of "Session campaign" to see your UTM campaigns. You'll now see rows like:

bip-ship-jun | twitter | social | 12 sessions | 2 sign_ups

bip-struggle-jun | linkedin | social | 34 sessions | 0 sign_ups

bip-metric-jun | twitter | social | 8 sessions | 3 sign_ups

Every Sunday, spend 10 minutes pulling this data into your spreadsheet. Add a "Results" tab with columns for: Week, Category, Platform, Sessions, Signups, and Signup Rate.

What to look for:

  • Which category (Ship, Metric, Struggle, Lesson, Ask) drives the most signups, not just traffic?

  • Which platform converts better?

  • Is there a pattern in the posts that convert vs. those that just get likes?

Common failure: Seeing "(not set)" in your campaign data means some links went out without UTM tags. Go back and audit your recent posts.

Step 8: Run the ICP Feedback Loop

After two weeks of data, you have enough signal to optimize. This is where build-in-public becomes a growth system instead of a content habit.

Analyze your spreadsheet and make three decisions:

  • Double down on the post category with the highest signup rate

  • Reframe or drop the category with high engagement but zero conversions

  • Test a new angle on your weakest-performing platform before abandoning it

This is the same audit-prioritize-automate cycle that applies to any growth channel. If you want to go deeper on structuring that process, the guide on building a solo growth system with AI walks through the full framework.

Remember: 42% of startups fail because they build products nobody wants. Your build-in-public data doesn't just track marketing performance. It tells you whether your ICP cares about what you're shipping. If "Ship" posts about Feature X get clicks but zero signups, that's product signal, not just marketing signal.

Step 9: Add a Conversion Layer to Your Landing Page

Your build logs drive traffic. But if your landing page leaks visitors, none of this matters. Tighten the conversion path that your UTM-tagged links point to.

  • Dedicated landing variant: Consider creating a simple page (e.g., yourapp.com/build) that acknowledges the visitor came from your build-in-public content. "You saw us building this. Try it."

  • Single CTA: One action per page. Signup or waitlist. Not both, and not five navigation options.

  • Social proof from your build logs: Embed a recent milestone ("500 signups this month") directly on the page.

If you're still in pre-launch and driving traffic to a waitlist, make sure that waitlist is doing work for you. The guide on monetizing waitlist silence covers how to convert passive signups into warm leads before you even launch.

Checkpoint: Visit your landing page through one of your UTM-tagged links. Time how long it takes to complete the signup action. If it's more than 30 seconds, simplify.

Configuration and Customization

Variables You Should Adjust

Post frequency: This tutorial assumes one post per day. If you ship faster, post twice. If you're in a slow building phase, three per week is the minimum to maintain visibility. Consistency matters more than volume.

UTM campaign naming: The convention in this tutorial (bip-[category]-[month]) works for most solo founders. If you're also running other acquisition channels, add a prefix like "organic-bip" to distinguish build-in-public traffic from other social traffic.

GA4 attribution model: GA4 defaults to data-driven attribution. For a solo founder with low traffic volume, switch to "last click" under Admin > Attribution Settings for cleaner data. Data-driven models need significant volume to be useful.

Settings You Must Change

GA4 data retention: The default is 2 months. Go to Admin > Data Settings > Data Retention and change it to 14 months. Otherwise, you lose historical comparison data.

Scheduling timezone: Set your automation tool's timezone to match your ICP's location, not yours. If you're in Berlin but your users are in San Francisco, schedule for Pacific Time mornings.

Verification and Testing

Before you go live with this system, run a full end-to-end test.

Test procedure:

  • Create a test post with a UTM-tagged link

  • Click the link yourself (use an incognito window)

  • Complete the signup or waitlist action on your site

  • Open GA4 > Realtime and confirm you see the session with correct source, medium, and campaign

  • Check that your conversion event fired in DebugView or Realtime > Conversions

Edge cases to verify: Test a link on mobile (many social clicks are mobile). Test from each platform you plan to post on, since some platforms (especially LinkedIn) wrap links in their own redirects, which can occasionally strip UTM parameters. If this happens, use a URL shortener like Bitly that preserves UTM tags.

Common Errors and Fixes

"I see traffic but zero conversions in GA4"

Symptom: Sessions appear with correct UTM data, but conversion count stays at zero. Cause: Your conversion events aren't marked as conversions, or the event isn't firing on your signup confirmation. Fix: Go to Admin > Conversions and verify your event names are listed. Then use DebugView to confirm the event fires when you complete a signup.

"All my traffic shows as direct/none"

Symptom: UTM-tagged links aren't being attributed correctly. Cause: You're linking to a page that immediately redirects (stripping parameters), or your site has a client-side redirect that drops query strings. Fix: Test the full UTM URL in a browser. If it redirects, fix the redirect to pass query parameters through.

"My engagement is high but nobody clicks the link"

Symptom: Posts get likes and replies but near-zero link clicks. Cause: Your CTA is buried, or the post is self-contained with no reason to click. Fix: Place the link in context: "Here's the feature in action: [link]." Give a specific reason to click, not just "check it out."

"I'm getting signups but can't tell which post drove them"

Symptom: Conversions appear but campaign data is "(not set)." Cause: Some of your posts went out without UTM tags, or users bookmarked your site and returned later without the parameters. Fix: Enforce the UTM rule on every single post. For returning visitors, accept that last-click attribution won't capture every touchpoint, but it will capture the majority.

"I don't have enough traffic to see patterns"

Symptom: After two weeks, your data is too sparse to draw conclusions. Cause: Low follower count or posting on platforms where your ICP isn't active. Fix: Focus on one platform. Engage in replies and communities before expecting inbound clicks. If you're starting from zero audience, the pre-launch playbook for zero-audience founders covers cold-traction tactics that pair well with build-in-public.

Next Steps and Extensions

You now have a working system. Here's how to extend it.

  • Add email capture to build logs: Instead of always linking to your signup page, alternate with a lead magnet (checklist, template) that captures emails for nurture sequences.

  • Build a public dashboard: Tools like Plausible or a simple Notion page showing your metrics in real time can become content itself, and a trust signal for potential users.

  • Layer in content repurposing: Turn your highest-converting build log category into long-form blog posts, YouTube walkthroughs, or newsletter content. Your data already tells you what resonates.

If you want to systematize the full growth engine beyond build-in-public, the tutorial on shipping a growth system in 7 days covers channel research, automated outreach, and performance tracking in a single sprint. Your build-in-public instrumentation slots directly into that framework as one measured channel among several.

Frequently Asked Questions

What is the build-in-public strategy for startups?

Build in public means sharing your product development process openly on social media and community platforms. For startups, it serves as both a transparency play and an acquisition channel. The key difference from general content marketing is that your product's evolution is the content. When instrumented properly with tracking links and conversion events, it becomes a measurable growth system rather than just a broadcasting habit.

How do I turn build-in-public followers into paying users?

The critical step most founders miss is attribution. Tag every link you share with UTM parameters, set up conversion events in GA4, and review weekly which post categories (ship updates, metrics, struggles) actually drive signups. Then double down on what converts and reframe what doesn't. One founder hit $18,000 in revenue by shifting posts from general builder audiences to their actual ideal customer profile.

Which platforms are best for building in public?

X (Twitter) remains the most active build-in-public community, but LinkedIn converts better for B2B SaaS products. Indie Hackers and specific subreddits work well for long-form recaps. The right answer depends on where your ICP spends time. Start with one platform, instrument it properly, and let your conversion data tell you whether to expand or stay focused.

When is the best time to post build-in-public updates?

For B2B SaaS audiences, weekday mornings between 8 and 10 AM in your target customer's timezone tend to perform best. Set your social media automation tool's timezone to match your ICP's location, not your own. After two weeks of tracked posts, your own data will reveal the optimal windows for your specific audience.

What types of content should I share when building in public?

Use five categories: Ship (features, fixes), Metric (revenue, user milestones), Struggle (failures, pivots), Lesson (tactical insights), and Ask (requests for feedback). Research suggests a roughly equal balance between wins and losses builds the most credibility. The crucial filter: frame every post for your target customer, not for other indie hackers.

How much time does a build-in-public system take daily?

After the initial 90-minute setup, plan for 15 to 20 minutes per day. Five minutes to identify what you shipped or learned, five minutes to write and tag the post, and five minutes to schedule and log it. A weekly 10-minute analytics review on Sundays closes the feedback loop. Automation tools handle distribution, so you're not manually cross-posting.

Sources

  1. https://support.google.com/analytics/answer/9304153

  2. https://ga-dev-tools.google/ga4/campaign-url-builder/

  3. https://buildinpublichub.substack.com/p/building-in-public-101

  4. https://support.google.com/tagmanager/answer/6102821

  5. https://support.google.com/analytics/answer/7201382

  6. https://www.youtube.com/watch?v=AKcAn8-s-cM

  7. https://www.reddit.com/r/SaaS/comments/1levhf2/building_in_public_isnt_a_good_idea_heres_my/

  8. https://heycatch.ai

  9. https://heycatch.ai/blog/increase-productivity-with-ai-build-a-solo-growth-system

  10. https://ff.co/startup-statistics-guide/

  11. https://heycatch.ai/blog/monetize-waitlist-silence-the-missing-layer

  12. https://app.bitly.com

  13. https://heycatch.ai/blog/7-pre-launch-moves-that-work-with-zero-audience

  14. https://heycatch.ai/blog/ai-agent-execution-ship-a-growth-system-in-7-days

You shipped a product.

Let's get it earning.

Join the waitlist. We'll send you a free audit within a few days, plus build updates and a locked-in pre-launch offer.

See a sample audit