[{"data":1,"prerenderedAt":450},["ShallowReactive",2],{"article-alternates":3,"article-\u002Fen\u002Fmarketing\u002Fcross-channel-orchestration-attribution":13},{"i18nKey":4,"paths":5},"marketing-007-2026-05",{"de":6,"en":7,"es":8,"fr":9,"it":10,"ru":11,"tr":12},"\u002Fde\u002Fmarketing\u002Fcross-channel-orchestrierung-paid-email-push-attribution","\u002Fen\u002Fmarketing\u002Fcross-channel-orchestration-attribution","\u002Fes\u002Fmarketing\u002Forquestacion-multicanal-atribucion","\u002Ffr\u002Fmarketing\u002Forchestre-cross-channel-attribution-identite","\u002Fit\u002Fmarketing\u002Forchestrazione-cross-channel-attribuzione","\u002Fru\u002Fmarketing\u002Fcross-channel-orkestrasyon-attribution","\u002Ftr\u002Fmarketing\u002Fcross-channel-orkestrasyon-paid-email-push-atribusyon",{"_path":7,"_dir":14,"_draft":15,"_partial":15,"_locale":16,"title":17,"description":18,"publishedAt":19,"modifiedAt":19,"category":14,"i18nKey":4,"tags":20,"readingTime":26,"author":27,"body":28,"_type":444,"_id":445,"_source":446,"_file":447,"_stem":448,"_extension":449},"marketing",false,"","Cross-Channel Orchestration: Paid + Email + Push Attribution","Build a cross-channel attribution architecture with identity graphs, lifecycle event mapping, and hold-out groups. Server-side signals, CDP integration, and incrementality measurement.","2026-05-21",[21,22,23,24,25],"cross-channel-attribution","identity-graph","lifecycle-marketing","incrementality","cdp",9,"Roibase",{"type":29,"children":30,"toc":428},"root",[31,39,46,76,89,141,148,161,167,172,177,190,196,201,214,220,225,246,251,264,270,275,299,304,310,315,320,333,339,344,350,355,360,406,419,423],{"type":32,"tag":33,"props":34,"children":35},"element","p",{},[36],{"type":37,"value":38},"text","A user clicks an ad, opens an email two days later, makes a purchase three days after that via push notification. Which channel wins? The traditional last-click model credits email, paid media budgets get cut, and the lifecycle team has no proof of campaign impact. In 2026, every channel looks like it owns the win in its own dashboard, but nobody at the budget committee trusts the other guy. Cross-channel orchestration isn't here to solve this problem — it won't — but it does at least show you where you're wasting resources.",{"type":32,"tag":40,"props":41,"children":43},"h2",{"id":42},"identity-graph-tracking-users-across-channels",[44],{"type":37,"value":45},"Identity Graph: Tracking Users Across Channels",{"type":32,"tag":33,"props":47,"children":48},{},[49,51,58,60,66,68,74],{"type":37,"value":50},"An identity graph is a data structure that merges a user's devices, email address, customer_id, and cookie IDs into a single profile. A paid media pixel returns ",{"type":32,"tag":52,"props":53,"children":55},"code",{"className":54},[],[56],{"type":37,"value":57},"gcl_id",{"type":37,"value":59},", your email system holds ",{"type":32,"tag":52,"props":61,"children":63},{"className":62},[],[64],{"type":37,"value":65},"email_id",{"type":37,"value":67},", your mobile SDK sends ",{"type":32,"tag":52,"props":69,"children":71},{"className":70},[],[72],{"type":37,"value":73},"device_id",{"type":37,"value":75}," — without merging these, the same person appears as three different people, and attribution breaks. Google Ads reports 100 conversions, Klaviyo shows 80, Braze shows 50 — total 230, but the real number of unique buyers is 95. You can't reconcile these without running identity resolution in a CDP or warehouse.",{"type":32,"tag":33,"props":77,"children":78},{},[79,81,87],{"type":37,"value":80},"The classic approach: Each platform tracks its own conversions independently. CDPs like Segment, mParticle, or Rudderstack perform deterministic merge on ",{"type":32,"tag":52,"props":82,"children":84},{"className":83},[],[85],{"type":37,"value":86},"user_id",{"type":37,"value":88},", add probabilistic stitching via cookie + fingerprint. The simplest version: raw event flow from server-side GTM to BigQuery, SQL-based identity collapse via dbt.",{"type":32,"tag":33,"props":90,"children":91},{},[92,94,100,102,108,110,116,118,124,126,131,133,139],{"type":37,"value":93},"Example flow: User arrives from a Meta ad → ",{"type":32,"tag":52,"props":95,"children":97},{"className":96},[],[98],{"type":37,"value":99},"fbclid",{"type":37,"value":101}," + ",{"type":32,"tag":52,"props":103,"children":105},{"className":104},[],[106],{"type":37,"value":107},"_fbc",{"type":37,"value":109}," cookie is saved → sGTM sends ",{"type":32,"tag":52,"props":111,"children":113},{"className":112},[],[114],{"type":37,"value":115},"user_pseudo_id",{"type":37,"value":117}," to Firebase Analytics → user provides email at checkout → warehouse joins ",{"type":32,"tag":52,"props":119,"children":121},{"className":120},[],[122],{"type":37,"value":123},"email",{"type":37,"value":125}," with ",{"type":32,"tag":52,"props":127,"children":129},{"className":128},[],[130],{"type":37,"value":107},{"type":37,"value":132}," → subsequent push events land under the same ",{"type":32,"tag":52,"props":134,"children":136},{"className":135},[],[137],{"type":37,"value":138},"profile_id",{"type":37,"value":140},". Now paid, email, and push aren't three separate rows — they're one user timeline.",{"type":32,"tag":142,"props":143,"children":145},"h3",{"id":144},"deterministic-vs-probabilistic-merge",[146],{"type":37,"value":147},"Deterministic vs Probabilistic Merge",{"type":32,"tag":33,"props":149,"children":150},{},[151,153,159],{"type":37,"value":152},"Deterministic: User is logged in, you have ",{"type":32,"tag":52,"props":154,"children":156},{"className":155},[],[157],{"type":37,"value":158},"customer_id",{"type":37,"value":160}," — 100% certainty. PII like email, phone, or account number creates definitive links. Probabilistic: You infer from IP + user-agent + timezone + canvas fingerprint — 80-90% accuracy, risky under GDPR. Production requires both: deterministic post-login, probabilistic fallback for anonymous sessions. If you check mParticle's ID sync logs, you'll see merge rates vary by channel — web 92%, mobile app 96%, email 78% (no device info in email).",{"type":32,"tag":40,"props":162,"children":164},{"id":163},"lifecycle-event-mapping-which-touch-which-stage",[165],{"type":37,"value":166},"Lifecycle Event Mapping: Which Touch, Which Stage?",{"type":32,"tag":33,"props":168,"children":169},{},[170],{"type":37,"value":171},"Cross-channel orchestration shifts from \"which channel won?\" to \"which touch triggered which lifecycle stage?\" Awareness, consideration, purchase, retention — standard funnel terms, but the funnel isn't linear; each user travels differently.",{"type":32,"tag":33,"props":173,"children":174},{},[175],{"type":37,"value":176},"Event mapping works like this: Assign each touch a lifecycle stage and intent signal. Paid media typically drives awareness + acquisition, email drives retention + winback, push drives re-engagement + cart abandonment. If a user gets 8 touches in three weeks (2 paid impressions, 1 email open, 3 push, 2 organic visits), which touch is closest to conversion? Position-based attribution gives 40% first, 40% last, 20% middle — still heuristic. Real impact is measured via incrementality tests.",{"type":32,"tag":33,"props":178,"children":179},{},[180,182,188],{"type":37,"value":181},"Scenario: E-commerce site sees that users converting within 30 days get a median of 4.2 touches (GA4 path exploration). First touch is 68% paid (Google Ads + Meta), last touch is 52% email. Middle touches are mostly push or organic. Give email full credit and you cut paid budget; do the opposite and lifecycle goes silent. Solution: Data-driven attribution model — Shapley value via GA4 or warehouse SQL, measuring each touch's marginal contribution. BigQuery's ",{"type":32,"tag":52,"props":183,"children":185},{"className":184},[],[186],{"type":37,"value":187},"ml.ATTRIBUTION",{"type":37,"value":189}," function runs regression on path data, showing each channel's conversion probability lift.",{"type":32,"tag":142,"props":191,"children":193},{"id":192},"multi-touch-attribution-algorithm",[194],{"type":37,"value":195},"Multi-Touch Attribution Algorithm",{"type":32,"tag":33,"props":197,"children":198},{},[199],{"type":37,"value":200},"GA4's DDA model trains on conversion paths and calculates a coefficient per touch. Simplified version: Convert each path to a binary feature vector (paid=1, email=0, push=1, ...), target conversion=1\u002F0, fit logistic regression. Coefficients show each channel's independent effect. Production requires weekly retraining because campaign mix shifts change touch distribution.",{"type":32,"tag":33,"props":202,"children":203},{},[204,206,212],{"type":37,"value":205},"Alternative: Markov chain model — calculates transition probability per channel pair, e.g., \"moving from paid to email increases conversion by 18%.\" Python's ",{"type":32,"tag":52,"props":207,"children":209},{"className":208},[],[210],{"type":37,"value":211},"markov_model",{"type":37,"value":213}," library takes a path DataFrame, returns a removal effect matrix. Markov is more robust than DDA but compute costs are high (100k+ paths need GPU).",{"type":32,"tag":40,"props":215,"children":217},{"id":216},"hold-out-groups-measuring-real-lift",[218],{"type":37,"value":219},"Hold-Out Groups: Measuring Real Lift",{"type":32,"tag":33,"props":221,"children":222},{},[223],{"type":37,"value":224},"No matter how sophisticated your attribution model, it shows correlation, not causality. Did the email drive the conversion, or would the user have bought anyway? The only way to measure this is a hold-out group — randomly withhold a campaign from 10% of users and compare conversion rates.",{"type":32,"tag":33,"props":226,"children":227},{},[228,230,236,238,244],{"type":37,"value":229},"Facebook Conversion Lift and Google Ads Brand Lift work this way: test group exposed, control withheld. The difference is incrementality. In cross-channel orchestration, your hold-out must live in the CDP because if one user receives paid + email + push, the control group must exclude all three. Braze uses ",{"type":32,"tag":52,"props":231,"children":233},{"className":232},[],[234],{"type":37,"value":235},"control_group",{"type":37,"value":237}," tags, Segment uses ",{"type":32,"tag":52,"props":239,"children":241},{"className":240},[],[242],{"type":37,"value":243},"suppress",{"type":37,"value":245}," traits.",{"type":32,"tag":33,"props":247,"children":248},{},[249],{"type":37,"value":250},"Example setup: Take 5k random users from a 100k segment as control, suppress all marketing campaigns for 14 days. Keep normal paid + email + push flowing to the test group. On day 14, check purchase rates: test 3.2%, control 2.8% → incrementality 0.4% → lift 14.3%. That 0.4 point is real campaign effect; the rest (2.8%) is organic baseline. Now flip the mix: cut paid, send only email + push. Does lift drop? This isolates each channel's marginal contribution.",{"type":32,"tag":33,"props":252,"children":253},{},[254,256,262],{"type":37,"value":255},"Hold-out statistical power depends on sample size. 5% control suffices for 95% confidence, but if incrementality is tiny (\u003C0.2%), it drowns in noise. Bayesian A\u002FB testing adds prior belief for earlier decisions — Python's ",{"type":32,"tag":52,"props":257,"children":259},{"className":258},[],[260],{"type":37,"value":261},"pymc",{"type":37,"value":263}," library shows posterior distributions, giving you the probability that lift exceeds 10%.",{"type":32,"tag":40,"props":265,"children":267},{"id":266},"cdp-integration-single-source-of-truth",[268],{"type":37,"value":269},"CDP Integration: Single Source of Truth",{"type":32,"tag":33,"props":271,"children":272},{},[273],{"type":37,"value":274},"Cross-channel attribution only works if all events flow through one point. Segment, mParticle, and Rudderstack collect client + server events, update the identity graph, and distribute to destinations (warehouse, paid platforms, lifecycle tools). Without this architecture, every team reads its own data and reconciliation is impossible.",{"type":32,"tag":33,"props":276,"children":277},{},[278,280,289,291,297],{"type":37,"value":279},"Roibase's ",{"type":32,"tag":281,"props":282,"children":286},"a",{"href":283,"rel":284},"https:\u002F\u002Fwww.roibase.com.tr\u002Fen\u002Fdijitalpazarlama",[285],"nofollow",[287],{"type":37,"value":288},"digital marketing",{"type":37,"value":290}," initiatives build signal architecture on a CDP + sGTM + warehouse triangle. Client-side Segment SDK, server-side sGTM, all raw events write to BigQuery. dbt handles identity stitching + sessionization; the final table syncs to GA4 + paid platforms. In this stack, hold-out marking is a Segment trait, and ",{"type":32,"tag":52,"props":292,"children":294},{"className":293},[],[295],{"type":37,"value":296},"suppress=true",{"type":37,"value":298}," flows to all destinations downstream — paid, email, and push all treat the same user as control.",{"type":32,"tag":33,"props":300,"children":301},{},[302],{"type":37,"value":303},"Alternative: Warehouse-native CDP — tools like Hightouch and Census read from BigQuery and reverse-ETL to destinations. You write the identity graph in dbt yourself, lower cost but higher complexity. Which fits? Sub-5 person teams use managed CDPs; 10+ person teams go warehouse-native. Mid-scale: Segment tracking, dbt transforms, Hightouch syncing.",{"type":32,"tag":40,"props":305,"children":307},{"id":306},"channel-budget-optimization-portfolio-approach-with-mmm",[308],{"type":37,"value":309},"Channel Budget Optimization: Portfolio Approach with MMM",{"type":32,"tag":33,"props":311,"children":312},{},[313],{"type":37,"value":314},"Cross-channel attribution should ultimately produce budget decisions. How much do we allocate to each channel? Multi-touch models distribute credit, but linear spend increases don't yield linear returns — diminishing returns exist. Marketing Mix Modeling (MMM) measures this.",{"type":32,"tag":33,"props":316,"children":317},{},[318],{"type":37,"value":319},"MMM is regression-based: Weekly paid spend + email send count + push volume as independent variables, revenue as dependent. Once fit, you see each channel's elasticity: 10% paid spend increase → 3% revenue increase; 10% more email sends → 1.2% revenue increase — paid has higher ROI at the margin. But if paid is saturated (doubled spend, revenue grew 5%), shift budget to email.",{"type":32,"tag":33,"props":321,"children":322},{},[323,325,331],{"type":37,"value":324},"Python's ",{"type":32,"tag":52,"props":326,"children":328},{"className":327},[],[329],{"type":37,"value":330},"pymc-marketing",{"type":37,"value":332}," library includes a Bayesian MMM model that captures saturation + adstock effects. Adstock: today's spend impacts future weeks — TV ads last four weeks, paid search works same-day. Cross-channel requires different decay rates per channel. Build a weekly aggregated BigQuery table, feed MMM, get optimal spend ranges per channel.",{"type":32,"tag":142,"props":334,"children":336},{"id":335},"incrementality-mmm-alignment",[337],{"type":37,"value":338},"Incrementality + MMM Alignment",{"type":32,"tag":33,"props":340,"children":341},{},[342],{"type":37,"value":343},"Hold-out tests measure short-term incrementality (two weeks); MMM captures long-term trend (52 weeks). Combining both is ideal: use hold-out lift as an MMM prior. Example: email hold-out found 8% lift, so set email coefficient prior ~ Normal(0.08, 0.02) — the model searches that range and posterior converges faster.",{"type":32,"tag":40,"props":345,"children":347},{"id":346},"measurement-in-practice-dashboards-and-alerting",[348],{"type":37,"value":349},"Measurement in Practice: Dashboards and Alerting",{"type":32,"tag":33,"props":351,"children":352},{},[353],{"type":37,"value":354},"Theory in place — how do you monitor production? Looker Studio or Tableau: top section total revenue + ROAS, middle channel breakdown (paid, email, push), Venn diagram of overlap. Weekly hold-out test results update; lift trends display. Alert when lift drops below 5%.",{"type":32,"tag":33,"props":356,"children":357},{},[358],{"type":37,"value":359},"Example dashboard structure:",{"type":32,"tag":361,"props":362,"children":363},"ul",{},[364,376,386,396],{"type":32,"tag":365,"props":366,"children":367},"li",{},[368,374],{"type":32,"tag":369,"props":370,"children":371},"strong",{},[372],{"type":37,"value":373},"Top panel:",{"type":37,"value":375}," Total spend, total revenue, blended ROAS",{"type":32,"tag":365,"props":377,"children":378},{},[379,384],{"type":32,"tag":369,"props":380,"children":381},{},[382],{"type":37,"value":383},"Middle panel:",{"type":37,"value":385}," Channel-level ROAS (last-click, DDA, Shapley), overlap matrix",{"type":32,"tag":365,"props":387,"children":388},{},[389,394],{"type":32,"tag":369,"props":390,"children":391},{},[392],{"type":37,"value":393},"Bottom panel:",{"type":37,"value":395}," Hold-out test summary (test vs control conversion, lift, p-value)",{"type":32,"tag":365,"props":397,"children":398},{},[399,404],{"type":32,"tag":369,"props":400,"children":401},{},[402],{"type":37,"value":403},"Right panel:",{"type":37,"value":405}," MMM optimal spend recommendation, current vs optimal gap",{"type":32,"tag":33,"props":407,"children":408},{},[409,411,417],{"type":37,"value":410},"Scheduled BigQuery queries fetch new path data weekly, dbt models run identity merge + DDA coefficient update, Looker Data Studio auto-refreshes. Alert logic: ",{"type":32,"tag":52,"props":412,"children":414},{"className":413},[],[415],{"type":37,"value":416},"IF(lift \u003C 0.05 OR p_value > 0.1) THEN send_slack('Incrementality dropped')",{"type":37,"value":418},". This flow eliminates manual reconciliation; teams review the dashboard and make budget calls.",{"type":32,"tag":420,"props":421,"children":422},"hr",{},[],{"type":32,"tag":33,"props":424,"children":425},{},[426],{"type":37,"value":427},"Cross-channel orchestration doesn't end the \"which channel won?\" argument, but it moves the discussion to solid ground. Identity graphs unify users, lifecycle mapping contextualizes touches, hold-out groups prove causality, CDP integration creates single source of truth, MMM optimizes budgets. Without all five pieces working together, the system stays partial — even a sophisticated attribution model won't convince the budget committee to trust it over last-click. Building a production-grade cross-channel stack takes 3-6 months: month one identity graph, month two hold-out infrastructure, month three MMM training. But once live, every channel stops lying in its own dashboard and looks at shared reality instead — that alone is a major win.",{"title":16,"searchDepth":429,"depth":429,"links":430},3,[431,435,438,439,440,443],{"id":42,"depth":432,"text":45,"children":433},2,[434],{"id":144,"depth":429,"text":147},{"id":163,"depth":432,"text":166,"children":436},[437],{"id":192,"depth":429,"text":195},{"id":216,"depth":432,"text":219},{"id":266,"depth":432,"text":269},{"id":306,"depth":432,"text":309,"children":441},[442],{"id":335,"depth":429,"text":338},{"id":346,"depth":432,"text":349},"markdown","content:en:marketing:cross-channel-orchestration-attribution.md","content","en\u002Fmarketing\u002Fcross-channel-orchestration-attribution.md","en\u002Fmarketing\u002Fcross-channel-orchestration-attribution","md",1779372280658]