case-study

Backend dev sang affiliate: pipeline 5 năm tôi đang chạy

Case study chi tiết: 7 năm backend FPT/Singapore fintech, 5 năm affiliate. Pipeline 4 layer, P&L 8 tháng, RTT, postback, payout VND/USDT. Số thật, không slide.

Pipeline affiliate marketing 4 layer của một ex-backend engineer ở Sài Gòn

Tên tôi là Minh. Bảy năm backend ở FPT Software và một fintech Singapore, năm năm affiliate. Tôi không viết bài này để bán khoá học. Tôi viết vì tuần trước có một bạn dev trẻ ở Quận 10 hỏi tôi qua Telegram: “Anh ơi, em muốn nghỉ FPT để chạy affiliate full-time. Em cần biết cụ thể anh đang chạy cái gì.” Tôi gõ trả lời mất hai tiếng. Sau đó tôi nghĩ — thay vì gõ lại cho người tiếp theo, tôi mở repo cũ, lôi config, lôi báo cáo P&L, lôi log postback, và viết thành bài này.

Đây là pipeline thật. Bốn layer. Tám tháng số liệu gần nhất. Không phải sơ đồ trên slide tuyển sinh khoá học “kiếm tiền online Việt Nam 100 triệu một tháng” mà bạn đã thấy trên TikTok. Đây là cái tôi mở terminal lên và nhìn mỗi sáng trước khi uống ly cà phê sữa đá đầu tiên.

Phần 1 — Tôi là ai, vì sao bạn nên đọc

Năm 2015 tôi tốt nghiệp Bách Khoa Đà Nẵng, intern ở FPT Software, được nhận vào team payment-gateway integration cho một sàn TMĐT Việt Nam. Việc đầu tiên: implement VNPay callback. Việc thứ hai: VietQR. Việc thứ ba: MoMo. Việc thứ tư: ZaloPay khi nó còn beta. Đến năm thứ ba ở FPT, tôi nhận project tích hợp Thai PromptPay và Indonesian QRIS — cross-border rails. Không hào nhoáng. Lương cao hơn trung bình ngành nhưng không phải lương khủng. Junior backend Java đi qua Spring Boot, Kafka, Redis cluster, một chút Postgres tuning. Đời sống của một dev Sài Gòn ăn cơm tấm trưa, đi xe máy về Quận 3 lúc 7 giờ tối.

Năm 2019 tôi nhảy sang một fintech Singapore — họ đang scale một sản phẩm consumer-loan ra SEA. Tôi làm backend cho cái risk-scoring service. Việc của tôi: nhận sự kiện click → form-submit → KYC-pass → loan-disbursed từ funnel front-end, gửi vào Kafka, route qua scoring engine, ghi vào Postgres, trả về quyết định. Một sự kiện rất giống một conversion event trong adtech, chỉ là tôi chưa biết.

Cái ngày tôi học được affiliate là gì, là ngày một bug ticket được forward từ team Marketing sang tôi. Ticket viết: “Funnel hoạt động trong staging, fail trong production cho user đến từ Indonesian Facebook traffic.” Tôi mở log. Tôi thấy click_id từ URL parameter không được persist qua trang KYC. Tôi fix trong 40 phút. Sau đó tôi hỏi PM ngồi cạnh: “Cái click_id này là cái gì, từ đâu ra?” PM giải thích — Facebook Ads, UTM, sub_id, postback, attribution. Đêm đó tôi về nhà ở Tiong Bahru, mở một tab Google và một tab affiliateinsider.com. Đọc đến 3 giờ sáng.

Từ đó đến cuối 2021 tôi đọc song song hai thứ: code base của fintech, và mọi tài liệu adtech tôi tìm được. Tôi học được cái mà Marketing không học được — vì tôi nhìn được dữ liệu raw. Khi marketer nhìn dashboard và thấy “CR 1.2%”, tôi nhìn log và biết là 1.4% ở source nhưng 0.2% rớt giữa hop từ tracker đến CRM vì cookie aging out trên một số ISP route. Cái “1.2% trong dashboard” thật ra là “1.4% rớt thành 1.2%”. Marketer không bao giờ thấy 0.2% bị rớt đó. Tôi thấy vì tôi viết cái service.

Tháng 1 năm 2022 tôi nghỉ Singapore. Tôi quay về Sài Gòn. Tôi mở hai property. Property thứ nhất: một site SEO tiếng Việt review crypto-exchange referral program — Binance, Bybit, OKX, MEXC, Bitget. Tôi chọn niche này vì (a) tôi biết payment rails cross-border, (b) crypto referral trả USDT thẳng vào ví, không có chuyện đợi 60 ngày net, (c) trong 2022 Vietnamese crypto traffic chưa quá đông trên Google nhưng đang lên trend Search Console rõ rệt. Property thứ hai: một site tiếng Anh review affiliate network cho SEA publisher. Site này nhỏ hơn nhưng audience ROI cao hơn — toàn người đang chạy traffic, không phải người mới học.

Chín tháng sau khi launch, property thứ nhất kiếm $4,200/tháng — khoảng 105 triệu VND ở tỷ giá năm đó. Mười lăm tháng sau, property thứ hai kiếm $11,800/tháng. Đỉnh cao nhất tôi từng đạt được trên cả hai property cộng lại trong một tháng là $16,000 — tháng 10 năm 2023, lúc cycle crypto bull run đang chạy và tôi rip một offer Bybit referral bằng nguyên một campaign Telegram-funnel. Tháng sau bull run hạ, doanh thu rớt xuống $9,400. Tôi không khoe đỉnh, tôi note cả đáy — vì affiliate là một game biến động, ai nói đều đặn $16K/tháng là đang nói dối hoặc đang bán khoá.

Năm năm sau, tôi vẫn còn cả hai property. Tôi đã thêm hai property nhỏ hơn — một site so sánh push-ad network cho buyer-side, một site tiếng Việt về thanh toán e-commerce (giúp tôi rank cho keyword “VietQR tích hợp” mà sau đó cross-sell sang Shopee Affiliate). Tôi có một consulting practice nhỏ — ba khách thường xuyên, mỗi khách trả $2,000-$4,000/tháng, tổng phụ trợ. Tôi không hire ai full-time. Tôi outsource Vietnamese copywriting cho một bạn ở Quận 7, designer cho một bạn freelancer ở Đà Nẵng, kế toán cho một chị ở District 1. Cấu trúc cố tình giữ lean — vì cái ngày affiliate volatility quay lại, tôi không muốn phải sa thải ai.

Vì sao tôi nói tất cả những điều này? Vì bài viết này không dùng được nếu bạn không biết tôi là ai. Một bài “5 năm sau, đây là pipeline tôi đang chạy” từ một marketer học code, hoặc từ một YouTuber chưa từng push một dòng production code nào, hoặc từ một dev mới đọc Cốc Cốc về affiliate hai tuần trước — ba bài đó sẽ rất khác nhau, và bạn cần biết bạn đang đọc cái nào. Cái này là từ một dev đã đo latency trước khi đo creative. Vẫn host site riêng. Vẫn debug postback lúc 2 giờ sáng khi một advertiser update endpoint mà không thông báo. Vẫn lỗ thỉnh thoảng và vẫn viết post-mortem khi lỗ.

Một điều nữa tôi muốn nói trước: bài này không phải là “guide kiếm tiền online Việt Nam.” Tôi đã đọc đủ guide như vậy để biết rằng đa số viết bởi người chưa từng có một property kiếm $1,000 trong một tháng. Họ kể về AccessTrade, MasOffer như những platform thần kỳ. Thật ra AccessTrade là một network bình thường — onboard dễ, payout đúng hẹn, nhưng EPC ở vertical e-commerce VN năm 2026 vẫn ~$0.03-0.08 cho đa số offer. Bạn cần 50.000-100.000 click/tháng để kiếm được tiền đủ trả tiền nhà ở Quận Bình Thạnh. Không phải con số phù hợp với “kiếm tiền online dễ dàng” trong 90% guide.

Affiliate marketing ở Việt Nam là một ngành thật, có người kiếm thật, nhưng curve khó. Hai năm đầu bạn lỗ hoặc hoà vốn. Năm thứ ba bạn có thể break-even sống được. Năm thứ tư bạn build moat. Năm thứ năm bạn có thể đứng vững. Tôi không nói điều này để intimidate — tôi nói để bạn không nghỉ FPT trong tháng đầu rồi sau 6 tháng quay lại xin việc với CV gap.

Đi vào việc.

Phần 2 — Pipeline overview: 4 layer, một sơ đồ, một quy tắc

Sơ đồ kiến trúc 4 layer của pipeline affiliate Minh đang chạy

Pipeline của tôi có bốn layer. Tôi vẽ nó như cách một backend engineer vẽ system design — không phải như cách một marketer vẽ funnel. Khác biệt: marketer vẽ từ trên xuống (awareness → consideration → conversion), engineer vẽ từ event source xuống storage (request → service → queue → store → reconciliation).

Layer 4 — Payout         (USDT/VND/USD settlement, FX, accounting)

Layer 3 — Attribution    (postback receiver, dedupe, fraud filter, payout calc)

Layer 2 — Tracker        (click router, sub_id stamping, redirect logic)

Layer 1 — Infrastructure (origin, edge, DNS, cert, monitoring)

[user click on banner/popunder/SEO page]

Quy tắc đơn: mỗi layer phải đo được độc lập. Nếu một layer fail, ba layer kia phải vẫn ghi log và phải báo alert. Đó là cách mọi production backend system viết — không phải vì cool, mà vì nếu một layer fail im lặng, bạn sẽ lỗ tiền hàng tuần trước khi biết.

Layer 1 — Infrastructure (origin + edge + DNS)

Đây là phần lớn marketer chưa từng đo. Khi tôi nói “host landing page”, marketer nghĩ “WordPress trên hosting cPanel $5/tháng ở US.” Khi tôi nói “host landing page”, tôi nghĩ:

  • Origin VPS ở đâu (region, provider, instance type)
  • Edge có hay không (Cloudflare, Bunny.net, Fastly)
  • DNS provider (NS1 vs Cloudflare DNS vs Route 53)
  • TLS cert provider + chain length
  • Monitoring agent (Prometheus node_exporter + Grafana, hoặc simpler là UptimeRobot)
  • Log shipping (Loki, Logtail, hoặc tự ghi file rồi rsync)

Mỗi cái có một tác động lên RTT, LCP, postback drop. Tôi sẽ chi tiết ở Phần 3.

Layer 2 — Tracker (click router)

Tracker là cái nhận request /c/?offer=123&aff=me&sub=xyz từ user click, làm ba việc:

  1. Stamp click_id (UUID v4) vào request
  2. Ghi click log (offer_id, aff_id, sub_id, ip, ua, ts, click_id) vào storage
  3. 302 redirect user sang advertiser endpoint với click_id trong URL

Đây là service quan trọng nhất. Nếu nó chậm, user thấy “redirecting…” lâu, bounce. Nếu nó fail im lặng, click không được ghi, conversion sau đó không thể attribute. Tôi đã thử ba kịch bản: Voluum (SaaS), RedTrack (SaaS), và một tracker tự viết (Node.js + Fastify trên Vultr Tokyo). Sẽ phân tích chi tiết ở Phần 4.

Layer 3 — Attribution (postback receiver)

Khi user complete conversion ở advertiser side (sign-up, deposit, KYC pass, loan disbursed — tùy offer), advertiser gửi postback về một endpoint của tôi: https://t.mangquangcao.com/p?click_id=XYZ&payout=4.50. Receiver làm:

  1. Verify postback (HMAC nếu có, IP whitelist nếu có, secret param nếu có)
  2. Lookup click_id trong click log
  3. Dedupe (cùng click_id không được tính conversion hai lần)
  4. Fraud filter (timestamp gap, IP fingerprint, device hash mismatch)
  5. Ghi conversion log
  6. Update payout calc

Đây là chỗ rớt tiền nhiều nhất nếu làm sai. Tôi sẽ kể chi tiết một case Q4 2023 ở Phần 5 — postback rớt 18% trong production, mất ~3 ngày unattributed conversion trước khi tôi tìm ra.

Layer 4 — Payout (settlement)

Đây là layer mà 90% guide affiliate Việt Nam bỏ qua. Conversion ghi nhận xong, đến cuối tháng (hoặc bi-weekly tùy network), payout đến. Câu hỏi: payout đến bằng currency gì, qua kênh nào, bao lâu hợp pháp hoá thành VND để tôi trả lương freelancer? Có ba kênh chính trong setup của tôi: USDT-TRC20 (crypto exchange), USD wire qua Wise hoặc Payoneer (networks tier-1), VND chuyển khoản nội địa (AccessTrade VN, MasOffer, Adflex). Mỗi kênh có chi phí, latency, và rủi ro tax compliance khác nhau. Chi tiết Phần 6.

Mỗi layer là một service độc lập

Tôi nhấn lại quy tắc đơn: bốn layer là bốn service. Bốn repo riêng. Bốn deploy pipeline riêng. Bốn dashboard riêng. Tôi học cái này từ những năm fintech — microservice không phải vì hype, mà vì khi một service đổi schema, ba service kia không sập theo.

Affiliate của tôi đang chạy:

  • lp.mangquangcao.com — landing page origin (Vultr Tokyo)
  • t.mangquangcao.com — tracker + postback receiver (cùng VPS, khác process, khác port)
  • api.mangquangcao.com — internal reporting API (Postgres queries, Grafana data source)
  • payout.mangquangcao.com — settlement reconciliation cron (chạy daily, gửi report Telegram)

Bốn subdomain, bốn service, một con VPS Tokyo $24/tháng. Không phải micro-service trong đúng nghĩa Kubernetes — là process-isolation đủ tốt cho một solo operation. Một dev đọc cái này sẽ nói “monolith với routing.” Đúng. Tôi không cần Kubernetes cho một traffic vol ~80K-200K click/tháng. Tôi cần process boundary để debug được. Đó là điểm.

Sơ đồ tổng thể nhìn từ trên xuống:

[Click từ banner/SEO/Telegram funnel]

[Cloudflare DNS → Cloudflare Workers (edge cache)]

[t.mangquangcao.com/c/?offer=&aff=&sub=]
       ↓ (302 redirect, stamp click_id)
[Advertiser endpoint — Binance/AccessTrade/Adsterra ad URL]
       ↓ (user complete action)
[Advertiser server → POST t.mangquangcao.com/p?click_id=&payout=]

[Postback receiver — verify, dedupe, fraud filter, log]

[Postgres conversion table]
       ↓ (daily cron)
[payout.mangquangcao.com reconcile vs advertiser panel]
       ↓ (monthly)
[USDT-TRC20 / Wise USD / VND nội địa → bank]

[Kế toán chị Linh, Q1 — quyết toán quarterly]

Mười hai hop từ click đến cash. Mỗi hop là một chỗ rớt — rớt conversion, rớt payout, rớt thời gian, rớt FX. Affiliate giỏi không phải người vẽ funnel đẹp. Affiliate giỏi là người biết hop nào đang rớt và đang rớt bao nhiêu.

Vì sao tôi tách layer cứng như vậy

Một câu hỏi tôi nhận từ consulting client: “Sao anh không gộp Layer 2 và Layer 3 vào một service? Cùng là tracker mà.” Câu trả lời ngắn: vì khi advertiser thay đổi postback format, tôi muốn redeploy chỉ Layer 3, không đụng đến Layer 2. Câu trả lời dài: vì traffic pattern của hai endpoint khác nhau. Layer 2 (click handler) nhận burst traffic — peak 19:00-22:00 giờ Việt Nam có thể ~150 req/giây khi tôi rip một campaign. Layer 3 (postback receiver) nhận traffic phân tán theo timezone của advertiser — Binance trả postback theo batch hourly, AccessTrade theo batch daily 2 giờ sáng. Hai pattern khác nhau cần config khác nhau: Layer 2 bật connection pooling lớn, log rotation aggressive. Layer 3 bật retry-friendly response code, log retention lâu (để dispute attribution sau).

Tách layer là cách backend engineer chống lại “monorepo trap.” Tôi đã làm việc trong codebase mà mọi thứ ghép vào một service vì “tiết kiệm RAM.” Sau 18 tháng, không ai dám đụng vì sợ vỡ tổ. Tôi không để cái đó xảy ra với pipeline của mình.

Cái không có trong sơ đồ: data warehouse

Tôi không vẽ vào sơ đồ ở trên một thứ: data warehouse. Tôi không có data warehouse. Tôi có một Postgres database, schema tốt, và indexes hợp lý. Đó là đủ cho operation tôi.

Tại sao? Vì tôi đã làm việc đủ trong fintech để biết khi nào bạn cần data warehouse. Bạn cần warehouse khi: (a) bạn có nhiều source dữ liệu cần join (CRM + tracker + advertising platform + email + support), (b) data volume vượt khả năng query của một RDBMS production (>500M row ở một bảng chính), (c) team analytics cần làm query riêng mà không impact production. Tôi không có cái nào ở trên. Operation cá nhân, một source dữ liệu chính, dưới ~20M row tổng cộng sau 5 năm.

Một số guide affiliate khuyên dùng BigQuery hoặc Snowflake. Trong 90% trường hợp, đó là cargo culting. Postgres handle ~50K event/ngày không sweat. Solo affiliate operation: dùng Postgres tới khi nó đau, rồi mới scale ngang. Đa số không bao giờ đến lúc đau.

Cấu trúc database (mở rộng nhanh)

Tôi share schema chính cho ai dev cùng level. Bốn bảng cốt lõi:

  • click_log — id, click_id (UUID), offer_id, aff_id, sub_id, ip, ua, referer, country, ts, raw_url. Index trên (click_id) UNIQUE, (offer_id, ts), (aff_id, ts).
  • conversion_log — id, click_id (FK), event_type, payout_usd, advertiser_meta JSONB, postback_ts, status. Index trên (click_id, event_type) UNIQUE, (postback_ts).
  • offer — id, name, advertiser, postback_url_template, payout_default, attribution_window_days. Static-ish, update tay.
  • payout_reconcile — id, offer_id, period_start, period_end, tracker_count, advertiser_count, paid_amount_usd, paid_currency, paid_at. Cập nhật từ daily reconcile cron.

Bốn bảng, ~12 index. Toàn bộ size sau 5 năm: ~3.4 GB (compressed Postgres TOAST). Cron VACUUM ANALYZE chạy weekly. Backup nightly sang Wasabi S3 ($8/tháng, encrypted gzip dump). Không phức tạp. Không cần phức tạp.

Một detail kỹ thuật mà tôi học từ những năm Singapore: dùng JSONB cho advertiser_meta, không cố normalize. Mỗi advertiser gửi postback với schema khác nhau — Binance gửi {user_id, kyc_status, deposit_amount, referral_tier}, AccessTrade gửi {order_id, sku, gross_amount, vat, commission_rate}. Cố tạo column riêng cho mỗi field là tự đào hố. JSONB store mọi thứ, GIN index trên field hay query (advertiser_meta->>'user_id'). Postgres 16 handle tốt.

Backup và disaster recovery

Vì đây là backend engineer mindset, không thể không nói đến DR. Tôi đã chứng kiến một bạn affiliate Sài Gòn mất 14 tháng click log vì VPS bị hack và backup không có. Bạn đó kiếm ~$3K/tháng, mất luôn historical data để reconcile dispute, mất luôn evidence để chứng minh ~$8,000 commission bị clawback sai. Tôi không muốn lặp lại.

Setup DR của tôi:

  1. Hourly snapshot Postgres logical backup (pg_dump) gzip nén rsync sang một VPS backup $6/tháng ở Singapore (provider khác Vultr — DigitalOcean Singapore, để khi Vultr bị global outage không mất cả primary lẫn backup)
  2. Daily full encrypted dump sang Wasabi S3 ($8/tháng cho ~50GB cold storage)
  3. Weekly restore test — script tự động pull dump mới nhất, restore lên một sandbox VPS Vultr Tokyo $4/tháng chạy --shutdown 1h, query một số bảng để verify integrity, rồi tự destroy. Tôi nhận Telegram alert nếu test fail.
  4. Code repo trên GitHub private + mirror trên Gitea self-hosted (cùng VPS backup Singapore). Đề phòng GitHub account compromise.
  5. Secrets trong 1Password personal vault + một copy ENCRYPTED in một file age-encrypted trên Google Drive (recovery key in một USB ở nhà bố mẹ Đà Nẵng — paranoid nhưng cost $0)

Tổng cost DR: $18/tháng ($6 VPS + $8 S3 + $4 sandbox). Sub-1.5% doanh thu. Bảo hiểm rẻ nhất tôi mua được.

Phần 3 — Layer 1: Vultr Tokyo + Cloudflare Workers, vì sao và bao nhiêu millisecond

Sơ đồ latency RTT từ Tokyo và Singapore xuống Việt Nam

Đây là layer mà tôi đầu tư nhiều giờ research nhất trong năm đầu. Vì tôi đã chứng kiến +8% CR chỉ bằng việc migrate origin từ US-east sang Singapore, và sau đó thêm +1.5% khi migrate tiếp sang Tokyo. Tổng cộng ~9.5% CR uplift chỉ từ infrastructure decision. Không phải creative win. Không phải copy win. Là latency win.

Số liệu RTT thực tế

Tôi đo từ ba điểm tại Việt Nam, mỗi điểm 18.000 ping trong 7 ngày, cách đều theo giờ. Số liệu tổng kết:

TuyếnRTT medianRTT p95RTT peak (19:00-22:00)
HCMC → Vultr Tokyo78ms112ms148ms
HCMC → Vultr SG64ms198ms412ms
Hà Nội → Vultr Tokyo64ms89ms121ms
Hà Nội → Vultr SG88ms234ms487ms
Cần Thơ → Vultr Tokyo96ms158ms211ms
Cần Thơ → Vultr SG71ms289ms698ms

Cái mà bản đồ địa lý không cho bạn thấy: Singapore gần Việt Nam hơn Tokyo. Singapore tốt hơn Tokyo về median RTT. Nhưng Singapore tệ hơn rất nhiều về peak-hour p95. Vì sao? Vì tuyến VN→SG đi qua một số undersea cable (AAG, APG, IA) hay bị nghẽn vào giờ peak (sau giờ làm việc, lúc người Việt mở Facebook và YouTube). Tuyến VN→JP đi qua tuyến TGN-IA và APG khác, ít nghẽn giờ Việt Nam peak hơn vì giờ đó Nhật cũng đang là rush hour và cable đã được optimize trước.

Khi tôi nói “Tokyo tốt hơn Singapore cho Vietnamese consumer 4G”, tôi không nói median. Tôi nói p95 và peak. Affiliate chạy ads vào giờ peak — đó là khi user xem nhiều, click nhiều. Nếu landing page của bạn p95 RTT là 412ms thay vì 112ms, bạn đang trả “latency tax” trên đúng nguồn traffic có giá trị nhất.

Stack cụ thể

Vultr High-Frequency 2GB, region nrt-jp (Tokyo), Ubuntu 22.04 LTS, $24/tháng. Trên đó:

  • Caddy (TLS auto, HTTP/2, HTTP/3 enabled) — reverse proxy + static file server
  • Node.js 22 + Fastify — tracker service + postback receiver, hai process khác nhau, dùng PM2 cluster mode
  • Postgres 16 — click log + conversion log, một database, hai schema
  • Redis 7 — dedupe cache (click_id → seen), TTL 90 ngày
  • Loki + Promtail — log aggregation (rsync hourly sang một backup VPS)
  • Grafana (chạy local, expose qua Cloudflare Access) — dashboard

Edge: Cloudflare Workers trên domain lp.mangquangcao.com. Worker làm hai việc: (1) cache static HTML/CSS/JS landing page tại edge (15 phút TTL), (2) inject A/B test variant ID dựa trên cookie. Origin chỉ serve khi cache miss hoặc khi worker logic không cover được — khoảng ~12% request về origin trong setup hiện tại.

Cloudflare có 5 PoP ở Việt Nam (Hà Nội, HCMC, Đà Nẵng, và 2 PoP nhỏ hơn). Nghĩa là khi user ở Quận 3 mở lp.mangquangcao.com, request đi từ điện thoại → Viettel BTS → POP Cloudflare HCMC (~15-25ms RTT trên 4G consumer) → cache hit, trả về HTML. Origin Tokyo chỉ được gọi khi cache miss.

LCP của trang LP chính trong setup này: 1.6s p50, 2.3s p95 đo từ Web Vitals real-user. Trước khi migrate (hồi còn US-east + không có edge): 4.1s p50, 6.8s p95. Khoảng cách đó là tiền — ~8% CR uplift trên cùng nguồn paid traffic, đã measure A/B trong Q2 2023.

Vì sao Cloudflare Workers chứ không phải edge SSR Vercel/Netlify

Hai lý do. Một, control. Workers cho tôi viết JS chạy ở edge, log gửi về tracker của tôi qua subrequest. Vercel/Netlify ràng vào framework của họ — tôi không build với Next.js, tôi build LP với 11ty (Eleventy) + static HTML để tối ưu size xuống dưới 50KB gzipped. Hai, cost. Cloudflare Workers free tier cho 100K request/ngày. Một LP chính của tôi chạy ~6K request/ngày peak. Tôi trả $0 cho edge compute. Vercel Pro $20/tháng/seat cho features tôi không cần.

Khi nào tôi không dùng Tokyo

Một property của tôi nhắm Indonesia + Thailand riêng. Indo audience: tôi host Vultr Singapore (sgp-sg) vì RTT JKT→SG nhỏ hơn JKT→JP (~30ms vs ~85ms). Thailand audience: cũng Singapore vì Bangkok→SG ~25ms, Bangkok→JP ~80ms. SEA không phải một thị trường — bốn nước, bốn quyết định hosting khác nhau, dù chỉ chênh nhau vài chục millisecond.

Cần Thơ vào giờ peak có RTT đến Tokyo lên ~211ms. Đó là một con số đáng lưu ý nhưng không tệ — vẫn nhỏ hơn một nửa so với 698ms peak hour đi Singapore. Tôi đã từng cân nhắc một origin riêng cho Cần Thơ region (Vultr không có PoP đó), nhưng volume không đủ để justify một second origin. Cloudflare edge HCMC vẫn cover đa số request từ miền Tây Nam Bộ vì routing FPT/Viettel đẩy về POP HCMC.

Monitoring tôi thật sự nhìn

Mỗi sáng 8:30 (sau khi pour cà phê sữa đá), tôi mở Grafana trên iPad. Bốn panel:

  1. Origin uptime — Caddy upstream status, mục tiêu 99.95% rolling 7 ngày
  2. Cache hit rate — Cloudflare Workers analytics, mục tiêu ≥85%
  3. Postback receiver latency — p95 phải dưới 200ms
  4. Daily revenue (Telegram bot bắn vào @minh_payout_alerts) — đối chiếu với click log hôm trước

Bốn panel. Không 40 panel. Một solo operation cần dashboard ngắn — dashboard dài là dashboard không bao giờ được nhìn.

Một sai lầm tôi đã trả phí

Q4 2022 tôi để TLS cert của tracker subdomain t.mangquangcao.com expire. Caddy auto-renew lẽ ra phải fix, nhưng tôi đã set tham số sai trong Caddyfile. Cert expire lúc 3 giờ sáng giờ VN. Trong 6 tiếng trước khi tôi thức dậy, advertiser đã gửi ~400 postback vào endpoint, tất cả fail TLS handshake, advertiser retry policy không cover hết — ~120 conversion mất vĩnh viễn. Tổng thiệt hại: ~$340, không lớn nhưng đủ đau để tôi không bao giờ lặp lại.

Sau đó tôi thêm hai alert: (1) cert expiry warning 14 ngày trước, (2) postback receiver 500-rate >1% trong 5 phút trigger SMS qua Twilio. Cost của hai alert đó: $0 (Cloudflare cert expiry là free, Twilio SMS Việt Nam ~$0.05/tin nhắn, một tháng tôi gửi <10 tin). Đáng từng đồng.

Layer 1 đến đây là đủ. Đi tiếp.

Phần 4 — Layer 2: Tracker stack — Voluum vs RedTrack vs in-house

Ba pillar so sánh tracker stack — SaaS vs in-house

Câu hỏi này là câu hỏi tôi nhận nhiều nhất trong consulting: “Em nên dùng Voluum, RedTrack, hay tự viết tracker?” Tôi đã chạy cả ba. Tôi sẽ kể cụ thể.

Voluum — period 2022 Q2 đến 2022 Q4

Bắt đầu với Voluum vì đó là cái mọi guide affiliate nói “industry standard.” Bundle tôi dùng: Profit plan $199/tháng cho 1M event/tháng + custom domain + S2S postback. Đo trong 8 tháng:

Cái Voluum làm tốt:

  • UI dashboard chỉn chu, có sẵn report theo offer/source/sub_id
  • S2S postback config qua tick-box, không cần code
  • Anti-fraud filter có sẵn (bot trap, click flooding detection)
  • Integration với một số tracker khác (FB CAPI, Google Ads conversion) qua native connector

Cái Voluum làm kém cho operation kiểu của tôi:

  • Edge của Voluum không có node ở Đông Á (gần nhất là Hong Kong và Singapore, cả hai có p95 RTT từ HCMC >200ms peak)
  • Click log không expose raw — bạn nhìn dashboard, không nhìn được record-by-record để debug
  • Custom domain chỉ work với Voluum DNS, không thể chạy trên Cloudflare Workers
  • Cost scale tuyến tính theo event volume — khi tôi push lên 3M event/tháng, cost lên $499. Mỗi click thêm là 1 event, kể cả click bị filter

Vấn đề lớn nhất: latency. Click → Voluum SG → 302 → advertiser. Mỗi hop thêm ~150-200ms p95 vào timeline. Khi tôi đo end-to-end “click banner → user thấy LP”, baseline của tôi với Voluum SG là 1.8s p50. Sau khi tôi gỡ Voluum và viết tracker tự host trên Vultr Tokyo, baseline xuống 0.6s p50. Khác biệt 1.2 giây là chỗ đủ để bounce rate +6%, CR -4%.

Tổng kết 8 tháng Voluum: ~$1,592 cost subscription + tax. Plus opportunity cost của latency. Tôi cancel.

RedTrack — period 2023 Q1 đến 2023 Q3

RedTrack rẻ hơn Voluum. Tôi dùng Solo plan $83/tháng cho 1M event + custom domain. Đo trong 6 tháng:

Cái RedTrack làm tốt:

  • Có edge node tại Singapore và Tokyo (Tokyo edge có RTT từ HCMC ~90ms p50, tốt hơn Voluum SG)
  • API mở hơn — bạn có thể export click log qua REST API, query bằng SQL nếu enable BigQuery export ($add-on)
  • Anti-fraud lite hơn Voluum nhưng đủ cho operation tôi
  • Custom JS hook ở edge — bạn có thể inject logic A/B test rất nhanh

Cái RedTrack vẫn kém:

  • Postback config phức tạp khi có >5 advertiser — UI tạo postback URL từng cái một, không có bulk import
  • Khi advertiser update postback format (thêm param hoặc đổi click_id thành cid), bạn phải vào fix UI, không có version control
  • Customer support trả lời ~24-48h, không có Vietnamese language support
  • Latency edge Tokyo của RedTrack: tốt hơn Voluum, nhưng vẫn ~30ms cao hơn Vultr Tokyo của tôi vì RedTrack route qua Cloudflare→edge proprietary của họ trước khi 302

Tổng kết 6 tháng RedTrack: ~$498. Cancel sau khi tôi viết tracker in-house và đo so sánh — in-house thắng về latency và control, nhưng RedTrack thắng về tốc độ setup ban đầu. Nếu bạn mới bắt đầu và chưa biết debug HTTP, RedTrack là điểm xuất phát tốt.

Tracker in-house — period 2023 Q4 đến nay

Tôi viết tracker từ scratch trong Q3 2023. Stack: Fastify (Node.js), Postgres 16, Redis 7, PM2. Code base ~1,200 dòng TypeScript, không kể test. Mất ~3 tuần để viết version đầu, ~2 tuần để stabilize trong production. Cost cận biên: $0 (chạy chung VPS Tokyo $24/tháng đã có).

Architecture:

POST /c/  → validate offer+aff → stamp click_id → write click row
        → Redis SET click_id (TTL 90d) for dedupe later
        → 302 redirect to advertiser URL + click_id appended

POST /p/  → validate signature (HMAC if provided by advertiser)
        → Redis GET click_id → if not found, 404
        → SELECT click row → check timestamp gap (max 30d default)
        → INSERT conversion row
        → fire async webhook to Telegram bot for real-time alert

Cái in-house làm tốt:

  • Latency: click handler <50ms p99, postback handler <80ms p99, đo từ access log Caddy
  • Control toàn bộ: tôi viết SQL cho mỗi report, không phụ thuộc panel
  • Cost cận biên $0 khi đã có VPS
  • Fraud filter custom — tôi đã train một logistic regression model nhỏ (~30 feature) phát hiện click flooding pattern đặc trưng của một số botnet Indo và Việt; precision 0.94, recall 0.81 trên test set tôi label
  • Postback config qua YAML file trong repo, có git history, có code review (chính tôi review chính tôi nhưng git blame vẫn quý)

Cái in-house làm kém:

  • Maintenance burden — khi advertiser thay đổi postback param name, tôi phải update code và redeploy
  • Khi bug, không có support team — tôi tự debug lúc 2 giờ sáng
  • Onboarding offer mới chậm hơn — RedTrack setup 1 offer mới mất 5 phút, in-house của tôi mất ~15-20 phút vì phải viết YAML config + test postback manual

Khi nào dùng cái nào:

Tình huốngRecommend
Mới bắt đầu, <100K click/thángRedTrack Solo $83/tháng
100K-500K click/tháng, 10+ offer concurrentRedTrack Pro hoặc Voluum
Bạn là dev, đủ thời gian maintainIn-house
Bạn không dev được nhưng cần controlRedTrack + một dev freelance
Buyer-side scale, push-traffic >2M/thángVoluum (fraud filter của họ scale tốt hơn)
Crypto/iGaming vertical, postback đa dạngIn-house (linh hoạt cao nhất)

Không có câu trả lời universal. Câu trả lời phụ thuộc vào (a) traffic volume, (b) skill set, (c) vertical complexity. Đừng để ai bán bạn “industry standard.” Industry standard chỉ tồn tại trong slide bán hàng.

Một detail kỹ thuật: dedupe và TTL

Một câu hỏi mà mọi tracker phải answer: dedupe theo gì, TTL bao lâu? Lựa chọn của tôi: dedupe theo click_id, TTL 90 ngày trong Redis, archive sang Postgres cold storage sau đó.

Vì sao 90 ngày? Vì advertiser của tôi có cookie attribution window dài nhất là 60 ngày (Binance referral). Tôi thêm 30 ngày buffer để xử lý postback đến trễ do advertiser-side retry queue chậm. Tôi đã từng nhận postback ~63 ngày sau click từ một offer Bybit. Nếu TTL Redis của tôi là 30 ngày, conversion đó bị reject. Set 90 ngày = lose $0.30/tháng chi phí Redis storage = không phải vấn đề.

Voluum default 30 ngày. RedTrack default 60 ngày. Cả hai có thể tăng nhưng đa số user không biết để tăng. Đó là một chỗ rớt conversion silent.

Phần 5 — Layer 3: Postback attribution — VietQR, MoMo, ZaloPay specifics

Postback flow tích hợp VietQR MoMo ZaloPay

Layer này tôi muốn dành nhiều chữ nhất, vì đây là chỗ payment method Việt Nam giao với attribution. Đa số tracker quốc tế không hiểu Việt Nam thanh toán bằng QR thế nào, và cái không hiểu đó rớt tiền.

Bối cảnh thanh toán Việt Nam 2024-2026

Số liệu DataReportal Digital 2024 cho Vietnam:

  • 78.44M internet user, 79.1% penetration
  • Mobile broadband 91.9 sub/100 người
  • 4G coverage 99.8% lãnh thổ
  • Median mobile speed ~47 Mbps

Số liệu thanh toán (NAPAS + PS Market Research):

  • VietQR xử lý >10M tx/ngày peak 2024, tăng +106.7% YoY
  • MoMo ~40M user, dominant ở mảng peer-to-peer + small merchant
  • ZaloPay ~14M user, mạnh ở mảng utility + game
  • VNPay ~16% thị phần cổng thanh toán e-commerce
  • Thẻ quốc tế (Visa/MC) ~12-18% tx mobile, chủ yếu cross-border + corporate

Khi tôi nói “60% thanh toán mobile ở Việt Nam là QR” — đó là số gộp VietQR + MoMo QR + ZaloPay QR. Đó là realité của user. Affiliate offer mà landing page lead với “pay with international card” thay vì QR, đang chống lại 60% trong demographic mobile-heavy. Không win được.

Cụ thể postback flow khi offer là fintech/loan VN

Lấy ví dụ một offer thực: consumer loan Việt Nam, payout ~$15 mỗi loan disbursed, advertiser yêu cầu postback khi loan được giải ngân vào tài khoản user.

User click banner trên LP của tôi
   → t.mangquangcao.com/c/?offer=loan-vn-01&aff=me&sub=fb-creative-A
   → tracker stamp click_id=abc123, log click
   → 302 redirect to https://loan-advertiser.com/apply?cid=abc123

User fill form trên advertiser site
   → submit
   → advertiser tracker fire pixel: NOT a conversion yet (just lead)

User receive SMS với link approve loan
   → click, KYC step (eKYC + selfie)
   → KYC pass

Advertiser disburse loan vào bank account của user
   → advertiser CRM fire postback to:
   → POST t.mangquangcao.com/p?click_id=abc123&payout=15.00&event=loan_disbursed

My receiver:
   → verify (HMAC trong header X-Sig)
   → Redis GET click_id=abc123 → found, click was 4 days ago
   → INSERT conversion
   → return 200
   → fire Telegram bot: "💰 +$15 from loan-vn-01"

Đây là happy path. Trong thực tế, ít nhất 6 chỗ có thể rớt:

  1. User click postback nhưng click_id không persist qua form. Advertiser-side cookie store, nhưng nếu user vào form qua Facebook in-app browser (không phải Chrome/Safari), cookie có thể reset. Fix: pass click_id qua URL parameter mọi step, không dùng cookie.
  2. eKYC step user dùng thiết bị khác. User click trên điện thoại, sau đó receive SMS rồi click trên iPad → không có click_id. Advertiser tốt sẽ fingerprint cross-device, advertiser tệ thì mất conversion.
  3. Loan disbursement diễn ra 7-30 ngày sau click. Nếu tracker TTL ngắn, lookup click_id fail. Đã nói ở Phần 4.
  4. VietQR mã thanh toán có khi advertiser-side dùng partner xử lý. Khi user thanh toán phí processing loan bằng VietQR (50,000 VND phí service), partner thanh toán đó fire conversion riêng — bạn nhận hai postback cho cùng user (một là loan_disbursed, một là payment_processed). Phải dedupe ở event type, không chỉ ở click_id.
  5. HMAC signature key bị rotate mà advertiser không thông báo. Khi advertiser update infrastructure, đôi khi họ rotate signing key. Postback đến với signature cũ bị verify fail. Đã xảy ra với tôi 2 lần. Fix: monitor postback-with-invalid-sig rate, alert nếu >0.5% trong 1 giờ.
  6. Network route degrade trong giờ peak. Advertiser-side server route đến endpoint của tôi đi qua cable nghẽn → request timeout → advertiser retry queue, đôi khi retry không thành công. Fix: regional postback mirror — tôi có một endpoint mirror ở Singapore (t-sg.mangquangcao.com) chỉ để fail-over postback. Advertiser config primary t.mangquangcao.com, fallback t-sg. Postback drop rate giảm từ ~3% xuống ~0.4%.

Case Q4 2023: 18% postback rớt

Đây là câu chuyện tôi để dành cho bài này. Q4 2023 tôi chạy một campaign Vietnamese crypto-exchange referral funnel — traffic Adsterra popunder, GEO Việt Nam, vertical crypto. Tracker custom của tôi đang ở giai đoạn beta, host trên một Bunny.net edge ở Singapore (chưa migrate sang Vultr Tokyo).

Trong tuần đầu tôi thấy ~14 conversion/ngày. Nhưng panel advertiser show ~17/ngày. Gap ~3/ngày. Tôi nghĩ là attribution mismatch bình thường — đôi khi advertiser đếm nhanh hơn tôi do delay sync. Bỏ qua.

Đến tuần thứ ba, gap lên ~5/ngày. Tôi soi log. Tôi thấy 18% postback bị log với status 404 click_id not found. Tôi SELECT * FROM click_log WHERE click_id = 'xyz' — không có. Click chưa từng được ghi.

Hai ngày debug. Tìm ra: Vietnamese ISP (Viettel + FPT consumer route trong khoảng 19:00-22:00) route ra Hong Kong trước khi về Singapore. Hop Hong Kong age session cookie quá 30 phút trước khi user reach LP. Cookie expire → click handler không stamp click_id đúng — thật ra stamp đúng nhưng client-side localStorage reset trước khi user thấy LP, nên khi advertiser-side cố lấy click_id từ URL hoặc cookie, không có. Postback fire không có click_id → tôi reject với 404.

Số conversion mất: ~3 ngày × 5 conversion/ngày × $4.50 payout average = ~$67.50. Không lớn. Nhưng là tín hiệu rằng infrastructure của tôi không phù hợp Vietnamese consumer route.

Fix tổng:

  1. Migrate tracker từ Bunny.net Singapore sang Vultr Tokyo VPS
  2. Switch click_id storage từ cookie sang URL parameter persist qua mọi step
  3. Add first-party subdomain t.mangquangcao.com cho cookie thay vì 3rd-party (cookie không bị block bởi Safari ITP, Brave, hoặc một số antivirus mobile của VN)
  4. Add postback retry endpoint — advertiser có thể POST lại postback nếu primary fail, mà không cần advertiser-side cấu hình lại

Sau fix: postback drop rate ~2% (từ ~18%). Số kia là ~16 điểm phần trăm conversion được cứu. Trên cùng campaign tháng kế tiếp, doanh thu tăng ~$390 thuần do recover.

Bài học: postback path là chỗ rớt số một trong pipeline affiliate VN, lớn hơn cả creative, lớn hơn cả landing page conversion rate optimization. Marketer không bao giờ check đến đây.

VietQR-specific consideration

Khi offer là Vietnamese e-commerce (Shopee Affiliate, Tiki, Lazada) hoặc Vietnamese fintech, có một detail riêng. VietQR thanh toán xử lý qua NAPAS 247 với “transaction completion” được advertiser-side define khác nhau:

  • Shopee: conversion fire khi order placed (chưa cần delivery confirm). Hoa hồng lock 30 ngày, sau đó release. Trong 30 ngày đó, nếu user huỷ đơn (cancellation rate Shopee VN ~8-12%), conversion bị clawback.
  • Tiki: conversion fire khi order placed + payment confirmed (VietQR success). Clawback nhẹ hơn (~4%) vì pre-pay model.
  • MoMo merchant offers: conversion fire khi transaction reconciled từ MoMo settlement file — delay 24-48h.
  • ZaloPay merchant: tương tự, delay 12-36h.

Nếu tracker của bạn report “doanh thu hôm nay $200” và advertiser sẽ payout $170 ba tuần nữa do clawback, bạn cần biết cái delta đó. Tracker in-house của tôi có một bảng riêng expected_payout được update từ daily reconcile cron — so sánh “tôi nghĩ tôi kiếm được” vs “advertiser sẽ trả tôi” giúp tôi cảnh giác khi gap quá lớn.

Mỗi 8%-12% clawback trên Shopee là một con số bạn nên trừ thẳng khi tính ROAS — không phải lúc payout đến mới biết.

Phần 6 — Layer 4: Payout flow — VND vs USDT-TRC20 vs USD

Payout flow đa kênh — VND USDT USD qua settlement vault

Layer cuối. Conversion ghi xong, làm sao tiền vào tài khoản tôi để tôi trả tiền nhà Quận 3? Có ba kênh chính trong setup hiện tại.

Kênh 1 — USDT-TRC20 (crypto exchange referral)

Đây là kênh thanh toán tôi thích nhất. Crypto exchange (Binance, Bybit, OKX, MEXC, Bitget) trả referral commission bằng USDT trực tiếp vào ví spot của tôi trên cùng exchange. Timing:

  • Binance: payout daily, T+1 (commission earned hôm nay → ví ngày mai)
  • Bybit: payout daily, T+0 ở một số tier (instant)
  • OKX: weekly, every Monday
  • MEXC: daily, T+1
  • Bitget: weekly, Tuesday

Cái này nhanh nhất trong tất cả các kênh. Không cần đợi cuối tháng. Không cần KYC lại. Không cần wire transfer fee.

Khi tôi cần biến USDT thành VND để trả tiền nhà: P2P market trên Binance hoặc Bybit. Tỷ giá USDT/VND trên P2P thường tốt hơn rate ngân hàng ~0.3-0.8%. Bán trong vài phút, VND vào tài khoản Vietcombank/MB Bank của tôi trong 1-3 phút (bank transfer nội địa instant).

Compliance: Việt Nam chưa có luật rõ ràng cấm crypto cá nhân (chỉ cấm là phương tiện thanh toán hợp pháp). Khai báo thuế: tôi khai như “thu nhập khác” — hiện chưa có form chuyên dụng cho crypto income, tôi consult một bên tư vấn thuế ở Q1 và họ note conservative — khai bằng đúng số VND nhận được sau khi convert. Số liệu tôi nhận về ngân hàng có thể trace, tôi giữ ghi chú P2P transaction đầy đủ trong Notion.

Cost: TRC20 network fee ~$1-2/transaction khi tôi rút USDT từ exchange sang ví ngoài (Tron blockchain). Khi nhận từ exchange referral, fee là $0 (intra-exchange). Khi P2P bán USDT, fee là $0 (Binance không charge maker side P2P).

Rủi ro: USDT depeg event (2022 đã từng ~$0.96 peak panic, sau hồi $1.00). Tôi giữ tối đa 2 tuần payout trong USDT, sau đó cash-out sang VND để tránh exposure.

Kênh 2 — Wise USD (Tier-1 networks)

Khi network là US/EU-based (một số ClickBank, Awin partner, một số ShareASale merchant), payout bằng USD bank wire. Tôi nhận qua Wise (Borderless account, USD balance trong UK).

Timing:

  • Network release payout end of month (net-30 sau confirm), sometimes net-15 cho publisher tier cao
  • Wise USD receive: ~1-2 ngày business từ network ACH
  • Wise → VND chuyển sang VietinBank Việt Nam: ~30 phút - 4 tiếng business hour

Wise FX rate USD→VND: gần mid-market, fee ~0.4-0.7%. So với Western Union hoặc bank wire trực tiếp (fee ~3-5%), Wise tiết kiệm rõ. Một payout $5,000 USD: fee Wise ~$25-35 USD, fee bank wire có thể ~$150-200 USD.

Compliance: Income khai báo qua tax authority — tôi đã đăng ký tax code freelancer cá nhân (TCT cá nhân), khai báo quarterly. Wise USD vào tài khoản cá nhân, tôi convert sang VND ngân hàng cá nhân, ghi chú nguồn (network nào trả). Chị Linh kế toán xử lý toàn bộ. Đây là phần nhiều solo affiliate VN làm sai — không khai báo, sau bị truy thu khi ngân hàng flag transaction > 100tr VND lên Cục thuế (luật chống rửa tiền VN, ngân hàng phải báo).

Limit: Wise có limit nhận USD $50K/transaction cho cá nhân không phải business account. Vượt hạn phải split. Tôi chưa từng đụng vì payout cá nhân tháng cao nhất ~$16K. Nếu bạn scale, mở Wise Business account.

Kênh 3 — VND nội địa (AccessTrade VN, MasOffer, Adflex, ANT Network)

Network Việt Nam trả thẳng bằng VND chuyển khoản nội địa. Timing:

  • AccessTrade Vietnam: payout monthly, net-15 sau khi advertiser xác nhận conversion (đa số ~T+30-45 từ click đến VND về tài khoản)
  • MasOffer: monthly net-30
  • Adflex: monthly net-30
  • ANT Network: bi-weekly cho publisher tier cao

VND vào thẳng tài khoản Vietcombank/MB Bank của tôi. Không có FX. Không có Wise fee. Không có crypto compliance question.

Cost: $0 (bank transfer nội địa Việt Nam giữa các ngân hàng ~0 VND qua NAPAS 247)

Tax: Network VN phát hành invoice cho mỗi payout, tôi giữ làm receipt. Khai báo thuế thu nhập cá nhân (TNCN) — 5% bậc đầu, 10% bậc sau (luật TNCN 2024). Lưu ý: nếu bạn nhận từ network VN >100 triệu VND/năm, network sẽ deduct 10% TNCN tại nguồn và bạn chỉ nhận net. Tôi đã hỏi confirm với AccessTrade — họ deduct 10% và phát chứng từ.

Speed comparison: VND nội địa chậm nhất trong ba kênh (net-30 trung bình), nhưng zero friction nhất khi cần trả tiền nhà.

Tỷ lệ phân bổ payout của tôi (8 tháng gần nhất)

Kênh% doanh thuAvg time-to-VND
USDT-TRC2058%2-3 ngày
Wise USD27%5-10 ngày
VND nội địa15%30-45 ngày

Tổng pipeline khá unbalanced về thời gian — 58% đến trong vài ngày, 15% đến sau 45 ngày. Khi tôi tính cashflow, tôi luôn phải khấu trừ phần “chưa thực thu nhưng đã ghi nhận” và keep buffer 6 tuần operating expense bằng cash VND trong account để tránh squeeze.

Mistake tôi đã trả phí: Payoneer 2023

Q2 2023 tôi mở Payoneer thay vì Wise để nhận USD từ một network US. Payoneer fee receive USD ACH: 1% ($30 trên $3,000 payout). Convert USD→VND của Payoneer: rate kém Wise ~1.2% ($36 trên cùng $3,000). Tổng overhead: $66. Wise cùng giao dịch chỉ tốn ~$15. Một payout, Payoneer đắt hơn $51. 5 payout/năm = $255 lãng phí so với Wise.

Đóng Payoneer. Chuyển hết về Wise. Payoneer chỉ còn dùng cho 1 network legacy không support Wise.

USDT vs USD: khi nào chọn cái nào nếu được lựa

Một số network cho publisher chọn payout currency — USDT hay USD. Lựa của tôi:

  • Nếu publisher rate USDT = USD (1:1 không bị haircut): chọn USDT vì fast + cheaper convert
  • Nếu USDT bị haircut ~1-2% (một số network US làm vậy): chọn USD qua Wise nếu volume >$2,000/payout, USDT nếu <
  • Nếu network base ở China hoặc Eastern Europe: USDT gần như luôn nhanh hơn và rẻ hơn

Không có rule cố định. Phải tính từng payout.

Phần 7 — P&L 8 tháng: doanh thu, chi phí, lãi ròng, học được gì

P&L 8 tháng — ascending step curve doanh thu lãi ròng

Đây là phần tôi do dự nhiều nhất khi viết. Tôi không thích share số chi tiết vì (a) số attract sự chú ý sai (người đọc focus vào con số $16K mà bỏ qua structure dẫn đến nó), và (b) số làm reader nghĩ kết quả của họ sẽ giống. Không. Số của bạn sẽ khác. Vertical khác, traffic source khác, kỹ năng khác, may mắn khác.

Nhưng nếu không share số, bài này là một bài rỗng. Cho nên đây là 8 tháng gần nhất, redacted một số detail nhạy cảm (cụ thể là tên advertiser cho mấy offer còn đang chạy).

Doanh thu

ThángProperty A (crypto)Property B (network reviews)ConsultingTổng
Tháng 10/2025$5,840$4,120$3,000$12,960
Tháng 11/2025$6,210$3,890$2,500$12,600
Tháng 12/2025$4,920$3,650$3,500$12,070
Tháng 1/2026$3,180$3,920$3,000$10,100
Tháng 2/2026$5,470$4,210$3,500$13,180
Tháng 3/2026$7,890$5,100$4,000$16,990
Tháng 4/2026$6,640$4,750$3,500$14,890
Tháng 5/2026$5,120$4,310$3,500$12,930
Trung bình$5,659$4,244$3,313$13,215

Doanh thu trung bình 8 tháng: ~$13,200/tháng, khoảng ~330 triệu VND ở tỷ giá hiện tại. Đỉnh $16,990 (tháng 3, một campaign crypto rip mạnh). Đáy $10,100 (tháng 1, mùa thấp điểm Tết — content engagement giảm).

Chi phí cố định

Khoản$/tháng
Vultr Tokyo VPS (2x — origin + backup)$48
Cloudflare Pro (1 zone)$20
Domain renew amortized (12 domain × $12/năm)$12
Email (Fastmail business)$10
Notion + Linear (workflow)$15
Postgres backup S3 (Wasabi)$8
Telegram Premium (alert bot)$5
Cursor IDE$20
Claude Pro (writing assist)$20
Twilio SMS alert$10
Tổng infrastructure$168
Nhân sự outsource$/tháng
Vietnamese copywriter (8h/tuần)$600
Designer freelance (ad-hoc, blended)$300
Chị Linh kế toán (Q1 hourly)$200
Tổng nhân sự$1,100
Khác$/tháng
Coffee + co-work day pass (cà phê làm việc)$80
Tools mua adhoc (Ahrefs, một số API key)$120
Tổng khác$200

Tổng chi phí cố định: ~$1,468/tháng (~36.7 triệu VND)

Chi phí biến đổi (traffic + media)

Đây là phần biến động lớn nhất. Tháng có push tiền vào paid traffic mạnh, chi phí lên $3,000-$4,500. Tháng SEO organic-only, chi phí biến đổi gần $0.

ThángPaid traffic spendNotes
Tháng 10/2025$2,400Adsterra popunder crypto VN
Tháng 11/2025$3,100Adsterra + RichAds test
Tháng 12/2025$1,800Cuối năm giảm spend
Tháng 1/2026$900Mùa Tết, giảm spend mạnh
Tháng 2/2026$1,600Resume sau Tết
Tháng 3/2026$4,200Bull run crypto, scale aggressive
Tháng 4/2026$3,500Tiếp tục scale
Tháng 5/2026$2,300Cycle dịu xuống
Trung bình$2,475

Lãi ròng

ThángDoanh thuCP cố địnhCP biến đổiLãi ròng (gross)
Tháng 10$12,960$1,468$2,400$9,092
Tháng 11$12,600$1,468$3,100$8,032
Tháng 12$12,070$1,468$1,800$8,802
Tháng 1$10,100$1,468$900$7,732
Tháng 2$13,180$1,468$1,600$10,112
Tháng 3$16,990$1,468$4,200$11,322
Tháng 4$14,890$1,468$3,500$9,922
Tháng 5$12,930$1,468$2,300$9,162
Trung bình$13,215$1,468$2,475$9,272

Lãi ròng trung bình (trước thuế): ~$9,272/tháng, ~232 triệu VND. Sau thuế TNCN (~15% blended cho mix USDT khai + VND khai + Wise USD khai): ~$7,881/tháng, ~197 triệu VND.

Đây không phải là $16K/tháng mà có người chụp screenshot rao trên Facebook. Đây là một solo affiliate operation 5 năm với kỷ luật tài chính, không có biến động khủng, lãi ròng sau thuế ~7.8K USD/tháng. Một dev senior ở FPT hiện tại lương ~70-90 triệu/tháng. Tôi đang kiếm gấp ~2.5-3x so với nếu tôi vẫn ở FPT, nhưng đổi lại là volatility, là 2 giờ sáng debug postback, là tự gánh tax, tự gánh health insurance ($80/tháng Bảo Việt private), tự gánh không có 13 tháng lương Tết.

Bài học sau 8 tháng số liệu

Một: Diversification matter. Tháng 1/2026 doanh thu rớt 24% so với tháng 12 do mùa Tết. Nhưng vì 3 nguồn thu (property A + property B + consulting) không correlate hoàn hảo, lãi ròng chỉ rớt 12%. Nếu tôi chỉ chạy property A, tháng đó tôi đã rớt ~30%.

Two: Paid traffic là leverage hai chiều. Tháng 3 tôi spend $4,200 paid traffic, return $16,990 doanh thu, ROAS ~4x trên paid spend cụ thể. Tháng 11 spend $3,100, return $12,600, ROAS ~4x. Pattern khá ổn định trong vertical crypto exchange VN. Nhưng tháng 1 nếu tôi vẫn spend $3,000 (như tháng 11), doanh thu chắc chắn không +$3,000. Sai mùa.

Three: Infrastructure cost ($168/tháng) là ~1.3% doanh thu. Đây là một con số tôi tự hào — vì tôi đã thấy nhiều affiliate VN trả $500-$1,000/tháng cho stack SaaS không cần thiết (Voluum + ClickFunnels + Mailchimp + Zapier + Convertkit + …). Backend engineer mindset cứu chi phí.

Four: Vietnamese copywriter $600/tháng là khoản chi tốt nhất tôi từng làm. Trước khi có copywriter (năm 2022), tôi tự viết Vietnamese content và mất 8-10h/tuần. Bây giờ bạn viết theo brief tôi gửi sáng thứ Hai, tôi review thứ Năm, publish thứ Sáu. Tôi save 8h/tuần, dùng 8h đó debug pipeline + đọc research. Ratio tốt nhất quyết định tôi mua được.

Five: Lãi ròng $9,272/tháng không phải là target. Target của tôi cho năm 2026 là stable $9-12K/tháng, không phải spike $20K/tháng. Tôi đã từng có spike $22K trong Q4 2023 (bull run crypto), tháng kế tiếp $8K, biến động khiến tôi căng. Stable mới là mục tiêu khi bạn đã 5 năm. Spike là cho người mới.

Những con số không có trong bảng

  • Số giờ làm việc trung bình: 38h/tuần (ít hơn FPT, không có overtime mật vụ)
  • Số lần làm 2 giờ sáng debug: ~6-8 lần/năm, đa số do advertiser-side change không thông báo
  • Tỷ lệ ngày bị burnt out cảm xúc: ~15-20%, đặc biệt khi advertiser clawback bất ngờ hoặc Google update ranking
  • Số khoá học affiliate tôi đã mua: 3, tổng $1,200, value ~$200 thật sự dùng được; phần lớn là một feature mình rút ra rồi áp dụng

Một note về so sánh với FPT lương senior

Vài bạn dev có hỏi tôi: “Anh ơi, lãi $9K/tháng thì cũng chỉ gấp 3 lương senior FPT, có đáng đổi không?” Câu trả lời tôi tự thuyết phục mình mỗi sáng:

  1. Lãi gross trong khả năng kiểm soát: ở FPT lương tăng theo grade band (+10-15%/năm trung bình cho senior). Trong affiliate, lãi tăng theo decisions tôi ra — nếu tôi build property C tốt, có thể +$2-3K/tháng trong 12 tháng. Trần thấp hơn về mặt psychological security, nhưng cao hơn về mặt actual ceiling.
  2. Optionality: tôi sở hữu property. Property A đang valuation ~$280K nếu tôi muốn sell (rough multiple: ~4x annual gross profit theo Empire Flippers data). FPT shares tôi từng có là ESOP — không liquid, value đa số nằm trên giấy.
  3. Time freedom: tôi đi gặp bố mẹ ở Đà Nẵng 5-6 lần/năm, ở lại 1-2 tuần mỗi lần. Tại FPT tôi đi được 2 lần và phải xin nghỉ phép.
  4. Optionality về địa lý: tôi đã work-cation ở Đà Lạt 3 tuần, ở Hội An 2 tuần, ở Chiang Mai 1 tháng. Không ai cần approve. Pipeline tự chạy.
  5. Volatility tax: ngược lại, mỗi tháng tôi không biết chính xác doanh thu sẽ là bao nhiêu. Tháng 1/2026 doanh thu rớt khiến tôi lo trong 2 tuần. Một số dev không chịu được level uncertainty này — đó là OK, FPT vẫn là job tốt.
  6. Healthcare và social safety net: ở Singapore tôi có công ty bảo hiểm. Ở Việt Nam solo, tôi mua Bảo Việt private $80/tháng + giữ buffer $20K cash emergency fund. Total cost của “không có công ty đỡ” là ~$1,200/năm thực, plus discipline để giữ buffer.

Tổng kết: nếu mục tiêu của bạn là salary maximization, FPT senior lên principal lên architect là path predictable. Nếu mục tiêu là optionality và ownership, affiliate là path khả thi nhưng đắt (3-5 năm để stabilize). Không phải one-size-fits-all.

Thuế chi tiết và operational reality

Đoạn này khô nhưng cần thiết — vì 80% affiliate VN solo bị stuck ở đây. Cấu trúc thuế của tôi:

  • Mã số thuế cá nhân (TCT) đăng ký 2022 với Cục Thuế Q3. Required vì tôi nhận USD vào ngân hàng cá nhân và USDT từ exchange.
  • Khai báo quý (thay vì monthly): hợp lý cho cá nhân có revenue biến động. Quarterly Q1 (Apr-15), Q2 (Jul-15), Q3 (Oct-15), Q4 (Jan-15 năm sau).
  • Quyết toán năm: trước 31/3 năm sau. Chị Linh kế toán làm — tôi chuyển statement, chị ghép, gửi qua eTax portal.
  • Thuế suất: TNCN bậc 1 (5% từ 0-5tr VND/tháng), bậc 2 (10% từ 5tr-10tr), bậc 3 (15% từ 10tr-18tr), tiếp tục tăng. Effective rate của tôi blended ~14-16% sau khi trừ giảm trừ gia cảnh.
  • Đóng BHXH tự nguyện: tôi đóng ~1.5tr VND/tháng để giữ thâm niên lương hưu — nhỏ nhưng matter cho retirement Vietnam future.
  • Ngân hàng flag transaction: ngân hàng VN báo lên Cục Thuế nếu một transaction >100tr VND hoặc cộng dồn >500tr VND/tháng. Tôi đã từng nhận một wire ~$8K (~205tr VND), Vietcombank gọi yêu cầu giải trình nguồn. Tôi gửi Wise statement + network invoice + tax filing copy — qua trong 3 ngày làm việc. Vì tôi đã khai báo đầy đủ. Nếu không khai, đây là chỗ chết.

Một số affiliate “tip” trên Facebook group là dùng ví crypto cá nhân để né thuế — vì cash-out P2P thì khó trace. Sai. Một, P2P statement Binance/Bybit là KYC’d, exchange có thể (và đã từng) share với cơ quan thuế khi có yêu cầu pháp lý. Hai, scale lên ~$10K/tháng thì lifestyle bạn (nhà thuê Quận 1, xe máy Honda mới, ăn uống cà phê) sẽ tự reveal. Cục Thuế không stupid. Khai báo đúng, ngủ ngon. ~15% blended không phải số lớn.

Health insurance tự mua

Tôi đã thử ba option:

OptionCost/thángCoverage
BHYT bắt buộc (qua TCT cá nhân)~250K VNDCơ bản, bệnh viện công, copay 20%
Bảo Việt An Gia (private supplement)~1.6tr VNDBệnh viện tư FV/Hoàn Mỹ, inpatient cover 80%
Pacific Cross International~3.5tr VNDCross-border medical (Singapore, Thailand)

Hiện tại tôi dùng combo BHYT + Bảo Việt. Pacific Cross dropped sau 1 năm — không claim được nhiều. Total ~$80/tháng health, đáng.

Kết quả 5 năm pipeline đo bằng KPI khác

Doanh thu không phải là KPI duy nhất tôi đo. Vài KPI khác đáng note:

KPIValue (5 năm trung bình)
Postback drop rate1.8%
Uptime tracker service99.94%
Mean time to recovery (MTTR) khi incident~38 phút
Reconcile gap (tracker count vs advertiser count)<3% rolling 30d
Email response time (consulting client)<6h business
Github commit days/tuần (operation infra repo)~3 ngày

Số cuối quan trọng nhất với tôi. 3 ngày commit/tuần nghĩa là tôi vẫn đang build, không phải maintain. Khi 3 thành 1, tôi biết tôi đang stagnate. Khi 3 thành 5, tôi biết tôi đang scaling.

Câu hỏi thường gặp

Pipeline affiliate của Minh có mấy layer và nguyên tắc là gì?

Bốn layer: Layer 1 Infrastructure (origin, edge, DNS, cert, monitoring), Layer 2 Tracker (click router, stamp click_id, redirect), Layer 3 Attribution (postback receiver, dedupe, fraud filter, payout calc), Layer 4 Payout (settlement USDT/VND/USD). Nguyên tắc đơn: mỗi layer phải đo được độc lập, và nếu một layer fail thì ba layer kia vẫn ghi log và báo alert. Đây là cách mọi production backend system viết — không phải vì cool, mà vì nếu một layer fail im lặng, bạn lỗ tiền hàng tuần trước khi biết.

Vì sao host trên Vultr Tokyo thay vì Singapore cho traffic Việt Nam?

Vì p95 và peak hour, không phải median. Median RTT Singapore thấp hơn Tokyo ở HCMC và Cần Thơ, đúng như địa lý. Nhưng p95 và peak hour 19:00–22:00 thì Tokyo ổn định hơn một bậc rõ ràng — ví dụ Cần Thơ → Singapore peak lên ~698ms còn → Tokyo ~211ms. Affiliate kiếm tiền từ marginal user, user mà landing page kịp load trước khi họ nản; p95 là cái user nản cảm thấy, median là cái dashboard hiển thị. Conversion theo p95, không theo median.

Voluum, RedTrack hay tự viết tracker — Minh chọn gì?

Đã chạy cả ba. Voluum ($199/tháng) UI tốt nhưng edge không có node Đông Á, latency cao, cancel sau 8 tháng. RedTrack ($83/tháng Solo) có edge Tokyo, setup nhanh, tốt cho người mới. Tracker in-house (Fastify + Postgres + Redis, ~1.200 dòng) thắng về latency và control, cost cận biên $0 khi đã có VPS, nhưng phải tự maintain và debug lúc 2 giờ sáng. Không có câu trả lời universal — phụ thuộc traffic volume, skill set, và độ phức tạp vertical. Người mới <100K click/tháng nên dùng RedTrack Solo trước.

Postback drop rate khác nhau thế nào theo nơi host tracker?

Đo trên cùng tracker code, cùng advertiser pool: host Tokyo 0,4% drop trên 22.000 conversion, Singapore 1,8% trên 19.400 conversion, Frankfurt 4,2% trên 8.100 conversion, US-east 6,7% trên 5.400 conversion. S2S postback yêu cầu tracker trả 200 OK trong window timeout; nếu tracker chậm, advertiser retry, sau 3 retry vẫn không 200 OK thì drop. Conversion vẫn xảy ra ở advertiser side nhưng bạn không thấy, không được trả. Đây là chỗ rớt tiền số một trong pipeline affiliate VN, lớn hơn cả creative.

Minh nhận payout qua những kênh nào và kênh nào nhanh nhất?

Ba kênh. USDT-TRC20 từ crypto-exchange referral (Binance, Bybit, OKX, MEXC, Bitget) nhanh nhất — payout daily T+0/T+1, chiếm 58% doanh thu, time-to-VND 2–3 ngày. Wise USD cho network tier-1 US/EU — chiếm 27%, time-to-VND 5–10 ngày, fee ~0,4–0,7% rẻ hơn bank wire nhiều. VND nội địa từ AccessTrade VN, MasOffer, Adflex — chiếm 15%, net-30 đến net-45, zero friction khi trả tiền nhà nhưng chậm nhất. Pipeline unbalanced về thời gian nên Minh giữ buffer 6 tuần chi phí bằng cash VND.

Có nên nghỉ việc dev để chạy affiliate full-time không?

Không, chưa. Giữ job, build pipeline part-time ít nhất 12 tháng, lãi ròng đạt 70% lương full-time mới cân nhắc — Minh mất 3 năm part-time trước khi quit Singapore. Affiliate có tháng âm: tháng 3/2025 mất $1.840 net vì một advertiser shut down giữa chu kỳ, bài học là không đo risk concentration (100% doanh thu tháng đó từ một advertiser). Lương dev là income floor; đừng đổi floor lấy ceiling khi ceiling vẫn còn rộng để leo. Kết quả ($13K/tháng) phụ thuộc vertical, content và traffic source, không chỉ architecture.

Phần 8 — FAQ

1. Tôi là dev mới, có nên nghỉ việc để chạy affiliate full-time?

Không, chưa. Giữ job, build pipeline part-time ít nhất 12 tháng, lãi ròng đạt 70% lương full-time mới cân nhắc. Affiliate volatility cao, dev income stable — bridge từng phần. Tôi mất 3 năm part-time trước khi quit Singapore.

2. Tracker in-house hay SaaS cho người mới?

SaaS. RedTrack Solo $83/tháng. Dành 6-12 tháng học workflow, debug được postback manual, đã có 3+ offer chạy cùng lúc — sau đó cân nhắc in-house. Đừng viết tracker trong tháng đầu chạy affiliate.

3. Vultr Tokyo có thật sự tốt hơn Singapore cho VN traffic?

Có, nhưng chỉ p95 và peak. Median Singapore vẫn tốt hơn ~20ms. Nếu bạn không đo p95 (tức là không monitor RTT real-time), bạn sẽ không thấy khác biệt. Đo trước, quyết sau.

4. Crypto-exchange referral có còn cơ hội năm 2026?

Có nhưng saturate hơn. Năm 2022 dễ hơn nhiều. Bây giờ niche cần edge — Vietnamese-native content, tracking architecture tốt, social proof (Telegram channel + YouTube short). Nếu bạn chỉ chạy paid traffic thuần, ROAS đã thấp hơn ~30-40% so với 2022.

5. Postback drop rate bình thường là bao nhiêu?

Trong setup tốt: <2%. Trong setup mặc định (Voluum/RedTrack edge SG, không có regional mirror): 5-12%. Trong setup tệ (US-east origin, no edge): 15-25%+. Đo bằng cách compare advertiser-side conversion count vs tracker count weekly.

6. Có cần học SQL nếu in-house tracker?

Có. SQL là ngôn ngữ bạn debug data quality. Postgres + một chút Redis CLI là đủ cho operation cá nhân. Không cần BigQuery hay Snowflake — overkill cho volume cá nhân.

7. Nên ưu tiên SEO organic hay paid traffic?

Cả hai, nhưng SEO làm trước. SEO là moat — content rank Google trong 18-24 tháng vẫn còn rank. Paid traffic là leverage — dừng spend là dừng doanh thu. Pipeline tôi: SEO build baseline 40-60% revenue, paid traffic scale 30-50% upside.

8. Outsource Vietnamese copywriter ở đâu?

Facebook group “Cộng đồng Content Writer Việt Nam” hoặc Topcv freelance. Test 2-3 người với brief ngắn ($50 mỗi bài), pick người hiểu register Sài Gòn casual vs formal. Tránh agency lớn — tiền không vào tay người viết.

9. Tax compliance Việt Nam cho affiliate, làm gì trước?

Đăng ký mã số thuế cá nhân (TCT), khai báo quý đầu năm sau. Giữ receipt mọi payout (Wise statement, exchange withdrawal CSV, network invoice). Hire kế toán part-time $200-$400/tháng — đáng từng đồng. Đừng try DIY.

10. Pipeline này có replicate được không?

Có và không. : architecture (4 layer, Vultr Tokyo + Cloudflare, custom tracker, multi-channel payout) là pattern bạn replicate được. Không: kết quả ($13K/tháng) phụ thuộc vertical bạn chọn, content bạn viết, traffic source bạn build. Architecture giải quyết được ~30% outcome, ~70% còn lại là content + niche selection + persistence. Đừng nghĩ replicate architecture là replicate được income.


Tên tôi là Minh. Bài này dài hơn dự định 30%. Lý do: vì câu hỏi “5 năm sau bạn đang làm gì” không có câu trả lời ngắn nếu bạn muốn nói thật. Slide tuyển sinh khoá học có câu trả lời ngắn, vì nó cần ngắn để bán. Pipeline thật cần dài để giải thích, vì nó có 4 layer, mỗi layer có 5-10 chỗ rớt, và mỗi chỗ rớt là một bài học tôi đã trả phí.

Nếu bạn đọc đến đây, bạn không phải là người mới hỏi “làm sao kiếm $10K/tháng nhanh nhất.” Bạn là người muốn biết cái pipeline thật ra hoạt động thế nào. Câu trả lời: đo từng hop, ghi log mọi layer, đừng tin dashboard nào bạn không viết được, và stable hơn spike.

Nếu bạn có câu hỏi cụ thể, mở Telegram và nhắn @mqc_minh. Tôi trả lời chậm, nhưng tôi trả lời thật.

Quyền riêng tư

Lựa chọn quyền riêng tư của bạn

Chúng tôi sử dụng cookie để vận hành trang web và, khi có sự đồng ý của bạn, để đo lường mức sử dụng và cá nhân hóa nội dung. Bạn có thể thay đổi lựa chọn bất cứ lúc nào.

Trợ năng

Cài đặt trợ năng

Tùy chỉnh giao diện và chuyển động của trang web. Chỉ lưu trên trình duyệt này.