WelcomeAD

Icon Ad Integration

Load one URL in a WebView and a ready-made icon ad appears. We handle the ad selection, the design, impression tracking and click tracking — your app only has to display it.

1. The endpoint

Send a GET request with your parameters in the query string.

https://ads.welcomead.com/api/v1/ad/view

It returns an HTML page, not JSON. Load it directly in an Android WebView or iOS WKWebView — no parsing or rendering needed on your side.

2. Full example URL

Replace YOUR_API_KEY with the key we provide:

https://ads.welcomead.com/api/v1/ad/view?bundle=com.yourcompany.yourapp&deviceid=device-abc-123&tag=games&format=icon&size=120x150&placement_ctr=2.5&device_ctr=1.8&country=India

3. Parameters

ParameterRequiredExampleDescription
keyOptionalwad_live_...Optional. Send it and your traffic is tracked separately for reporting and revenue share. Ads work without it too.
bundleOptionalcom.instagram.androidThe package name of YOUR OWN app (the one showing the ad). We use it to never advertise your own app back to your users — the user already has it installed.
installedOptionalcom.whatsapp,com.spotify.musicComma-separated package names already installed on the device. We never return an ad for any of them. We also remember them, so you do not have to resend the full list every time.
deviceidOptionaldevice-abc-123Unique device identifier. Enables install attribution, stops showing apps the user already installed, and rotates the ad so the same one is not repeated on every request.
tagOptionalgamesYour slot / content tag. Used for targeting and appears in reports.
formatOptionaliconAd format. Currently only 'icon' is supported. Defaults to icon.
sizeOptional120x150Slot size in pixels. The ad layout adapts automatically to fit.
placement_ctrOptional2.5This slot's historical CTR, in percent.
device_ctrOptional1.8This device's historical CTR, in percent.
countryOptionalIndiaUser country. Used for country targeting — ads that are not permitted in that country are never returned. Also recorded on impressions and clicks.

Only key is mandatory. The more targeting values you send, the better the ad we can pick — which means a higher click rate for you.

4. Try it right now

Open any example below in a browser — no setup needed:

Only needed if you want the test traffic attributed to you.

Prefer a form? Use the interactive URL builder to set parameters, preview the ad at different slot sizes, and copy the finished URL.

5. Android

WebView ad = findViewById(R.id.adSlot);
ad.getSettings().setJavaScriptEnabled(true);
ad.setBackgroundColor(Color.TRANSPARENT);

// IMPORTANT: store link must open outside the WebView
ad.setWebViewClient(new WebViewClient() {
  @Override
  public boolean shouldOverrideUrlLoading(WebView v, WebResourceRequest r) {
    startActivity(new Intent(Intent.ACTION_VIEW, r.getUrl()));
    return true;
  }
});

ad.loadUrl("https://ads.welcomead.com/api/v1/ad/view?bundle=" + getPackageName()
    + "&deviceid=" + deviceId + "&tag=games&format=icon&size=120x150");

6. iOS

let ad = WKWebView(frame: slot.bounds)
ad.isOpaque = false
ad.backgroundColor = .clear
ad.navigationDelegate = self
ad.load(URLRequest(url: URL(string:
  "https://ads.welcomead.com/api/v1/ad/view?bundle=\(Bundle.main.bundleIdentifier!)&deviceid=\(deviceId)&tag=games&format=icon&size=120x150")!))

// IMPORTANT: store link must open outside the WebView
func webView(_ w: WKWebView, decidePolicyFor n: WKNavigationAction,
             decisionHandler d: @escaping (WKNavigationActionPolicy) -> Void) {
  if n.navigationType == .linkActivated, let u = n.request.url {
    UIApplication.shared.open(u); d(.cancel); return
  }
  d(.allow)
}
Do not skip the link interception. Without it the Play Store page opens inside your small ad slot and the user gets stuck there.

7. Checking the response

HeaderMeaning
X-Ad-Filled: trueAn ad was returned — show the WebView.
X-Ad-Filled: falseNo ad available — hide the WebView.
X-Ad-IdThe served ad's ID, for your own logs.

On no fill we return an empty transparent page — never an error page — so a failed request can never show broken content inside your app.

8. What happens automatically

Because we render the ad, we can improve the design or add new formats without you shipping an app update.

9. Reporting installs

When an app that we advertised gets installed, tell us with one call. We match on the device ID and the package name, so send the same deviceid you used on the ad request.

An install is attributed only if that app's ad was clicked from that device within the last 7 days. This is standard click-through attribution — an impression on its own is not enough. In WebView mode the click goes through us automatically; in JSON mode you must open the click_url we return instead of linking straight to the store.

GET https://ads.welcomead.com/api/v1/ad/install
      ?deviceid=device-abc-123
      &package_name=com.example.game
ParameterRequiredNotes
deviceidYesThe same device ID you sent on the ad request. Alias: device_id.
package_nameYesThe installed package. Case does not matter. Aliases: package, bundle.
country, tagOptionalStored on the install event so it appears in country-wise and slot-wise reports.
click_idOptionalAlternative matching method, using the Play Install Referrer. If sent, it is used instead.
ResponseMeaning
200 · duplicate: falseInstall counted.
200 · duplicate: trueYou already reported this one. Safe to ignore.
404 · no_ad_servedWe never advertised that package to that device.
404 · no_clickThe ad was shown but never tapped on that device.
404 · click_expiredThe last click is more than 7 days old.
400deviceid or package_name missing.

Once an install is counted, we stop serving that app to that device, and the install appears in the advertiser's report the same day.