Skip to content
PlacementGraph™
Delivery reconciliation

Served domain reconciliation: matching the approved list to where ads ran

Part of Programmatic media planning

A reader browsing on a laptop with a coffee.
Photo: Vlada Karpovich, Pexels

The short answer

Served domain reconciliation compares the domains a plan approved with the domains that actually received impressions, using log level files or placement reports from the buying platform. The analyst reduces each served URL to a comparable domain, matches it against the approved list version, then sorts the leftovers into URL variants, related app delivery, masked URLs and off list delivery.

Key takeaways

  • Reconcile against the exact list version that was approved and uploaded, not the latest copy in a shared folder.
  • A bid request field describes an offer; the buying platform's served record is stronger evidence of where an impression landed.
  • Write URL matching rules for www, subdomain and path variants before looking at the data.
  • Rule out related app inventory, inherited settings and masked URLs before treating a domain as off list.

What is required to reconcile planned domains with served domains?

Definition

Served domain reconciliation
A post launch comparison of the domains on an approved inclusion list with the domains recorded as serving the campaign, ending in a classified list of matches, explained differences and unexplained delivery.

Reconciliation fails quietly when the inputs are loose. Compare delivery with a spreadsheet edited after upload, and each hand edit looks like off list delivery or a missing site. Freeze the inputs with dates first, then open the delivery data. The planning side is covered in the programmatic media planning hub; this page starts where the upload ends.

Inputs to freeze before reconciliation starts

  • The approved list version number, its approval date and the export file that was uploaded, with the domain count stated in the file.
  • The list as the buying platform holds it: in Display & Video 360, the Download composite list option under Apps & URLs targeting returns the targeted apps, URLs, collections and channels for the line item.
  • The delivery data for a stated date range: log level impression files or a placement report broken out by domain, exchange and inventory source.
  • The event history (opens in a new tab) for the same range, downloaded as CSV with Include system changes switched on, so settings that changed mid flight are visible.
  • The matching rules for subdomains, paths and app inventory, written down and agreed before anyone reads the results.
  • A dated snapshot of the ads.txt file for each domain that needs a seller check later.

Which logs show the served domain?

Several records carry a domain or URL, and they prove different things. The OpenRTB bid request describes inventory before any bid. The buying platform's impression log and reports record what it bought. Read each field in its own documentation before treating it as the served domain.

Fields that carry a domain or URL, what each one shows and its documented limit (checked October 2026)
FieldWhat the documentation saysLimit for reconciliation
OpenRTB site.domain"Domain of the site" in the OpenRTB 2.6 Site object (opens in a new tab)Declared by the seller in the request; it describes an offer, not a rendered ad
OpenRTB site.page"URL of the page where the impression will be shown"Written in the future tense, before the auction; may be absent or truncated by the seller
Data Transfer DV360 URL"The raw URL taken from the bid request received from the exchange" (Data Transfer file format (opens in a new tab))Some exchanges mask it, and the value then reads source_url_hidden
Data Transfer Referrer URL"Contains the URL on which the ad appeared, when possible"Google adds that it "may also be empty, or return ad server URLs"
DV360 report App/URL"The name of a site, or mobile app" (dimensions in reports (opens in a new tab))Aggregated by site or app, so it names the property, not each page
DV360 report Inventory source"The name of the deal that supplies buyable impressions to your line items"Shows an Unknown or Unpermissioned Inventory Source label when the source is not available

Log level files do not wait. Google's Data Transfer v2.0 overview (opens in a new tab) says impression and click files are delivered 24 times a day, one for each hour, and stay in Google Cloud Storage for 60 days. A team reconciling at the end of a long flight copies the files out as they arrive, or the first weeks are gone. DV360 fields populate only when advertisers are linked and permissions are granted.

How do you treat subdomains and URL variants?

A served URL such as HTTPS://Recipes.Example.com:443/fall/ and a planned entry such as example.com may be the same publisher. The rules for deciding come from the URI standard, the buying platform's targeting rules and the ads.txt definition of a root domain. Apply them to both lists and keep the original URL beside the normalized one.

Normalization rules for served URLs, with the source of each rule
VariantRuleSource
Upper case scheme or hostLowercase both; "the scheme and host are case-insensitive and therefore should be normalized to lowercase"RFC 3986, section 6.2.2.1 (opens in a new tab)
Default port or empty pathDrop :80 or :443 and treat an empty path as "/"; the RFC lists http://example.com and http://example.com:80/ as equivalentRFC 3986, section 6.2.3
Paths and query stringsStrip them for domain matching, but keep the full URL for page level questions; paths stay case sensitiveRFC 3986, section 6.2.2.1
SubdomainsMap to the root domain, the public suffix plus one label (so a name under co.uk keeps its own label), unless the plan listed the subdomain on purposeads.txt 1.1 specification (opens in a new tab) and the Public Suffix List (opens in a new tab)
Deep subdomains and foldersMatch the depth the platform actually targets: two subdirectory levels and up to five subdomain levels in DV360DV360 app, channel and website targeting (opens in a new tab)

Decide what a subdomain on the plan means. If the plan approved food.example.com because only that section fits the brief, a served row on news.example.com is off list although the root matches. If the plan approved example.com, both rows match. Write the decision into the list itself.

Why do served domains differ from the plan?

Before calling a row off list, test it against the documented causes that produce an unplanned domain without anyone breaking a rule.

Documented reasons a served domain differs from the approved list, and how to confirm each (checked October 2026)
CauseWhat the documentation saysHow to confirm
Related app inventoryDV360 says targeting a website also targets the matching app's inventory, and an app can carry a content URL, so "your ads may show in that app, even if you haven't specifically targeted it"Split rows by Environment; app rows tied to a listed website are explained
Inherited channelsAdvertiser or partner channels can appear as blocked and not editable in Apps & URLs targetingCompare the composite list with the approved version
Change delay"a few hours may pass before Display & Video 360 updates your line item's bidding"Match the row's date and hour with the change time in event history
Masked URLThe DV360 URL field can read source_url_hidden when the exchange masks itCount masked rows by exchange and inventory source; they are unknown, not off list
Ad server addressReferrer URL can be empty or return ad server URLsTreat ad server hosts as unresolved and look them up by placement ID
Wrong list attachedNot a platform behavior: a line item carries an older or different listCompare the composite list download with the approved export, line by line

Only the rows left after these checks are off list delivery. Keep them apart from unknown rows: a masked URL means the analyst cannot say where the ad ran, not that it ran somewhere bad, and reporting it as off list overstates the problem.

What should be done about off list delivery?

Six steps for an unexplained served domain

  1. Size it in context. Record the domain, dates, line item, exchange and inventory source, and its share of the line item's delivery.
  2. Find the setting that allowed it. Open event history for the line item and its parents, with system changes included, and look for a list change, new channel or targeting expansion near the first served date.
  3. Check who sold it. Read the domain's ads.txt for the exchange's account ID, then the exchange's sellers.json entry; the sellers.json specification (opens in a new tab) says a seller_id is "the same ID that appears in an ads.txt file".
  4. Decide add or block. If the domain would pass the plan's checks, propose it for the next list version with a reason; if not, exclude it and note the time.
  5. Fix the cause. Correct the inherited channel, attached list or environment setting so the pattern does not return next flight.
  6. Write it down. Add a note in event history and a line in the reconciliation record with the evidence, decision and owner.
One reconciliation pass, from export to record
One reconciliation pass, from export to recordEach stage keeps its inputs and outputs, so a later reviewer can repeat the pass and reach the same classification. 1. Freeze inputs: List version, composite list, dates. 2. Extract logs: Copy hourly files before expiry. 3. Normalize: Lowercase, root domain, depth. 4. Match: Served rows against the version. 5. Classify: Variant, app, unknown, off list. 6. Record: Evidence, decision, owner01FreezeinputsListversion,compositelist, dates02ExtractlogsCopy hourlyfiles beforeexpiry03NormalizeLowercase,root domain,depth04MatchServed rowsagainst theversion05ClassifyVariant,app,unknown, offlist06RecordEvidence,decision,owner
One reconciliation pass, from export to recordEach stage keeps its inputs and outputs, so a later reviewer can repeat the pass and reach the same classification. 1. Freeze inputs: List version, composite list, dates. 2. Extract logs: Copy hourly files before expiry. 3. Normalize: Lowercase, root domain, depth. 4. Match: Served rows against the version. 5. Classify: Variant, app, unknown, off list. 6. Record: Evidence, decision, owner01Freeze inputsList version, composite list,dates02Extract logsCopy hourly files before expiry03NormalizeLowercase, root domain, depth04MatchServed rows against the version05ClassifyVariant, app, unknown, off list06RecordEvidence, decision, owner
Each stage keeps its inputs and outputs, so a later reviewer can repeat the pass and reach the same classification.

How does PlacementGraph give reconciliation a fixed list to match against?

What does a reconciliation look like on a real flight?

Fictional example

A Colorado transit agency's fall service campaign

A fictional regional transit agency serving Denver, Boulder and Colorado Springs runs a fall display flight announcing weekend routes, on local news, community event and commuting sites. Version 4 of its inclusion list holds 58 domains and is uploaded to two line items. On day two the analyst downloads both composite lists and confirms they carry version 4.

After three weeks the analyst normalizes the served rows. Upper case hosts and www prefixes collapse into root domains, and two community calendar subdomains match approved roots. One weather site appears as app inventory, the matching app of an approved website, which DV360 documents. Rows from one exchange carry a masked URL and are reported as unknown.

Three domains remain. Event history shows a partner level channel added in week two by another team. The analyst asks its owner to remove it for this advertiser, adds a note, proposes one domain for version 5 because it passes the plan's checks, and logs the other two as excluded with the date.

Frequently asked questions

Should off list delivery be measured in impressions or in spend?

Report both when the data allows, with the date range named. Impressions show how much delivery landed on unplanned domains; spend shows the money at stake. Google notes that the DV360 total media cost fields in Data Transfer files may be zero, so check that column before computing a spend share.

When should the first reconciliation run after launch?

Early enough to fix a configuration gap while the flight can still benefit, and before the raw files expire. Google keeps Data Transfer files in Cloud Storage for 60 days, so a first pass in the opening week and a full pass before the flight ends keep the evidence available.

Does reconciliation work the same way for a curated deal?

The method is the same with one more layer. Group served rows by inventory source so the deal's delivery is read apart from open auction delivery, and compare the deal's rows with the domain list the deal was built from as well as the buyer's inclusion list.

Can a served domain match the plan and still be wrong?

Yes. A matching domain only shows that the platform recorded the approved name. If the selling account is missing from that domain's ads.txt file, or sellers.json names an unexpected seller, the row needs a supply path review before it counts as clean.

Sources

  1. Data Transfer v2.0: File Format (opens in a new tab)Google for Developers, Campaign Manager 360 (last updated September 14, 2026)
  2. Data Transfer v2.0 overview (opens in a new tab)Google for Developers, Display & Video 360 (last updated October 14, 2024)
  3. App, channel, and website targeting (opens in a new tab)Display & Video 360 Help
  4. Dimensions in reports (opens in a new tab)Display & Video 360 Help
  5. Event history (opens in a new tab)Display & Video 360 Help
  6. OpenRTB 2.6 specification (opens in a new tab)IAB Tech Lab (GitHub)
  7. RFC 3986: Uniform Resource Identifier (URI): Generic Syntax (opens in a new tab)IETF, January 2005
  8. ads.txt 1.1 specification (opens in a new tab)IAB Tech Lab (GitHub)
  9. sellers.json specification (opens in a new tab)IAB Tech Lab (GitHub)
  10. Public Suffix List (opens in a new tab)Public Suffix List project
  11. Guidelines on privacy and online behavioural advertising (opens in a new tab)Office of the Privacy Commissioner of Canada (modified August 11, 2025)

Researched and written by PlacementGraph Research. Read how we research, source and update these pages. Corrections: diana@placementgraph.com.

HOW AGENCIES WORK WITH US

From your first brief.
To your next campaign.

Share a brief in plain language. Get contextual websites and YouTube channels that fit it, with the evidence behind every pick and a deal ready for your usual buying platform.

  1. 01

    Share your brief

    The campaign in plain language.

  2. 02

    Get your shortlist

    The strongest contextual sites and channels, with the evidence behind each.

  3. 03

    We build the deal

    Your shortlist becomes a curated deal through our exchange partners.

  4. 04

    Activate and grow

    Buy in your usual platform. Agencies earn benefits as their investment grows.

LET’S WORK TOGETHER

Your next campaign starts here.

Your details will only be used to respond to your enquiry.

Prefer email? diana@placementgraph.com

YOUR PRIVACY

You choose whether to allow optional analytics. You can use the whole website either way.

Change or withdraw consent at any time using “Cookie preferences” in the footer. Turning analytics off stops future collection and removes this site’s analytics cookies; it does not erase information already sent. The page may refresh to apply withdrawal.