Release 145
UI in 15 languages with RTL, AI-powered traffic-quality reports, incognito and connection-type targeting, price rules at campaign and advertiser level, no-click capping.
Released: March — April 2026. A big feature release: the whole UI becomes multi-language, targeting gains new dimensions and two new entity levels, and the platform gets faster.
New features
Multi-language UI — 15 languages, including RTL
The account and admin UI is now available in 15 languages: English, Arabic, Bengali, Chinese, French, German, Hebrew, Hindi, Indonesian, Japanese, Korean, Portuguese, Ukrainian, Urdu and Spanish — with full right-to-left layout for Arabic, Hebrew and Urdu. Your language is set in user preferences; network administrators can set a white-label default and control whether users may switch languages.
AI-powered traffic quality reports
A new admin-triggered traffic quality analyzer aggregates impression, click and conversion patterns per network daily and produces a structured, AI-written fraud-risk summary. Admins can also force a scan on demand. The feature is off by default; Epom switches it on for a network. See Moderation and traffic quality.
Incognito mode detection and targeting
Ad requests now detect whether the browser is in incognito/private mode. You can target or
exclude incognito traffic (a new targeting dimension
with its own permissions), use the $$INCOGNITO_MODE$$ macro, and
frequency capping automatically switches to server-side storage for incognito users, since
cookies don’t persist there (see the capping matrix). The
signal is also passed to DSPs in bid requests.
Connection type targeting
Target by network connection type — Wi-Fi, cellular, ethernet and more — on both the supply and demand side, matching the OpenRTB connection-type signal. Analytics reports can group and filter by connection type. See targeting dimensions.
Price adjustment rules at campaign and advertiser level
Price adjustment rules, previously banner-only, can now be defined on campaigns and advertisers too. Rules cascade — advertiser, then campaign, then banner — with the banner rule taking highest priority. Rules can also now be edited in place (previously delete + re-create), and placement price rules gain a fixed-CPM action alongside the existing multiplier.
Targeting on advertisers, pretargeting on zones
Targeting rules can be set at two additional levels: advertiser (applies to all its campaigns and banners — see add targeting) and zone (supply-side pretargeting). The full six-level hierarchy — site, zone, placement, advertiser, campaign, banner — is evaluated from broadest to narrowest scope.
No-click frequency capping
A new campaign-level option stops serving a banner to a user who hasn’t clicked after a set number of impressions — reducing spend on creatives a given user ignores. See frequency capping.
DSP request enrichment
DSP partners can be configured to mark impressions as
interstitial in outgoing bid requests, and bid requests now forward the X-Requested-With
header so DSPs can correctly distinguish in-app from web traffic.
Improvements
- Country groups in analytics — custom country groups (introduced in Release 143) can be used as a single group-by dimension in reports, so you can see performance per tier rather than per individual country. See analytics dimensions.
- Content adapter template for all banner types — the placement content-adapter
template, previously native-only, now works with regular banner types too, using the
$$AD_CONTENT$$macro. - IAB-standard GDPR macros —
${GDPR}and${GDPR_CONSENT_XXXX}macro formats are supported in click URLs, per the IAB AdServer Macros specification. - Publisher-supplied site ID for DSPs — aggregator publishers can pass a custom parameter that overrides the site ID sent to DSPs, exposing per-site identifiers to bidders.
- New fraud signals in impression data — browser language, raw Accept-Language header and client time zone are recorded with impressions for fraud analysis.
- Telegram deep links —
tg://URLs are accepted by URL validation. - DSP pricing model naming — the “CPV” pricing model was renamed to “CPI” (cost per impression) to describe what it actually bills on.
Bug fixes
- Connection type targeting rules were silently ignored in production — saved rules now reach the serving pipeline, and connection type is available as an analytics group-by and filter.
- Saving an advertiser or a site now always applies validation and permissions — a save that fails either is rejected.
- Valid Campaign Manager (DoubleClick) click-tracker URLs were rejected by overly strict validation.
- Search containing an underscore returned nothing — the underscore was being treated as a wildcard.
- Labels with uppercase letters were missing from the label filter dropdown.
- Password recovery emails could omit the site address when no reset host was configured — the white-label host is used as fallback.
- Banner edit page fired three 404 errors on every load due to a stale endpoint reference.
- View tracking was always off for programmatic winner banners due to fields missing from an internal copy operation.
- An unresolved language macro in bid requests caused some DSPs to reject requests.
- Unresolved custom-parameter macros can now be preserved (configurable) instead of always being stripped from ad markup.
- Additional fixes: DSP partner QPS values not displaying in the admin grid, editing API-created code banners with a size, publisher-role permission error on site placements, double template wrapping of native programmatic responses, and a post-release regression cleanup (search errors, missing Global country entry, zone tree errors).
Under the hood
Platform upgrades and performance work, including faster rendering of macro-heavy creatives.