Back to blog
February 15, 202610 min read

Building CleverDrip: From Zero to 1M+ Tracked Conversions

How I built a performance marketing SaaS from scratch. The architecture decisions, scaling challenges, and what I learned shipping a real product that businesses depend on every day.

SaaSNode.jsMarTechArchitecture

The Problem

Performance marketing is a world of affiliate networks, conversion tracking, and real-time attribution. Businesses pay publishers to drive clicks, and they need to know exactly which click led to which conversion, in real time, across millions of events.

The existing tools were either enterprise-priced (way beyond what small to mid-sized businesses could afford) or unreliable at scale. I saw a gap: a platform that was powerful enough for serious marketers but simple enough to set up in an afternoon.

Starting from Scratch

CleverDrip started as a weekend project in late 2021. The first version was a Node.js backend, a React dashboard, and a MongoDB database. Nothing fancy, just enough to track clicks, attribute conversions, and show basic reports.

The earliest challenge was click tracking at volume. Every ad click needs to be captured, attributed, and stored fast enough that the redirect doesn't add noticeable latency. We needed sub-50ms response times on the tracking endpoint, which meant aggressive caching with Redis and async processing for everything that didn't need to happen synchronously.

Architecture Decisions That Mattered

Three early decisions shaped everything:

  1. Multi-tenant from day one. Every customer gets their own namespace, but shares infrastructure. This kept costs low early on while allowing white-label customization (custom domains, branding, reports) that enterprise clients expect.
  2. Event-driven conversion tracking. Instead of polling for conversions, we built a postback and pixel system that fires events in real-time. This meant we could show advertisers their campaign performance as it happens, not hours later.
  3. Fraud detection as a first-class feature. Invalid traffic is the biggest headache in affiliate marketing. We built pattern detection early, analyzing click timing, IP clustering, device fingerprints, and it became one of our strongest selling points, reducing fraud by 60% for our clients.

Scaling Challenges

The first real crisis came around 1M clicks/month. MongoDB writes started bottlenecking during traffic spikes (campaign launches generate bursty, unpredictable load). The solution was a write buffer. Click events go into Redis first, then batch-insert into MongoDB every few seconds. This smoothed out the spikes and dropped p95 latency from 200ms back to under 30ms.

The second challenge was reporting. Running aggregation queries across millions of click records in real-time is expensive. We added pre-computed rollup tables, hourly and daily summaries calculated in background jobs, so dashboard queries hit small, indexed summary documents instead of scanning raw events.

What I Got Wrong

Over-engineering the billing system. I spent two weeks building a complex usage-based billing engine before we had paying customers. A simple Stripe subscription with manual upgrades would have been fine for the first year. I was solving problems that didn't exist yet.

Underestimating onboarding. The dashboard was powerful but not self-explanatory. Early users needed hand-holding to set up their first campaign. We eventually added guided onboarding flows and templates, which cut support requests by half.

Not investing in monitoring early enough. For the first six months, “monitoring” was me checking logs manually. When a tracking endpoint went down at 2am and I didn't notice until morning, I learned the hard way that uptime monitoring is not optional for a tracking platform.

Where We Are Now

  • 1M+ conversions tracked across all clients
  • 100M+ clicks processed through the tracking system
  • 1,000+ active users on the platform
  • 99.9% uptime over the last 12 months
  • 60% fraud reduction for clients using our detection system

What I Learned

Building CleverDrip taught me that product engineering is fundamentally different from feature engineering. When you own the product, every architecture decision is also a business decision. The question isn't “what's the most elegant solution?” It's “what ships this week and doesn't break next month?”

The most valuable skill I developed wasn't technical - it was learning to build just enough. Not the perfect system, not the clever abstraction. The thing that works, that users can understand, that I can maintain alone at 2am if I need to.