Skip to content

Targeting & Bidding ​

On every ad request, ADBNK's ad engine evaluates the targeting rules of each candidate campaign, then ranks the creatives that pass by eCPM. This page covers the supported targeting dimensions, include vs. exclude zones, per-dimension bid adjustments (±%), and pricing models.

Targeting overview ​

A campaign is only considered for a request when the visitor matches every dimension you've configured; a campaign that fails any one of them drops out of that request.

Empty targeting = no restriction

Leaving any dimension empty means no restriction on that dimension — everything passes. Filtering only happens when a value is explicitly configured.

Supported targeting dimensions ​

DimensionValuesDescription
GeoCountry / regionServe only when the visitor's location matches
Postal codeComma-separated codes (prefixes)Prefix matching, e.g. 90 matches 90210
DevicePC / Mobile / TabletThe visitor's device type
OSWindows / macOS / iOS / Android / Linux / OtherThe visitor's operating system
BrowserChrome / Edge / Firefox / Safari / IE / OtherThe visitor's browser
DaypartHours 0–23The hours of the day to serve in
WeekdayMonday – SundayThe days of the week to serve on
Site category / content / media typeCategory and sub-category, content tags, website / app / Telegram Mini AppWhich kinds of sites and apps your ads appear on
Retargeting audiencesYour own visitor listsServe only to people already on the list

Every dimension is set in the new-campaign page: country is in the main form, the rest are under Advanced settings → Audience details and Schedule & frequency. Each one starts at No Limit; pick individual values to narrow delivery.

Audience targeting

Geo and postal code are best-effort

Geo and postal-code targeting are best-effort. Postal-code targeting is available for a limited set of countries; the form shows the accepted format once you pick one.

Site category and content targeting ​

Beyond the basic dimensions, you can target by site category (a primary category, optionally narrowed to sub-categories), content tags, and media type (website / app / Telegram Mini App). Publishers' sites are categorized when they join, so your ads follow the category of the sites they appear on.

Campaigns that were set to an older media type (such as "Mini Program (legacy)") keep it until you change the media type setting; the campaign page shows a grey note when that applies.

Media type over the API

The campaign field is target_media_types, an array of WEB, APP and TELEGRAM (upper case).

  • Leave the field out to keep the current setting. Send [], null or "" to clear it (no limit).
  • Otherwise send a non-empty array. Any value other than WEB, APP or TELEGRAM returns error.campaign.invalid_media_type, with one exception: an older value (such as "Mini Program (legacy)") that the campaign already has. Include it in the array to keep it; if the array leaves it out, it is removed. An older value can't be added to a campaign that doesn't already have it.
  • The array must contain at least one of WEB, APP or TELEGRAM. An array with only older values returns error.campaign.media_type_legacy_only; to remove the limit, send [] instead.

Include zones vs. exclude zones ​

Targeting supports both "include" (serve only) and "exclude" (never serve) configs:

TypeEffect
Target geoServe only in these countries/regions
Target postal codesServe only in these postal codes (prefixes)
Exclude content tagsNever serve on zones hitting the excluded tags
Site/zone blacklistSpecified sites or zones never participate in this campaign — see Blacklists

Include vs. exclude priority

Exclusion rules (excluded tags, blacklist) take priority over inclusion rules: as long as any exclusion is hit, the zone is dropped even if it meets all serving conditions.

Per-dimension bid adjustments (±%) ​

Bid adjustments let you pay more for traffic that converts and less for traffic that doesn't, without running a separate campaign for each segment. You set them on the new-campaign page under Advanced settings → Schedule & frequency → Bid adjustments (optional).

Bid adjustments

There are three groups, each a percentage input:

GroupRows availableNotes
DeviceMobile, Desktop, TabletAlways shown
OSAndroid, iOS, Windows, macOSAlways shown
RegionOne row per country you selected as a target countryEmpty until you pick target countries

Each input accepts -90% to +500%, in steps of 5. Leave a field blank (or 0) for no adjustment on that value — blanks are dropped on save, so an untouched form stores nothing at all.

Region rows come from your targeting

The Region group only lists the target countries you already selected. If you haven't picked any countries, the group shows a hint instead of inputs — pick your target countries first, then come back to bid per country.

How the adjustment is applied ​

Each ad request carries a device, a country and an OS, and ADBNK sums every percentage that matches:

effective bid = base bid × (1 + Σ matched percentages / 100)

With a base bid of $0.50 and adjustments of Mobile +20, US +15, Android -5, a request from a US Android phone matches all three: +20 + 15 - 5 = +30%, so the effective bid is $0.50 × 1.30 = $0.65.

Things worth knowing

  • Matched percentages are summed, not multiplied dimension by dimension.
  • The factor is floored at zero, so a heavily negative stack can drive the effective bid to 0 but never negative.
  • The effective bid is what enters the auction (after conversion to eCPM), so an adjustment changes how often you win, not just what you pay.
  • Values are clamped server-side to the same [-90, +500] range, so an out-of-range value sent over the API is trimmed rather than rejected.

Setting adjustments over the API

The console writes these into a bid_adjustments object on the campaign. If you're integrating directly rather than using the console, see bid_adjustments in the Advertiser API for the JSON shape.

Auction ranking and clearing price ​

A CPC bid and a CPM bid aren't comparable as raw numbers — $2.00 per thousand impressions and $1.00 per click are different units. So before ranking, every candidate's bid is converted into eCPM (expected revenue per thousand impressions), the single currency the auction uses.

  • Floor first. A zone's floor price is a hard filter: candidates below it don't take part. If nobody clears the floor, the zone serves no ad on that request.
  • Ranked by eCPM. Candidates compete on eCPM — a higher eCPM gives you a better chance of winning the impression.
  • Second price. The winner pays a clearing price set by the next-best competition, never below the floor and never above its own bid.
  • Charged in your unit. The clearing price is converted back into your billing unit — per click for CPC, per thousand impressions for CPM — so you are never charged more than you bid.

Bid adjustments feed into this

The effective bid from the section above is what gets converted to eCPM. Raising a bid for mobile doesn't just raise your price — it raises the eCPM you enter the auction with, and so how often you win.

Pricing models ​

The pricing model is set per campaign, in the Bid & budget section of the new-campaign page. All ads in the campaign bill the same way.

Billing type and bid

ModelBilled onBid meansRangeDefault
CPCEach click$ per click$0.005 – $50$0.05
CPMPer 1,000 impressions$ per 1,000 impressions$0.05 – $50$1.00
CPAEach conversion$ per conversion$0.10 – $1,000$5.00
CPVEach view$ per view$0.0001 – $0.05 (max 4 decimals)$0.001
CPSEach sale% of order value1% – 90%10%

CPS is a percentage, not an amount

A CPS bid of 10 means 10% of the order value, not $10. Entering 0.01 here doesn't mean one cent — it means one-hundredth of a percent, which is effectively no bid at all. The console switches the input's unit and range when you change model, and resets the bid to that model's default, precisely because carrying a number across models is always wrong.

Ranges come from the platform, not this page

The console fetches the allowed range for each model from the server, and the server validates against the same source. If a range here ever disagrees with what the console shows you, trust the console.

When you create a campaign yourself, the console offers CPC, CPM and CPV. CPA and CPS additionally require a bound conversion tracker before the campaign will save — see Conversion Tracking.

The bid resolution chain

An ad's base bid prefers the ad's own bid price; when the ad has none, it falls back to the parent campaign's bid. The per-dimension adjustments above are then layered on to produce the effective bid.

Documentation released under the MIT License.