Technical documentation · module of Horizen Insights

Horizen Placement Audit

A placement-intelligence pipeline for Google Ads. It ingests placement performance reports, enriches every website, mobile app, and YouTube channel with public metadata, scores each placement across seven quality dimensions plus a performance overlay, and exports exclusion-ready segments back into the advertiser's Google Ads workflow.

● Working prototype — internal use ◐ Google Ads API integration — in development ○ Hosted multi-account version — planned

Document version 1.3 · Last updated 2026-06-12 · Maintained by Horizen (Intelektas verslui, MB) · team@joinhorizen.com · Platform documentation: Horizen Insights

Why this tool exists

Display, Performance Max, and YouTube campaigns routinely spend across thousands of placements. The native placement report answers where ads ran and what it cost — but not what each placement actually is: a real publisher or a made-for-advertising site, a kids' game or a finance app, a brand-suitable channel or background-noise content farms. Auditing this by hand at ecommerce scale is not realistic.

Placement Audit closes that gap. It turns a raw placement report into a scored, segmented map of an account's placement footprint, and turns the worst segments into exclusion lists. The outcome is measurable: spend shifts from inventory that cannot convert toward inventory that can.

End-to-end workflow

Ingest liveAPI: in dev

An advertiser's placement performance report enters the pipeline. Today: a standard Google Ads placement report export (CSV/TSV), uploaded through the web UI or dropped into the importer. In development: direct pull through the official Google Ads API — the advertiser connects their account once via OAuth, and reports are fetched on demand (see API integration).

Normalise & deduplicate live

Rows are parsed into a canonical placements store with three independent placement types: website, mobile app, and YouTube channel. File-level hashes keep re-imports idempotent; URL canonicalisation collapses duplicate forms of the same placement (e.g. YouTube @handle, /c/, and video URLs resolving to one channel).

Enrich with public metadata live

Each unscored placement is enriched from public sources: websites via a capped, rate-limited fetch of the public homepage; mobile apps via public app-store metadata (name, category, content rating, install count, ads/IAP flags); YouTube channels via the YouTube Data API with a local resolution cache to minimise repeat lookups. Enrichment results are cached so a placement is never fetched twice.

Score across seven dimensions live

An LLM-assisted scoring engine assigns each placement structured labels across seven quality dimensions, validated against a fixed schema before they are written to the database:

content_category content_quality mfa_risk brand_suitability audience_profile language_geo ad_load_ux

A performance overlay then joins the advertiser's own report metrics (cost, impressions, conversions, value) onto the quality labels — so "high spend × high MFA-risk × zero conversions" surfaces as a ranked waste segment, not a hunch.

Review in the web UI live

The advertiser sees a coverage and segmentation summary of their footprint: spend by category, waste candidates ranked by cost, brand-suitability flags, and per-placement drill-down with the evidence behind each label.

Act: exclusion-ready exports liveAPI write-back: planned

Selected segments export as exclusion-ready CSVs — negative placement lists, brand-suitability reviews, or reporting. The Horizen team applies approved exclusions to the account manually through the Google Ads interface. Writing exclusion lists back via the Google Ads API is a roadmap item and is not part of the current API integration, which is read-only.

Components

ComponentRoleNotes
Importer CLISingle entry point for import, scoring runs, status, export, and store maintenanceBatch directories of reports; hash-based dedup makes re-runs idempotent
Enrichment workersFetch public metadata per placement typeParallel, capped (timeouts + size limits), polite rate limiting; results cached
Channel resolverCanonicalises YouTube URL forms to channel IDsYouTube Data API v3 with persistent local cache
Scoring engineLLM-assisted labeling across the seven dimensionsSchema validator rejects malformed labels before any write
Placement storeSource of truth: placements, labels, enrichment cache, import stagingEmbedded SQL database (WAL mode), single-writer discipline
Web UIUpload/connect, coverage summary, segment review, export selectionLightweight Python web service + vanilla JS frontend
Export moduleComposes selected segments into exclusion-ready filesCSV exports; API write-back of exclusion lists is a planned roadmap item

Google Ads API integration

Placement Audit receives its input through the shared Horizen Insights data layer. The API integration replaces the manual report-export step and is read-only:

Status note. The classification pipeline is a working prototype used in Horizen client engagements today, running on manually exported reports. The read-only Google Ads API integration described above arrives with the Horizen Insights platform integration; this document, the platform documentation, and our API application describe the same workflow.

Data handling

Roadmap

Questions about this document: team@joinhorizen.com · Google Ads is a product of Google LLC; Horizen is independent and not affiliated with Google.