Keitaro Tracker Review 2026: License, Server and the Google Ads Integration
You are paying for clicks in Google Ads, but the answer to “which campaign, ad and landing page actually made money” lives in three places that never talk to each other: the ads account, your analytics and the affiliate program. A Keitaro tracker sits exactly in that gap — it runs on your own server, records every click with its parameters, and stitches those clicks to conversions that come back through a postback. This review covers what the tracker genuinely does in 2026, how the license is tied to your server, what hardware you need, how the Google Ads integration works, where it hits hard limits, what the whole thing really costs, and when you should not buy it at all. Every number below comes from the official documentation; where the documentation is silent, this article says so instead of guessing.
What Keitaro is, and why a tracker is not analytics
Keitaro is self-hosted software. You buy a license, rent a server and install the tracker yourself rather than logging into somebody else’s cloud. That single design choice drives everything else: the raw click data stays on your machine, nothing is sampled or pre-aggregated for you, and report speed is limited only by hardware you control and pay for.
The unit of measurement is what separates a tracker from web analytics. GA4 counts sessions and events on a page and answers “what did this person do on the site”. A tracker counts clicks at the entrance of the funnel and answers “which source, ad, geo and device produced this specific click, and how did it end”. The two systems are complementary, not redundant, and the gap between their numbers is expected rather than broken — we unpacked that in the piece on the conversion discrepancy between Google Ads and GA4.
The second difference is direction. Analytics collects data to be read. A tracker also collects data to be sent back: it receives a postback from the affiliate program and pushes the conversion into the ads account so that automated bidding optimises on revenue instead of clicks. If that return path is new to you, start with the fundamentals in our guide to server-side tagging with sGTM — the mechanics of sending data back are the same.
The license: what it is bound to and what breaks when it expires
Understand this before you pay, because the licensing model is stricter than a cloud subscription. The documentation states that the key is bound to the tracker and used by only one tracker at a time, and that the license itself is bound to the server’s primary IP address. The vendor’s own formula is “one key — one server — one tracker”. Extra IP addresses on the server are not supported.
Moving house is possible. In your account area there is an Unlink button on the licenses page; after that you open the panel at the new address and enter the key again. The same procedure applies when your hosting provider changes the server IP for you — a routine event that nevertheless requires a manual action, which is worth remembering when you pick a provider.
Expiry is the part people underestimate. Per the documentation, the tracker stops working completely: redirects and traffic processing stop. That is not a downgrade to read-only mode, it is a halt of the live path your clicks travel through. A notice arrives seven days in advance, inside the tracker and by email. Your data survives — settings, campaigns and sites stay on the server and come back when you renew — but licenses left unrenewed for 360 days are deleted with no possibility of recovery.
Changing edition is free, via a Change edition button. On an upgrade the remaining validity period is automatically recalculated downwards instead of charging you extra; on a downgrade the period is not extended and money is not refunded, so stepping down only makes sense when the current license is about to end.
Server requirements for a Keitaro tracker you cannot talk your way around
Installation runs as a script on a clean server — clean meaning no hosting control panel. The documentation lists CentOS 9 Stream or CentOS 10 Stream, KVM virtualisation, 20 GB SSD or more and a 4 GB RAM minimum as mandatory, and states that the tracker does not support operation behind NAT. Installing on 2 GB and 1 CPU is technically possible, with the vendor’s own warning that performance issues may occur.
Hardware is chosen by daily click volume, not by company size. This is the table from the official docs:
| Clicks per day | Server type | RAM | CPU |
|---|---|---|---|
| under 100,000 | VPS | 4 GB | 2 |
| 100,000 – 500,000 | VPS | 8 GB | 4 |
| 500,000 – 1,000,000 | VPS/VDS | 16 GB | 4 |
| 1,000,000 – 5,000,000 | VDS | 32 GB | 4 |
| 5,000,000 – 10,000,000 | VDS | 64 GB | 8 |
Notice the shape of that table: below a million clicks it is memory that scales, not CPU count. That follows directly from what the software does — it writes and reads large volumes of similar records rather than performing heavy computation. In the Hetzner deployment guide the vendor adds that a shared CPU is fine up to one million clicks a day, above which you want dedicated, and names CX21 as the minimum applicable server.
One more practical note from the same guide: pick a location close to the target geo of your traffic, because the closer it is, the lower the ping. For a redirect-based tracker that is not cosmetic — it is part of your landing page speed, and therefore part of your conversion rate.
Installation: an evening’s work, step by step
- Rent a clean server with the right specs on CentOS 9 Stream, with no control panel installed.
- Connect over SSH or through the provider’s web terminal.
- Run the installer:
curl https://files.keitaro.io/scripts/releases/stable/kctl.sh | bash -s -- install - Wait for it to finish. On Hetzner, where the same command can be pasted into the Cloud configs field at creation time, the vendor asks you to wait around 30 minutes.
- Open
http://your_server_ip/adminand activate the key. - If something went wrong, the installation log lives at
/var/log/keitaro/install.log. - Attach a domain — HTTPS is required for the tracking script — and only then build your first campaign.
A warning worth repeating from the Hetzner guide: enabling the provider’s firewall function may block some of your target traffic. If clicks appear in Google Ads but not in the tracker, check that before you start rebuilding the campaign.
Google Ads integration: what it does and what it refuses to do
The integration is configured under Maintenance → Integrations → Google Ads with the Add account button. You sign in to your Google account and allow the Keitaro app to work with Google advertising data. The form has three fields: a free-form Name that does not affect anything, the Customer ID taken from the top right corner of the ads account and entered without hyphens, and a Google token that is substituted automatically and should not be replaced or edited.
You then pick which Keitaro campaigns receive cost data and configure Mapping — which tracker statuses and events correspond to which conversions in Google Ads. The campaign itself is built from the GoogleAds source template, and spend is distributed to the right campaign using the {campaignid} parameter from that template.
Now the numbers that reset expectations. Costs are updated in 12-hour intervals. Conversions are sent in 6-hour intervals, counted from the moment the tracker is installed. A conversion is only sent if the gclid parameter is present — no click identifier, no data going back. The vendor suggests verifying delivery in the S2S logs.
The operational consequence is simple: real-time ROI inside the tracker is a fiction, because spend lags by half a day. If you need same-hour numbers, the ads account remains the source of truth and the tracker owns history and the conversion return path. And since everything hinges on gclid surviving the trip, build your final URLs and tracking templates properly the first time — the detail is in our breakdown of GCLID, GBRAID and WBRAID in tracking templates.
The limitation that derails agency plans: the documentation states plainly that the integration does not work with MCC accounts. You connect each client account individually, not the manager. Two more requirements sit alongside it: the Google Ads profile must be verified, and if the logs show “Synchronization is not set in the campaign”, the campaign simply has not been added to the integration settings.
What the tracker covers and what stays with Google Ads and GA4
| Job to be done | Keitaro | Google Ads | GA4 |
|---|---|---|---|
| Raw log of every click with parameters | yes, on your server | no | no |
| Receiving affiliate postbacks | yes | no | no |
| Sending conversions back to the ad platform | yes, every 6 hours, gclid required | — | via account linking |
| Actual spend per campaign | pulled every 12 hours | source of truth | via data import |
| On-site behaviour and page funnel | no | partially | yes |
| Works with an MCC | no | yes | — |
| Feeding automated bidding | indirectly, through returned conversions | yes | no |
The table explains why a tracker replaces neither the ads account nor analytics: it slots in between them. If you are still choosing a tool, our overview of tracking in affiliate marketing, postbacks and server-side setups covers the cloud alternative — in practice the decision rarely comes down to features, and almost always to whether you are willing to run a server.
The tracking script instead of a redirect
The classic model is a redirect: the click lands on the tracker domain, the tracker decides, the user moves on. Keitaro also offers a second mode. The vendor describes the tracking script as one of the methods for tracking traffic and targeted actions on remote sites, which lets you connect the tracker to a landing page that is already live without rebuilding the route.
You take the code from the Tracking tab of the campaign and paste it into index.html or index.php between the <head> and </head> tags; the campaign domain must use HTTPS. The same code goes on the thank-you page. Conversions are reported with KTracking.reportConversion(payout, status, params, cb), where status is lead, sale or rejected and the optional parameters carry sub_id_1 through sub_id_30. A separate KTracking.update() call refreshes those sub_ids after the click, and KTracking.ready() returns the subid and token.
The documented limits deserve a read before you commit. The script does not support splitting landing pages or offers, the flow must contain offers for the scheme to work at all, and placing the script in a local offer creates duplicate clicks. Only the first visit is counted; to count non-unique clicks you need collectNonUniqueClicks: true or _new=1 in the link. If double counting sounds familiar, the logic matches what we described in the article on duplicate conversions and deduplication.
Keitaro 10: what changed and who should care
Version 10 is, above all, the move to ClickHouse — the vendor calls it full ClickHouse support and notes that migration is required. For high-volume accounts that, rather than any new button, is what decides report speed. The rest of the list: a native Geo DB, dashboard protection, Namecheap and Cloudflare integrations, enhanced IPv6 support, an audit log, more than 120 currencies, a dark theme and additional interface languages. Several of these are edition-gated — Geo DB and the dark theme from Starter, dashboard protection and the integrations from Expert, the audit log from Team.
Two notes on money and migration. Upgrading to Keitaro 10 is supported on all plans and does not require buying a new plan. Users on the legacy Basic, Pro and Business plans do not get the new features; the one thing available to them is switching to ClickHouse to speed up report generation. For anyone who has never used the tracker, the vendor mentions a free Keitaro 10 license key for two weeks — which is the sane way to test before buying.
What it actually costs: a napkin model
License prices change and are not in the documentation — they live on the pricing page, so quoting a figure from an article written months ago would be irresponsible. The cost structure, however, does not change with the tariff:
- The license — a recurring payment; the edition is chosen by the features you need, not by volume.
- The server — sized from the click table above; the second largest line and the only one that grows over time.
- Domains — the tracking domain needs HTTPS, and most teams run more than one.
- Administration — updates, backups, disk monitoring. Self-hosted means you are the on-call engineer.
- Implementation time — flows, postbacks and status mapping, plus a week of reconciling numbers.
The sanity check is blunt. If the monthly cost of that stack is lower than the money you currently waste on blind decisions, the tracker pays for itself. For an account with two or three campaigns and a single offer it usually does not, and the ads account plus analytics will do. For a sense of how to quantify “money wasted blind”, see our guide to offline conversion import in Google Ads, which solves the same return-path problem without a server of your own.
What the documentation does not tell you
An honest review also lists the questions the primary source leaves open. At the time of writing, the pages we read do not state:
- Which components the installer actually puts on the server — the script handles everything, but the stack is not enumerated.
- Which ports are used, beyond the
/adminpanel address. - The mechanism and payload format used to send conversions to Google Ads; only the 6-hour interval and the
gclidrequirement are documented. - The exact macro names for passing
gclidinto the tracking template — the text shows them only in screenshots. - Where
gclidis stored inside the tracker, beyond being visible in the clicks log. - Retry logic and any limits on the number of conversions or cost records.
- Server requirements specific to the tracking script.
- OS requirements for version 10 — the FAQ page does not list them.
None of this is a reason to avoid the product. All of it is a reason to budget time for testing and to stop short of promising a client precision the vendor never claimed.
The line this blog does not cross
Every tracker has filters and routing rules — by geo, device, source, frequency. That is a legitimate toolkit: send mobile traffic to a mobile landing page, cut a geo where you have no offer, pause a flow that has burned its budget. The same mechanism can also be used to show Google’s reviewers one page and users another. That breaks Google Ads policy, ends in suspension and harms the people who click your ads, and you will not find instructions for it here.
There is a practical side to this too. The vendor’s suggestion to disable tracking cookies is about the method of identification, not about hiding content: cookies are neither the only nor the most durable carrier of a click identifier, and dropping them avoids a class of problems in browsers that restrict them. If you work in a regulated vertical, the honest route in 2026 is certification and verification, not evading review. The infrastructure half of that problem is what our services section and our material on Google Ads agency accounts are about.
A seven-day rollout checklist
- Day 1. Pick the edition and size the server from the click table. Confirm the provider offers KVM and does not reassign IPs at will.
- Day 2. Run the installer, activate the key, attach an HTTPS domain, take the first backup.
- Day 3. Create a campaign from the GoogleAds source template, build the link and drop it into the campaign tracking template.
- Day 4. Connect the integration: Customer ID without hyphens, campaign selection, status mapping. Confirm the Google Ads profile is verified.
- Day 5. Wire up the affiliate postback, fire a test conversion and find it in the S2S log.
- Day 6. Reconcile: tracker clicks against account clicks, tracker conversions against account conversions. A few percent of drift is normal; a multiple means you are losing
gclidsomewhere. - Day 7. Freeze a naming convention for flows, offers and sub_ids. Without one your reports turn to mush within a month — the practice is described in our piece on UTM tagging and naming conventions.
Five mistakes that cost weeks
- Expecting real-time data. Spend refreshes every 12 hours and conversions go out every 6. That is the design, not a bug in your setup.
- Trying to connect an MCC. The integration does not support manager accounts; each client account is connected on its own.
- Putting the tracking script in a local offer. You get duplicate clicks and then spend a week wondering why the numbers look inflated.
- Saving money on RAM. A 2 GB box will boot, but the vendor itself warns about performance, and a slow redirect is lost clicks.
- Forgetting the renewal date. Expiry stops redirects and traffic processing entirely, not just reporting.
A tracker does not make campaigns profitable. It makes decisions verifiable: you stop arguing about what works and start reading the log. Everything else follows from that.
FAQ
What is a Keitaro tracker in plain terms?
It is software you install on your own server. It receives a click, records its parameters, routes the visitor to the right landing page or offer, and later ties that click to the conversion that comes back through a postback.
What is the Keitaro license bound to?
The server’s primary IP address. The rule is one key, one server, one tracker, and extra IP addresses on the server are not supported. You can rebind the key yourself with the Unlink button in your account area.
What happens when the license expires?
The tracker stops working completely: redirects and traffic processing stop. Data stays on the server and returns when you renew, but licenses left unrenewed for 360 days are deleted with no possibility of recovery. A notice arrives seven days ahead.
What server do I need to run Keitaro?
A clean server with no control panel, CentOS 9 or 10 Stream, KVM virtualisation, 20 GB SSD or more and at least 4 GB of RAM. Beyond that, size by daily clicks: 4 GB under 100,000, 8 GB under 500,000, 16 GB under a million. Operation behind NAT is not supported.
Does the Google Ads integration work with an MCC account?
No. The documentation states that the integration does not work with MCC accounts. Each client account is connected separately and needs a verified Google Ads profile.
How often does Keitaro send conversions to Google Ads?
Every six hours, counted from the moment the tracker is installed. Cost data is pulled from the ads account every twelve hours. A conversion is only sent when the gclid parameter is present, and delivery can be checked in the S2S logs.
Can I skip the redirect and use only the script?
Yes, that is what the tracking script is for: the code goes into the head of the page and the campaign domain must use HTTPS. It does not support splitting landing pages or offers, and placing it in a local offer creates duplicate clicks.
How is Keitaro different from cloud trackers?
You administer the server yourself: the data sits with you, speed depends on your hardware, and updates and backups are your responsibility. Cloud tools remove those chores but give you less control over raw data.
What is new in Keitaro 10?
Primarily full ClickHouse support, which requires migration. Also a native Geo DB, dashboard protection, Namecheap and Cloudflare integrations, enhanced IPv6 support, an audit log, more than 120 currencies and a dark theme. Some of these are available only from certain editions.
Is there a free trial?
The vendor mentions a free Keitaro 10 license key valid for two weeks for people who have not used the tracker before. That is the sensible way to test integration and report speed on your own volumes before buying.
Will a tracker replace GA4?
No. A tracker counts clicks at the entrance of the funnel and returns conversions; analytics measures behaviour on the site. They use different units, and the gap between them is expected rather than a configuration error.
Does a small advertiser need a tracker at all?
Usually not. With a handful of campaigns, one website and conversions captured by a tag, the ads account and GA4 are enough. A tracker earns its place when you run several sources, external offers and make decisions from raw logs.
Primary sources: the Keitaro license documentation, the installation guide and the Google Ads integration page. Our running list of networks and tools media buyers work with lives in the affiliate programs section.