Back to Blog
Comparison·9 min read

BATracker vs Keitaro: Cloud vs Self-Hosted Ad Tracker (2026)

Keitaro is a powerful, well-established self-hosted tracker with a loyal following. BATracker gives you a fully-managed cloud on a modern Node.js + ClickHouse stack — and still lets you self-host. Here's an honest, side-by-side look so you can pick the right tool.

1. The Short Version

Both BATracker and Keitaro are serious tools for performance marketers and media buyers. The historical difference has been philosophical: Keitaro is built to be self-hosted — you run the PHP application on your own server and own the whole stack — while BATracker is cloud-native, delivering a fully-managed service with zero server administration.

The headline: with BATracker you don't have to choose between cloud convenience and control. The default is a managed cloud on a modern Node.js + ClickHouse stack — but BATracker also offers an optional self-hosted deployment. If self-hosting is why you looked at Keitaro, you can have that with BATracker too, plus everything the cloud gives you.

2. What Keitaro Does Well

Let's be fair: Keitaro earned its reputation. It is a mature, feature-rich, license-based tracker that has been a mainstay in the affiliate world for years, and there are good reasons people run it:

  • Full control of your infrastructure. Because it's self-hosted, you decide where it lives, how it's configured, and who touches your data.
  • Data ownership. Your click and conversion data sits on your own server, which appeals to teams with strict data-residency or compliance requirements.
  • A license model with no per-event billing surprises. You pay for the software and run it on hardware you choose.
  • A large, established community. Years of guides, forum threads, and shared configurations exist.

If running your own server is genuinely what you want, Keitaro is a legitimate, capable choice. The trade-off is that you are the operations team: provisioning, patching, database tuning, SSL renewal, scaling, and uptime are all on you.

3. Cloud vs Self-Hosted — The Real Trade-off

Self-hosting gives you control, but it hands you a second job. Here's what each model actually asks of you day-to-day:

Self-Hosted (Keitaro model)

  • • You provision and pay for the server.
  • • You patch the OS and the application.
  • • You tune and back up the database.
  • • You handle SSL certificates and renewals.
  • • You scale hardware as traffic grows.
  • • You own uptime and incident response.

Managed Cloud (BATracker default)

  • • Zero server administration.
  • • No OS or app patching on your side.
  • • No database tuning or manual backups.
  • • Automatic, auto-renewing SSL for your domain.
  • • Scales with the platform, not your hardware.
  • • Sub-10ms redirects, no cold starts.

The nuance most comparisons miss: this isn't a permanent fork in the road. BATracker offers an optional self-hosted deployment as well. So the control that draws people to Keitaro is still available — you simply get the managed cloud as the easy default.

4. The BATracker Stack: Node.js + ClickHouse

Under the hood, BATracker runs a modern architecture built for real-time performance marketing at scale:

  • Fastify (Node.js) tracker — a lightweight, high-throughput redirect engine. BATracker markets sub-10ms redirects with no cold starts.
  • ClickHouse — a columnar database purpose-built for real-time analytics over huge event volumes, so multi-dimensional reports stay fast as you scale.
  • Redis — caches click data for fast postback lookups and buffers click writes with a crash-safety backup so clicks aren't lost on restart.
  • PostgreSQL for configuration and BullMQ for the job queue that processes conversions reliably.

That last point matters. Conversions run through a BullMQ queue with three retry attempts and exponential backoff, and every conversion gets a deterministic conversion ID — so a retry produces the same ID and can never create a duplicate row. The conversion is written to ClickHouse before side effects like postbacks and pixels fire, meaning even if a downstream delivery fails, the conversion itself is already safely recorded. Transaction-ID dedup and per-event-type dedup round out a pipeline designed so you don't lose or double-count data.

On top of that, click writes are batched to ClickHouse roughly every two seconds with the Redis backup, and reporting is fully real-time: campaign, offer, lander, traffic source, country, device, OS, browser, day, hour, and sub1–sub20 dimensions, all with visits, conversions, CR, revenue, cost, profit, ROI, EPC, CPC, CPA, and CSV export.

5. Server-Side Meta CAPI + TikTok with Dedup

Server-side conversion tracking is no longer optional in 2026 — ad blockers, ITP, and cookie restrictions eat browser-only pixels alive. BATracker ships native, server-side integrations for the two platforms that matter most to media buyers:

Meta Conversions API

Server-side events posted to the Graph API. Event names are mapped (sale/conversion → Purchase, lead → Lead, registration → CompleteRegistration, and more), with hashed user data (email, phone, external_id, geo) and fbc built from the fbclid. Access tokens are stored encrypted with AES-256-GCM.

TikTok Events API

Server-side events posted to the TikTok Business API. Mapped events (sale → CompletePayment, lead → SubmitForm, registration → CompleteRegistration, install → Download), hashed user data, and ttclid passthrough for accurate attribution.

The dedup that makes it reliable

BATracker sends the same event_id — the deterministic conversion ID — on the server-side event that the browser pixel also uses. Meta and TikTok automatically deduplicate the browser and server events, so you get the reliability of server-side tracking without double-counting conversions.

It goes further than a single pixel. A campaign can attach many pixels, each with its own platform event. And with custom conversions, you can map a postback event (say ?event=AddToCart) to a specific platform event on a specific pixel — so one funnel can fire a primary Purchase pixel and several custom event pixels. Pixel fires run in parallel, so one platform failing never blocks the others, and every fire is logged with platform, event name, full payload, HTTP status, and response for auditing.

6. Auto-SSL Custom Domains

Every BATracker workspace uses its own bring-your-own tracking domain — never a shared one. You add your domain, drop in a CNAME and a TXT record, and SSL is provisioned automatically through Cloudflare for SaaS: managed and auto-renewing. That means professional tracking URLs, better deliverability, and staying off shared blocklists — with none of the manual certificate wrangling that self-hosting typically involves. On a self-hosted PHP box, SSL setup and renewal are your responsibility; here it's handled for you.

7. Feature Comparison Table

A high-level, honest comparison of how the two approaches line up:

CapabilityBATrackerKeitaro
Deployment modelManaged cloud (default) + optional self-hostedSelf-hosted
Server administrationZero (on cloud)Yours to manage
Core stackNode.js (Fastify) + ClickHouse + Redis + PostgreSQLPHP
Analytics engineClickHouse, real-time columnarSelf-hosted database
Server-side Meta CAPINative, with event_id dedupVaries by setup
Server-side TikTok EventsNative, with event_id dedupVaries by setup
Custom conversions / multi-pixelYes, mapped per pixelVaries by setup
S2S postbacks (click-ID based)Yes, ad-blocker immuneYes
Flows & weighted rotationYes (SIMPLE / MULTI_PATH / RULE_BASED)Yes
Traffic filtering & bot detectionExtensive filter dimensions + UA / datacenter / proxy detectionYes
Custom domains + SSLAuto-SSL via Cloudflare for SaaSManual setup / renewal
Setup effort to first clickSign up, add domain, goProvision + install + configure server

Keitaro entries are described at a high level; exact capabilities depend on your version and configuration. This table reflects how the two deployment philosophies compare, not fabricated specifics.

8. Which Should You Choose?

Here's the honest guidance:

Choose Keitaro if…

You specifically want to run your own PHP server, you have the operations skills (or team) to manage it, and full hands-on infrastructure ownership is a hard requirement. It's a proven, capable tracker for that use case.

Choose BATracker if…

You want the media-buying feature depth without becoming a systems administrator — real-time ClickHouse analytics, sub-10ms redirects, native server-side Meta CAPI + TikTok with event_id dedup, custom conversions and multi-pixel funnels, comprehensive traffic filtering and bot detection, flows with weighted rotation, and auto-SSL custom domains. And because BATracker also offers self-hosting, you keep the control option too. That's the whole point: cloud convenience or self-hosted control — your call, one platform.

The old assumption was that you had to trade convenience for control or control for convenience. BATracker breaks that trade-off. Start on the managed cloud today, and keep the door open to self-hosting whenever it suits you.

9. Frequently Asked Questions

What is the difference between BATracker and Keitaro?
Keitaro is a self-hosted PHP ad tracker that you install and run on your own server, giving you full control over your infrastructure. BATracker is cloud-native by default (fully managed, zero server administration) but also offers an optional self-hosted deployment. BATracker runs on a modern stack — a Fastify (Node.js) tracker with ClickHouse for real-time columnar analytics, Redis for caching and click buffering, and PostgreSQL for configuration — and ships with server-side Meta Conversions API and TikTok Events API integrations, custom conversions, and auto-SSL custom domains via Cloudflare for SaaS. The key difference: with BATracker you do not have to choose between cloud convenience and control — you can have either.
Do I need to manage a server to use BATracker?
No. BATracker’s cloud option is fully managed, which means zero server administration — no PHP, no database tuning, no SSL renewal, no OS patching, and no scaling headaches. You add your own tracking domain, point a CNAME and TXT record at it, and SSL is provisioned automatically through Cloudflare for SaaS. If you specifically want to run the tracker on your own infrastructure, BATracker also offers a self-hosted deployment. Keitaro, by contrast, is designed to be self-hosted, so you are responsible for provisioning and maintaining the server yourself.
Does BATracker support server-side conversion tracking for Meta and TikTok?
Yes, natively. BATracker fires the Meta Conversions API (server-side) to graph.facebook.com and the TikTok Events API (server-side) to business-api.tiktok.com. Both send a deterministic event_id — the same conversion ID used by the browser pixel — so Meta and TikTok automatically deduplicate the browser and server events. You get the reliability of server-side tracking without double-counting. Access tokens are stored encrypted (AES-256-GCM) and decrypted only at send time, and every pixel fire is logged with the full payload, HTTP status, and response for auditing.
Is BATracker’s analytics fast at scale?
Yes. BATracker stores click and conversion events in ClickHouse, a columnar database purpose-built for real-time analytics over large datasets. Reports aggregate across dimensions like campaign, offer, lander, traffic source, country, device, OS, browser, day, hour, and sub IDs — computing visits, conversions, CR, revenue, cost, profit, ROI, EPC, CPC, and CPA. Click writes are buffered in memory and flushed to ClickHouse in batches roughly every two seconds, with a Redis crash-safety backup so nothing is lost on restart, and BATracker markets sub-10ms redirects with no cold starts.
Can I still self-host if I choose BATracker?
Yes. While most users pick the managed cloud for its convenience, BATracker also offers an optional self-hosted deployment for teams that want to run the tracker on their own infrastructure — for data-residency, compliance, or control reasons. That is the core advantage over cloud-only tools: with BATracker you keep the option to self-host like Keitaro, but you also get a fully-managed cloud path if and when you want it. You are not locked into one model.

Cloud Convenience or Self-Hosted Control — You Choose

Get real-time ClickHouse analytics, sub-10ms redirects, native server-side Meta CAPI + TikTok with event_id dedup, custom conversions, and auto-SSL custom domains — on a fully-managed cloud that can also be self-hosted.

Start Your Free Trial