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 effective bid in a probabilistic auction. This page covers the supported targeting dimensions, include vs. exclude zones, per-dimension bid adjustments (±%), and pricing models.

Targeting overview

Targeting uses short-circuit evaluation: if any dimension doesn't match, the campaign is eliminated immediately and no further dimensions are evaluated. The overall order is:

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 code (ISO 2-letter) / regionServe only when the visitor's IP country/region matches
Postal codeComma-separated codes (prefixes)Prefix matching, e.g. 90 matches 90210
DevicePC / MOBILE / TABLETDetected from the visitor's User-Agent
OSWINDOWS / MACOS / IOS / ANDROID / LINUX / OTHERDetected from UA
BrowserCHROME / EDGE / FIREFOX / SAFARI / IE / OTHERDetected from UA
DaypartList of hours 0–23Matched against the current hour in server time
Weekday1–7 (1 = Monday, 7 = Sunday)Matched against the current weekday
TagsMedia type / content tags / audience tagsIntersection of ad and zone tags (ANY logic)

In the console these dimensions live in Step 2 (Audience) of the campaign wizard. Each one starts at No Limit; unchecking it reveals the individual values you can pick:

Audience targeting in the campaign wizard

Geo/postal code depend on the IP database

Geo and postal-code targeting are based on GeoIP resolution of the visitor's IP. When the country or postal code can't be resolved, the engine lets it pass (it doesn't kill traffic just because it "can't tell"). Postal-code resolution currently covers US, CA, GB, BR, IE, JP, NL, PT, SG, and more.

Tag targeting

Beyond the basic dimensions, a campaign can target by media type (website/app/mini-program), content tags (gaming/esports, tech/gadgets, etc.), and audience tags (age, interest, behavior, etc.); publishers tag their zones accordingly. Matching takes the intersection of ad and zone tags (passing on any hit). See the platform's targeting-tag design for the full taxonomy.

Include zones vs. exclude zones

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

TypeField/mechanismEffect
Target geotarget_countries / target_regionsServe only in these countries/regions
Target postal codestarget_postal_codesServe only in these postal codes (prefixes)
Exclude content tagsexclude_content_tagsNever serve on zones hitting the excluded tags
Site/zone blacklistCampaign blacklistSpecified sites or zones never participate in this campaign

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 in Step 4 (Schedule & Budget) of the campaign wizard, under Bid adjustments (optional), right below the budget and frequency-cap fields.

Bid adjustments in the campaign wizard

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 in Step 2Empty until you pick target countries in Audience

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 countries you already selected under Audience targeting in Step 2. 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

The engine reads three keys off the incoming request — device, country, and OS — and 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 — including the ad-group-level override, which the console doesn't expose.

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 is converted into eCPM (expected revenue per thousand impressions), which is the only currency the auction speaks:

ModeleCPM conversion
CPCbid × pCTR × 1000
CPMbid (already an eCPM)
CPAbid × pCVR × 1000
CPVbid × 1000
CPSAOV × bid% / 100 × pCVR × 1000

Ranking then works like this:

  • Floor first. A zone's floor (floor_ecpm) is a hard filter: candidates below it are dropped before selection, not just repriced at clearing time. If nobody clears the floor, the zone serves no ad on that request.
  • Weighted roulette. Among survivors, a creative's chance of being picked is proportional to its eCPM — high eCPM usually wins, but a lower one still gets impressions, so no single ad monopolizes a zone forever.
  • Second price. The winner pays second-highest eCPM + $0.01, clamped to the floor below and to its own bid above. With no competitor it simply pays its own bid.
  • Converted back to your unit. The clearing eCPM is converted back into the winner's billing unit — a per-click price for a CPC winner, a per-thousand price for a CPM winner — and that's what you're actually charged. It can never exceed your 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 Step 4 (Schedule & Budget) of the wizard. 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.00005 – $0.05$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.

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.