signal_engineering_readiness — v1

Back to project
ID38f334c3-2716-4f37-9ba6-50ecb7fd0953
Lenssignal_engineering_readiness
Functionassess
Phasestrategy
Topicsreadiness, signal-quality, value-modeling
Versionv1
Created2026-04-21T08:20:06+00:00

Content

{
  "scorecard": [
    {
      "dimension": "signal_selection",
      "status": "blocked",
      "current_state": "The primary Google Ads conversion action fires on every page load with bttype=purchase and value=0. This is almost certainly set as the primary conversion action in Google Ads, meaning Smart Bidding is optimising toward maximising zero-value page views. No actual purchase, sign_up, or generate_lead conversion events exist in the dataLayer. LinkedIn fires a conversion (conversionId=20244068) on every page view with no value. Meta Pixel initialises but fires no conversion events at all. Twitter, Reddit, and Bing track only page views with no conversion events configured. No platform receives a meaningful value signal.",
      "target_state": "The primary conversion action in Google Ads should reflect the highest-quality value signal available \u2014 ideally a qualified lead or purchase event carrying an estimated or actual business value. For a B2B SaaS product like Kilo with a medium conversion cycle and HubSpot CRM, the optimal primary conversion is an offline-imported qualified lead (MQL/SQL) with an estimated pipeline value. Until offline imports are operational, a properly triggered sign-up or demo request event with a proxy value should serve as the primary conversion. Each additional platform (Meta, LinkedIn, Bing, Twitter, Reddit) should have analogous conversion actions firing only on meaningful business events.",
      "gap": "The entire conversion event layer must be rebuilt. (1) The misconfigured Google Ads page-load purchase conversion must be demoted or removed. (2) Meaningful conversion events (generate_lead, sign_up, purchase) must be pushed to the dataLayer from the application. (3) GTM tags for each platform must be triggered by these events, not page load. (4) Dynamic values must be attached to conversion events. (5) An offline conversion import pipeline from HubSpot must be established for downstream revenue signals.",
      "evidence": "Google Ads conversion fires with value=0 and bttype=purchase on every homepage load (signal_inventory, conversion_feedback_loops). No dataLayer conversion events exist beyond gtm.js/dom/load/scrollDepth (signal_inventory). Meta Pixel fires no conversion events (conversion_feedback_loops: 'no fbq track conversion events captured'). LinkedIn conversion fires on every page view (signal_inventory). Value_signal_quality rated 'weak' (conversion_feedback_loops). Customer journey shows methodology_level='none' and stages_with_value_count=1 with the only value being 0."
    },
    {
      "dimension": "enhanced_conversions",
      "status": "blocked",
      "current_state": "No enhanced conversions or user-provided data matching is configured on any platform. Google Ads conversion requests contain em=tv.1, explicitly confirming no email hash is provided. Meta Pixel loads but no fbq('init', ..., {em:...}) advanced matching data was observed. LinkedIn has no hashed PII in any request. No hashed email, phone number, or address is sent to any ad platform. The has_enhanced_matching field is 'no' for every conversion action inventoried.",
      "target_state": "Enhanced conversions should be active on Google Ads (hashed email and phone sent with conversion events), Meta Advanced Matching should be enabled (hashed email and phone passed via fbq init or Conversions API), and LinkedIn should receive hashed email for enhanced matching. User data should be captured at form submission or login on app.kilo.ai and hashed before sending to platforms. Match rate improvement over click-ID-only matching is typically 5-15% additional attributed conversions.",
      "gap": "Implementation requires: (1) Capturing first-party user data (email, phone) at form submission or authentication events. (2) Hashing the data (SHA-256) before sending to platforms. (3) Configuring Google Ads Enhanced Conversions (either via gtag, GTM, or server-side). (4) Enabling Meta Advanced Matching. (5) Setting up LinkedIn enhanced conversion tracking. This is blocked by the absence of any user-provided data capture in the current dataLayer and the lack of server-side infrastructure.",
      "evidence": "Google Ads em=tv.1 confirms no email hash (identity_resolution breakpoint). No hashed PII in any request across all platforms (identity_resolution breakpoint). has_enhanced_matching='no' for all conversion actions (conversion_feedback_loops). No user_id, login, or identify event in dataLayer (identity_resolution breakpoint). No server-side conversion API traffic detected (consent_assessment)."
    },
    {
      "dimension": "conversion_freshness",
      "status": "blocked",
      "current_state": "All conversion signals are delivered exclusively via client-side pixels in real-time, which means the only conversions that reach ad platforms are those that fire during the user's browser session on kilo.ai. There is no offline conversion import, no batch upload process, and no server-side conversion forwarding. The feedback loop assessment confirms platforms_with_complete_loops is empty. HubSpot CRM likely contains downstream conversion data (MQL, SQL, Closed-Won) but has no export pipeline to any ad platform. For a B2B SaaS business with a medium conversion cycle, the most valuable conversion events (qualified leads, deals) occur days or weeks after the initial click and are never sent back to platforms.",
      "target_state": "Offline conversions should be uploaded to Google Ads, Meta, LinkedIn, and Bing within 24 hours of the CRM event (MQL, SQL, Opportunity, Closed-Won). Google Ads accepts offline conversion imports within a 90-day window (7 days for optimal bidding impact). A daily automated pipeline from HubSpot CRM to ad platforms should send lifecycle stage changes with associated values. Client-side real-time signals for top-of-funnel events (form submit, sign-up) complement offline imports for deeper funnel stages.",
      "gap": "No offline conversion infrastructure exists. Building it requires: (1) Capturing and persisting click IDs (gclid, fbclid, msclkid) when users arrive on kilo.ai and passing them through to HubSpot CRM. (2) Building a daily automated export from HubSpot CRM to Google Ads Offline Conversion Import, Meta Offline Events API, LinkedIn Offline Conversions, and Bing Offline Conversions. (3) Including hashed email for enhanced matching where click IDs are unavailable. This is blocked by the current absence of click ID persistence and any CRM-to-ad-platform data pipeline.",
      "evidence": "All data flows use mechanism=pixel_fire with client_side_pixel collection (data_architecture). platforms_with_complete_loops=[] (conversion_feedback_loops). No offline conversion import detected (customer_journey calibration). No click ID cookies persisted \u2014 gclid, fbclid, msclkid absent (identity_resolution breakpoint). HubSpot-to-GA4 joinability='weak', HubSpot-to-ad-platforms has no join path (data_architecture joinability). Cross-domain break between kilo.ai and app.kilo.ai where conversions likely occur (identity_resolution breakpoint)."
    },
    {
      "dimension": "identity_coverage",
      "status": "blocked",
      "current_state": "Fully stitched journey estimate is rated 'low_below_50'. There is a critical cross-domain identity break between kilo.ai (marketing site) and app.kilo.ai (product/conversion site) with no cross-domain linker parameter and no shared cookie domain. No click ID cookies are persisted (gclid, fbclid, msclkid, ttclid not present). No authenticated user_id is passed to any analytics or ad platform despite a sign-in flow existing at app.kilo.ai. Third-party cookies are unavailable (ct_cookie_present=false). Each platform operates in an isolated identity silo \u2014 joinability between GA4 and HubSpot is 'weak', between Google Ads and Meta/LinkedIn/Bing is 'none'. Cross-device capability is 'no'. Consent resilience is 'weak'.",
      "target_state": "More than 80% of converting journeys should carry a matchable identifier back to the originating ad platform. This requires: GA4 cross-domain measurement between kilo.ai and app.kilo.ai, click ID persistence via first-party cookies, authenticated user_id passed to GA4/PostHog/HubSpot at login, and enhanced conversions with hashed email for deterministic matching to ad platforms. A server-side GTM container on a kilo.ai subdomain would extend first-party cookie lifetime beyond ITP 7-day restrictions.",
      "gap": "Multiple foundational identity issues must be resolved: (1) Configure GA4 cross-domain tracking between kilo.ai and app.kilo.ai. (2) Ensure click IDs (gclid, fbclid, msclkid) are preserved through redirects and stored in first-party cookies. (3) Implement user_id pass-through at authentication to GA4, PostHog, HubSpot, and ad platforms. (4) Deploy server-side GTM for first-party cookie setting. (5) Enable enhanced conversions with hashed PII for all major platforms.",
      "evidence": "fully_stitched_estimate='low_below_50' (identity_resolution coverage). Cross-domain break at app.kilo.ai with no linker parameter (identity_resolution breakpoint, severity=high). No click ID cookies persisted (identity_resolution breakpoint). No user_id or login event in dataLayer (identity_resolution breakpoint). ct_cookie_present=false (identity_resolution breakpoint). Cross-device capability='no' (identity_resolution coverage). GA4-HubSpot joinability='weak', Google Ads-Meta joinability='none' (data_architecture joinability)."
    },
    {
      "dimension": "value_differentiation",
      "status": "blocked",
      "current_state": "Conversion values are entirely undifferentiated. The only value sent to any platform is a static 0 on the misconfigured Google Ads page-load conversion. No other platform receives any value. There is no mechanism to distinguish a high-value lead from a low-value one, no product/plan selection captured, no pricing tier signals, and no customer segment differentiation. The value_estimation methodology_level is 'none' and static_vs_dynamic is 'static'. No zero-party data inputs are utilised for value estimation.",
      "target_state": "Conversion values should reflect actual or well-modeled differences in business value. For Kilo (B2B SaaS), this means: (a) proxy values on form submissions based on company size, plan interest, or use case expressed by the user; (b) CRM-derived values sent via offline imports reflecting actual pipeline value or deal size; (c) differentiated values by conversion type (e.g., demo request > newsletter signup > content download). The algorithm should receive enough value variance that it can meaningfully distinguish and bid differently for high-value vs. low-value prospects.",
      "gap": "The gap is total \u2014 no value differentiation exists. Building it requires: (1) Defining a value hierarchy for conversion actions (e.g., page view=0, content download=5, demo request=50, sign-up=200, qualified lead=1000, closed deal=actual revenue). (2) Capturing zero-party data (plan interest, company size) to refine estimates. (3) Passing dynamic values through the dataLayer to conversion tags. (4) Implementing offline conversion imports with CRM-derived values. (5) Building a calibration mechanism to update proxy values based on actual close rates and deal sizes.",
      "evidence": "Google Ads conversion value=0 static (conversion_feedback_loops, signal_inventory). No value sent to LinkedIn, Meta, Twitter, Bing, or Reddit (signal_quality: value_calibration findings). value_estimation methodology_level='none' (customer_journey). value_inputs_observed=[] (customer_journey). zero_party_data_utilized=[] (customer_journey). Value_signal_quality='weak' (conversion_feedback_loops)."
    },
    {
      "dimension": "value_calibration",
      "status": "blocked",
      "current_state": "No calibration feedback loop exists. The customer_journey assessment confirms has_calibration_loop='no', offline_import_detected='no', and value_update_mechanism='no'. Since the only conversion value sent is a static 0, there is nothing to calibrate against actual outcomes. HubSpot CRM likely contains actual deal values and lead-to-close rates, but this data has no export path to any ad platform or analytics system. There is no mechanism to compare estimated values against actual revenue outcomes.",
      "target_state": "A feedback loop should exist where estimated values sent to platforms are compared against actual CRM outcomes on at least a monthly basis (quarterly minimum). Conversion probability factors (e.g., demo request \u2192 closed deal probability), category multipliers, and average deal values should be updated based on actuals. Ideally, this is automated via a CRM-to-ad-platform pipeline where actual deal values are sent as offline conversions, creating a self-calibrating system.",
      "gap": "Calibration cannot begin until values are being sent to platforms and CRM outcomes are accessible. Prerequisites: (1) Implement conversion events with proxy values (dimension: value_differentiation). (2) Build HubSpot-to-ad-platform offline conversion pipeline (dimension: conversion_freshness). (3) Create a reporting view comparing estimated vs. actual values by source/campaign. (4) Establish a monthly calibration review process. (5) Ideally automate factor updates based on rolling 90-day actual close rates.",
      "evidence": "has_calibration_loop='no' (customer_journey calibration). offline_import_detected='no' (customer_journey). No offline conversion pipeline detected (signal_quality: latency findings). HubSpot-to-ad-platform joinability is weak/none (data_architecture). platforms_with_complete_loops=[] (conversion_feedback_loops). Value=0 is the only value sent \u2014 nothing to calibrate (conversion_feedback_loops)."
    },
    {
      "dimension": "zero_party_data_utilization",
      "status": "blocked",
      "current_state": "No zero-party data is captured in the dataLayer or utilised for value estimation. The customer_journey assessment lists zero_party_data_available=[] and zero_party_data_utilized=[]. The dataLayer contains only GTM system events (gtm.js, gtm.dom, gtm.load) and scroll depth. No product preferences, search parameters, filter selections, plan interest, company size, or stated intent signals are captured. The site likely has a pricing page and product selection flow, but no signals from these pages were observed in the signal inventory (only homepage was scanned).",
      "target_state": "User-expressed preference data should be captured in the dataLayer and used as input to value estimation. For Kilo (B2B SaaS/AI), relevant zero-party signals include: plan tier selected on pricing page, company size entered in forms, use case selected, number of users/seats indicated, industry vertical, and any configuration choices in a product trial. These signals should feed value multipliers (e.g., enterprise plan interest = 5x value multiplier over free tier interest).",
      "gap": "Implementation requires: (1) Instrumenting the pricing page, demo request form, and sign-up flow with dataLayer pushes capturing user selections and form fields. (2) Building a value estimation model that uses these inputs to generate differentiated conversion values. (3) Passing the estimated value to conversion tags via GTM. The underlying blocker is the absence of any dataLayer instrumentation beyond system events.",
      "evidence": "zero_party_data_available=[] and zero_party_data_utilized=[] (customer_journey). DataLayer contains only gtm.js, gtm.dom, gtm.load, and gtm.scrollDepth (signal_inventory). No pricing page, demo page, or form signals captured (signal_quality: coverage_gaps). value_inputs_observed=[] (customer_journey). Only homepage was scanned but no indication of richer dataLayer on other pages (signal_quality: coverage_gaps finding about single page)."
    },
    {
      "dimension": "consent_aware_architecture",
      "status": "needs_work",
      "current_state": "All tags fire unconditionally with gcs=G111 (all consent granted by default) despite dma=1 indicating DMA applicability. HubSpot consent banner script loads but does not appear to render a visible consent dialog or gate any tags. Currently there is zero signal loss from consent \u2014 but this represents a compliance violation, not a measurement strength. No server-side measurement layer exists (all collection is client-side pixel-based). PostHog and Sentry use first-party proxying (kilo.ai/ingest, kilo.ai/monitoring) but this pattern is not applied to ad platforms. Google Consent Mode v2 parameters are present but stuck in all-granted state. Bing UET sends consent signals but auto-granted. No consent audit trail or persistence mechanism was observed. ads_data_redaction is explicitly set to false.",
      "target_state": "A functional CMP with TCF 2.0 and Google Consent Mode v2 support should present a consent dialog in regulated regions before non-essential tags fire. Google Consent Mode v2 should default to 'denied' for ad_storage, ad_user_data, and ad_personalization in EU/EEA, enabling cookieless pings for conversion modelling. Server-side GTM should forward consented signals server-to-server, reducing dependence on client-side consent gates. Enhanced Conversions and CAPI (Meta, LinkedIn) should provide consent-resilient attribution. Consent decisions should be logged for audit purposes.",
      "gap": "Consent infrastructure exists in embryonic form (HubSpot banner, Consent Mode parameters present, Bing consent signals) but is non-functional. Required changes: (1) Deploy a proper CMP (Cookiebot, OneTrust, or equivalent) with TCF 2.0 support. (2) Configure Google Consent Mode v2 with denied defaults in regulated regions. (3) Integrate CMP with GTM to gate tags by consent category. (4) Configure Bing consent signals from CMP. (5) Deploy server-side GTM for consent-resilient signal forwarding. (6) Implement CAPI for Meta and LinkedIn. (7) Enable consent logging and audit trail.",
      "evidence": "gcs=G111 all consent granted by default (consent_assessment). dma=1 confirms DMA applicability (consent_assessment). HubSpot banner loads but no consent dialog triggered (consent_assessment). ads_data_redaction=false explicitly (consent_assessment). No dedicated CMP detected (consent_assessment). PostHog uses first-party proxy but ad platforms do not (signal_quality, consent_assessment). No consent dataLayer events (consent_assessment). All 50+ signals fire without consent gate (consent_assessment). No server-side GTM container (consent_assessment)."
    }
  ],
  "roadmap": [
    {
      "action": "Demote or pause the misconfigured Google Ads page-load purchase conversion (label=NeCfCNuMwOkaEPa1n68_, bttype=purchase, value=0) \u2014 set it as a secondary/observation-only conversion in Google Ads immediately to stop it from corrupting Smart Bidding",
      "priority": "high",
      "impact": "Immediately stops Smart Bidding from optimising toward zero-value page views, preventing continued wasted ad spend. This is the single highest-impact configuration change available.",
      "effort": "low",
      "prerequisites": [],
      "dimension": "signal_selection"
    },
    {
      "action": "Implement meaningful conversion events in the dataLayer (generate_lead on form submission, sign_up on account creation, purchase on payment) with structured data including value, currency, and transaction_id \u2014 instrument kilo.ai marketing pages and coordinate with app.kilo.ai engineering team",
      "priority": "high",
      "impact": "Creates the foundational event layer that all ad platform conversion tags depend on. Without this, no platform can receive accurate conversion signals. Enables conversion-optimised bidding across all six ad platforms simultaneously.",
      "effort": "medium",
      "prerequisites": [],
      "dimension": "signal_selection"
    },
    {
      "action": "Configure GA4 cross-domain measurement between kilo.ai and app.kilo.ai by adding cross-domain linker configuration in GTM and ensuring GA4 tags are present on app.kilo.ai",
      "priority": "high",
      "impact": "Recovers attribution for conversions occurring on app.kilo.ai (sign-ups, purchases) that currently cannot be linked to marketing touchpoints. Could recover the majority of currently unattributed conversions.",
      "effort": "low",
      "prerequisites": [],
      "dimension": "identity_coverage"
    },
    {
      "action": "Verify auto-tagging is enabled in all ad platforms (Google Ads, Meta, LinkedIn, Microsoft Ads, Twitter) and ensure URL parameters (gclid, fbclid, msclkid, ttclid) are preserved through any redirects and stored in first-party cookies",
      "priority": "high",
      "impact": "Restores deterministic click-ID-based attribution for all paid channels, directly improving CPA and ROAS reporting accuracy and providing higher-quality signals for automated bidding.",
      "effort": "low",
      "prerequisites": [],
      "dimension": "identity_coverage"
    },
    {
      "action": "Deploy a proper CMP (Cookiebot, OneTrust, or equivalent with TCF 2.0 and Google Consent Mode v2 support) that presents a consent dialog to users in EU/EEA/UK before non-essential tags fire, with consent categories mapped to GTM tag groups",
      "priority": "high",
      "impact": "Eliminates GDPR/DMA compliance risk (fines up to 4% of global revenue). Establishes the foundation for consent-mode-based modelled conversions. Creates a sustainable measurement baseline.",
      "effort": "medium",
      "prerequisites": [],
      "dimension": "consent_aware_architecture"
    },
    {
      "action": "Configure Google Consent Mode v2 with denied defaults for ad_storage, ad_user_data, and ad_personalization in regulated regions, and set ads_data_redaction to dynamically reflect consent state",
      "priority": "high",
      "impact": "Enables Google's conversion modelling for non-consenting users, recovering an estimated 20-40% of signal otherwise lost to consent denial. Maintains Smart Bidding signal quality when consent gating is active.",
      "effort": "low",
      "prerequisites": [
        "Deploy a proper CMP (Cookiebot, OneTrust, or equivalent with TCF 2.0 and Google Consent Mode v2 support) that presents a consent dialog to users in EU/EEA/UK before non-essential tags fire, with consent categories mapped to GTM tag groups"
      ],
      "dimension": "consent_aware_architecture"
    },
    {
      "action": "Create properly triggered conversion tags in GTM for all ad platforms (Google Ads, Meta, LinkedIn, Bing, Twitter, Reddit) that fire on the new dataLayer conversion events with dynamic values, replacing the current page-load triggers",
      "priority": "high",
      "impact": "Delivers accurate conversion signals to all ad platforms, enabling conversion-optimised bidding across the entire media mix. Fixes Meta's complete lack of conversion events and LinkedIn's page-view conversion.",
      "effort": "medium",
      "prerequisites": [
        "Implement meaningful conversion events in the dataLayer (generate_lead on form submission, sign_up on account creation, purchase on payment) with structured data including value, currency, and transaction_id \u2014 instrument kilo.ai marketing pages and coordinate with app.kilo.ai engineering team"
      ],
      "dimension": "signal_selection"
    },
    {
      "action": "Define a value hierarchy for conversion actions based on estimated business value (e.g., content download=$5, demo request=$50, sign-up=$200, qualified lead=$1000) using historical HubSpot CRM close rates and average deal values",
      "priority": "high",
      "impact": "Provides the value differentiation that enables value-based bidding (tROAS). Allows algorithms to distinguish high-value from low-value conversions and bid accordingly, typically improving ROAS by 15-30%.",
      "effort": "low",
      "prerequisites": [
        "Implement meaningful conversion events in the dataLayer (generate_lead on form submission, sign_up on account creation, purchase on payment) with structured data including value, currency, and transaction_id \u2014 instrument kilo.ai marketing pages and coordinate with app.kilo.ai engineering team"
      ],
      "dimension": "value_differentiation"
    },
    {
      "action": "Implement user_id pass-through at authentication: when users log in on app.kilo.ai, push a hashed user identifier to GA4 (setUserId), PostHog (identify), HubSpot (contact association), and capture email/phone for enhanced conversions",
      "priority": "high",
      "impact": "Enables cross-device attribution, cross-system data joins (GA4\u2194HubSpot\u2194PostHog), and provides the first-party identity foundation for enhanced conversions and offline conversion imports.",
      "effort": "medium",
      "prerequisites": [
        "Configure GA4 cross-domain measurement between kilo.ai and app.kilo.ai by adding cross-domain linker configuration in GTM and ensuring GA4 tags are present on app.kilo.ai"
      ],
      "dimension": "identity_coverage"
    },
    {
      "action": "Enable Google Ads Enhanced Conversions by passing hashed email (and phone where available) with conversion events \u2014 configure via GTM using the enhanced conversions tag or gtag API",
      "priority": "high",
      "impact": "Improves conversion match rates by 5-15% by enabling deterministic matching beyond click-ID-only approaches. Critical for maintaining attribution accuracy as third-party cookies disappear (ct_cookie_present=false already observed).",
      "effort": "medium",
      "prerequisites": [
        "Implement user_id pass-through at authentication: when users log in on app.kilo.ai, push a hashed user identifier to GA4 (setUserId), PostHog (identify), HubSpot (contact association), and capture email/phone for enhanced conversions",
        "Implement meaningful conversion events in the dataLayer (generate_lead on form submission, sign_up on account creation, purchase on payment) with structured data including value, currency, and transaction_id \u2014 instrument kilo.ai marketing pages and coordinate with app.kilo.ai engineering team"
      ],
      "dimension": "enhanced_conversions"
    },
    {
      "action": "Build a daily automated offline conversion import pipeline from HubSpot CRM to Google Ads (Enhanced Conversions for Leads or Offline Conversion Import) sending MQL, SQL, Opportunity, and Closed-Won events with actual deal values and click IDs or hashed emails",
      "priority": "high",
      "impact": "Enables Smart Bidding to optimise toward actual revenue-generating leads rather than top-of-funnel proxies. Closes the feedback loop between marketing spend and business revenue for the highest-spend platform.",
      "effort": "high",
      "prerequisites": [
        "Verify auto-tagging is enabled in all ad platforms (Google Ads, Meta, LinkedIn, Microsoft Ads, Twitter) and ensure URL parameters (gclid, fbclid, msclkid, ttclid) are preserved through any redirects and stored in first-party cookies",
        "Enable Google Ads Enhanced Conversions by passing hashed email (and phone where available) with conversion events \u2014 configure via GTM using the enhanced conversions tag or gtag API"
      ],
      "dimension": "conversion_freshness"
    },
    {
      "action": "Deploy a server-side GTM container on a kilo.ai subdomain (e.g., sgtm.kilo.ai), route GA4 and Google Ads conversion signals through it, and configure server-side cookie setting to extend first-party cookie lifetime",
      "priority": "high",
      "impact": "Extends first-party cookie lifetime beyond ITP 7-day cap, provides server-side conversion redundancy (recovering 10-20% of client-side signal loss), and creates infrastructure for Meta CAPI and LinkedIn CAPI.",
      "effort": "high",
      "prerequisites": [],
      "dimension": "consent_aware_architecture"
    },
    {
      "action": "Implement Meta Conversions API (CAPI) via server-side GTM or a direct integration, sending Lead, CompleteRegistration, and Purchase events with hashed user data and event deduplication against client-side pixel",
      "priority": "high",
      "impact": "Enables Meta campaign optimisation (currently impossible with zero conversion events). Provides consent-resilient attribution for Meta Ads. Meta CAPI is essential for any conversion-optimised Meta campaigns.",
      "effort": "medium",
      "prerequisites": [
        "Deploy a server-side GTM container on a kilo.ai subdomain (e.g., sgtm.kilo.ai), route GA4 and Google Ads conversion signals through it, and configure server-side cookie setting to extend first-party cookie lifetime",
        "Implement meaningful conversion events in the dataLayer (generate_lead on form submission, sign_up on account creation, purchase on payment) with structured data including value, currency, and transaction_id \u2014 instrument kilo.ai marketing pages and coordinate with app.kilo.ai engineering team"
      ],
      "dimension": "enhanced_conversions"
    },
    {
      "action": "Enable Meta Advanced Matching by passing hashed email and phone to the Meta Pixel init and/or via CAPI user_data parameters",
      "priority": "high",
      "impact": "Improves Meta attribution match rates, especially for cross-device and delayed conversions. Combined with CAPI, this provides the full Meta measurement stack.",
      "effort": "low",
      "prerequisites": [
        "Implement Meta Conversions API (CAPI) via server-side GTM or a direct integration, sending Lead, CompleteRegistration, and Purchase events with hashed user data and event deduplication against client-side pixel"
      ],
      "dimension": "enhanced_conversions"
    },
    {
      "action": "Instrument zero-party data capture in the dataLayer: push plan tier selected, company size, use case, and other form field selections as event parameters on pricing page views, form interactions, and demo requests",
      "priority": "medium",
      "impact": "Enables value estimation models that use user-expressed preferences to differentiate high-value from low-value prospects, improving value-based bidding accuracy.",
      "effort": "medium",
      "prerequisites": [
        "Implement meaningful conversion events in the dataLayer (generate_lead on form submission, sign_up on account creation, purchase on payment) with structured data including value, currency, and transaction_id \u2014 instrument kilo.ai marketing pages and coordinate with app.kilo.ai engineering team"
      ],
      "dimension": "zero_party_data_utilization"
    },
    {
      "action": "Build a value estimation model that combines zero-party data inputs (plan tier, company size, use case) with historical CRM close rates to generate dynamic conversion values, and feed these values to all ad platform conversion tags",
      "priority": "medium",
      "impact": "Moves from static proxy values to data-driven estimates, significantly improving the accuracy of value signals sent to bidding algorithms and enabling more precise budget allocation.",
      "effort": "medium",
      "prerequisites": [
        "Instrument zero-party data capture in the dataLayer: push plan tier selected, company size, use case, and other form field selections as event parameters on pricing page views, form interactions, and demo requests",
        "Define a value hierarchy for conversion actions based on estimated business value (e.g., content download=$5, demo request=$50, sign-up=$200, qualified lead=$1000) using historical HubSpot CRM close rates and average deal values"
      ],
      "dimension": "value_differentiation"
    },
    {
      "action": "Establish a monthly calibration review process: compare estimated conversion values sent to platforms against actual HubSpot CRM outcomes (close rates, deal sizes) by source/campaign, and update value factors accordingly",
      "priority": "medium",
      "impact": "Prevents value drift over time, ensuring bidding algorithms always receive accurate signals. Maintains ROAS optimisation effectiveness as market conditions, product mix, and customer profiles evolve.",
      "effort": "medium",
      "prerequisites": [
        "Build a daily automated offline conversion import pipeline from HubSpot CRM to Google Ads (Enhanced Conversions for Leads or Offline Conversion Import) sending MQL, SQL, Opportunity, and Closed-Won events with actual deal values and click IDs or hashed emails",
        "Define a value hierarchy for conversion actions based on estimated business value (e.g., content download=$5, demo request=$50, sign-up=$200, qualified lead=$1000) using historical HubSpot CRM close rates and average deal values"
      ],
      "dimension": "value_calibration"
    },
    {
      "action": "Implement LinkedIn Conversions API (CAPI) for server-side lead and opportunity conversion uploads with hashed email matching",
      "priority": "medium",
      "impact": "Maintains LinkedIn conversion signal quality regardless of client-side consent state and cookie availability. LinkedIn is likely a key B2B channel for Kilo.",
      "effort": "medium",
      "prerequisites": [
        "Deploy a server-side GTM container on a kilo.ai subdomain (e.g., sgtm.kilo.ai), route GA4 and Google Ads conversion signals through it, and configure server-side cookie setting to extend first-party cookie lifetime"
      ],
      "dimension": "enhanced_conversions"
    },
    {
      "action": "Build an offline conversion import pipeline from HubSpot to Meta (Offline Events API) and LinkedIn (Offline Conversions) with daily uploads of qualified leads and closed deals",
      "priority": "medium",
      "impact": "Extends value-based bidding capability beyond Google Ads to Meta and LinkedIn, enabling cross-platform ROAS optimisation for the full media mix.",
      "effort": "medium",
      "prerequisites": [
        "Build a daily automated offline conversion import pipeline from HubSpot CRM to Google Ads (Enhanced Conversions for Leads or Offline Conversion Import) sending MQL, SQL, Opportunity, and Closed-Won events with actual deal values and click IDs or hashed emails"
      ],
      "dimension": "conversion_freshness"
    },
    {
      "action": "Configure secondary/observation conversion actions in Google Ads for mid-funnel micro-conversions (pricing page visit, CTA click, content download) and send scroll depth to GA4 as a custom event",
      "priority": "medium",
      "impact": "Provides supplementary signals for Smart Bidding during low-volume periods and enables funnel analysis across ad-driven traffic. Especially valuable for B2B with longer sales cycles.",
      "effort": "low",
      "prerequisites": [
        "Implement meaningful conversion events in the dataLayer (generate_lead on form submission, sign_up on account creation, purchase on payment) with structured data including value, currency, and transaction_id \u2014 instrument kilo.ai marketing pages and coordinate with app.kilo.ai engineering team"
      ],
      "dimension": "signal_selection"
    },
    {
      "action": "Integrate Bing UET consent signals with the CMP so that asc reflects actual consent state, enabling Microsoft's modelled conversions for non-consenting users",
      "priority": "medium",
      "impact": "Maintains Microsoft Ads optimisation signal quality when consent gating is active, preventing a cliff-edge signal loss for Bing campaigns.",
      "effort": "low",
      "prerequisites": [
        "Deploy a proper CMP (Cookiebot, OneTrust, or equivalent with TCF 2.0 and Google Consent Mode v2 support) that presents a consent dialog to users in EU/EEA/UK before non-essential tags fire, with consent categories mapped to GTM tag groups"
      ],
      "dimension": "consent_aware_architecture"
    },
    {
      "action": "Implement consistent UTM parameter taxonomy across all paid campaigns and configure GA4 channel groupings accordingly to enable cross-channel attribution comparison",
      "priority": "medium",
      "impact": "Enables GA4 to serve as an independent cross-channel attribution tool, providing a deduplication perspective beyond each platform's self-reported metrics.",
      "effort": "low",
      "prerequisites": [],
      "dimension": "signal_selection"
    },
    {
      "action": "Clarify the purpose of the two GA4 properties (G-1FEEBQNV0D and G-26T311XVNT) and designate one as the authoritative source for conversion reporting; consider removing the redundant property",
      "priority": "low",
      "impact": "Reduces reporting ambiguity and simplifies the measurement architecture, preventing discrepancies in analytics-based decision making.",
      "effort": "low",
      "prerequisites": [],
      "dimension": "signal_selection"
    },
    {
      "action": "Implement Reddit standard conversion events (SignUp, Lead, Purchase) and Twitter event-specific conversion pixels triggered by actual user actions with values",
      "priority": "low",
      "impact": "Enables conversion-optimised bidding on secondary paid channels, preventing wasted spend on platforms that cannot learn which clicks convert.",
      "effort": "low",
      "prerequisites": [
        "Implement meaningful conversion events in the dataLayer (generate_lead on form submission, sign_up on account creation, purchase on payment) with structured data including value, currency, and transaction_id \u2014 instrument kilo.ai marketing pages and coordinate with app.kilo.ai engineering team"
      ],
      "dimension": "signal_selection"
    },
    {
      "action": "Configure Impact.com conversion tracking with shared transaction IDs and establish a deduplication rule between affiliate and paid channel conversions",
      "priority": "low",
      "impact": "Prevents affiliate commission overpayment and ensures paid channel ROAS is not understated by affiliate claim overlap.",
      "effort": "medium",
      "prerequisites": [
        "Implement meaningful conversion events in the dataLayer (generate_lead on form submission, sign_up on account creation, purchase on payment) with structured data including value, currency, and transaction_id \u2014 instrument kilo.ai marketing pages and coordinate with app.kilo.ai engineering team"
      ],
      "dimension": "signal_selection"
    },
    {
      "action": "Gate PostHog session recording and Bing Clarity session recording behind analytics/advertising consent categories in GTM",
      "priority": "low",
      "impact": "Reduces compliance exposure from session recording without consent, while maintaining product analytics for consenting users.",
      "effort": "low",
      "prerequisites": [
        "Deploy a proper CMP (Cookiebot, OneTrust, or equivalent with TCF 2.0 and Google Consent Mode v2 support) that presents a consent dialog to users in EU/EEA/UK before non-essential tags fire, with consent categories mapped to GTM tag groups"
      ],
      "dimension": "consent_aware_architecture"
    }
  ],
  "summary": {
    "ready_count": 0,
    "needs_work_count": 1,
    "blocked_count": 7,
    "overall_assessment": "Kilo's signal engineering maturity is critically low \u2014 seven of eight dimensions are blocked by foundational gaps including a misconfigured Google Ads purchase conversion firing on every page view with value=0, no meaningful conversion events in the dataLayer, no enhanced conversions or server-side measurement, a broken cross-domain identity chain to app.kilo.ai, and non-functional consent gating \u2014 the single highest-impact next step is to demote the misconfigured Google Ads conversion (a 5-minute configuration change) and simultaneously begin instrumenting actual conversion events in the dataLayer, which unlocks progress across every other dimension."
  }
}