top of page

From Client-Side Chaos to Server-Side Clarity: How Buffer Rebuilt Our Marketing Analytics Stack

Updated: Aug 26

ree

"We couldn't answer simple questions like where our best users came from."


That was the wake-up call that greeted me when I stepped into the role of Director of Growth at Buffer.


The team had built our growth efforts on the typical foundation for most startups: third-party, client-side tools like Google Analytics. These tools are convenient, especially early on, but over time, they will start to limit a team’s ability to scale their marketing motions predictably.


As a product-led company, the gap between our marketing insights and actual user behaviour was too wide. If you’ve worked in PLG then you know that this gap can hinder even the best teams from creating feedback loops into marketing that drive informed decisions based on real, downstream user data.


So like most small teams, we faced a problem: We needed better top-funnel data. Data we could trust, own, and act on.


This blog post aims to cover how our team at Buffer transitioned our marketing analytics stack to a server-side model, what we learned along the way, and how you can start making the same shift without a huge engineering lift.


Why marketing data deserves first-class status

Product-led companies need a clear understanding of the full user journey to grow sustainably. From the moment a person discovers your brand to the day they become an activated user, every interaction matters. When marketing data sits in a silo, disconnected from product analytics, teams lose the ability to see how acquisition efforts influence downstream outcomes. This gap weakens feedback loops and makes it harder to scale growth intelligently.


At Buffer, we started treating marketing data with the same rigour as product data so we could more confidently invest in scaling our acquisition motions. That meant:


  • Capturing everything ourselves, with server-side systems powered by a CDP (in our case this was Segment).

  • Modeling user behaviour in our own data warehouse and stitching top-funnel actions with product engagement metrics.

  • Owning and making opinionated decisions about attribution logic instead of outsourcing it to tools like GA4.


The end result was bringing our marketing data into the same infrastructure and governance as our product data, a concept echoed in Hacking Growth by Sean Ellis and Morgan Brown (one of my personal faves). These guys are growth legends and, in a big portion of their teachings, they emphasize the importance of integrating marketing and product analytics to create continuous feedback loops that drive sustainable growth.


Applying that principle to Buffer fundamentally changed how we operate.


Why does this shift matter so much?


Because without connecting the dots between acquisition and engagement performance, you’re left guessing. You’re running paid campaigns in the dark. You’re investing in content without knowing what actually leads to active usage and conversions.


And worst of all, your growth team lacks the insight to drive their strategy and double down on what matters.


Rebuilding our stack: how we did it

This wasn't just about replacing one tool with another. We needed our new server-side system to integrate seamlessly with Buffer’s broader martech stack, including our ad platforms, automation tools, and internal data infrastructure. Our goal was to create a unified ecosystem where marketing data flowed directly into our warehouse and could be activated across platforms.


The backbone of this system was already in place: BigQuery as our data warehouse, dbt for transformation, and Segment as our customer data platform (CDP). But we had to extend its scope to support marketing-specific workflows. That meant:


  • Integrating with ad platforms like Google and Meta to ingest click IDs (e.g., GCLIDs, FBCLIDs) and return conversion events via conversion APIs and reverse ETL jobs, powered by Hightouch.

  • Building automated syncs with Customer.io to enrich customer profiles with behavioural, financial, and acquisition data, powering personalized messaging.

  • Defining clear data contracts across marketing and product to ensure consistent identifiers and event naming, which enabled accurate session stitching and attribution.


This approach allowed us to go beyond website traffic and connect marketing touchpoints with the rest of the user journey. It also ensured that our stack remained scalable, cost-aware, and aligned with our internal governance.


A quick cheatsheet to assess the trade-offs of client-side vs. server-side tracking
A quick cheatsheet to assess the trade-offs of client-side vs. server-side tracking

Once we aligned on the need to own and model our top-funnel data, we broke the work into a few core components. Each part of the stack was designed to give us more control and clarity, so we could answer core questions about user acquisition and act on the insights with confidence.


Modelling sessions: reconstructing the user journey

Sessions are the foundation of top-funnel analytics, but most tools define them behind the scenes. We built our own session model in dbt, using Segment events as the raw input.


In our model, any series of events within 30 minutes became a single session.

Each session included:


  • Entry and exit pages

  • Referrer domain

  • UTM parameters

  • Event timestamps and types

  • Eventually, additional identifier properties like gclid and refid


Why go to all this trouble? Because sessions are more than a bundle of clicks, they represent intent. They tell you how people find you, what content they engage with, and how they convert. When modelled well, they open up the doors to answer critical questions, like:


  • What content drives the most high-converting sessions?

  • Where are users bouncing, and why?

  • Which touchpoints precede signups?

  • What happens after a visitor converts and engages with the product?


By reconstructing sessions ourselves, we unlocked new layers of insight that simply weren’t possible with Google Analytics.


Attribution: bringing order to the chaos

The real value of attribution isn’t about assigning credit to a team; it's the feedback loop that allows us to focus our efforts on what’s working. We needed a model that told us which channels, campaigns, and content experiences played a role in driving the acquisition motion, as well as the downstream leverage those investments provide.


We started off simple: with first and last-touch attribution using the referrer field from Segment’s Page event spec. Our logic parsed these URLs and bucketed them into defined marketing channels: Organic Search, Paid Search, Social, Email, Referrers, Direct, and more. These cohorts have evolved, with optimizations made to improve their accuracy and new channel groupings added based on findings from our analyses.


A simple example of how referrer values can be categorized into attribution cohorts
A simple example of how referrer values can be categorized into attribution cohorts

While single-touch isn’t perfect, it provided a consistent, explainable foundation. Marketers have spent years debating the perfect ways to solve attribution, and honestly, sometimes the fastest path to value is just getting something in place, sticking with it, and evolving it as more information reveals itself. Eventually, we plan to support multi-touch models, but starting simple helped drive adoption and trust across the team.


This attribution methodology not only give us visibility into the performance of our marketing efforts, but allows us to follow each cohort performance more deeply across critical product engagement and monetization metrics (like activation, shown below).


Server-side instrumentation makes views like this possible
Server-side instrumentation makes views like this possible

Google, Meta, and beyond: Closing the loop across the stack

While we were building the foundations of our server-side data stack, we were also investing heavily in performance marketing and lifecycle engagement. To make those investments effective, we needed to go beyond basic pageview tracking and ensure our platforms received high-quality, server-side conversion and engagement data.


Google and Meta Ads offer Conversion API integrations, and we took full advantage. We started capturing GCLIDs and FBCLIDs during signup events and used Hightouch to sync those values back to each platform. As our investments grew, we optimized sync frequency and data granularity, ultimately turning these connections into critical levers for optimization.


We also leveraged Segment’s native integrations with Meta and Google Ads Conversion APIs to push real signup and customer event data directly into their optimization systems. This not only gave our campaigns more accurate signals to optimize toward but also powered stronger audience segmentation and exclusion filtering.


But performance marketing was only half the story. We also needed our lifecycle messaging to adapt to users' behaviour and value. That’s where our Customer.io setup came into play.


Through Segment and Hightouch, we pushed product usage data, financial data (e.g., plan upgrades), and acquisition source information into Customer.io. This allowed our lifecycle and retention programs to:


  • Trigger personalized onboarding sequences based on initial behaviour

  • Adjust messaging dynamically based on usage patterns or milestones

  • Segment users into cohorts based on acquisition source or plan type


What we built wasn’t just a reporting solution; it was a living system that made our marketing tools smarter. Each growth channel could now execute on real behavioural data. Making this shift was instantly a huge unlock:


  • We optimized for true business outcomes like signups and activations, no longer just vanity metrics

  • We were faster and more accurate in our analysis of performance across both acquisition and lifecycle journeys

  • We reduced customer acquisition and retention costs through better automation and targeting


Before, we were reacting. Now, we’re orchestrating with the system to back it up.


High-level view of the data workflow that guided our implementation
High-level view of the data workflow that guided our implementation

What you can do today

You don’t need a full data team to start, but it is incredibly helpful to move things forward. I was lucky enough to be able to work with our Senior Data Scientist, Julian Winternheimer to execute on this vision. Here are a few tactical steps you can take:


1. Audit your current setup. Where is your marketing data being captured, stored, and analyzed? What parts of the funnel are invisible? What are you outsourcing to third-party platforms?


2. Start advocating: You’ll likely need to make the business case for investing in a data layer for marketing, and extending the very real costs associated with greater data consumption. You can lean on some of the benefits I shared above, but be sure to make things relevant for the context of your product and team.


2. Start modelling sessions. Use Segment (or your CDP) to send event data to a warehouse like BigQuery or Snowflake. Then, use dbt to group events into sessions. A 30-minute timeout rule is a good place to start.


3. Define your attribution logic. Even a simple referrer-based, first-touch model can provide huge value. Choose consistency over complexity.


4. Close the loop. Use a reverse ETL tool like Hightouch to send conversion data back to platforms like Google Ads. This improves campaign performance and makes your paid spend smarter.


5. Evangelize internally. Show your team what’s possible. Share dashboards. Run side-by-side comparisons with legacy tools. Build trust by highlighting quick wins.


Final thoughts: data as your path to growth

Marketing data is not just about pageviews and bounce rates. It’s about understanding the full context of your users, so you can serve them better across their lifecycle.


Start treating your marketing data like product data. Give it the infrastructure it deserves and you’ll be amazed at what becomes possible.


The best part? It’s not as hard as you think. You don’t need a massive team. Just a clear intent, a few good tools, and the willingness to rethink what data means for your business.


Ready to rebuild your stack? Start with sessions. Then own your attribution. Then close the loop. You’ll never look at GA4 the same way again.

Comments


I sometimes send newsletters
bottom of page