This post is an operational playbook: how we move a customer from Keitaro to TDS.SO so they don't lose a single click or conversion. The "24 hours" figure isn't marketing - it's a real SLA our migration manager holds. Below we break down the full process: what the manager does, what you do, where the risk zones are, and how we handle them.
We move domains, campaigns, flows and postbacks within one business day. The manager drives the process in Telegram. Click ID is preserved - affiliate stats stay consistent. After migration you keep working as usual, just in a new panel.
Why exactly 24 hours
Longer means two weeks of "double bookkeeping" where some traffic flows through the old system and some through the new, with things breaking in both places. Faster means a promise impossible to keep on real campaigns with dozens of domains and hundreds of flows.
24 hours is:
- Morning (Moscow) - call with the manager, audit of current Keitaro structure.
- Daytime - JSON-export auto-converter, landing page reconciliation, import to TDS.
- Evening - DNS switchover, test clicks, postback verification.
- Overnight - traffic monitoring on the new system, dual-routing for safe rollback.
- Next morning - final stats reconciliation, old system shutdown.
Preparation: what we need from you
The manager will send you a short checklist in Telegram right after the first call. If you collect everything in 30 minutes, we start the same day.
- Keitaro access (read-only user or JSON campaign export)
- Domain list and where they're registered (Cloudflare, Namecheap, GoDaddy, etc.)
- Affiliate networks and postbacks: conversion URLs and click ID format
- Active traffic flows: sources, geos, landing pages
- Downtime window (if possible - we try to avoid it)
Moving domains: 5 minutes per domain
The most sensitive part. Done wrong, you lose traffic for 1-24 hours depending on TTL and provider caches.
Our approach:
- 24 hours before migration we lower TTL on DNS records to 60 seconds.
- Create CNAME to our edge hostname (
edge.tds.so) which can proxy to both backends. - Enable dual-routing: 90% traffic to Keitaro, 10% to TDS - for verification.
- After 30 minutes verify stats: if numbers match, flip to 100%.
# Пример: переключаем домен через Cloudflare API
curl -X PATCH "https://api.cloudflare.com/client/v4/zones/$ZONE/dns_records/$ID" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "CNAME",
"name": "go.example.com",
"content": "edge.tds.so",
"ttl": 60,
"proxied": true
}'
No need to pre-generate or hand them over. Our edge issues a Let's Encrypt certificate automatically when CNAME is bound - usually within 30-60 seconds.
Campaign import: 10 minutes for 100 flows
We have an auto-converter from Keitaro JSON to TDS format. It understands:
| Keitaro entity | TDS equivalent | Notes |
|---|---|---|
| Campaign | Flow | 1:1 mapping |
| Stream | Branch | all 30+ filter params transferred |
| Landing | Landing | URLs and tokens preserved |
| Offer | Offer | payout, click-cap, gates carry over |
| Filter | Pre-rule | "if/then" logic rebuilt automatically |
What doesn't transfer automatically and needs manual review:
- Custom PHP scripts in Keitaro handlers. We either rewrite them as JS functions (if simple) or offer a webhook alternative.
- Cookie-based sticky sessions - they work differently in TDS, you'll need to explain the logic to the manager.
- Archived campaigns older than 90 days - typically we don't migrate these.
Switching traffic
The most stressful moment. We don't do "boom, switched" here - we use a staged flip:
- 10% → TDS, 90% → Keitaro. 30 minutes of observation.
- 50% → TDS if stats match. Another hour.
- 100% → TDS if conversion didn't drop. Keitaro stays as fallback for 24 hours.
CR on TDS should match Keitaro CR within ±5%. If divergence is larger, we roll back and find the cause. Most commonly it's antibot segmentation difference: TDS filters slightly more "dirty" traffic, visible in logs.
Verification: what we monitor for 24 hours
- Click-to-conversion latency: should be ≤ 28 ms p95. Higher - alert to manager.
- Postback success rate: we expect 99.9%+. Drops indicate click ID mapping issues.
- Bot detection rate: should stay within ±10% of pre-migration baseline.
- HTTP errors: 5xx > 0.1% triggers stop-loss, rollback.
What's next
After 24 hours you get:
- Migration report in Telegram: how many flows moved, where stats match, any divergences.
- Access to TDS panel with all your campaigns.
- Direct contact with the migration manager for 7 days - for questions and edge cases.
Migration cost - zero. We don't charge for moving: our interest is keeping you. If something doesn't work out in the first month, we refund the subscription.