touchpoint_revenue_validation — v1

Back to project
ID34f8794d-51ac-4a3b-b5d9-417e873f7a52
Lenstouchpoint_revenue_validation
Functionassess
Phasediagnosis
Topicsattribution, conversion-feedback
Versionv1
Created2026-04-21T08:14:51+00:00

Content

{
  "dimensions": [
    {
      "name": "attribution_coverage",
      "findings": [
        {
          "finding": "Google Ads purchase conversion fires on every page view with value=0, making it impossible to distinguish actual purchases from page views and inflating conversion counts",
          "evidence": "Signal inventory shows 'Google Ads conversion (label=NeCfCNuMwOkaEPa1n68_, bttype=purchase)' firing on the homepage with value=0. Identity resolution breakpoint confirms: 'Conversion request to googleadservices.com contains label=NeCfCNuMwOkaEPa1n68_ with bttype=purchase and value=0 firing on homepage, indicating possible misconfigured page-level conversion'",
          "current_state": "not_yet_configured",
          "target_state": "Purchase conversion should fire only on a confirmed transaction event (e.g., order confirmation page or server-side event) with the actual transaction value passed dynamically. This is the single most important conversion signal for Google Ads Smart Bidding.",
          "priority": "high",
          "opportunity": "Fixing this enables accurate ROAS measurement in Google Ads, allows value-based bidding (tROAS), and prevents Smart Bidding from optimising toward page views rather than actual purchases"
        },
        {
          "finding": "Cross-domain identity break between kilo.ai (marketing site) and app.kilo.ai (product/conversion site) means conversions occurring in the app cannot be attributed back to marketing touchpoints",
          "evidence": "Identity resolution breakpoint: 'OPTIONS preflight request to app.kilo.ai/users/sign_in shows CORS cross-origin setup with no cross-domain linker parameter and no shared cookie domain observed'. Coverage assessment rates fully_stitched_estimate as 'low_below_50' with primary gap: 'Cross-domain identity break between kilo.ai and app.kilo.ai where conversions likely occur'",
          "current_state": "not_yet_configured",
          "target_state": "GA4 cross-domain measurement configured between kilo.ai and app.kilo.ai so the GA4 client_id is carried across the domain boundary via linker parameters. All ad platform pixels should also be present on app.kilo.ai conversion pages, or server-side conversion tracking should be implemented to capture conversions from the app domain.",
          "priority": "high",
          "opportunity": "Closing this gap could recover attribution for the majority of actual conversions (sign-ups, purchases) that likely happen on app.kilo.ai, dramatically improving ROAS visibility and enabling platform algorithms to optimise toward real business outcomes"
        },
        {
          "finding": "No click ID cookies are being persisted (gclid, fbclid, msclkid, ttclid), degrading paid channel attribution across all ad platforms",
          "evidence": "Identity resolution breakpoint: 'Landing page URL https://kilo.ai/ has no click ID parameters and no _gcl_aw, _fbc, _fbp, or _uetsid cookie evidence in requests; Google Ads gcl_ctr=1~0~0~0 confirms no gclid cookie present'. Affects google-ads, meta, microsoft-ads, and twitter.",
          "current_state": "not_yet_configured",
          "target_state": "Click IDs from all paid platforms should be captured on landing pages, stored in first-party cookies (e.g., _gcl_aw for gclid, _fbc for fbclid), and passed through to conversion events. Auto-tagging should be verified in each ad platform, and the site should preserve URL parameters through any redirects.",
          "priority": "high",
          "opportunity": "Restoring click ID persistence directly improves deterministic attribution for all paid channels, enabling accurate CPA and ROAS reporting, and providing higher-quality signals for automated bidding algorithms"
        },
        {
          "finding": "LinkedIn fires a conversion event (conversionId=20244068) on the homepage, but it is unclear what business outcome this represents \u2014 it may be misconfigured similarly to the Google Ads purchase conversion",
          "evidence": "Signal inventory shows 'LinkedIn conversion (pid=7288028, conversionId=20244068)' firing on the homepage https://kilo.ai/. Data architecture confirms LinkedIn data_types include 'conversions' but the conversion appears to fire on every page view.",
          "current_state": "can_be_improved",
          "target_state": "LinkedIn conversions should fire only on meaningful business events (e.g., demo request, sign-up, purchase) with appropriate conversion values. Page-level conversion events should be replaced with event-specific triggers.",
          "priority": "high",
          "opportunity": "Accurate LinkedIn conversion tracking enables proper campaign optimisation for B2B lead generation, which is likely a key channel for an AI/SaaS product like Kilo"
        },
        {
          "finding": "Meta Pixel is initialised and configured but no conversion events (Purchase, Lead, CompleteRegistration) were observed firing \u2014 only pixel config was loaded",
          "evidence": "Signal inventory shows 'Meta Pixel script load' and 'Meta Pixel config (pixel_id=498148151146096)' but no standard or custom conversion events were observed. Data architecture confirms Meta Pixel data_types only include 'page_views, events' with no explicit conversion category signals.",
          "current_state": "can_be_improved",
          "target_state": "Meta Pixel should fire appropriate standard events (Lead, CompleteRegistration, Purchase) on the relevant pages/actions, with conversion values where applicable. Conversions API (CAPI) should be implemented server-side to provide redundant conversion signals.",
          "priority": "high",
          "opportunity": "Without conversion events, Meta cannot optimise campaigns toward business outcomes. Implementing proper events and CAPI enables Meta's conversion optimisation algorithms and provides resilience against browser-side signal loss"
        },
        {
          "finding": "Twitter/X, Reddit, and Bing pixels track page views but no conversion events were observed for these platforms",
          "evidence": "Signal inventory shows Twitter/X fires only 'adsct pixel' track events, Reddit fires only 'page_view event', and Bing fires only 'pageLoad' events. No conversion-category signals were observed for any of these platforms.",
          "current_state": "can_be_improved",
          "target_state": "Each ad platform should have conversion events configured to fire on meaningful business actions. Even if spend on these platforms is lower, conversion tracking is essential for any optimisation or ROAS measurement.",
          "priority": "medium",
          "opportunity": "Enables campaign optimisation and ROAS measurement on secondary paid channels, preventing wasted spend on platforms that cannot learn which clicks convert"
        },
        {
          "finding": "Impact.com affiliate/partnership tracking is present but conversion event configuration and attribution deduplication mechanisms are not visible",
          "evidence": "Signal inventory shows 'Impact.com Universal Tag script load' and 'SaaSquatch (referral) script load' with medium confidence. Data architecture lists impact data_types as 'events, conversions' but no conversion fire was observed. Identity resolution rates impact_tracking confidence as 'medium' with persistence 'unknown'.",
          "current_state": "can_be_improved",
          "target_state": "Impact.com should have a properly configured conversion event that fires on purchase/sign-up with revenue value, and a deduplication mechanism should ensure affiliate conversions are not double-counted with direct ad platform conversions.",
          "priority": "medium",
          "opportunity": "Proper affiliate conversion tracking prevents overpayment on affiliate commissions and enables accurate total-channel ROAS measurement"
        }
      ]
    },
    {
      "name": "signal_reliability_timeline",
      "findings": [
        {
          "finding": "No evidence of micro-conversion or lead scoring signals being sent to ad platforms to bridge the gap between initial engagement and final revenue outcome",
          "evidence": "Signal inventory shows only page_view, init, and scroll_depth (90%) events in the dataLayer. No lead_form_submit, demo_request, sign_up, or qualified_lead events were observed. The dataLayer contains only 'gtm.js, gtm.dom, gtm.load, and gtm.scrollDepth events' per the identity resolution breakpoints.",
          "current_state": "not_yet_configured",
          "target_state": "A funnel of micro-conversion events should be configured: e.g., scroll_depth and time_on_page (already partially present), CTA_click, form_start, form_submit, sign_up, qualified_lead, and purchase. These should be sent to all ad platforms to provide early optimisation signals while final revenue attribution is pending.",
          "priority": "high",
          "opportunity": "Micro-conversions provide ad platforms with earlier and more numerous signals to optimise against, which is critical for B2B/SaaS businesses with longer sales cycles where the final conversion may occur days or weeks after the initial click"
        },
        {
          "finding": "The conversion cycle likely extends beyond platform attribution windows given the B2B/SaaS nature of the product, but no offline conversion import or delayed conversion mechanism was observed",
          "evidence": "The site is for kilo.ai, which appears to be a SaaS/AI product with a sign-in flow at app.kilo.ai. B2B SaaS products typically have conversion cycles of days to weeks. No offline conversion import configurations (Google Ads offline conversions, Meta offline events, LinkedIn offline conversions) were observed. HubSpot CRM is present (portal 244051090) but has weak joinability with ad platforms.",
          "current_state": "not_yet_configured",
          "target_state": "Implement offline conversion imports from HubSpot CRM to Google Ads, Meta, and LinkedIn using click IDs (gclid, fbclid) or enhanced conversions with email hashes. This should feed back qualified leads and closed deals with actual revenue values on a regular cadence (daily or weekly).",
          "priority": "high",
          "opportunity": "Offline conversion imports allow ad platforms to optimise toward actual business outcomes (qualified leads, closed deals, revenue) rather than top-of-funnel proxies, dramatically improving bid strategy performance for B2B businesses"
        },
        {
          "finding": "Third-party cookie deprecation is already impacting signal reliability \u2014 Google Ads reports ct_cookie_present=false, reducing the window for view-through and cross-site attribution",
          "evidence": "Identity resolution breakpoint: 'Google Ads doubleclick conversion request explicitly includes ct_cookie_present=false indicating third-party cookie is unavailable for cross-site attribution'. This degrades Google's ability to attribute conversions to ad impressions and cross-site clicks.",
          "current_state": "can_be_improved",
          "target_state": "Implement server-side tagging (Google Tag Manager Server-Side container) to set first-party cookies for Google Ads click IDs, and enable enhanced conversions to provide deterministic matching signals that are resilient to third-party cookie loss.",
          "priority": "high",
          "opportunity": "Mitigating third-party cookie loss preserves attribution signal quality as browsers continue to restrict tracking, ensuring bidding algorithms maintain performance"
        },
        {
          "finding": "Consent defaults to all-granted without user interaction, which may create future signal reliability risks if consent enforcement is tightened",
          "evidence": "Identity resolution breakpoint: 'HubSpot banner script js-na2.hs-banner.com loaded but gcs=G111 in GA4 requests indicates all consent granted by default with no user interaction; dma=1 suggests DMA applies but no consent dialog was triggered'. This means current signal volume may be artificially high relative to a properly consented state.",
          "current_state": "can_be_improved",
          "target_state": "Implement a proper consent management platform that presents a consent dialog to users in regulated regions (EU/EEA under GDPR, California under CCPA). GA4 consent mode v2 should gate tag firing based on actual user consent choices. Signal baselines should be recalibrated after consent is properly implemented.",
          "priority": "medium",
          "opportunity": "Proper consent management reduces legal risk and establishes a realistic signal baseline. Consent mode v2 with modeled conversions helps recover some of the signal lost to consent denial."
        }
      ]
    },
    {
      "name": "revenue_data_reliability",
      "findings": [
        {
          "finding": "Google Ads conversion passes value=0 for a purchase-type conversion, meaning no revenue data flows to the ad platform for ROAS calculation",
          "evidence": "Signal inventory: 'Google Ads conversion (label=NeCfCNuMwOkaEPa1n68_, bttype=purchase)' with evidence showing 'value=0' in the conversion request to googleadservices.com. The Google Ads 1p-conversion sync also carries this zero value.",
          "current_state": "not_yet_configured",
          "target_state": "Conversion events should pass the actual transaction value (or a proxy value such as estimated lifetime value) dynamically. The value should originate from the e-commerce platform or CRM (e.g., HubSpot deal value) and be passed through the dataLayer to the conversion tag. Currency should be explicitly set.",
          "priority": "high",
          "opportunity": "Without revenue values, Google Ads cannot run target ROAS bidding strategies, and all ROAS reporting is meaningless. Passing accurate values enables value-based bidding which typically outperforms CPA-based strategies for businesses with variable transaction values."
        },
        {
          "finding": "No conversion value is passed to any ad platform \u2014 LinkedIn, Meta, Twitter/X, Bing, and Reddit all lack revenue data in their conversion signals",
          "evidence": "Across the entire signal inventory, no conversion event for any platform includes a value or revenue parameter. LinkedIn conversion (conversionId=20244068) has no value. Meta Pixel has no conversion events at all. Twitter, Reddit, and Bing have no conversion events observed.",
          "current_state": "not_yet_configured",
          "target_state": "All ad platforms with conversion tracking should receive the actual or estimated conversion value. For B2B/SaaS, this could be the plan value, estimated LTV, or a lead score-based proxy value. Values should be consistent across platforms to enable cross-channel ROAS comparison.",
          "priority": "high",
          "opportunity": "Enables ROAS-based budget allocation across all channels, allows apples-to-apples comparison of channel efficiency, and provides the foundation for value-based bidding on every platform that supports it"
        },
        {
          "finding": "HubSpot CRM is the most likely source of revenue truth but has no visible data pipeline to any ad platform",
          "evidence": "Data architecture shows HubSpot (portal 244051090) as a CRM type data store. Joinability analysis rates ga4_primary-to-hubspot as 'weak' with note: 'No visible shared identifier between GA4 and HubSpot'. Joinability between hubspot and linkedin is 'partial'. All other hubspot-to-ad-platform joinability is weak or none.",
          "current_state": "not_yet_configured",
          "target_state": "HubSpot should serve as the single source of truth for lead and revenue data. A data pipeline should export deal values and lifecycle stage changes from HubSpot to ad platforms via offline conversion imports (using click IDs or hashed emails). HubSpot should also feed GA4 via Measurement Protocol for unified reporting.",
          "priority": "high",
          "opportunity": "Connecting HubSpot revenue data to ad platforms closes the loop between marketing spend and actual business revenue, enabling true ROI measurement rather than proxy metrics"
        },
        {
          "finding": "Two GA4 properties (G-1FEEBQNV0D and G-26T311XVNT) collect the same data, which could create confusion about which is the source of truth for analytics reporting",
          "evidence": "Data architecture shows two GA4 properties both receiving page_view events from the same GTM container. Joinability between them is 'strong' (same client_id and session_id), but the purpose of having two properties is unclear.",
          "current_state": "can_be_improved",
          "target_state": "Clarify the purpose of each GA4 property (e.g., one for marketing, one for product analytics, or one is legacy). Ensure only one is used as the authoritative source for conversion reporting to ad platforms to prevent discrepancies.",
          "priority": "low",
          "opportunity": "Reducing ambiguity about the source of truth for analytics data prevents reporting discrepancies and simplifies the measurement architecture"
        }
      ]
    },
    {
      "name": "cross_channel_overlap",
      "findings": [
        {
          "finding": "Multiple ad platforms claim conversions from the same page view with no deduplication mechanism \u2014 Google Ads fires a purchase conversion and LinkedIn fires a conversion on every homepage visit",
          "evidence": "Signal inventory shows Google Ads conversion (bttype=purchase, value=0) and LinkedIn conversion (conversionId=20244068) both firing on the homepage https://kilo.ai/. There is no shared conversion deduplication system \u2014 joinability between google_ads and linkedin is 'none' per the data architecture.",
          "current_state": "not_yet_configured",
          "target_state": "Conversions should only fire on actual business events (not page views). A single source of truth (e.g., HubSpot CRM or a server-side conversion endpoint) should deduplicate conversions before sending to each platform. Each platform should receive credit for a conversion only once, ideally with a shared order/transaction ID for deduplication.",
          "priority": "high",
          "opportunity": "Without deduplication, summing conversions across platforms massively overstates actual business outcomes, leading to inflated ROAS and incorrect budget allocation decisions"
        },
        {
          "finding": "No single source of truth exists for conversion attribution \u2014 each platform operates in its own silo with no cross-platform deduplication or unified view",
          "evidence": "Data architecture joinability analysis shows 'none' joinability between Google Ads and Meta, Google Ads and LinkedIn, Google Ads and Bing, and GA4 and Meta. The only partial joinability is between HubSpot and LinkedIn (via email, theoretically). There is no CDP, data warehouse, or server-side attribution system observed.",
          "current_state": "not_yet_configured",
          "target_state": "Implement a central attribution layer \u2014 either a CDP, a data warehouse with attribution modelling (e.g., BigQuery + GA4 raw export), or at minimum use GA4 as the primary attribution system with proper UTM tagging and cross-domain tracking. All platforms should report to a common dashboard with deduplicated conversions.",
          "priority": "high",
          "opportunity": "A unified attribution view enables accurate cross-channel budget allocation, prevents double-counting of conversions, and provides a reliable total ROAS figure for the marketing programme"
        },
        {
          "finding": "Impact.com affiliate tracking and SaaSquatch referral SDK operate independently from ad platform tracking with no visible deduplication",
          "evidence": "Data architecture shows Impact.com as a separate data store with 'medium' confidence and no joinability mapped to any other system. The SaaSquatch referral SDK loads from the Impact universal tag. No transaction ID or order ID deduplication mechanism was observed between affiliate and paid channels.",
          "current_state": "can_be_improved",
          "target_state": "Affiliate conversions tracked via Impact.com should share a common transaction ID with ad platform conversions. A deduplication rule should be established (e.g., last non-affiliate click wins, or coupon-code-based attribution) to prevent affiliates from claiming credit for paid-channel-driven conversions.",
          "priority": "medium",
          "opportunity": "Prevents affiliate commission overpayment and ensures that paid channel ROAS is not understated by affiliate claim overlap"
        },
        {
          "finding": "No consistent UTM parameter strategy or campaign taxonomy was observed that could enable cross-channel comparison in GA4",
          "evidence": "The homepage URL https://kilo.ai/ contained no UTM parameters or click IDs. No campaign or source parameters were observed in any dataLayer push. Without consistent UTM tagging, GA4 cannot serve as a cross-channel attribution system even if cross-domain tracking were fixed.",
          "current_state": "can_be_improved",
          "target_state": "All paid campaigns should use consistent UTM parameters (utm_source, utm_medium, utm_campaign, utm_content, utm_term) following a standardised taxonomy. Auto-tagging should supplement (not replace) UTM tagging. GA4 should be configured to use these parameters for channel grouping and attribution.",
          "priority": "medium",
          "opportunity": "Consistent UTM taxonomy enables GA4 to serve as a cross-channel attribution comparison tool, providing an independent perspective on channel performance beyond each platform's self-reported metrics"
        }
      ]
    },
    {
      "name": "data_limitations",
      "findings": [
        {
          "finding": "Cross-device journeys are completely unmeasurable \u2014 no authenticated user ID is passed to any analytics or ad platform, and there is no cross-device graph",
          "evidence": "Identity resolution coverage confirms 'cross_device_capability: no'. Breakpoint states: 'No authenticated user ID or login event in dataLayer' despite a sign-in link to app.kilo.ai. Each platform relies on its own cookie-based device ID (ga4_client_id, posthog_device_id, hubspot_visitor_id, etc.) with no cross-device stitching.",
          "current_state": "not_yet_configured",
          "target_state": "Implement a user_id pass-through when users authenticate on app.kilo.ai. This user_id should be sent to GA4 (via setUserId), PostHog (via identify), HubSpot (via identify), and ad platforms (via enhanced conversions with hashed email). This enables cross-device stitching within each platform and improves cross-platform joinability.",
          "priority": "high",
          "opportunity": "User ID implementation enables cross-device attribution, dramatically improves the fully-stitched identity estimate (currently below 50%), and provides the foundation for enhanced conversions and offline conversion imports"
        },
        {
          "finding": "No enhanced conversions or user-provided data signals are configured for any ad platform, limiting resilience to cookie loss and preventing deterministic matching",
          "evidence": "Identity resolution breakpoint: 'Google Ads conversion request contains em=tv.1 indicating no email hash provided; Meta Pixel config loaded but no fbq('init', ..., {em:...}) user data observed; no hashed PII in any request'. This affects Google Ads, Meta, and LinkedIn.",
          "current_state": "not_yet_configured",
          "target_state": "Enhanced conversions should be configured for Google Ads (hashed email, phone, address), Meta Advanced Matching should be enabled (hashed email, phone), and LinkedIn should receive hashed email for matched audiences. User data should be captured at form submission and passed through the dataLayer or server-side.",
          "priority": "high",
          "opportunity": "Enhanced conversions can recover 5-15% of conversions lost to cookie restrictions, improve match rates for offline conversion imports, and provide deterministic identity signals that are resilient to browser privacy changes"
        },
        {
          "finding": "No server-side tracking infrastructure is present \u2014 all data collection is purely client-side, making the entire measurement system vulnerable to ad blockers, browser restrictions, and consent gates",
          "evidence": "Data architecture shows all data_flows use 'pixel_fire' mechanism with 'client_side_pixel' collection method for every data store. Only PostHog and Sentry use first-party proxying (kilo.ai/ingest and kilo.ai/monitoring). No server-side GTM container, Meta Conversions API, LinkedIn Conversions API, or Google Ads server-side conversion tracking was observed.",
          "current_state": "not_yet_configured",
          "target_state": "Implement a server-side GTM container (or equivalent) to handle conversion events server-to-server. At minimum, implement Meta Conversions API, Google Ads server-side conversion tracking, and LinkedIn Conversions API. Server-side tracking provides resilience against ad blockers, ITP, and consent-related signal loss.",
          "priority": "high",
          "opportunity": "Server-side tracking typically recovers 10-20% of signal lost to client-side limitations, provides more reliable conversion data for platform algorithms, and extends cookie lifetimes for attribution purposes"
        },
        {
          "finding": "Data collected across platforms is largely not joinable \u2014 6 of 11 joinability pairs assessed as 'none' or 'weak', making holistic customer journey analysis impossible with current infrastructure",
          "evidence": "Data architecture joinability analysis: ga4_primary\u2194hubspot: weak, ga4_primary\u2194posthog: weak, google_ads\u2194meta_pixel: none, google_ads\u2194linkedin: none, posthog\u2194hubspot: weak, google_ads\u2194bing_ads: none, ga4_primary\u2194meta_pixel: none. Only GA4\u2194GA4 and GA4\u2194Google Ads have strong joinability.",
          "current_state": "not_yet_configured",
          "target_state": "Implement a shared user_id across GA4, PostHog, and HubSpot to enable cross-system joins. Export GA4 raw data to BigQuery and connect HubSpot CRM data to the same warehouse. Use this unified dataset for cross-platform journey analysis and attribution modelling. A CDP could also serve as the identity backbone.",
          "priority": "high",
          "opportunity": "Joinable data across systems enables true customer journey analysis, multi-touch attribution modelling, and accurate customer lifetime value calculation \u2014 all of which are prerequisites for sophisticated marketing measurement"
        },
        {
          "finding": "Consent resilience is weak \u2014 DMA applies but no consent dialog is triggered, creating regulatory risk and potential future measurement disruption if enforcement changes",
          "evidence": "Identity resolution rates consent_resilience as 'weak'. Evidence: 'dma=1 suggests DMA applies but no consent dialog was triggered' and 'gcs=G111 in GA4 requests indicates all consent granted by default'. HubSpot consent banner script loads but does not appear to gate any tracking.",
          "current_state": "can_be_improved",
          "target_state": "Implement a compliant consent management platform that presents choices to users in regulated jurisdictions. Integrate consent signals with GA4 consent mode v2, and ensure all ad platform tags respect consent state. Model for consent-denied users using GA4 behavioural modelling and platform-specific modeled conversions.",
          "priority": "medium",
          "opportunity": "Proper consent implementation reduces regulatory risk (GDPR fines can reach 4% of global revenue), establishes sustainable measurement practices, and enables Google's consent mode modelling to partially recover lost signal"
        },
        {
          "finding": "No visibility into offline conversion paths \u2014 phone calls, sales-assisted conversions, or enterprise deal flows cannot be connected to marketing touchpoints",
          "evidence": "No call tracking platform, offline conversion import mechanism, or CRM-to-ad-platform data pipeline was observed in the signal inventory or data architecture. HubSpot CRM is present but operates as a siloed client-side tracking pixel with no server-side integration to ad platforms.",
          "current_state": "not_yet_configured",
          "target_state": "If the business has phone-based or sales-assisted conversions, implement call tracking with dynamic number insertion and integrate HubSpot deal stage changes as offline conversions to Google Ads, Meta, and LinkedIn. For enterprise deals, ensure sales pipeline stages are fed back as conversion signals with appropriate values.",
          "priority": "medium",
          "opportunity": "For B2B/SaaS businesses, sales-assisted and enterprise deals often represent the highest-value conversions. Attributing these to marketing enables proper valuation of upper-funnel channels that drive awareness and consideration"
        }
      ]
    }
  ]
}