Networks & compliance

Not every network can send the click to your website.

The technical spec is only half the story. Before the file format matters, the destination does: three of these networks can send a tap to a website, and the rest are built to send it to an app store listing. If you do not have an app, only the first group is usable today.

Below that, the rules are not opinions — down to the JavaScript dialect and the wording of a legal line. We hold the current spec for all nine and build to it, rather than building once and hoping.

Website campaigns

These accept a landing page as the destination, so a retail, fintech, travel or subscription brand with no app can run them.

AppLovin

Single .html · modern JS
Where the click lands
Supports consumer brands with website destinations and optimises towards purchases, sign-ups and subscriptions. Playable acceptance still depends on how the account and campaign are set up.
Delivery
One self-contained HTML file.
MRAID
Injected by the SDK — the build must not add its own script tag.
Store URL
Set at campaign level; the CTA opens without an argument.
Analytics
Playable Analytics events are required, fired from the exact event vocabulary and never duplicated.
Orientation
Responsive reflow, portrait and landscape.
Disclaimer
Required when a payout is shown.

Mintegral

ZIP · ES5 only
Where the click lands
Its tracking documentation allows either an app download URL or a landing page URL. It is still a mobile app-first platform, so confirm a website playable campaign with your Mintegral contact before committing budget.
Delivery
ZIP with the HTML named index.html inside.
JavaScript
ES5 only. No arrow functions, template literals, const/let or spread.
WebView limits
No clamp(), no env() safe-area insets, no flex gap, no viewport-fit=cover.
Stage
Fixed canvas, scaled by transform — 375×667 portrait, 667×375 landscape. No media queries.
Lifecycle
gameStart, gameClose, gameEnd and gameReady hooks, with the win condition calling gameEnd before the win screen.
Disclaimer
Required on every build, verbatim.

Meta Ads

Single .html · modern JS
Where the click lands
Facebook and Instagram playables run against an app install objective by default, but the same account can send the click to a website through a traffic or conversions campaign. Confirm the objective before the upload so the CTA lands where you expect.
Delivery
One self-contained HTML file under 5 MB, everything inlined.
CTA
Meta's own click handler, fired only by a real tap.
Engagement rule
A visible CTA throughout, or an end card reachable in the first five seconds.
Orientation
Responsive reflow, portrait and landscape.

App-install campaigns

These require an app as the destination. We still build and test for them, but they are only useful once you have an App Store or Google Play listing to point at.

Google App campaigns

Single .html · no money language
Where the click lands
App campaigns exist to win or re-engage app users, so the destination is always an app listing. A website is not a valid destination here — that needs a different Google campaign type.
Delivery
One self-contained HTML file.
Exit
ExitApi where present, clickTag as the fallback.
Copy
No cash, earnings or payout wording, and no currency symbols anywhere. Rewards, points and gift cards instead.
Localisation
Copy dictionary preserved, so a language swap does not require a rebuild.
Orientation
Responsive reflow, portrait and landscape.

Unity Ads

ZIP · viewability-gated
Where the click lands
Unity's standard user-acquisition product requires an advertised app imported from an App Store or Google Play URL, so playable campaigns there are app installs only.
Delivery
ZIP with the HTML named index.html inside.
CTA
Store URL passed explicitly, and only ever fired by a real tap.
Start
Gated on MRAID viewability — the mechanic waits until the unit is actually on screen.
Disclaimer
Not required.

TikTok Ads

ZIP · modern JS
Where the click lands
TikTok's playable format is built for app promotion: the interactive unit follows a video and the click opens the store listing. Website destinations use TikTok's other creative formats instead.
Delivery
ZIP with the HTML named index.html inside.
CTA
TikTok's store bridge, never opened automatically.
Timing
The first interaction has to be possible within three seconds.
Completion
The build tells TikTok when the round is over so its end card can follow.

Liftoff / Vungle

ZIP · ES5 only
Where the click lands
Liftoff (Vungle) is a mobile performance network: creatives are attached to an advertised app and the CTA opens an App Store or Google Play listing.
Delivery
ZIP with the HTML named index.html inside, under 5 MB.
CTA
Store URL passed explicitly, chosen per device at runtime.
Start
Gated on MRAID viewability, with a safe fallback that only starts the game.
Compatibility
ES5 on a fixed, scaled stage for older webviews.

Moloco Ads

Single .html · MRAID
Where the click lands
Moloco is a performance DSP for mobile apps, so the creative is served through standard MRAID and the click goes to the advertised app's store listing.
Delivery
One self-contained MRAID HTML creative.
CTA
Plain mraid.open(url) — no vendor bridge, no auto-exit.
Start
Waits for MRAID ready and the first viewable event.
Requests
No network calls at runtime.

Pangle

ZIP · ES5 only
Where the click lands
Pangle is ByteDance's external app inventory, strongest in Asia. Like TikTok it promotes apps, so the CTA opens a store listing rather than a website.
Delivery
ZIP with the HTML named index.html inside, under 5 MB.
CTA
The ByteDance store bridge, same family as TikTok.
Compatibility
ES5 on a fixed 375×667 stage, scaled to the slot.
Completion
The round end is signalled before our own end card appears.

Buying platforms for a website destination

These are display and programmatic platforms, not app networks: the click goes to your site. Three builds cover all eight — Google Display and Display & Video 360 share one file, Adform has its own package, and the rest take the same IAB bundle with a different click macro.

PlatformBuild usedAccessBest for
Google Display AdsGoogle Display / DV360Self-serve, restrictedSmaller advertisers and broad reach across the Google Display Network.
Google Display & Video 360Google Display / DV360Agency or enterpriseSerious programmatic buying across exchanges with full frequency and audience control.
AdformAdformManaged or agencyEuropean brands and agencies that want one platform for creative and buying.
StackAdaptProgrammatic DSP (IAB)Managed or agencyMid-market advertisers and agencies wanting programmatic reach without an enterprise contract.
The Trade DeskProgrammatic DSP (IAB)Agency or enterpriseLarge-scale premium programmatic across open-web and CTV-adjacent inventory.
Amazon DSPProgrammatic DSP (IAB)Managed or agencyRetail and e-commerce brands buying against purchase-intent audiences.
Microsoft / XandrProgrammatic DSP (IAB)Agency or enterpriseBroad web inventory, especially where Microsoft audience data matters.
AdRollProgrammatic DSP (IAB)Self-serveShopify and direct-to-consumer retargeting.

Google Display Ads

Anyone can open a Google Ads account, but uploading HTML5 creatives is only unlocked on accounts with enough spend and history. Until then the same bundle runs through Display & Video 360 or another platform below.

  1. 1Download the ZIP below — index.html sits at the archive root.
  2. 2In Google Ads open Assets → Ads → + → Upload display ad → HTML5.
  3. 3Upload the ZIP, then upload the backup image at the same size.
  4. 4Set the final URL; Google fills clickTag automatically.
  5. 5Preview in the Google HTML5 validator before saving.

Google Display & Video 360

DV360 seats are sold through Google or a reseller, so this route usually runs via an agency or an in-house programmatic team.

  1. 1Download the ZIP below.
  2. 2In DV360 open Creatives → New creative → Display → Upload HTML5.
  3. 3Upload the ZIP and confirm the detected dimensions.
  4. 4Add the landing page as the exit URL; the clickTag is picked up automatically.
  5. 5Attach a backup image and submit for exchange review.

Adform

Adform sells through its own commercial teams and agency partners, and is one of the strongest options for European inventory and data rules.

  1. 1Download the ZIP below — it contains index.html plus the Adform manifest.json.
  2. 2In Adform open Creatives → HTML5 banner → Upload package.
  3. 3Adform reads the manifest, so the size and the clickTAG variable are detected for you.
  4. 4Set the landing page on the creative and run the built-in validator.
  5. 5Attach the creative to the line item and submit.

StackAdapt

StackAdapt is one of the more approachable DSPs — self-serve seats are available to mid-market advertisers as well as agencies.

  1. 1Download the ZIP below.
  2. 2In StackAdapt open Creatives → New creative → HTML5.
  3. 3Upload the ZIP and set the landing page.
  4. 4Paste ${CLICK_URL} as the click macro in the builder before exporting so the click is tracked.
  5. 5Preview and attach the creative to the campaign.
Click macro: ${CLICK_URL}

The Trade Desk

The Trade Desk sells enterprise and agency seats only, so buying here normally goes through a trading desk.

  1. 1Download the ZIP below.
  2. 2In The Trade Desk open Creatives → Add creative → Display → HTML5.
  3. 3Upload the ZIP and confirm the size.
  4. 4Use %%CLICK_URL_UNESC%% as the click macro so click tracking is attributed.
  5. 5Submit for exchange approval before launching.
Click macro: %%CLICK_URL_UNESC%%

Amazon DSP

Amazon DSP is mostly managed service or partner access; self-serve exists in some markets for established advertisers.

  1. 1Download the ZIP below.
  2. 2Send it to your Amazon DSP account manager or upload under Creatives → Third-party / HTML5.
  3. 3Set the click-through URL on the creative record — Amazon appends its own click tracker.
  4. 4Leave the click macro empty in the builder unless your account manager gives you one.
  5. 5Allow time for Amazon's creative policy review.

Microsoft / Xandr

Xandr Invest is bought through Microsoft Advertising or an agency seat rather than a public self-serve signup.

  1. 1Download the ZIP below.
  2. 2In Xandr open Creatives → Create → HTML5 and upload the ZIP.
  3. 3Use ${CLICK_URL} as the click macro in the builder before exporting.
  4. 4Set the landing page and audit the creative.
  5. 5Attach it to the line item once the audit clears.
Click macro: ${CLICK_URL}

AdRoll

AdRoll is fully self-serve and connects directly to Shopify and other commerce platforms.

  1. 1Download the ZIP below.
  2. 2In AdRoll open Ads → New ad → HTML5 and upload the ZIP.
  3. 3Set the destination URL on the ad; AdRoll handles click tracking itself.
  4. 4Leave the click macro empty in the builder.
  5. 5Add the ad to the retargeting campaign.

Reference templates: Google Display HTML5 · programmatic HTML5 (IAB)

What the QA report tells you before you upload

Every build carries its own report: file size against the network limit, external requests found, touch event coverage, safe-zone violations, disclaimer presence and exact wording, and whether the output is ES5 where ES5 is required.

It is the same document your legal team will ask for, and the same one that stops a rejection three days into a flight.

See where QA sits in the pipeline →

Start with a link. Ship a playable.

Your first playable is free: the plan, the build and phone testing. Pick a plan to download it for your network, and that first ad is on us.