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:
Ad request
→ balance / budget check
→ geo (country / region)
→ postal code
→ device
→ OS
→ browser
→ daypart (hour)
→ weekday
→ site / zone blacklist
→ tag matching (media type / content / audience)
→ auction rankingEmpty 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
| Dimension | Values | Description |
|---|---|---|
| Geo | Country code (ISO 2-letter) / region | Serve only when the visitor's IP country/region matches |
| Postal code | Comma-separated codes (prefixes) | Prefix matching, e.g. 90 matches 90210 |
| Device | PC / MOBILE / TABLET | Detected from the visitor's User-Agent |
| OS | WINDOWS / MACOS / IOS / ANDROID / LINUX / OTHER | Detected from UA |
| Browser | CHROME / EDGE / FIREFOX / SAFARI / IE / OTHER | Detected from UA |
| Daypart | List of hours 0–23 | Matched against the current hour in server time |
| Weekday | 1–7 (1 = Monday, 7 = Sunday) | Matched against the current weekday |
| Tags | Media type / content tags / audience tags | Intersection of ad and zone tags (ANY logic) |
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:
| Type | Field/mechanism | Effect |
|---|---|---|
| Target geo | target_countries / target_regions | Serve only in these countries/regions |
| Target postal codes | target_postal_codes | Serve only in these postal codes (prefixes) |
| Exclude content tags | exclude_content_tags | Never serve on zones hitting the excluded tags |
| Site/zone blacklist | Campaign blacklist | Specified 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 (±%)
At the ad-group level you can configure bid_adjustments to add or subtract a percentage from the base bid by device / geo / OS, raising bids for high-value traffic and lowering them for low-value traffic.
Data structure
bid_adjustments is a JSON organized by dimension, with percentage values (positive or negative):
{
"device": { "MOBILE": 20, "PC": -10 },
"geo": { "US": 15, "JP": -20 },
"os": { "ANDROID": -5 }
}Meaning: mobile +20%, PC -10%, US traffic +15%, Japan traffic -20%, Android -5%.
Calculation rules
The engine resolves three dimension keys from the current request — device (PC/MOBILE/TABLET), geo (uppercase ISO country code), and os (WINDOWS/MACOS/IOS/ANDROID/LINUX/OTHER) — and sums the matched percentages before applying them to the base bid:
effective bid = base bid × (1 + Σ matched percentages / 100)For example, with a base bid of 0.50, a request from the US on Android mobile hits +15% + (-5%) + 20% = +30%, so the effective bid is 0.50 × 1.30 = 0.65.
Key implementation details
- Matched percentages are summed and applied together, not multiplied dimension by dimension.
- The adjustment factor is clamped to
[0, +∞): if the cumulative reduction exceeds -100%, the effective bid goes to zero — there is never a negative bid. - The effective source prefers the ad group's own
bid_adjustments; when the ad group has none (null/empty), it falls back to the parent campaign'sbid_adjustmentsas the default. - The adjusted "effective bid" directly participates in the subsequent auction ranking and decides which ad represents a creative that's linked to multiple ads.
Auction ranking and clearing price
Creatives that pass targeting enter roulette-wheel selection by effective bid:
- Each creative's chance of being picked is proportional to its effective bid — high bids are likely to win, low bids still have a chance, avoiding one ad monopolizing forever.
- On winning, the clearing price follows a second-price approach:
clearing price = max(floor, second-highest bid + minimum increment), and never exceeds the winner's own bid. - A zone can set CPC/CPM floors (
floor_price_cpc/floor_price_cpm), and the platform can also set minimum CPC/CPM bid thresholds; bids below the threshold are filtered out.
Pricing models
Billing is configured at the ad-group level (a single campaign can have ad groups with different billing methods):
| Model | Full name | Billed on | Best for |
|---|---|---|---|
| CPC | Cost Per Click | Each click | Performance traffic, paying per visit |
| CPM | Cost Per Mille | Per thousand impressions | Brand exposure, paying for visibility |
| CPA | Cost Per Action | Each conversion | Performance conversion, paying for results |
The bid resolution chain
The ad's actual base bid prefers the ad's own bid_price; when the ad has no separate price, it falls back to the parent campaign's price. The per-dimension bid adjustments above are then layered on to get the effective bid.