Skip to main content
You are paid only for rendered impressions. An impression is billable only when the ad meets the IAB viewability standard: at least 50% of the ad is visible in the viewport for at least 1 continuous second. Ads that are rendered off-screen, hidden behind modals, or never scrolled into view are not counted and not paid.
To maximise billable impressions:
  • Place ads in visible, high-attention areas — inline in the conversation flow, not below the fold or behind collapsible sections. If the user is unlikely to see it, it won’t count.
  • Follow the Acceptable Ads Standard — ads should be clearly labeled (“Sponsored”), non-intrusive, and blend with your UI without deceiving users.
  • Fire the view ping only on viewability — see Tracking → Fire Impressions on Viewability. Firing before the ad is visible inflates unverified impressions and hurts your payout ratio.

Avoiding Ad Blockers

Most ad blockers use CSS selector and network request pattern matching. If your ad component is blocked, the impression is never rendered and you don’t get paid. Follow these rules:
  • Do not use class names or IDs containing ad, ads, advert, banner, sponsor, or promo (e.g. avoid .ad-container, #sidebar-ad, .ad-banner). Use neutral names like .message-card, .info-block, or .content-item.
  • Do not use <div> or <section> elements with data-ad, data-advert, or similar attributes.
  • Do not load ad images from URLs containing /ads/, /ad-assets/, or /banners/. Proxy through your own CDN or use generic paths.
  • Do not make network requests to domains or paths that match common ad-block filter lists (e.g. pagead, doubleclick, adserver). Thrad tracking URLs (ssp.thrads.ai/api/v1/tracking/...) are not on standard block lists.
  • Do render ads using the same UI components as your regular chat messages — the more native the ad looks in your component tree, the less likely it is to be filtered.
Thrad ad responses are plain JSON over your existing API connection — there are no third-party scripts, iframes, or tracking pixels that trigger ad blockers. The main risk is your own frontend code using naming patterns that get caught by cosmetic filters.

Impression Quality Assurance

Thrad uses a multi-factor verification engine for Impression Quality Assurance (IQA). Every impression ping is analyzed for telemetry consistency, network signals, and behavioral patterns before it is counted toward billing.

How it works

Our IQA engine analyzes network telemetry, IP reputation, and behavioral patterns across the full impression lifecycle. Impressions that fail verification are classified as Invalid Traffic (IVT) and are automatically filtered during the billing cycle.

What publishers need to do

For server-to-server (S2S) integrations — where your backend fires view URLs on behalf of the user — you must forward the end-user’s original headers:
  • X-Forwarded-For — the user’s real IP address
  • User-Agent — the user’s real device string
Without these headers, the view ping will be rejected with a 400 Bad Request. See Fire Impressions on Viewability for details.
For browser integrations using the publisher tag, or mobile apps firing view URLs directly from the device, these headers are sent automatically. No additional work is needed.

Settlement

Payments are based on Verified Impressions — impressions that pass all IQA checks. Impressions originating from data center IP ranges, exhibiting non-human behavioral patterns, or missing required headers are excluded from the billable total. A breakdown of verified vs. unverified impressions is available in the reporting dashboard.