All Channels — Current Period
| Channel | Budget % | Time Spent % | Intent Mult | Adj. Value % | ROAS | CPA | Status |
|---|
Channel Nuance Factors — DVNT Calibration
| Channel | Raw Time % | Intent Mult | Freq Factor | Funnel Stage | Adj. Value % | Your Budget % | Gap |
|---|
Direct traffic is not a source — it is a navigational behaviour triggered by prior marketing exposure. A user sees a TikTok ad, doesn’t click, then types the URL three days later. GA4 credits Direct. DVNT credits TikTok. We establish a baseline direct volume (traffic when spend = £0, representing pure brand equity) and treat everything above that as the Incremental Halo Pool. This pool is redistributed to active channels using a Time-Decay Spend Share × OFCOM Attention Weight formula.
| Channel | Spend Share | OFCOM Time % | TDSS Weight | Halo Credit £ | Halo Credit % |
|---|---|---|---|---|---|
| Meta (FB+IG) | 28% | 14.2% | 0.198 | £8,158 | 19.8% |
| TikTok | 10% | 18.6% | 0.186 | £7,663 | 18.6% |
| CTV / YouTube | 8% | 22.1% | 0.177 | £7,289 | 17.7% |
| 5% | 4.8% | 0.024 | £989 | 2.4% | |
| 4% | 3.2% | 0.013 | £536 | 1.3% | |
| Google Search | 35% | 2.1% | 0.074 | £3,049 | 7.4% |
| Unallocated Residual | — | — | — | £13,516 | 32.8% |
When a user searches for your brand name, Google did not create that intent — your broader marketing did. The DVNT model applies an Intent Discount: Google retains 15% (friction reduction), and the remaining 85% is redistributed to the upper-funnel channels that generated the brand awareness. Brand search volume from Google Trends and PPC impression data is used as a leading indicator of upper-funnel effectiveness.
| Method | Source | Confidence |
|---|---|---|
| Branded PPC impressions | Google Ads API — brand keyword campaigns | High |
| Branded organic clicks | Google Search Console — brand queries | High |
| Brand search volume trend | Google Trends API — brand term index | Medium |
| GA4 branded sessions | GA4 — source/medium containing brand term | High |
| Channel | Redistribution % | Revenue Credited |
|---|---|---|
| Meta (FB+IG) | 34% | £8,265 |
| TikTok | 26% | £6,321 |
| CTV / YouTube | 22% | £5,348 |
| 10% | £2,431 | |
| 8% | £1,945 | |
| Google (retained) | 15% friction only | £4,290 |
Platform ROAS is what each ad platform claims. GA4 ROAS is what your analytics reports. DVNT True ROAS adds Direct Halo Credit and Branded Search Redistribution back to each channel — this is the number that should drive budget decisions.
| Channel | Spend | Platform ROAS | GA4 ROAS | + Direct Halo | + Branded Halo | True ROAS | vs. GA4 |
|---|---|---|---|---|---|---|---|
| Google Search | £99,575 | 6.8x | 4.2x | +£3,049 | −£20,020 | 2.9x | −1.3x |
| Meta (FB+IG) | £79,660 | 2.1x | 1.4x | +£8,158 | +£8,265 | 3.6x | +2.2x |
| TikTok | £28,450 | 1.9x | 0.9x | +£7,663 | +£6,321 | 4.2x | +3.3x |
| CTV / YouTube | £22,760 | 1.2x | 0.6x | +£7,289 | +£5,348 | 3.8x | +3.2x |
| £14,225 | 2.4x | 1.8x | +£989 | +£2,431 | 3.1x | +1.3x | |
| £11,380 | 1.6x | 1.1x | +£536 | +£1,945 | 2.8x | +1.7x |
The tROAS model tells you which current channels are under-credited. This section goes further: using OFCOM Online Nation 2025 and BARB Q1 2026 data, it identifies channels where your target audience spends significant time that you are not currently investing in.
# DVNT Media Intelligence — Budget Reallocation Script # Generated: Jun 18, 2026 | Client: Acme Corp import pandas as pd import numpy as np # ── Channel Data ───────────────────────────────────────────── channels = pd.DataFrame({ 'channel': ['Google Search', 'Meta', 'TikTok', 'CTV/YouTube', 'Pinterest', 'Reddit'], 'budget_pct': [35, 30, 10, 15, 5, 5], 'adj_value_pct':[20, 30, 28, 25, 12.5, 7.5], 'roas': [3.2, 2.8, 1.9, 2.1, 3.5, 2.5], 'cpa': [45.50, 38.20, 25.00, 55.00, 32.00, 40.00], }) # ── Calculate Misattribution Gap ───────────────────────────── channels['gap'] = channels['budget_pct'] - channels['adj_value_pct'] channels['status'] = channels['gap'].apply( lambda g: 'over' if g > 5 else ('under' if g < -5 else 'aligned') ) # ── Recommended Reallocation ───────────────────────────────── recommended = { 'Google Search': 28, 'Meta': 30, 'TikTok': 22, 'CTV/YouTube': 15, 'Pinterest': 8, 'Reddit': 5 } channels['recommended_pct'] = channels['channel'].map(recommended) total_budget = 284500 channels['current_spend'] = (channels['budget_pct'] / 100) * total_budget channels['recommended_spend'] = (channels['recommended_pct'] / 100) * total_budget channels['spend_delta'] = channels['recommended_spend'] - channels['current_spend'] print(channels[['channel','budget_pct','recommended_pct','spend_delta','status']])
Execution Schedule
| Script | Frequency | Last Run | Next Run | Status | Action |
|---|
CTV pre-roll drives the highest branded search uplift (+24%) with the shortest lag (3–5 days). Combined with UGC video on TikTok, these two formats account for £27,200 of halo revenue — 39% of the total recoverable pool.
Recommendation: prioritise CTV and UGC video in the creative mix. Reduce reliance on static product ads for upper-funnel objectives.
See Budget RecommendationsHowever, the current 35% allocation exceeds the DVNT-modelled ceiling of 28–30%. Spend above this threshold enters diminishing returns territory — you are bidding against yourself on branded terms and over-indexing on bottom-funnel at the expense of mid-funnel channels that feed it.
- Brand Search: Always-on, exact/phrase match. Protect share of voice. Budget: 15–20% of Google total.
- Non-Brand Search: Category + competitor terms. Smart Bidding (tCPA or tROAS). Budget: 40–50%.
- Performance Max: Feed-driven, asset-rich. Requires strong conversion history (>50/month). Budget: 30–35%.
- Display / Demand Gen: Retargeting only. Cap frequency at 3×/week. Budget: 5–10%.
The DVNT gem applies a structured decision framework before recommending any campaign type. Campaign type selection is driven by conversion data quality, feed completeness, creative asset availability, and commercial priority — not by Google's default suggestions.
| Campaign Type | Use When | Avoid When |
|---|---|---|
| Brand Search | Always-on — protect share of voice, exact/phrase match | Never pause unless brand spend exceeds 20% of total Google budget with no incremental lift evidence |
| Non-Brand Search | Category + competitor terms. Smart Bidding (tCPA/tROAS) with ≥30 conversions/month | Insufficient conversion volume — use Max Conversions first to build data |
| Performance Max | Conversion tracking, assets, feed quality, and commercial grouping are strong enough to support automation | Brand cannibalisation risk, poor transparency, weak value data, or need for strict query/channel control |
| Demand Gen / YouTube | Clear creative/audience strategy beyond bottom-of-funnel search capture | User expects these to replace intent-led Search without appropriate measurement |
| Exclude / Review | Entity is non-commercial, unavailable, duplicate, policy-sensitive, or missing critical data | Client explicitly approves testing with a documented reason |
Bid strategy selection is based on conversion data quality and value reliability — not campaign type alone. The gem enforces a prerequisite check before any Smart Bidding strategy is applied.
| Data Situation | Recommended Starting Strategy |
|---|---|
| New account / limited conversion data | Manual CPC or Maximise Clicks with strict controls |
| Lead gen with validated conversion volume | Maximise Conversions → Target CPA once lead quality is confirmed |
| Ecommerce with reliable conversion value | Maximise Conversion Value → Target ROAS after value tracking is trustworthy |
| High-margin segmented products | Separate targets/budgets if volume and business priority justify control |
| Mixed-margin catalogue, no margin data | Avoid overconfident ROAS segmentation — request margin/custom-label fields first |
| Existing campaigns in learning-sensitive state | Phased bid changes + monitoring — do not wholesale switch strategies |
The DVNT gem defaults to a semi-automated operating system before recommending full Google Ads API integration. Automation is decision support plus controlled execution — not a replacement for commercial judgement. Human approval is always required before publishing new campaigns, restructuring live accounts, or altering budgets materially.
| Phase | Tooling | Human Gate |
|---|---|---|
| MVP | Intake forms, audit workbooks, Google Ads Editor CSV/upload sheets, QA checklists | Strategist reviews all rows before posting to live account |
| Operational | Bulk upload templates, decision matrices, monitoring routines, approval gates | Client approves budget/bidding changes; strategist approves structural changes |
| Scale | Google Ads API integration — only after account-building logic and QA process are proven | Dry-run mutation preview required before any live API execution |
When building or restructuring campaigns, the gem generates a Google Ads Editor-ready upload sheet as the primary build artefact. All rows default to Paused or Draft status until manually reviewed and approved in Google Ads Editor.
| Sheet Tab | Contents | When Required |
|---|---|---|
| Campaigns | Campaign names, types, budgets, bid strategies, status, geo, language | Always |
| Ad Groups / Asset Groups | Ad group names, default bids, campaign assignment, status | Always |
| Keywords | Keyword text, match type, bid, status, final URL, QA notes | Search campaigns |
| Negative Keywords | Brand negatives for PMax, competitor exclusions, irrelevant query blocks | Always — especially PMax |
| RSAs / Assets | Headlines (15), descriptions (4), asset group assets, pinning instructions | Search + PMax |
| Audiences | Audience signals, remarketing lists, customer lists, observation/targeting notes | PMax + audience-led structures |
| QA Flags | Rows requiring human review — status: Pass / Warning / Blocker / Do Not Upload | Always — mandatory before posting |
The gem enforces mandatory QA checks before any build file is delivered. These gates exist to prevent unsafe live-account automation and protect existing performance history.
✓ Enhanced conversions configured
✓ Consent mode implemented
✓ Attribution model set to DDA
✓ GA4 cross-reference active
✓ Brand negatives added to PMax
✓ URL quality checked (live, relevant)
✓ Bid strategy prerequisites met
✓ Budget assignments explicit
✓ Client approves budget changes
✓ Compliance check for restricted categories
✓ Rollback plan documented
✓ Post-launch monitoring set up
✗ Restructuring live accounts
✗ Changing conversion goals
✗ Altering budgets materially
✗ Pushing account-wide changes
The gem balances three source categories rather than relying on Google's guidance alone. Official documentation covers product mechanics; independent PPC practitioners provide real-world trade-offs; analytics sources cover measurement and attribution.
| Source Category | Use For | Examples |
|---|---|---|
| Official Google Ads docs | Product mechanics, API capabilities, Editor workflows, bulk upload limits, policy | Google Ads Help, API docs, Editor Help, Developer Blog |
| Independent PPC practitioners | Account structure trade-offs, bidding caveats, PMax critiques, real-world optimisation | Search Engine Land, PPC Hero, WordStream, Optmyzr, Define Digital Academy |
| Analytics & measurement | Conversion tracking, GA4, consent mode, attribution, first-party data, CRM import | Google Analytics docs, GTM docs, privacy/consent documentation |
The DVNT recommendation is to rebalance to a 40% awareness / 60% conversion split, and to treat Meta as the primary channel for building the audience pools that Google Search then converts.
- Upper Funnel (40%): Broad audience, Advantage+ Audience, video views / reach objective. Build brand recognition and seed retargeting pools.
- Mid Funnel (30%): Engaged audiences, website visitors 30-day, video viewers 75%. Traffic or engagement objective. Consideration-stage content.
- Lower Funnel (30%): Cart abandoners, purchaser lookalikes, CRM uploads. Conversions objective, tCPA or ROAS bidding. Dynamic product ads.
TikTok's strength is upper-to-mid funnel: building brand awareness, seeding product discovery, and driving consideration that converts on other channels. Treating it as a direct-response channel is the most common strategic error.
- Awareness (40%): Video Views / Reach objective. TopView or Top Feed for maximum impact. Budget: £50/day minimum.
- Consideration (35%): Traffic or Engagement objective. In-Feed Video, Spark Ads from creators. Target: 25–44 demo.
- Conversion (25%): Website Conversions, tCPA bidding. Requires 50+ conversions/month for stable learning. Collection Ads for e-commerce.
- 0–3s: Hook — movement, question, or pattern interrupt. Zero script delay.
- 3–12s: Body — deliver core message rapidly. Show, don't tell.
- Last 3s: CTA — single, clear action with visual prompt.
GMV Max — For TikTok Shop merchants. Maximises Gross Merchandise Value.
Spark Ads — Boost organic TikTok content. Highest-trust format. Prioritise creator content over brand-produced assets where possible.
- Days 1–7 (Learning Phase): Monitor daily. Make zero changes. Target 50 conversions to exit learning.
- Days 8–14 (Initial Optimisation): Make one change every 3–5 days. Start with bid adjustments before audience changes.
- Days 15–30 (Performance Tuning): Weekly adjustments. Introduce creative variants. Expand audiences if CPA is stable.
- CTR < 0.5%: Review creative hook within 3 days — this is a creative problem, not a targeting problem.
- Frequency > 5: Refresh creative or expand audience immediately.
The DVNT recommendation is to scale to 8% immediately, with a path to 10% if ROAS holds above 3.0× at higher spend.
- Performance+ Conversions (60%): AI-managed. Requires ≥50 events/week. Budget ≥5× target CPA. Best for e-commerce with strong conversion history.
- Consideration / Traffic (25%): Keyword + interest targeting. Drives qualified traffic for categories with longer consideration cycles.
- Awareness (15%): Broad reach, CPM bidding. Builds brand recognition in planning contexts.
Reddit ads work best when they feel native to the community — not like traditional display advertising. The tone must be authentic, informative, and community-aware.
- Awareness / Reach: Broad subreddit targeting, CPM bidding. KPI: Reach, CPM, Brand Lift.
- Consideration: Interest + community targeting, CPC bidding. KPI: CTR, CPC, Engaged Sessions. Keyword environments show 29.6% CTR boost.
- Conversion: Retargeting + keyword targeting. Requires verified Pixel/CAPI. KPI: CPA, ROAS.
- Leads with value or information, not a hard sell
- Uses Reddit-native language and references
- Acknowledges the community context
- Includes a specific, relevant CTA
- Headline under 150 characters — problem-first or proof-led angles outperform direct value propositions
The 1.0× intent multiplier reflects a neutral position: CTV is not a high-intent channel, but it is a high-attention channel. Its primary value is brand building, product demonstration, and retargeting at scale.
- YouTube Skippable In-Stream (50%): 15–30s. Brand storytelling, product demos. CPV or tCPM bidding. Target: broad audiences + in-market segments.
- YouTube Non-Skippable (20%): 15s max. High-impact brand moments. tCPM bidding. Use sparingly — high frequency can cause brand fatigue.
- CTV Programmatic (30%): Via DV360 or third-party DSP. Full-screen, unskippable. Premium inventory. Use for brand awareness and retargeting high-value audiences.
Engine
Drop a channel report CSV here, or click to browse
Column headers are auto-mapped. Supported: date, campaign, spend, impressions, clicks, conversions, revenue| Campaign Name | Type | DVNT Channel Bucket | Monthly Spend | Brand / Non-Brand | Status |
|---|
Every ad platform over-reports its own contribution. Google claims last-click credit. Meta claims view-through credit. TikTok claims assisted credit. Without an independent analytics source, you are reading four different stories about the same purchase. Your analytics tool is the neutral arbiter — it sees the full path, not just the last touchpoint each platform wants to claim. The DVNT engine uses this data to calculate a platform inflation factor for each channel, which adjusts the misattribution score accordingly.
Log files vs. analytics: GA4 and Adobe Analytics rely on JavaScript tags and cookies — they miss ~15–30% of real traffic (ad blockers, bots, server-side requests). Server log files capture every HTTP request made to your web server, giving you a complete, unsampled picture. The DVNT engine applies a bot filter (removing known crawler IPs and non-human user agents) before ingesting log data. This is especially valuable for understanding organic search behaviour and validating paid traffic volumes independently of platform-reported data.
Recent Sync Activity
| Source | Tier | Auth Method | Last Sync | Records | Status | Action |
|---|