The Technical Challenges of Advertising in Southeast Asia
Six countries, twelve languages, wildly different network conditions, and regulatory frameworks that change quarterly. Welcome to SEA ad-tech.
We serve ads in Singapore, Thailand, Vietnam, Indonesia, the Philippines, and Myanmar. On paper, "Southeast Asia" sounds like a single market. In practice, it is six completely different engineering problems wearing a trench coat.
The median mobile connection in Singapore delivers 45 Mbps. In Myanmar, it is 4 Mbps. Our ad creatives must work on both, and the same campaign often targets both. A 2MB hero video that loads in 350ms on a Singapore 5G connection takes 4 seconds on a Myanmar 3G tower. Four seconds is an eternity. The user has already scrolled past. The impression is wasted. The advertiser paid for nothing.
This post covers the five technical challenges that make Southeast Asian ad-tech fundamentally different from building for North America or Western Europe, and how we solve each one.
Network-Adaptive Creative Delivery
We do not serve the same creative to every user. We serve the creative that will actually load on their connection.
When a bid request arrives, it includes coarse network information: connection type (wifi, 4g, 3g, 2g) and sometimes an effective connection type estimate. We augment this with our own latency measurements. Our ad SDK pings our nearest edge node on initialization and reports the RTT. Combined with historical latency data for the user's ASN and cell tower (yes, we track performance by cell tower), we build a real-time estimate of available bandwidth.
Based on this estimate, we select from a creative variant ladder:
- Tier 1 (>15 Mbps): full video creative, 1080p, up to 3MB
- Tier 2 (5-15 Mbps): compressed video, 480p, max 800KB, with a static poster frame that displays instantly while the video buffers
- Tier 3 (1-5 Mbps): animated image sequence (AVIF with fallback to WebP), max 200KB, preloaded before display
- Tier 4 (<1 Mbps): single static image, max 40KB, with text overlay rendered client-side to avoid baking text into the image
The variant ladder is generated at campaign creation time by our creative pipeline, which is a Zig service that transcodes and optimizes assets. Advertisers upload one high-quality source creative. We generate 4-6 variants automatically. The transcoding pipeline produces all variants in under 8 seconds for a 30-second video source.
The impact is measurable. Before network-adaptive delivery, our average viewability rate in Myanmar was 34%. After: 71%. In the Philippines on mobile data, it went from 48% to 78%. Same campaigns, same targeting. The only change was serving creatives that actually load.
Complex Script Rendering in Ad Creatives
Southeast Asia uses some of the most typographically complex scripts in the world. Thai has no spaces between words and uses combining marks stacked above and below the baseline. Khmer has the tallest glyph stacking of any modern script. Burmese uses circular letterforms with a stacking system that breaks naive text renderers. Vietnamese uses Latin script but with 12 diacritical combinations that many font subsetting tools butcher.
This matters for ad-tech because dynamic creative optimization (DCO) means we render text into creatives at serving time. A campaign might say "50% off {product_name} in {city_name}" and we fill in the variables per user. If the text rendering is wrong, the ad is wrong. A Thai ad with broken word segmentation or misplaced tone marks looks unprofessional. Brand advertisers reject it immediately.
Our text rendering pipeline uses HarfBuzz for shaping, compiled to WebAssembly for client-side rendering and linked directly into our Zig creative service for server-side rendering. We maintain curated font stacks for all 6 primary SEA languages plus English and Mandarin. Each font is subsetted per campaign to include only the glyphs needed, which keeps the payload under 30KB for most campaigns.
For Thai word segmentation (required for line breaking since Thai has no spaces), we use a dictionary-based approach with a custom dictionary of 82,000 Thai words plus brand names and product terms that our Thai-market team maintains. The segmentation runs in 0.2ms for typical ad copy lengths.
We test every dynamic creative variant against a rendering oracle before serving. If the shaped text exceeds the bounding box, clips a descender, or triggers a known shaping edge case, the creative falls back to a pre-rendered static variant. We would rather serve a slightly less personalized ad than serve a broken one.
The Regulatory Patchwork
Singapore has the Personal Data Protection Act (PDPA). Thailand has its own PDPA, which shares a name but has different consent requirements. Indonesia has the PDP Law (UU PDP), enacted in 2022, with implementing regulations that are still being clarified. The Philippines has the Data Privacy Act. Vietnam has the Personal Data Protection Decree 13. Myanmar's regulatory environment is unpredictable.
Each framework has different rules for what constitutes personal data, what consent is required for ad targeting, how long you can retain data, and what cross-border transfer restrictions apply.
We made an architectural decision early: build for the strictest interpretation of all frameworks simultaneously. We do not maintain per-country compliance logic. Our data handling is privacy-first everywhere:
- No raw personal data in our ad-serving path. User segments are computed on-device by the SDK and transmitted as opaque, non-reversible segment IDs. The server never sees an email, phone number, device ID, or anything that constitutes personal data under any SEA framework.
- Consent is binary. If a user has not given explicit consent for personalized advertising, they get contextual ads only. No "legitimate interest" workarounds. No dark patterns.
- Data retention is 90 days for event-level data, then it is aggregated and the raw events are deleted. This satisfies the most restrictive retention requirements in the region.
- All data stays in Singapore. Our infrastructure runs in Singapore data centers. We do not transfer personal data across borders because there is no personal data to transfer.
This approach is more restrictive than any individual country requires. It is also dramatically simpler to implement and audit. We have one compliance model, one data architecture, one set of audit procedures. When Thailand updated its PDPA notification requirements in Q4 2025, we changed nothing in our infrastructure because we were already compliant.
Privacy-first architecture is not a sacrifice. It is a competitive advantage. We can enter new SEA markets without a 6-month compliance engineering sprint because our system is already built for the harshest constraints.
Device Fragmentation
The latest iPhone 16 Pro Max. A Samsung Galaxy A04 with 2GB of RAM running Android Go. A Xiaomi Redmi 9A. An Oppo A16 with a MediaTek Helio G35 that thermal-throttles after 30 seconds of sustained JavaScript execution. These are all real devices in our serving logs from a single campaign running across SEA.
Our ad SDK must run on all of them. It must not crash, must not cause jank, must not drain the battery noticeably, and must not consume more than 15MB of memory at peak. These are not aspirational targets. We enforce them in CI.
The SDK is 14KB gzipped. It is written in TypeScript, compiled with our own build pipeline that targets ES2017 (the oldest spec with async/await, which we need for non-blocking creative loading). We do not use any framework. No React, no Preact, no Lit. The DOM manipulation is 340 lines of vanilla JavaScript that creates exactly the elements needed and no more.
On low-end devices, we disable all animations, reduce measurement frequency from 100ms to 500ms intervals, and skip IntersectionObserver-based viewability tracking in favor of a simpler scroll-position check that avoids triggering layout recalculations. The viewability measurement is slightly less precise on these devices. It is still accurate enough for billing, and the alternative is crashing the user's browser.
We maintain a physical device lab in our Singapore office with 28 devices spanning the actual distribution of hardware in our serving footprint. Every SDK release is tested on all 28 devices with automated performance profiling. If any device exceeds 30MB peak memory or drops below 30fps during ad rendering, the release is blocked.
Multi-Platform Attribution and Payment
In North America, the attribution chain is relatively straightforward: user sees ad on Meta or Google, clicks, lands on advertiser site, converts. Two platforms, one currency, well-established attribution standards.
In SEA, the same user might see an ad in a LINE chat in Thailand, click through to a Shopee product page, add to cart on their phone, complete purchase on desktop using bank transfer, and the advertiser wants to know which ad drove that conversion. The ad was served by us, the messaging platform is LINE, the marketplace is Shopee, the payment method has no standard digital receipt format, and the advertiser wants a single attribution report denominated in Thai baht.
We handle multi-currency billing natively. Campaign budgets are set in the advertiser's preferred currency (SGD, THB, VND, IDR, PHP, USD). Real-time spend tracking converts at the exchange rate locked at midnight UTC daily. Invoicing uses the rate at invoice generation. The difference is absorbed as currency risk, which at our current volume is negligible.
Cross-border attribution is harder. We integrate with LINE's advertising API for Thailand, Zalo's ads platform in Vietnam, and GrabAds across the region. Each platform has its own attribution window, its own event schema, and its own definition of a "conversion." We normalize all of this into a unified event model in our Gleam-based attribution pipeline.
The attribution pipeline processes events from 8 different source platforms, deduplicates across a 7-day attribution window, applies last-touch and multi-touch attribution models, and outputs a single consistent view per campaign. It processes 2.3 million attribution events per day with a P99 latency of 340ms from event ingestion to attribution assignment.
The Compound Problem
None of these challenges is unique to Southeast Asia. Other regions have slow networks, complex scripts, regulatory diversity, device fragmentation, and multi-platform attribution. What makes SEA different is that you face all five simultaneously, in every campaign, across every impression.
A single ad request might require: selecting a network-appropriate creative with correctly rendered Thai text, for a device with 2GB of RAM, while respecting Thai PDPA consent requirements, and feeding the impression event into a cross-platform attribution chain that spans LINE, Shopee, and our own serving infrastructure.
Every layer must work. If any one fails, the impression is wasted or, worse, non-compliant. This is why we build our own infrastructure instead of stitching together SaaS tools designed for simpler markets. The integration surface between these five challenges is where all the complexity lives, and no third-party tool understands that integration.