Product

DeepContext: from a plain-words brief to a campaign that buys only fitting content

Animated: six boxes in two rows, joined by a path. A dot travels through them in order — a context written in plain words, a run by the context engine, an inventory with a fit score and reason for each site and app, a group of the matches above the minimum score plus publishers added by hand, a campaign the group is attached to, and the bidder, which buys only the group's sites and apps and nothing at all if the group is empty. Each box lights as the dot reaches it; the bidder turns teal.

DeepContext lets an advertiser buy media where the content fits the brand, not where a person was tracked. Someone in ad operations describes the brand in plain words; AdZoic reads the sites and apps we are offered, scores each one for fit, explains why, and turns the best into a list that a campaign buys on — with no cookies and no user IDs. This post walks through how it works, step by step, and the problems it was built to avoid.

The problem

Targeting built on following people is breaking, and it was never a good fit for our markets.

  • Identifiers are disappearing. Phones ask before they allow tracking, browsers block third-party cookies, and most of our traffic arrives from apps with limited or no device IDs.
  • Privacy rules keep tightening. Every campaign that depends on a profile of a person carries legal and reputational risk — for the advertiser and for us.
  • Context was a black box. Older contextual tools took a fixed list of top websites, scored them once, and could not say why a site was in or out. Advertisers could not check the work.
  • Brand safety came too late. Unsafe pages were often found after the money was spent, in a report nobody could act on.
  • Nobody knew what we could actually buy. A plan built on sites a market does not offer us delivers nothing, and the gap was found only after launch.

How it works, in six steps

Three parts share the work. The dashboard holds the brief. A separate context engine does the reading and scoring, ahead of time. The bidder — the part of our system that decides whether to buy an ad — applies the result to live bids. The picture at the top of this post is the whole flow; here it is in order.

  1. Write the context. Pick the advertiser and describe the brand and the audience in plain words. Choose countries and languages. Add guardrails: keywords and content categories to prefer or exclude, a brand-safety level, and a minimum fit score.
  2. Name the publishers you already know. A seed list of sites, pages and apps that every run checks first — even before our own traffic has shown them to us.
  3. Run it. The context engine reads the sites and apps the exchanges actually offer us in that market, busiest first, and scores each one while you watch.
  4. Read the results. Every row has a fit score from 0 to 100, a summary, keywords, topics, language and brand-safety risk — and the reason for the score. Search, filter and sort; the engine suggests keywords and categories to add or exclude.
  5. Build the inventory. Each run adds to the context's stored inventory instead of starting again, and after you edit the brief, only what changed is scored again.
  6. Make a group. The matches above the minimum score become a group. Ad ops can add a known publisher by hand, and it stays pinned.
  7. Attach it to a campaign. From the group's page or from the campaign's own settings. From then on the bidder buys only on the group's sites and apps, and the group refreshes itself every week. Detaching is one click, from either side.
Animated: seven sites and apps, each with a fit-score bar from 0 to 100 that fills in one after another. A dashed line marks the minimum score. Bars past the line get a teal 'in the group' tag; the rest stay grey. One extra row, a publisher added by hand, is pinned and marked always in. Caption: the matches above the minimum become the group, and a pinned publisher stays in either way. Scores illustrative.

The line that makes a group. Everything above the minimum score is in; a publisher you add by hand is pinned, whatever its score. Scores are illustrative.

Exclude first, score second

Scoring is the part that costs — it means reading a site or an app and reasoning about it. So the guardrails run first. A site in the wrong language, an app in an excluded category, a page carrying an excluded keyword or a brand-safety risk is dropped at the gate, with the reason recorded, before any scoring effort is spent on it. Only what gets through is read and scored.

Animated: ten sites and apps flow from the left towards a scoring step. A gate of guardrails — language, categories, keywords, brand safety — stands in between. Four items turn red and drop out at the gate with their reason; six pass through and only then receive a fit score, shown as teal bars. Caption: rules exclude before scoring, so nothing is paid to score what a rule already rejects.

Guardrails are free and run first; scoring costs and runs last. Proportions are illustrative.

The same thrift applies across contexts. A page or app is read and profiled once, and that profile is reused by every context that asks about it. Each new run only pays for what the engine has not seen before — which is why a brand's second brief is faster and cheaper than its first. How we rebuilt our context engine explains the thinking behind that design.

The bidder buys only there

A group is not a suggestion. Once attached, it becomes the campaign's list of sites and apps, and the bidder treats that list as “only these”. A request from a site or app on the list can be bought; a request from anywhere else is not. A request that names no site or app at all cannot be on the list either, so it is not bought — the bidder never waves through what it cannot check.

One rule mattered enough to build on purpose. An empty group — attached before anything matched, or emptied by a weekly refresh — buys nothing, never everything. A target list that silently opens up is the worst failure a targeting tool can have, so the group page also warns when a group is empty.

Animated: bid requests arrive from the left. A gate checks each against the campaign's group. Requests from sites and apps in the group pass through in teal to a box marked bid; the rest, including requests that name no site or app, stop at the gate marked no bid. A note says an empty group buys nothing, never everything, and the group page warns about it.

The gate. In the group: bought. Not in the group, or unnamed: not bought. Empty group: nothing bought, with a warning on the page.

Two habits make this safe to operate. Attach a new group to a paused campaign first and look at what it would buy. And remember that every change to a group — a refresh, a pin, a removal — is pushed straight to every campaign using it, so the bidder never holds a stale list.

Problems we solved along the way

Each design choice answers a failure we saw in older tools or in our own first versions.

ProblemWhat DeepContext does
Scoring a fixed “top sites” list, not what we can buyReads our own bid stream: every site and app the exchanges offer us, ranked by how often it appears
Paying again for pages already analysedA page or app is read and profiled once, then reused by every context; each run only adds new inventory
Unclear yes/no verdictsOne fit score from 0 to 100, with the reason, keywords, topics and risk shown for every item
Unsafe content found after spendLanguage, category, keyword and brand-safety exclusions applied before any scoring, with the reason shown
Crawling that gets blocked or ignores site rulesA crawler that says who it is, respects the rules sites publish for crawlers, and backs off from sites that refuse it
A market with no fitting supplySays so plainly — “limited matching inventory” — and offers to broaden the brief, instead of buying the wrong places
Agencies seeing each other's clientsEvery context, run, inventory and group is walled to the agency's own advertisers
A target list that silently opens upAn empty group buys nothing, never everything, and the group page warns about it

What each side gets

WhoWhat they get
AdvertisersAds beside content that fits the brand, with the reason for every placement; no dependence on cookies or device IDs; safety rules applied before spend.
AgenciesA repeatable workflow from brief to campaign; their clients' work walled off from other agencies; a clear, shareable explanation for clients.
Ad opsOne place to brief, run, review, group and attach; groups that refresh themselves weekly; attach and detach from the group or the campaign.
People seeing the adsRelevant ads without being tracked across sites and apps.

A real run, and the most useful answer it gave

In one recent run for a consumer brand, in a market where the inventory we are offered is almost entirely apps of the wrong kind, the best fit score was low, a broadened brief still found no match, and the engine advised against stretching the brief to content that did not fit. The answer was “not here, not yet”.

That is the answer a good targeting tool should be willing to give. Instead of spending the budget on poorly fitting inventory, the team knew before launch that contextual targeting in that market needed new web supply first — and that is now the work.

What comes next

  • Beyond our own exchanges. A group's sites and apps becoming placements on partner networks, with the context's keywords and categories becoming that network's content targeting, kept in sync as the group changes.
  • More supply in thin markets. Adding web publishers where the bid stream is app-only, so a brief like the one above has something to buy.
  • Results, once measured. We will publish how DeepContext's scores compare with human review, and what they do for campaign outcomes, when each has run long enough to be measured honestly — and not before.
The lesson that travels

A target list should say exactly what it will buy, and nothing else — including nothing at all when it has nothing to say. And the most valuable thing a targeting tool can tell you is sometimes “not here, not yet”, before the money moves rather than after.

See DeepContext on your own brief

A note on numbers

The fit score is DeepContext's own 0-to-100 scale, not an industry measure. Every chart's proportions are illustrative, and no site, app, publisher, exchange, client or brand is named. The real run described above is anonymised on purpose: no market, category, figures or brief details are given. No accuracy or campaign-performance claims are made, because none have been measured yet; they will be published when they have. Product behaviour described here — the weekly refresh, the default minimum score, the warning on an empty group — is how DeepContext works today and may change. DeepContext uses no cookies and no device identifiers; this describes our own product and is not advice for yours.

A
AdZoic team
Making ad buying make sense, from Dhaka.
Keep reading

Related reading

Animated: a bid request carrying only an app ID reaches the bidder, which makes one lookup into a shelf of pre-computed verdicts and answers with what the app is about, while a context engine slowly fills the shelf ahead of timeEngineering

Contextual targeting without cookies: how we rebuilt our context engine

Most of our bid requests arrive with no page to read. How we understand sites and apps before the auction and look them up in a fraction of a millisecond — without cookies or device IDs.

Oct 2026 · 8 min read
Animated: words from an article flow into an AI reader that lights up topic tags and a matching ad clicks into placeTargeting

AI contextual targeting: how machines read a page

The methods (NLP, embeddings, sentiment, multimodal), what the public research says, and the philosophy behind our approach — no cookies needed.

Aug 2026 · 9 min read
Shield with a checkmark, blocked ad tiles crossed out around itBrand safety

Brand safety 101: keeping your ads out of bad neighbourhoods

How pre-bid filtering blocks ad fraud and unsafe content before a cent of your budget is spent.

Jun 2026 · 5 min read

← Back to all posts