← Back to formats

Brand Store - Mobile Integration Playground

Step-by-step guide for mobile app developers. Execute each step to see the network requests in action.
No JS SDK required - all calls are direct HTTP requests that you can implement in Swift/Kotlin.

Note: This example shows the Brand Store format (single ad button). For other formats, the integration flow is similar. However, formats that display multiple products (e.g., Branded Products) require additional work - you'll need to attach click tracking URLs to each displayed product individually. The general flow (fetch → parse → track impression → track clicks) remains the same.

Configuration

1

Fetch Ad from Bidder

Pending
Request Body (OpenRTB)
Loading...
Click "Execute" to fetch ad from bidder
2

Parse Response

Waiting
Parse bid.adm
// Extract bid from response
const bid = response.seatbid[0].bid[0];

// Parse adm (it's a JSON string)
const adm = JSON.parse(bid.adm);

// Extract tracking data
const gctx = adm.gctx;           // Global context
const lctx = adm.lctx;           // Local context
const adclick = adm.meta.adclick; // Click tracking base URL
const click = adm.fields.click;   // Click parameter

// Construct click URL
const clickUrl = adclick + encodeURIComponent(click);

// DSA info (optional)
const dsa = bid.ext?.dsa;
Waiting for Step 1...

Live Preview

This is what the ad button would look like. Shop provides all display data.

Render Ad fires two events:
  • /ems - Impression event (ad loaded)
  • /av - Active View event (viewability confirmed)
Click the ad fires click tracking pixel.
⚠️ Active View (/av): Your app must implement viewability measurement!
MRC/IAB Standard: Fire /av only when ≥50% of ad pixels are visible for ≥1 continuous second.
Use platform APIs: iOS (UIView visibility), Android (View.getGlobalVisibleRect) + timer.
Complete Steps 1-2 first
Click "Render Ad" to display the ad and fire impression
3

Fire Impression Event

Waiting Debug
Track Impression (when ad becomes visible)
// Build event data
const eventData = {
    gctx: gctx,
    ems: [{
        lctx: lctx,
        is_measurable: true
    }]
};

// Encode and send
const encoded = encodeURIComponent(JSON.stringify(eventData));
const url = `https://das.idealo.com/${networkId}/v1/events-processor/ems?eventData=${encoded}`;

// Fire impression tracking (GET request)
fetch(url, { credentials: 'include' });
Auto-fired when you click "Render Ad" above, or execute manually here.
4

Fire Click Tracking

Waiting Debug
Track Click (when user taps the ad)
// Construct click tracking URL
const clickUrl = adclick + encodeURIComponent(click);

// Fire click pixel (non-blocking)
new Image().src = clickUrl;

// Then open the shop URL
// In mobile app: open shopData.productUrl in browser/webview
window.open(shopProductUrl, '_blank');
Auto-fired when you click the ad preview above, or execute manually here.

Network Log

Network requests will appear here...