2
1 Comment

Killing my nightly data pipeline made the product better AND cheaper. Here's the rebrand story.

Eight years as CampaignTracker, then a ground-up rewrite, a new stack, and a new name. The honest version, including the cohort numbers that triggered it.

I rebuilt my whole SaaS and renamed it. Here's the honest version of why.

For eight years I ran a product called CampaignTracker. Last month I shut most of it down, moved everyone onto a ground-up rewrite, and relaunched it as Attri. (attri.io) New name, new stack, new pricing, basically a new company wearing the old one's customer list.

This is the part nobody tells you about rebrands: it's rarely a marketing decision. Mine started as an engineering problem and the name was the last thing to change, not the first.

The backstory

CampaignTracker did one thing: you'd make a short link, share it, and we'd tell you which campaigns drove clicks and conversions. Classic UTM-tracking, link-attribution stuff. It worked. People paid for it.

The stack was Laravel, PHP + Javascript, an AWS Lambda tracking service in the middle, and a nightly pipeline that queried Athena and dumped aggregates into MySQL for the dashboard to read. It was fine. It was also like a Rube Goldberg machine that I was increasingly afraid to touch.

Two things were quietly true that I didn't want to say out loud:

  1. The product had outgrown its name. Customers weren't "tracking campaigns" anymore. They were attributing revenue across journeys, custom domains, multiple touchpoints. The name described the 2019 version of the product.
  2. The economics were meh under the hood. A nightly Athena-to-MySQL aggregation pipeline is not how you run sub-second analytics in 2026, and the per-query costs scaled in the wrong direction.

The realization that actually triggered it

Here's the uncomfortable number. When I sat down and did a real cohort audit, I had ~1,250 free accounts eating up a lot of cpu and storage.

That stat could read two ways. The doom read: "this isn't a scalable business." The real read, the one I went with: almost none of my infrastructure cost or complexity was actually serving the people paying me. I was running an enterprise-grade nightly data pipeline to give 1,250 free users dashboards they checked once a quarter.

That reframed the whole thing. The rebuild wasn't about chasing scale. It was about making the cost of serving a customer match what that customer was worth, and making the product good enough that the free-to-paid wall actually meant something.

The decision: rewrite, don't refactor

I went back and forth on this for weeks. Refactoring the Laravel app would've been safer. But the problems were structural, not cosmetic, the data layer, the redirect path, the analytics engine all needed to change, and at that point a refactor is just a rewrite you're lying to yourself about.

The new stack:
Next.js, redirect engine at edge, managed Clickhouse for analytics, Postgres for everything else.

The single biggest win wasn't any one piece. It was deleting the nightly batch job. Going from "your numbers updated overnight" to "your numbers update now" changed how the product feels, and it dropped my analytics cost structure at the same time. That almost never happens, better UX and cheaper usually pull against each other.

The messy middle nobody screenshots

Rebranding while migrating live customers is two hard projects pretending to be one.

  • Custom domains were the scary part. Some customers run their short links on their own domains (BYOD). Migrating those means SSL provisioning, DNS cutover, and a window where if you screw up, their links 404 and it's their brand that looks broken, not yours. I pre-staged everything, did the paying accounts one at a time, by hand, and watched each one.
  • Passwordless accounts broke in fun ways. A chunk of legacy users had no password set. Standard sign-in just... didn't apply to them. I had to ship a temporary migration hint to get them in without making it permanent cruft.
  • The free tier got a different deal. I couldn't justify carrying 1,250 free accounts onto the new infra untouched. So free lost some link caps and data retention, but kept the core tracking. Fair beats generous-then-resentful.

The whole migration took longer than I told myself it would. The rename was the easy 5%.

What I'd tell past me

  • A rebrand is a trailing indicator. If you're "thinking about renaming," the real signal is that your product already changed and the name is just the last thing to catch up. Don't start with the logo.
  • Audit who actually pays you before you optimize anything. That one cohort query reframed my entire roadmap. I'd been building for a crowd that was never going to convert.
  • Cheaper and better can be the same decision. Look for the piece of architecture that's costing you money AND degrading UX. Killing my batch pipeline was both. Those are the highest-leverage rewrites.
  • Migrate paying customers with care. I could afford to treat each like it mattered, because it did.

Where it is now

Everyone's migrated. Attri is the live product, real-time analytics, edge redirects, custom domains, retargeting pixels, the works. CampaignTracker is in read-only sunset, redirecting to the new domain.

Is it a runaway success? Not yet. The paid base is still smaller than the free top-of-funnel, and the actual work now is turning the second number into the first. But for the first time the product, the name, and the cost structure all point the same direction.

The question I'd genuinely love this community's take on: when you've got a huge free cohort compared to paid, do you make free worse to force the decision, or make paid so good the upgrade is obvious? I leaned toward the second. Curious how others have played it.

on June 30, 2026
  1. 1

    The cohort audit feels like the turning point here. It's easy to optimize for the largest group of users, but not necessarily the group shaping the business. Once you realized most of the complexity existed for people who weren't funding it, the architecture, pricing, and even the positioning all started pointing in the same direction. That's a much deeper insight than the rebrand itself.

Trending on Indie Hackers
I Was Picking the Wrong SaaS Tools for Two Years. Here's the Mistake I Finally Figured Out. User Avatar 120 comments Drop your landing page URL. I'll use Ferguson to tell you why visitors might be leaving User Avatar 101 comments I sold $6,773 in 2 weeks, with almost no existing community. User Avatar 42 comments Ferguson is LIVE on ProductHunt today... so I audited their homepage first! User Avatar 35 comments Why Remote Teams Stop Talking (And Don't Even Notice It) User Avatar 26 comments Built a local-first Amazon profit-by-SKU + QuickBooks/Xero journal tool. Looking for founding users. User Avatar 24 comments