[{"data":1,"prerenderedAt":1103},["ShallowReactive",2],{"nav-en":3,"learn-chrome-sg":592,"doc-\u002Fsg\u002Fdocs\u002Ffeatures\u002Fshops\u002Fattribution-and-dedup":690,"mdc--13uwlf-key":1092},[4],{"title":5,"path":6,"stem":7,"children":8,"page":11},"Docs","\u002Fdocs","docs",[9,81,269,470,553],{"title":10,"draft":11,"path":12,"stem":13,"children":14},"Overview",false,"\u002Fdocs\u002Foverview","docs\u002F01.overview\u002Findex",[15,16,41,66],{"title":10,"path":12,"stem":13,"draft":11},{"title":17,"draft":11,"path":18,"stem":19,"children":20,"page":11},"Get started","\u002Fdocs\u002Foverview\u002Fget-started","docs\u002F01.overview\u002F01.get-started",[21,26,31,36],{"title":22,"path":23,"stem":24,"draft":11,"icon":25},"What is DataGlass","\u002Fdocs\u002Foverview\u002Fget-started\u002Fwhat-is-dataglass","docs\u002F01.overview\u002F01.get-started\u002F01.what-is-dataglass","i-material-symbols-info-rounded",{"title":27,"path":28,"stem":29,"draft":11,"icon":30},"Quick start","\u002Fdocs\u002Foverview\u002Fget-started\u002Fquick-start","docs\u002F01.overview\u002F01.get-started\u002F02.quick-start","i-material-symbols-rocket-launch-rounded",{"title":32,"path":33,"stem":34,"draft":11,"icon":35},"Supported platforms","\u002Fdocs\u002Foverview\u002Fget-started\u002Fsupported-platforms","docs\u002F01.overview\u002F01.get-started\u002F03.supported-platforms","i-material-symbols-grid-view-rounded",{"title":37,"path":38,"stem":39,"draft":11,"icon":40},"Connecting shops","\u002Fdocs\u002Foverview\u002Fget-started\u002Fconnecting-shops","docs\u002F01.overview\u002F01.get-started\u002F04.connecting-shops","i-material-symbols-link-rounded",{"title":42,"draft":11,"path":43,"stem":44,"children":45,"page":11},"Foundations","\u002Fdocs\u002Foverview\u002Ffoundations","docs\u002F01.overview\u002F02.foundations",[46,51,56,61],{"title":47,"path":48,"stem":49,"draft":11,"icon":50},"This shop vs Unified view","\u002Fdocs\u002Foverview\u002Ffoundations\u002Fthis-shop-vs-unified","docs\u002F01.overview\u002F02.foundations\u002F01.this-shop-vs-unified","i-material-symbols-layers-rounded",{"title":52,"path":53,"stem":54,"draft":11,"icon":55},"COGS and their role","\u002Fdocs\u002Foverview\u002Ffoundations\u002Fcogs-and-their-role","docs\u002F01.overview\u002F02.foundations\u002F02.cogs-and-their-role","i-material-symbols-payments-rounded",{"title":57,"path":58,"stem":59,"draft":11,"icon":60},"What's in your margin","\u002Fdocs\u002Foverview\u002Ffoundations\u002Fideal-vs-realized-margin","docs\u002F01.overview\u002F02.foundations\u002F03.ideal-vs-realized-margin","i-material-symbols-compare-arrows-rounded",{"title":62,"path":63,"stem":64,"draft":11,"icon":65},"True ROAS","\u002Fdocs\u002Foverview\u002Ffoundations\u002Ftrue-roas","docs\u002F01.overview\u002F02.foundations\u002F04.true-roas","i-material-symbols-ad-group-rounded",{"title":67,"draft":11,"path":68,"stem":69,"children":70,"page":11},"Explore","\u002Fdocs\u002Foverview\u002Fexplore","docs\u002F01.overview\u002F03.explore",[71,76],{"title":72,"path":73,"stem":74,"draft":11,"icon":75},"Pricing","\u002Fdocs\u002Foverview\u002Fexplore\u002Fpricing","docs\u002F01.overview\u002F03.explore\u002F01.pricing","i-material-symbols-sell-rounded",{"title":77,"path":78,"stem":79,"draft":11,"to":80},"Releases","\u002Fdocs\u002Foverview\u002Fexplore\u002Freleases","docs\u002F01.overview\u002F03.explore\u002F02.releases","\u002Freleases",{"title":82,"draft":11,"path":83,"stem":84,"children":85},"Features","\u002Fdocs\u002Ffeatures","docs\u002F02.features\u002Findex",[86,87,117,167,208,230,250],{"title":10,"path":83,"stem":84,"draft":11},{"title":88,"draft":11,"path":89,"stem":90,"children":91,"page":11},"Shops","\u002Fdocs\u002Ffeatures\u002Fshops","docs\u002F02.features\u002F01.shops",[92,97,102,107,112],{"title":93,"path":94,"stem":95,"draft":11,"icon":96},"Shop overview","\u002Fdocs\u002Ffeatures\u002Fshops\u002Fshop-overview","docs\u002F02.features\u002F01.shops\u002F01.shop-overview","i-material-symbols-space-dashboard-rounded",{"title":98,"path":99,"stem":100,"draft":11,"icon":101},"Understanding the numbers","\u002Fdocs\u002Ffeatures\u002Fshops\u002Funderstanding-the-numbers","docs\u002F02.features\u002F01.shops\u002F02.understanding-the-numbers","i-material-symbols-help-rounded",{"title":103,"path":104,"stem":105,"draft":11,"icon":106},"Attribution & dedup","\u002Fdocs\u002Ffeatures\u002Fshops\u002Fattribution-and-dedup","docs\u002F02.features\u002F01.shops\u002F03.attribution-and-dedup","i-material-symbols-call-merge-rounded",{"title":108,"path":109,"stem":110,"draft":11,"icon":111},"Shop health","\u002Fdocs\u002Ffeatures\u002Fshops\u002Fshop-health","docs\u002F02.features\u002F01.shops\u002F04.shop-health","i-material-symbols-monitor-heart-rounded",{"title":113,"path":114,"stem":115,"draft":11,"icon":116},"Shop settings and sync","\u002Fdocs\u002Ffeatures\u002Fshops\u002Fshop-settings-and-sync","docs\u002F02.features\u002F01.shops\u002F05.shop-settings-and-sync","i-material-symbols-settings-rounded",{"title":118,"draft":11,"path":119,"stem":120,"children":121,"page":11},"Products","\u002Fdocs\u002Ffeatures\u002Fproducts","docs\u002F02.features\u002F02.products",[122,127,132,137,142,147,152,157,162],{"title":123,"path":124,"stem":125,"draft":11,"icon":126},"Product table","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fproduct-table","docs\u002F02.features\u002F02.products\u002F01.product-table","i-material-symbols-deployed-code-rounded",{"title":128,"path":129,"stem":130,"draft":11,"icon":131},"Unified products","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Funified-products","docs\u002F02.features\u002F02.products\u002F02.unified-products","i-material-symbols-dashboard-customize-rounded",{"title":133,"path":134,"stem":135,"draft":11,"icon":136},"Matching and merging products","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fmatching-and-merging","docs\u002F02.features\u002F02.products\u002F03.matching-and-merging","i-material-symbols-merge-rounded",{"title":138,"path":139,"stem":140,"draft":11,"icon":141},"Bulk edit (Excel)","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fbulk-edit-excel","docs\u002F02.features\u002F02.products\u002F04.bulk-edit-excel","i-material-symbols-grid-on-rounded",{"title":143,"path":144,"stem":145,"draft":11,"icon":146},"Inventory and reorder","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Finventory-and-reorder","docs\u002F02.features\u002F02.products\u002F05.inventory-and-reorder","i-material-symbols-inventory-2-rounded",{"title":148,"path":149,"stem":150,"draft":11,"icon":151},"Stock sync","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fstock-sync","docs\u002F02.features\u002F02.products\u002F06.stock-sync","i-material-symbols-sync-rounded",{"title":153,"path":154,"stem":155,"draft":11,"icon":156},"Commission","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fcommission","docs\u002F02.features\u002F02.products\u002F07.commission","i-material-symbols-price-change-rounded",{"title":158,"path":159,"stem":160,"draft":11,"icon":161},"Auto bump","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fauto-bump","docs\u002F02.features\u002F02.products\u002F08.auto-bump","i-material-symbols-trending-up-rounded",{"title":163,"path":164,"stem":165,"draft":11,"icon":166},"Margin spread","\u002Fdocs\u002Ffeatures\u002Fproducts\u002Fmargin-spread","docs\u002F02.features\u002F02.products\u002F09.margin-spread","i-material-symbols-straighten-rounded",{"title":168,"draft":11,"path":169,"stem":170,"children":171},"Financial breakdown","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown","docs\u002F02.features\u002F03.financial-breakdown\u002Findex",[172,173,178,183,188,193,198,203],{"title":10,"path":169,"stem":170,"draft":11},{"title":174,"path":175,"stem":176,"draft":11,"icon":177},"Simulate and draft edit","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown\u002Fsimulate-and-draft-edit","docs\u002F02.features\u002F03.financial-breakdown\u002F01.simulate-and-draft-edit","i-material-symbols-science-rounded",{"title":179,"path":180,"stem":181,"draft":11,"icon":182},"Set margin","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown\u002Fset-margin","docs\u002F02.features\u002F03.financial-breakdown\u002F02.set-margin","i-material-symbols-tune-rounded",{"title":184,"path":185,"stem":186,"draft":11,"icon":187},"Margin optimizer","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown\u002Fmargin-optimizer","docs\u002F02.features\u002F03.financial-breakdown\u002F03.margin-optimizer","i-material-symbols-instant-mix-rounded",{"title":189,"path":190,"stem":191,"draft":11,"icon":192},"Price elasticity","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown\u002Fprice-elasticity","docs\u002F02.features\u002F03.financial-breakdown\u002F04.price-elasticity","i-material-symbols-show-chart-rounded",{"title":194,"path":195,"stem":196,"draft":11,"icon":197},"Product calculator","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown\u002Fproduct-calculator","docs\u002F02.features\u002F03.financial-breakdown\u002F05.product-calculator","i-material-symbols-calculate-rounded",{"title":199,"path":200,"stem":201,"draft":11,"icon":202},"Product history","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown\u002Fproduct-history","docs\u002F02.features\u002F03.financial-breakdown\u002F06.product-history","i-material-symbols-history-rounded",{"title":204,"path":205,"stem":206,"draft":11,"icon":207},"Net profit & hidden cost","\u002Fdocs\u002Ffeatures\u002Ffinancial-breakdown\u002Fnet-profit-and-hidden-cost","docs\u002F02.features\u002F03.financial-breakdown\u002F07.net-profit-and-hidden-cost","i-material-symbols-visibility-off-rounded",{"title":72,"draft":11,"path":209,"stem":210,"children":211,"page":11},"\u002Fdocs\u002Ffeatures\u002Fpricing","docs\u002F02.features\u002F04.pricing",[212,216,221,226],{"title":213,"path":214,"stem":215,"draft":11,"icon":141},"Price Edit","\u002Fdocs\u002Ffeatures\u002Fpricing\u002Fprice-edit","docs\u002F02.features\u002F04.pricing\u002F01.price-edit",{"title":217,"path":218,"stem":219,"draft":11,"icon":220},"Price increase whitelist","\u002Fdocs\u002Ffeatures\u002Fpricing\u002Fprice-increase-whitelist","docs\u002F02.features\u002F04.pricing\u002F02.price-increase-whitelist","i-lucide-badge-check",{"title":222,"path":223,"stem":224,"draft":11,"icon":225},"Requesting whitelist approval","\u002Fdocs\u002Ffeatures\u002Fpricing\u002Frequest-whitelist-approval","docs\u002F02.features\u002F04.pricing\u002F03.request-whitelist-approval","i-lucide-mail",{"title":227,"path":228,"stem":229,"draft":11,"icon":75},"Price tiers","\u002Fdocs\u002Ffeatures\u002Fpricing\u002Fprice-tiers","docs\u002F02.features\u002F04.pricing\u002F04.price-tiers",{"title":231,"draft":11,"path":232,"stem":233,"children":234},"Campaign simulator","\u002Fdocs\u002Ffeatures\u002Fcampaign-simulator","docs\u002F02.features\u002F05.campaign-simulator\u002Findex",[235,236,241,246],{"title":10,"path":232,"stem":233,"draft":11},{"title":237,"path":238,"stem":239,"draft":11,"icon":240},"Campaign phases","\u002Fdocs\u002Ffeatures\u002Fcampaign-simulator\u002Fphase-model","docs\u002F02.features\u002F05.campaign-simulator\u002F01.phase-model","i-material-symbols-timeline-rounded",{"title":242,"path":243,"stem":244,"draft":11,"icon":245},"Ads planning","\u002Fdocs\u002Ffeatures\u002Fcampaign-simulator\u002Fads-planning","docs\u002F02.features\u002F05.campaign-simulator\u002F02.ads-planning","i-material-symbols-ads-click-rounded",{"title":247,"path":248,"stem":249,"draft":11,"icon":60},"Counterfactual","\u002Fdocs\u002Ffeatures\u002Fcampaign-simulator\u002Fcounterfactual","docs\u002F02.features\u002F05.campaign-simulator\u002F03.counterfactual",{"title":251,"draft":11,"path":252,"stem":253,"children":254,"page":11},"Orders","\u002Fdocs\u002Ffeatures\u002Forders","docs\u002F02.features\u002F06.orders",[255,259,264],{"title":251,"path":256,"stem":257,"draft":11,"icon":258},"\u002Fdocs\u002Ffeatures\u002Forders\u002Forders","docs\u002F02.features\u002F06.orders\u002F01.orders","i-material-symbols-receipt-long-rounded",{"title":260,"path":261,"stem":262,"draft":11,"icon":263},"Reconciliation","\u002Fdocs\u002Ffeatures\u002Forders\u002Freconciliation","docs\u002F02.features\u002F06.orders\u002F02.reconciliation","i-material-symbols-balance",{"title":265,"path":266,"stem":267,"draft":11,"icon":268},"Shipping labels","\u002Fdocs\u002Ffeatures\u002Forders\u002Fshipping-labels","docs\u002F02.features\u002F06.orders\u002F03.shipping-labels","i-material-symbols-local-shipping-rounded",{"title":270,"draft":11,"path":271,"stem":272,"children":273},"Growth","\u002Fdocs\u002Fgrowth","docs\u002F03.growth\u002Findex",[274,275,298,362,386],{"title":10,"path":271,"stem":272,"draft":11},{"title":276,"draft":11,"path":277,"stem":278,"children":279,"page":11},"Actions","\u002Fdocs\u002Fgrowth\u002Factions","docs\u002F03.growth\u002F01.actions",[280,285,289,294],{"title":281,"path":282,"stem":283,"draft":11,"icon":284},"What are Actions","\u002Fdocs\u002Fgrowth\u002Factions\u002Fwhat-are-actions","docs\u002F03.growth\u002F01.actions\u002F01.what-are-actions","i-material-symbols-app-spark-rounded",{"title":286,"path":287,"stem":288,"draft":11},"Action flow","\u002Fdocs\u002Fgrowth\u002Factions\u002Faction-flow","docs\u002F03.growth\u002F01.actions\u002F02.action-flow",{"title":290,"path":291,"stem":292,"draft":11,"icon":293},"Deployed and dismissed","\u002Fdocs\u002Fgrowth\u002Factions\u002Fdeployed-and-dismissed","docs\u002F03.growth\u002F01.actions\u002F03.deployed-and-dismissed","i-material-symbols-published-with-changes-rounded",{"title":295,"path":296,"stem":297,"draft":11,"icon":197},"How Results are calculated","\u002Fdocs\u002Fgrowth\u002Factions\u002Fresults","docs\u002F03.growth\u002F01.actions\u002F04.results",{"title":299,"draft":11,"path":300,"stem":301,"children":302,"icon":304},"Action types","\u002Fdocs\u002Fgrowth\u002Faction-types","docs\u002F03.growth\u002F02.action-types\u002Findex",[303,305,310,315,319,324,329,334,339,343,348,353,358],{"title":10,"path":300,"stem":301,"draft":11,"icon":304},"i-material-symbols-format-list-bulleted-rounded",{"title":306,"path":307,"stem":308,"draft":11,"icon":309},"Price buffer","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fprice-buffer","docs\u002F03.growth\u002F02.action-types\u002F01.price-buffer","i-material-symbols-money-range-rounded",{"title":311,"path":312,"stem":313,"draft":11,"icon":314},"Commission adjust","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fcommission-adjust","docs\u002F03.growth\u002F02.action-types\u002F02.commission-adjust","i-material-symbols-percent-discount-rounded",{"title":316,"path":317,"stem":318,"draft":11,"icon":106},"Variant merge","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fvariant-merge","docs\u002F03.growth\u002F02.action-types\u002F03.variant-merge",{"title":320,"path":321,"stem":322,"draft":11,"icon":323},"Target ROAS","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Ftarget-roas","docs\u002F03.growth\u002F02.action-types\u002F04.target-roas","i-material-symbols-target",{"title":325,"path":326,"stem":327,"draft":11,"icon":328},"Bundle Deal","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fbundle-deal","docs\u002F03.growth\u002F02.action-types\u002F05.bundle-deal","i-material-symbols-category-rounded",{"title":330,"path":331,"stem":332,"draft":11,"icon":333},"Product Boost","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fproduct-boost","docs\u002F03.growth\u002F02.action-types\u002F06.product-boost","i-material-symbols-electric-bolt-rounded",{"title":335,"path":336,"stem":337,"draft":11,"icon":338},"Campaign Enrollment","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fcampaign-enrollment","docs\u002F03.growth\u002F02.action-types\u002F07.campaign-enrollment","i-material-symbols-play-arrow-rounded",{"title":340,"path":341,"stem":342,"draft":11,"icon":245},"Ad Adjustment","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fad-adjustment","docs\u002F03.growth\u002F02.action-types\u002F08.ad-adjustment",{"title":344,"path":345,"stem":346,"draft":11,"icon":347},"SEO","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fseo","docs\u002F03.growth\u002F02.action-types\u002F09.seo","i-material-symbols-category-search-rounded",{"title":349,"path":350,"stem":351,"draft":11,"icon":352},"Add-on Deal","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fadd-on-deal","docs\u002F03.growth\u002F02.action-types\u002F10.add-on-deal","i-material-symbols-add-box-rounded",{"title":354,"path":355,"stem":356,"draft":11,"icon":357},"Stock Up","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Fstock-up","docs\u002F03.growth\u002F02.action-types\u002F11.stock-up","i-material-symbols-inventory-rounded",{"title":359,"path":360,"stem":361,"draft":11,"icon":323},"TikTok Target ROAS","\u002Fdocs\u002Fgrowth\u002Faction-types\u002Ftiktok-target-roas","docs\u002F03.growth\u002F02.action-types\u002F12.tiktok-target-roas",{"title":363,"draft":11,"path":364,"stem":365,"children":366,"page":11},"Ads","\u002Fdocs\u002Fgrowth\u002Fads","docs\u002F03.growth\u002F03.ads",[367,372,376,381],{"title":368,"path":369,"stem":370,"draft":11,"icon":371},"Reading the Sankey","\u002Fdocs\u002Fgrowth\u002Fads\u002Freading-the-sankey","docs\u002F03.growth\u002F03.ads\u002F01.reading-the-sankey","i-material-symbols-schema-rounded",{"title":373,"path":374,"stem":375,"draft":11,"icon":60},"Cannibalization","\u002Fdocs\u002Fgrowth\u002Fads\u002Fcannibalization","docs\u002F03.growth\u002F03.ads\u002F02.cannibalization",{"title":377,"path":378,"stem":379,"draft":11,"icon":380},"Meta (Facebook) Ads","\u002Fdocs\u002Fgrowth\u002Fads\u002Fmeta-ads","docs\u002F03.growth\u002F03.ads\u002F03.meta-ads","i-simple-icons-meta",{"title":382,"path":383,"stem":384,"draft":11,"icon":385},"CPAS profit","\u002Fdocs\u002Fgrowth\u002Fads\u002Fcpas-profit","docs\u002F03.growth\u002F03.ads\u002F04.cpas-profit","i-material-symbols-hub-rounded",{"title":387,"draft":11,"path":388,"stem":389,"children":390,"icon":65},"Optimization groups","\u002Fdocs\u002Fgrowth\u002Foptimization-groups","docs\u002F03.growth\u002F04.optimization-groups\u002Findex",[391,392,397,402,407,412,416,421,426,431,436,441,445,450,455,460,465],{"title":10,"path":388,"stem":389,"draft":11,"icon":65},{"title":393,"path":394,"stem":395,"draft":11,"icon":396},"Planning your groups","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fplanning-your-groups","docs\u002F03.growth\u002F04.optimization-groups\u002F00.planning-your-groups","i-lucide-boxes",{"title":398,"path":399,"stem":400,"draft":11,"icon":401},"Creating a group","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fcreating-a-group","docs\u002F03.growth\u002F04.optimization-groups\u002F01.creating-a-group","i-lucide-plus",{"title":403,"path":404,"stem":405,"draft":11,"icon":406},"Global settings","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fglobal-settings","docs\u002F03.growth\u002F04.optimization-groups\u002F02.global-settings","i-lucide-settings-2",{"title":408,"path":409,"stem":410,"draft":11,"icon":411},"Budget and limits","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fbudget-and-limits","docs\u002F03.growth\u002F04.optimization-groups\u002F03.budget-and-limits","i-lucide-wallet",{"title":270,"path":413,"stem":414,"draft":11,"icon":415},"\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fgrowth","docs\u002F03.growth\u002F04.optimization-groups\u002F04.growth","i-lucide-trending-up",{"title":417,"path":418,"stem":419,"draft":11,"icon":420},"Choosing an objective","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fchoosing-an-objective","docs\u002F03.growth\u002F04.optimization-groups\u002F05.choosing-an-objective","i-lucide-target",{"title":422,"path":423,"stem":424,"draft":11,"icon":425},"Constraints","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fconstraints","docs\u002F03.growth\u002F04.optimization-groups\u002F06.constraints","i-lucide-shield-check",{"title":427,"path":428,"stem":429,"draft":11,"icon":430},"Distribution","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fallocation-preference","docs\u002F03.growth\u002F04.optimization-groups\u002F07.allocation-preference","i-lucide-sliders-horizontal",{"title":432,"path":433,"stem":434,"draft":11,"icon":435},"Pacing and rebalancing","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fpacing-and-rebalancing","docs\u002F03.growth\u002F04.optimization-groups\u002F08.pacing-and-rebalancing","i-lucide-clock",{"title":437,"path":438,"stem":439,"draft":11,"icon":440},"The month plan","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fmonthly-plan","docs\u002F03.growth\u002F04.optimization-groups\u002F09.monthly-plan","i-lucide-calendar-days",{"title":442,"path":443,"stem":444,"draft":11,"icon":435},"The Timeline schedule","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fschedule","docs\u002F03.growth\u002F04.optimization-groups\u002F10.schedule",{"title":446,"path":447,"stem":448,"draft":11,"icon":449},"Automation rules","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fautomation","docs\u002F03.growth\u002F04.optimization-groups\u002F11.automation","i-lucide-workflow",{"title":451,"path":452,"stem":453,"draft":11,"icon":454},"Managing campaigns in a group","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fmanaging-campaigns","docs\u002F03.growth\u002F04.optimization-groups\u002F12.managing-campaigns","i-lucide-list-checks",{"title":456,"path":457,"stem":458,"draft":11,"icon":459},"How the run works","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fdaily-run","docs\u002F03.growth\u002F04.optimization-groups\u002F13.daily-run","i-lucide-refresh-cw",{"title":461,"path":462,"stem":463,"draft":11,"icon":464},"When the ads model is updating","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fmodel-training","docs\u002F03.growth\u002F04.optimization-groups\u002F14.model-training","i-lucide-brain-circuit",{"title":466,"path":467,"stem":468,"draft":11,"icon":469},"Glossary","\u002Fdocs\u002Fgrowth\u002Foptimization-groups\u002Fglossary","docs\u002F03.growth\u002F04.optimization-groups\u002F16.glossary","i-lucide-book-a",{"title":471,"draft":11,"path":472,"stem":473,"children":474},"AI and API","\u002Fdocs\u002Fai-and-api","docs\u002F04.ai-and-api\u002Findex",[475,476,518],{"title":10,"path":472,"stem":473,"draft":11},{"title":477,"draft":11,"path":478,"stem":479,"children":480,"icon":482},"AI assistants","\u002Fdocs\u002Fai-and-api\u002Fassistants","docs\u002F04.ai-and-api\u002F01.assistants\u002Findex",[481,483,488,493,498,503,508,513],{"title":10,"path":478,"stem":479,"draft":11,"icon":482},"i-material-symbols-smart-toy-rounded",{"title":484,"path":485,"stem":486,"draft":11,"icon":487},"Connect to ChatGPT","\u002Fdocs\u002Fai-and-api\u002Fassistants\u002Fconnect-chatgpt","docs\u002F04.ai-and-api\u002F01.assistants\u002F01.connect-chatgpt","i-simple-icons-openai",{"title":489,"path":490,"stem":491,"draft":11,"icon":492},"Connect to Claude","\u002Fdocs\u002Fai-and-api\u002Fassistants\u002Fconnect-claude","docs\u002F04.ai-and-api\u002F01.assistants\u002F02.connect-claude","i-simple-icons-claude",{"title":494,"path":495,"stem":496,"draft":11,"icon":497},"Native playbooks","\u002Fdocs\u002Fai-and-api\u002Fassistants\u002Fplaybooks","docs\u002F04.ai-and-api\u002F01.assistants\u002F03.playbooks","i-material-symbols-route-rounded",{"title":499,"path":500,"stem":501,"draft":11,"icon":502},"Prompt library","\u002Fdocs\u002Fai-and-api\u002Fassistants\u002Fprompt-library","docs\u002F04.ai-and-api\u002F01.assistants\u002F04.prompt-library","i-material-symbols-forum-rounded",{"title":504,"path":505,"stem":506,"draft":11,"icon":507},"MCP tool catalog","\u002Fdocs\u002Fai-and-api\u002Fassistants\u002Ftool-catalog","docs\u002F04.ai-and-api\u002F01.assistants\u002F05.tool-catalog","i-material-symbols-build-rounded",{"title":509,"path":510,"stem":511,"draft":11,"icon":512},"Permissions and safety","\u002Fdocs\u002Fai-and-api\u002Fassistants\u002Fusage-and-safety","docs\u002F04.ai-and-api\u002F01.assistants\u002F06.usage-and-safety","i-material-symbols-health-and-safety-rounded",{"title":514,"path":515,"stem":516,"draft":11,"icon":517},"Worked MCP examples","\u002Fdocs\u002Fai-and-api\u002Fassistants\u002Fworked-examples","docs\u002F04.ai-and-api\u002F01.assistants\u002F07.worked-examples","i-material-symbols-menu-book-rounded",{"title":519,"draft":11,"path":520,"stem":521,"children":522,"page":11},"API","\u002Fdocs\u002Fai-and-api\u002Fapi","docs\u002F04.ai-and-api\u002F02.api",[523,528,533,538,543,548],{"title":524,"path":525,"stem":526,"draft":11,"icon":527},"Getting started","\u002Fdocs\u002Fai-and-api\u002Fapi\u002Fgetting-started","docs\u002F04.ai-and-api\u002F02.api\u002F01.getting-started","i-material-symbols-key-rounded",{"title":529,"path":530,"stem":531,"draft":11,"icon":532},"API security & limits","\u002Fdocs\u002Fai-and-api\u002Fapi\u002Fsecurity","docs\u002F04.ai-and-api\u002F02.api\u002F02.security","i-material-symbols-verified-user-rounded",{"title":534,"path":535,"stem":536,"draft":11,"icon":537},"Endpoints: products & orders","\u002Fdocs\u002Fai-and-api\u002Fapi\u002Fproducts-and-orders","docs\u002F04.ai-and-api\u002F02.api\u002F03.products-and-orders","i-material-symbols-package-2-rounded",{"title":539,"path":540,"stem":541,"draft":11,"icon":542},"Endpoints: financial breakdown","\u002Fdocs\u002Fai-and-api\u002Fapi\u002Ffinancial-breakdown","docs\u002F04.ai-and-api\u002F02.api\u002F04.financial-breakdown","i-material-symbols-account-balance-rounded",{"title":544,"path":545,"stem":546,"draft":11,"icon":547},"Endpoints: raw platform data","\u002Fdocs\u002Fai-and-api\u002Fapi\u002Fplatform-data","docs\u002F04.ai-and-api\u002F02.api\u002F05.platform-data","i-material-symbols-database-rounded",{"title":549,"path":550,"stem":551,"draft":11,"icon":552},"Endpoints: Actions & recommendations","\u002Fdocs\u002Fai-and-api\u002Fapi\u002Frecommendations","docs\u002F04.ai-and-api\u002F02.api\u002F06.recommendations","i-material-symbols-recommend-rounded",{"title":554,"draft":11,"path":555,"stem":556,"children":557},"Administration","\u002Fdocs\u002Fadministration","docs\u002F05.administration\u002Findex",[558,559,579],{"title":10,"path":555,"stem":556,"draft":11},{"title":560,"draft":11,"path":561,"stem":562,"children":563,"page":11},"Team and access","\u002Fdocs\u002Fadministration\u002Fteam-and-access","docs\u002F05.administration\u002F01.team-and-access",[564,569,574],{"title":565,"path":566,"stem":567,"draft":11,"icon":568},"Team & roles","\u002Fdocs\u002Fadministration\u002Fteam-and-access\u002Fteam-and-roles","docs\u002F05.administration\u002F01.team-and-access\u002F01.team-and-roles","i-material-symbols-group-rounded",{"title":570,"path":571,"stem":572,"draft":11,"icon":573},"Adding teammates","\u002Fdocs\u002Fadministration\u002Fteam-and-access\u002Fadding-teammates","docs\u002F05.administration\u002F01.team-and-access\u002F02.adding-teammates","i-material-symbols-person-add-rounded",{"title":575,"path":576,"stem":577,"draft":11,"icon":578},"Managing access","\u002Fdocs\u002Fadministration\u002Fteam-and-access\u002Fmanaging-access","docs\u002F05.administration\u002F01.team-and-access\u002F03.managing-access","i-material-symbols-admin-panel-settings-rounded",{"title":580,"draft":11,"path":581,"stem":582,"children":583,"page":11},"Account","\u002Fdocs\u002Fadministration\u002Faccount","docs\u002F05.administration\u002F02.account",[584,588],{"title":585,"path":586,"stem":587,"draft":11,"icon":385},"Open Platform","\u002Fdocs\u002Fadministration\u002Faccount\u002Fopen-platform","docs\u002F05.administration\u002F02.account\u002F01.open-platform",{"title":589,"path":590,"stem":591,"draft":11,"icon":258},"VAT","\u002Fdocs\u002Fadministration\u002Faccount\u002Fvat","docs\u002F05.administration\u002F02.account\u002F02.vat",{"id":593,"docsPage":594,"docsSidebar":605,"docsTabs":607,"extension":609,"footer":610,"header":669,"localeSwitch":685,"meta":687,"stem":688,"__hash__":689},"chrome_en\u002Fen\u002Fchrome.yml",{"onThisPage":595,"copyPage":596,"copied":597,"copyMenu":598,"copyMarkdownLink":599,"linkCopied":600,"viewMarkdown":601,"openChatGpt":602,"openClaude":603,"platforms":604},"On this page","Copy page","Copied","More copy options","Copy Markdown link","Copied to clipboard","View as Markdown","Open in ChatGPT","Open in Claude","Works on",{"label":606},"Docs sidebar",{"ariaLabel":608},"Docs sections","yml",{"ariaLabel":611,"columns":612,"legal":649,"quote":650,"askAi":653},"Footer",[613,625,631,639],{"label":67,"children":614},[615,616,619,622],{"label":5,"to":6},{"label":617,"to":618},"Use cases","\u002Fuse-cases",{"label":620,"to":621},"Training","\u002Ftraining",{"label":623,"to":624},"Resources","\u002Fresources",{"label":626,"children":627},"Build",[628,629,630],{"label":477,"to":478},{"label":519,"to":525},{"label":585,"to":586},{"label":632,"children":633},"Updates",[634,635],{"label":77,"to":80},{"label":636,"to":637,"target":638},"Blog","https:\u002F\u002Fwww.dataglasslabs.com\u002Fblog","_blank",{"label":640,"children":641},"DataGlass",[642,645,648],{"label":643,"to":644,"target":638},"Open DataGlass","https:\u002F\u002Fapp.dataglasslabs.com",{"label":646,"to":647,"target":638},"Website","https:\u002F\u002Fwww.dataglasslabs.com",{"label":72,"to":73},"DataGlass Labs. All rights reserved.",{"text":651,"caption":652},"Measure what you keep, and then grow what you measure.","The DataGlass team",{"label":654,"prompt":655,"assistants":656},"Ask AI about DataGlass","I want to learn how to use DataGlass, a decision engine for Shopee, Lazada and TikTok Shop sellers that optimizes ads, pricing and promotions for true profit. Use web search to read the DataGlass docs at https:\u002F\u002Flearn.dataglasslabs.com\u002Fdocs (with an agent-readable summary at https:\u002F\u002Flearn.dataglasslabs.com\u002Fllms.txt), then explain what DataGlass does, how to get started and which guides to read first.",[657,661,665],{"label":658,"icon":659,"url":660},"ChatGPT","chatgpt","https:\u002F\u002Fchatgpt.com\u002F?prompt={prompt}",{"label":662,"icon":663,"url":664},"Claude","claude","https:\u002F\u002Fclaude.ai\u002Fnew?q={prompt}",{"label":666,"icon":667,"url":668},"Perplexity","perplexity","https:\u002F\u002Fwww.perplexity.ai\u002Fsearch?q={prompt}",{"sections":670,"navLabel":683,"openApp":643,"search":684},[671,674,675,677,679,681],{"key":672,"label":673},"home","Home",{"key":7,"label":5},{"key":676,"label":617},"use-cases",{"key":678,"label":620},"training",{"key":680,"label":77},"releases",{"key":682,"label":623},"resources","Sections","Start searching",{"label":686},"Region and language",{},"en\u002Fchrome","mobUs3s2Zj3jKhQlnWk_tray3mh7L0ptp0ZGYXlK4NA",{"id":691,"title":103,"body":692,"description":1082,"draft":11,"draftReason":1083,"extension":1084,"layout":1083,"meta":1085,"navigation":1086,"path":104,"platforms":1087,"rawbody":1089,"seo":1090,"stem":105,"__hash__":1091},"docs_en\u002Fdocs\u002F02.features\u002F01.shops\u002F03.attribution-and-dedup.md",{"type":693,"value":694,"toc":1070},"minimark",[695,711,716,731,734,759,770,774,781,804,814,818,837,848,863,867,874,888,917,928,940,944,955,962,966,969,993,1003,1007,1010,1059],[696,697,698,702,703,706,707,710],"p",{},[699,700,701],"strong",{},"Before DataGlass can say \"this sale came from an ad,\" something has to decide that."," This page explains how that credit is assigned, why the ad ",[699,704,705],{},"sales"," figure is conservative and trustworthy, the one ad number you should never sum, and how affiliate attribution works (it's exact). The specifics here are for ",[699,708,709],{},"Shopee"," — other platforms attribute differently.",[712,713,715],"h2",{"id":714},"how-an-ad-gets-credit","How an ad gets credit",[696,717,718,719,722,723,726,727,730],{},"Shopee uses ",[699,720,721],{},"click-based attribution with a 7-day window",": if a shopper clicks your ad and then buys from your shop ",[699,724,725],{},"within 7 days",", that purchase is credited to the ad. The credit is recorded on the ",[699,728,729],{},"purchase day"," and isn't edited retroactively.",[696,732,733],{},"There are two flavours:",[735,736,737,749],"ul",{},[738,739,740,743,744,748],"li",{},[699,741,742],{},"Direct"," — they bought the ",[745,746,747],"em",{},"exact product"," that was advertised.",[738,750,751,754,755,758],{},[699,752,753],{},"Broad"," — they bought ",[745,756,757],{},"anything"," from your shop after clicking (maybe a different product). Broad always includes direct.",[696,760,761,762,765,766,769],{},"DataGlass uses ",[699,763,764],{},"broad"," for the channel split, so a click that leads to ",[745,767,768],{},"any"," purchase still counts as ad-driven.",[712,771,773],{"id":772},"why-ad-sales-baht-are-trustworthy","Why ad sales (baht) are trustworthy",[696,775,776,777,780],{},"The natural worry: if a shopper clicks ",[699,778,779],{},"two"," of your ads before buying, is that sale counted twice?",[696,782,783,784,787,788,791,792,795,796,799,800,803],{},"For ",[699,785,786],{},"sales value (GMV), no."," Shopee ",[699,789,790],{},"splits the sale across the campaigns"," the shopper touched — the pieces add back up to ",[699,793,794],{},"one sale at most, never more",". So the total ad-attributed sales figure is ",[699,797,798],{},"conservative by construction",": it sits ",[745,801,802],{},"below"," your actual sales, never inflated.",[805,806,808],"callout",{"icon":807},"i-lucide-info",[696,809,810,811,813],{},"We verified this against real shop data: ad-attributed sales came out ",[699,812,802],{}," actual order sales (roughly 0.8–0.9×) — proof that ad sales are partitioned, not double-counted.",[712,815,817],{"id":816},"the-one-number-never-to-add-up-ad-order-counts","The one number never to add up: ad order counts",[696,819,820,821,824,825,828,829,832,833,836],{},"Ad ",[699,822,823],{},"order counts"," are the exception. If a shopper clicked ",[699,826,827],{},"three"," of your ads and then bought ",[699,830,831],{},"once",", that single purchase is counted as an order for ",[699,834,835],{},"all three"," ads.",[696,838,839,840,843,844,847],{},"So summing \"orders\" across campaigns ",[699,841,842],{},"overcounts"," — sometimes by ~3× on a busy promo day. And it ",[699,845,846],{},"can't be perfectly de-duplicated",", because the raw data only summarises orders per campaign; it doesn't link an individual order back to one specific campaign.",[696,849,850,851,854,855,859,860,862],{},"That's why DataGlass leans on ",[699,852,853],{},"ad sales (baht)"," — not ad order counts — everywhere it matters: the profit flow, the ",[856,857,858],"a",{"href":369},"Sankey",", and ",[856,861,62],{"href":63},". When you see an ad order count, read it as \"ad-influenced touches,\" not distinct orders.",[712,864,866],{"id":865},"stripping-cancelled-orders-deduplication","Stripping cancelled orders (deduplication)",[696,868,869,870,873],{},"Shopee's raw ad numbers ",[699,871,872],{},"include orders that were later cancelled"," — which would credit ads for sales that never became money. DataGlass removes that.",[696,875,876,877,880,881,883,884,887],{},"The catch: the data never says ",[745,878,879],{},"which"," cancelled order came from ",[745,882,879],{}," ad (the same reason ad order counts can't be de-duped). So instead of matching them one-to-one, DataGlass estimates the ad's share ",[699,885,886],{},"proportionally",", one campaign and one hour at a time:",[889,890,891,897,907],"ol",{},[738,892,893,896],{},[699,894,895],{},"Gather the pool."," Take every order in that hour that contained an advertised item — the orders the campaign could plausibly have driven.",[738,898,899,902,903,906],{},[699,900,901],{},"Measure the ad's share."," Work out how much of that pool's volume the ad actually claimed: ",[745,904,905],{},"ad-attributed quantity ÷ total quantity placed",". Say it comes to 30%.",[738,908,909,912,913,916],{},[699,910,911],{},"Apply it to the cancellations."," Assume the ad was responsible for that same 30% of the ",[699,914,915],{},"cancelled"," volume in the hour, and subtract that from the ad's credit.",[696,918,919,920,923,924,927],{},"Working hour-by-hour stops a busy promo hour from smearing into a quiet one. Two safety rails: it never subtracts ",[699,921,922],{},"more"," than the ad was credited in the first place, and the cleaned figure never drops below zero. The result is ",[699,925,926],{},"cleaned"," ad sales — the figure that lines up with actual settled money.",[805,929,930],{"icon":807},[696,931,932,935,936,939],{},[699,933,934],{},"Honest caveat."," If a buyer cancels and then rebuys, the current method subtracts the cancel but doesn't add the rebuy back — so it errs ",[699,937,938],{},"slightly conservative"," (it can under-credit ads, never over-credit). The safe direction.",[712,941,943],{"id":942},"affiliate-attribution-different-and-exact","Affiliate attribution (different, and exact)",[696,945,946,947,950,951,954],{},"Affiliate sales aren't estimated at all. An order counts as ",[699,948,949],{},"affiliate"," when it carries an ",[699,952,953],{},"affiliate (AMS) commission line in Shopee's settlement"," — meaning Shopee literally charged you a commission for an affiliate on that order.",[696,956,957,958,961],{},"Because that's a hard line in the money record, affiliate attribution is ",[699,959,960],{},"exact, not modelled",". The commission you paid shows up as its own cost bucket.",[712,963,965],{"id":964},"how-the-three-channels-fit-together","How the three channels fit together",[696,967,968],{},"The channels are carved in order, so they always add back up to your sales:",[889,970,971,977,987],{},[738,972,973,976],{},[699,974,975],{},"Affiliate first"," — exact, from the commission line.",[738,978,979,982,983,986],{},[699,980,981],{},"Ads next"," — attributed and cleaned, and ",[699,984,985],{},"capped"," so affiliate + ads can never exceed your total sales.",[738,988,989,992],{},[699,990,991],{},"Organic last"," — whatever's left: free reach.",[696,994,995,996,999,1000,1002],{},"This ordering is why the ",[699,997,998],{},"Revenue by channel"," split on your shop overview always reconciles to GMV. For how those channels appear on the dashboard, see ",[856,1001,98],{"href":99},".",[712,1004,1006],{"id":1005},"why-this-is-accurate","Why this is accurate",[696,1008,1009],{},"None of this is a black box. Each piece is sound for a concrete reason:",[735,1011,1012,1022,1035,1049],{},[738,1013,1014,1017,1018,1021],{},[699,1015,1016],{},"Affiliate is a fact, not a model."," It's read straight from a commission Shopee ",[745,1019,1020],{},"actually charged"," you. If the commission line exists, an affiliate was involved — there's nothing to estimate or get wrong.",[738,1023,1024,1027,1028,1031,1032,1034],{},[699,1025,1026],{},"Ad sales can't be inflated."," Shopee partitions a sale across the campaigns a shopper touched, so the pieces sum to ",[699,1029,1030],{},"one sale at most",". The math has no way to manufacture revenue that didn't happen. When we checked the ad-attributed sales against the actual settled money for the same orders — on the same price basis, with cancellations aligned — the ad figure came out ",[699,1033,802],{}," real sales, not above. That's the opposite of double-counting.",[738,1036,1037,1040,1041,1044,1045,1048],{},[699,1038,1039],{},"The dedup can't overshoot."," The cancelled orders are always a ",[745,1042,1043],{},"subset"," of the volume already in the pool, so the ad's share applied to them is bounded by what the ad was credited in the first place. On top of that, we cap the subtraction at the raw ad figure and floor the result at zero. The worst case is that it strips a little ",[699,1046,1047],{},"too much"," (under-crediting ads), never too little.",[738,1050,1051,1054,1055,1058],{},[699,1052,1053],{},"The estimate can't move your totals."," The one estimated step — splitting credit between ads and organic — only decides ",[745,1056,1057],{},"which channel"," a sale is filed under. It never changes total sales or total profit: the channels always add back up to GMV, and channel profits always sum to your bottom line. So even if a borderline sale lands in \"organic\" instead of \"ads,\" your profit is unaffected.",[696,1060,1061,1062,1065,1066,1069],{},"In short: the parts that can be ",[699,1063,1064],{},"facts"," are facts (affiliate, settled money), the one part that must be ",[699,1067,1068],{},"estimated"," (ad vs. organic split) is built to err on the safe side and is fenced in so it can't distort your headline numbers.",{"title":1071,"searchDepth":1072,"depth":1072,"links":1073},"",3,[1074,1076,1077,1078,1079,1080,1081],{"id":714,"depth":1075,"text":715},2,{"id":772,"depth":1075,"text":773},{"id":816,"depth":1075,"text":817},{"id":865,"depth":1075,"text":866},{"id":942,"depth":1075,"text":943},{"id":964,"depth":1075,"text":965},{"id":1005,"depth":1075,"text":1006},"How a sale gets credited to an ad or an affiliate, why ad sales are trustworthy, and the one ad number you should never add up.",null,"md",{},{"icon":106},[1088],"shopee","---\ntitle: Attribution & dedup\ndescription: How a sale gets credited to an ad or an affiliate, why ad sales are trustworthy, and the one ad number you should never add up.\nplatforms:\n  - shopee\nnavigation:\n  icon: i-material-symbols-call-merge-rounded\n---\n\n**Before DataGlass can say \"this sale came from an ad,\" something has to decide that.** This page explains how that credit is assigned, why the ad **sales** figure is conservative and trustworthy, the one ad number you should never sum, and how affiliate attribution works (it's exact). The specifics here are for **Shopee** — other platforms attribute differently.\n\n## How an ad gets credit\n\nShopee uses **click-based attribution with a 7-day window**: if a shopper clicks your ad and then buys from your shop **within 7 days**, that purchase is credited to the ad. The credit is recorded on the **purchase day** and isn't edited retroactively.\n\nThere are two flavours:\n\n- **Direct** — they bought the *exact product* that was advertised.\n- **Broad** — they bought *anything* from your shop after clicking (maybe a different product). Broad always includes direct.\n\nDataGlass uses **broad** for the channel split, so a click that leads to *any* purchase still counts as ad-driven.\n\n## Why ad sales (baht) are trustworthy\n\nThe natural worry: if a shopper clicks **two** of your ads before buying, is that sale counted twice?\n\nFor **sales value (GMV), no.** Shopee **splits the sale across the campaigns** the shopper touched — the pieces add back up to **one sale at most, never more**. So the total ad-attributed sales figure is **conservative by construction**: it sits *below* your actual sales, never inflated.\n\n::callout{icon=\"i-lucide-info\"}\nWe verified this against real shop data: ad-attributed sales came out **below** actual order sales (roughly 0.8–0.9×) — proof that ad sales are partitioned, not double-counted.\n::\n\n## The one number never to add up: ad order counts\n\nAd **order counts** are the exception. If a shopper clicked **three** of your ads and then bought **once**, that single purchase is counted as an order for **all three** ads.\n\nSo summing \"orders\" across campaigns **overcounts** — sometimes by ~3× on a busy promo day. And it **can't be perfectly de-duplicated**, because the raw data only summarises orders per campaign; it doesn't link an individual order back to one specific campaign.\n\nThat's why DataGlass leans on **ad sales (baht)** — not ad order counts — everywhere it matters: the profit flow, the [Sankey](\u002Fdocs\u002Fgrowth\u002Fads\u002Freading-the-sankey), and [True ROAS](\u002Fdocs\u002Foverview\u002Ffoundations\u002Ftrue-roas). When you see an ad order count, read it as \"ad-influenced touches,\" not distinct orders.\n\n## Stripping cancelled orders (deduplication)\n\nShopee's raw ad numbers **include orders that were later cancelled** — which would credit ads for sales that never became money. DataGlass removes that.\n\nThe catch: the data never says *which* cancelled order came from *which* ad (the same reason ad order counts can't be de-duped). So instead of matching them one-to-one, DataGlass estimates the ad's share **proportionally**, one campaign and one hour at a time:\n\n1. **Gather the pool.** Take every order in that hour that contained an advertised item — the orders the campaign could plausibly have driven.\n2. **Measure the ad's share.** Work out how much of that pool's volume the ad actually claimed: *ad-attributed quantity ÷ total quantity placed*. Say it comes to 30%.\n3. **Apply it to the cancellations.** Assume the ad was responsible for that same 30% of the **cancelled** volume in the hour, and subtract that from the ad's credit.\n\nWorking hour-by-hour stops a busy promo hour from smearing into a quiet one. Two safety rails: it never subtracts **more** than the ad was credited in the first place, and the cleaned figure never drops below zero. The result is **cleaned** ad sales — the figure that lines up with actual settled money.\n\n::callout{icon=\"i-lucide-info\"}\n**Honest caveat.** If a buyer cancels and then rebuys, the current method subtracts the cancel but doesn't add the rebuy back — so it errs **slightly conservative** (it can under-credit ads, never over-credit). The safe direction.\n::\n\n## Affiliate attribution (different, and exact)\n\nAffiliate sales aren't estimated at all. An order counts as **affiliate** when it carries an **affiliate (AMS) commission line in Shopee's settlement** — meaning Shopee literally charged you a commission for an affiliate on that order.\n\nBecause that's a hard line in the money record, affiliate attribution is **exact, not modelled**. The commission you paid shows up as its own cost bucket.\n\n## How the three channels fit together\n\nThe channels are carved in order, so they always add back up to your sales:\n\n1. **Affiliate first** — exact, from the commission line.\n2. **Ads next** — attributed and cleaned, and **capped** so affiliate + ads can never exceed your total sales.\n3. **Organic last** — whatever's left: free reach.\n\nThis ordering is why the **Revenue by channel** split on your shop overview always reconciles to GMV. For how those channels appear on the dashboard, see [Understanding the numbers](\u002Fdocs\u002Ffeatures\u002Fshops\u002Funderstanding-the-numbers).\n\n## Why this is accurate\n\nNone of this is a black box. Each piece is sound for a concrete reason:\n\n- **Affiliate is a fact, not a model.** It's read straight from a commission Shopee *actually charged* you. If the commission line exists, an affiliate was involved — there's nothing to estimate or get wrong.\n- **Ad sales can't be inflated.** Shopee partitions a sale across the campaigns a shopper touched, so the pieces sum to **one sale at most**. The math has no way to manufacture revenue that didn't happen. When we checked the ad-attributed sales against the actual settled money for the same orders — on the same price basis, with cancellations aligned — the ad figure came out **below** real sales, not above. That's the opposite of double-counting.\n- **The dedup can't overshoot.** The cancelled orders are always a *subset* of the volume already in the pool, so the ad's share applied to them is bounded by what the ad was credited in the first place. On top of that, we cap the subtraction at the raw ad figure and floor the result at zero. The worst case is that it strips a little **too much** (under-crediting ads), never too little.\n- **The estimate can't move your totals.** The one estimated step — splitting credit between ads and organic — only decides *which channel* a sale is filed under. It never changes total sales or total profit: the channels always add back up to GMV, and channel profits always sum to your bottom line. So even if a borderline sale lands in \"organic\" instead of \"ads,\" your profit is unaffected.\n\nIn short: the parts that can be **facts** are facts (affiliate, settled money), the one part that must be **estimated** (ad vs. organic split) is built to err on the safe side and is fenced in so it can't distort your headline numbers.\n",{"title":103,"description":1082},"N54GyP_pVG4fz8e0qhNlqBy10QJpViW1SBKcqurt_n8",{"data":1093,"body":1094},{},{"type":1095,"children":1096},"root",[1097],{"type":1098,"tag":696,"props":1099,"children":1100},"element",{},[1101],{"type":1102,"value":1082},"text",1792785235063]