1"use strict";(globalThis.webpackChunkbambuser_docs||=[]).push([[1084],{61095(e,t,s){s.r(t),s.d(t,{assets:()=>l,contentTitle:()=>a,default:()=>h,frontMatter:()=>i,metadata:()=>n,toc:()=>c});const n=JSON.parse('{"id":"troubleshooting/sales-not-attributed","title":"Sales are Not Attributed","description":"Troubleshoot missing associate sales attribution: checkout on different device/browser, missing/malformed ecommerce:purchase event, blocked hero-session cookie.","source":"@site/chat/troubleshooting/sales-not-attributed.md","sourceDirName":"troubleshooting","slug":"/troubleshooting/sales-not-attributed","permalink":"/docs/chat/troubleshooting/sales-not-attributed","draft":false,"unlisted":false,"tags":[{"inline":true,"label":"chat","permalink":"/docs/chat/tags/chat"},{"inline":true,"label":"sales","permalink":"/docs/chat/tags/sales"},{"inline":true,"label":"tracking","permalink":"/docs/chat/tags/tracking"}],"version":"current","frontMatter":{"title":"Sales are Not Attributed","description":"Troubleshoot missing associate sales attribution: checkout on different device/browser, missing/malformed ecommerce:purchase event, blocked hero-session cookie.","slug":"sales-not-attributed","tags":["chat","sales","tracking"],"hide_table_of_contents":false}}');var r=s(74848),o=s(28453);s(4865),s(19365),s(86025);const i={title:"Sales are Not Attributed",description:"Troubleshoot missing associate sales attribution: checkout on different device/browser, missing/malformed ecommerce:purchase event, blocked hero-session cookie.",slug:"sales-not-attributed",tags:["chat","sales","tracking"],hide_table_of_contents:!1},a=void 0,l={},c=[{value:"Common Causes and Solutions",id:"common-causes-and-solutions",level:2},{value:"1. <strong>The Customer placed the order in other browser/device</strong>",id:"1-the-customer-placed-the-order-in-other-browserdevice",level:3},{value:"2. <strong>The Purchase tracking event is not implemented or it has errors</strong>",id:"2-the-purchase-tracking-event-is-not-implemented-or-it-has-errors",level:3},{value:"3. <strong>Cookies are not active on the customer browser</strong>",id:"3-cookies-are-not-active-on-the-customer-browser",level:3},{value:"4. <strong>Shopify pixel privacy settings can suppress conversion tracking</strong>",id:"4-shopify-pixel-privacy-settings-can-suppress-conversion-tracking",level:3}];function u(e){const t={a:"a",br:"br",h2:"h2",h3:"h3",hr:"hr",li:"li",p:"p",strong:"strong",ul:"ul",...(0,o.R)(),...e.components};return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)(t.p,{children:"If the Sales are not attributed as it should, there are several common issue that might be causing this problem. Follow these steps to help you identify and resolve the issue."}),"\n",(0,r.jsx)(t.hr,{}),"\n",(0,r.jsx)(t.h2,{id:"common-causes-and-solutions",children:"Common Causes and Solutions"}),"\n",(0,r.jsxs)(t.h3,{id:"1-the-customer-placed-the-order-in-other-browserdevice",children:["1. ",(0,r.jsx)(t.strong,{children:"The Customer placed the order in other browser/device"})]}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Cause:"}),(0,r.jsx)(t.br,{}),"\n","The Customer changes the device or the browser on which they have the conversation with the associate and place the order."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Solution:"})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Encourage"})," the customer to place the order within the browser/device on which they have the conversation."]}),"\n"]}),"\n",(0,r.jsxs)(t.h3,{id:"2-the-purchase-tracking-event-is-not-implemented-or-it-has-errors",children:["2. ",(0,r.jsx)(t.strong,{children:"The Purchase tracking event is not implemented or it has errors"})]}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Cause:"}),(0,r.jsx)(t.br,{}),"\n","The tracking event is not implemented in the website, it has some missing fields or the values for the fields are not in the proper form."]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Solution:"})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Verify"})," the purchase tracking event implementation using the ",(0,r.jsx)(t.a,{href:"/chat/inspector-tool",children:"Inspector Tool"})," by placing an order on the website."]}),"\n"]}),"\n",(0,r.jsxs)(t.h3,{id:"3-cookies-are-not-active-on-the-customer-browser",children:["3. ",(0,r.jsx)(t.strong,{children:"Cookies are not active on the customer browser"})]}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Cause:"}),(0,r.jsx)(t.br,{}),"\n","Cookies are not active on the customer browser and the hero-session cookie is not populated"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Solution:"})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Encourage"})," the customer to activate the cookies before placing an order."]}),"\n"]}),"\n",(0,r.jsxs)(t.h3,{id:"4-shopify-pixel-privacy-settings-can-suppress-conversion-tracking",children:["4. ",(0,r.jsx)(t.strong,{children:"Shopify pixel privacy settings can suppress conversion tracking"})]}),"\n",(0,r.jsxs)(t.p,{children:[(0,r.jsx)(t.strong,{children:"Cause:"}),(0,r.jsx)(t.br,{}),"\n","On Shopify, custom pixel privacy settings can block the Bambuser pixel from firing for part of the traffic:"]}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["If ",(0,r.jsx)(t.strong,{children:"Permission"})," is set to ",(0,r.jsx)(t.strong,{children:"Required"})," (for example with Marketing and Analytics), the pixel only fires when the visitor has explicitly granted the required consent purposes."]}),"\n",(0,r.jsxs)(t.li,{children:["If ",(0,r.jsx)(t.strong,{children:"Data sale"})," is set to ",(0,r.jsx)(t.strong,{children:"Data collected qualifies as data sale"}),", the pixel can also be suppressed for visitors who opt out of data sale rights (for example via regional privacy opt-out flows or browser privacy signals such as GPC)."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:"In these cases, orders can be real but still not attributed in Bambuser because the pixel never fired during the session."}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Solution:"})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Verify"})," current Shopify custom pixel privacy settings and confirm they match the merchant's intended privacy and attribution behavior."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Validate"})," in browser DevTools whether the Bambuser pixel loads and sends events both when consent is accepted and when it is not."]}),"\n",(0,r.jsxs)(t.li,{children:[(0,r.jsx)(t.strong,{children:"Review"})," if attribution drops align with privacy-enforcement or policy-change timelines before assuming a true sales decline."]}),"\n"]}),"\n",(0,r.jsx)(t.p,{children:(0,r.jsx)(t.strong,{children:"Shopify timeline references:"})}),"\n",(0,r.jsxs)(t.ul,{children:["\n",(0,r.jsxs)(t.li,{children:["Shopify changelog (May 1, 2024): ",(0,r.jsx)(t.a,{href:"https://changelog.shopify.com/posts/manage-customer-privacy-settings-for-custom-pixels",children:"Manage customer privacy settings for custom pixels"})]}),"\n",(0,r.jsxs)(t.li,{children:["Shopify changelog (Jan 13, 2026): ",(0,r.jsx)(t.a,{href:"https://changelog.shopify.com/posts/new-default-setting-for-pixel-data-sharing",children:"New default setting for pixel data sharing"})]}),"\n",(0,r.jsxs)(t.li,{children:["Shopify docs: ",(0,r.jsx)(t.a,{href:"https://shopify.dev/docs/api/web-pixels-api/pixel-privacy",children:"Pixel Privacy"})]}),"\n"]})]})}function h(e={}){const{wrapper:t}={...(0,o.R)(),...e.components};return t?(0,r.jsx)(t,{...e,children:(0,r.jsx)(u,{...e})}):u(e)}},19365(e,t,s){s.d(t,{A:()=>l});s(96540);var n=s(18215),r=s(47751);const o="tabItem_Ymn6";var i=s(74848);function a({children:e,className:t,hidden:s}){return(0,i.jsx)("div",{role:"tabpanel",className:(0,n.A)(o,t),hidden:s,children:e})}function l({children:e,className:t,value:s}){const{selectedValue:n,lazy:o}=(0,r.uc)(),l=s===n;return!l&&o?null:(0,i.jsx)(a,{className:t,hidden:!l,children:e})}},4865(e,t,s){s.d(t,{A:()=>f});s(96540);var n=s(18215),r=s(17559),o=s(47751),i=s(23104),a=s(92303);const l="tabList__CuJ",c="tabItem_LNqP";var u=s(74848);function h({className:e}){const{selectedValue:t,selectValue:s,tabValues:r,block:a}=(0,o.uc)(),l=[],{blockElementScrollPositionUntilNextRender:h}=(0,i.a_)(),d=e=>{const n=e.currentTarget,o=l.indexOf(n),i=r[o].value;i!==t&&(h(n),s(i))},p=e=>{let t=null;switch(e.key){case"Enter":d(e);break;case"ArrowRight":{const s=l.indexOf(e.currentTarget)+1;t=l[s]??l[0];break}case"ArrowLeft":{const s=l.indexOf(e.currentTarget)-1;t=l[s]??l[l.length-1];break}}t?.focus()};return(0,u.jsx)("ul",{role:"tablist","aria-orientation":"horizontal",className:(0,n.A)("tabs",{"tabs--block":a},e),children:r.map(({value:e,label:s,attributes:r})=>(0,u.jsx)("li",{role:"tab",tabIndex:t===e?0:-1,"aria-selected":t===e,ref:e=>{l.push(e)},onKeyDown:p,onClick:d,...r,className:(0,n.A)("tabs__item",c,r?.className,{"tabs__item--active":t===e}),children:s??e},e))})}function d({children:e}){return(0,u.jsx)("div",{className:"margin-top--md",children:e})}function p({className:e,children:t}){return(0,u.jsxs)("div",{className:(0,n.A)(r.G.tabs.container,"tabs-container",l),children:[(0,u.jsx)(h,{className:e}),(0,u.jsx)(d,{children:t})]})}function f(e){const t=(0,a.A)(),s=(0,o.OC)(e);return(0,u.jsx)(o.O_,{value:s,children:(0,u.jsx)(p,{className:e.className,children:(0,o.vT)(e.children)})},String(t))}},47751(e,t,s){s.d(t,{OC:()=>f,O_:()=>g,uc:()=>b,vT:()=>u});var n=s(96540),r=s(90612),o=s(205),i=s(57485),a=s(70679),l=s(31682),c=s(74848);function u(e){return n.Children.toArray(e).filter(e=>"\n"!==e)}function h(e){const{values:t,children:s}=e;return(0,n.useMemo)(()=>{const e=t??function(e){return n.Children.toArray(e).flatMap(e=>{if(!e)return[];if((0,n.isValidElement)(e)&&function(e){const{props:t}=e;return!!t&&"object"==typeof t&&"value"in t}(e))return[e];
1const t="string"==typeof e.type?e.type:e.type.name;throw new Error(`Docusaurus error: Bad <Tabs> child <${t}>: all children of the <Tabs> component should be <TabItem>, and every <TabItem> should have a unique "value" prop.\nIf you do not want to pass on a "value" prop to the direct children of <Tabs>, you can also pass an explicit <Tabs values={...}> prop.`)}).map(({props:{value:e,label:t,attributes:s,default:n}})=>({value:e,label:t,attributes:s,default:n}))}(s);return function(e){const t=(0,l.XI)(e,(e,t)=>e.value===t.value);if(t.length>0)throw new Error(`Docusaurus error: Duplicate values "${t.map(e=>`'${e.value}'`).join(", ")}" found in <Tabs>. Every value needs to be unique.`)}(e),e},[t,s])}function d({value:e,tabValues:t}){return t.some(t=>t.value===e)}function p({queryString:e=!1,groupId:t}){const s=(0,r.W6)(),o=function({queryString:e=!1,groupId:t}){if("string"==typeof e)return e;if(!1===e)return null;if(!0===e&&!t)throw new Error('Docusaurus error: The <Tabs> component groupId prop is required if queryString=true, because this value is used as the search param name. You can also provide an explicit value such as queryString="my-search-param".');return t??null}({queryString:e,groupId:t});return[(0,i.aZ)(o),(0,n.useCallback)(e=>{if(!o)return;const t=new URLSearchParams(s.location.search);t.set(o,e),s.replace({...s.location,search:t.toString()})},[o,s])]}function f(e){const{defaultValue:t,queryString:s=!1,groupId:r}=e,i=h(e),[l,c]=(0,n.useState)(()=>function({defaultValue:e,tabValues:t}){if(0===t.length)throw new Error("Docusaurus error: the <Tabs> component requires at least one <TabItem> children component");if(e){if(!d({value:e,tabValues:t}))throw new Error(`Docusaurus error: The <Tabs> has a defaultValue "${e}" but none of its children has the corresponding value. Available values are: ${t.map(e=>e.value).join(", ")}. If you intend to show no default tab, use defaultValue={null} instead.`);return e}const s=t.find(e=>e.default)??t[0];if(!s)throw new Error("Unexpected error: 0 tabValues");return s.value}({defaultValue:t,tabValues:i})),[u,f]=p({queryString:s,groupId:r}),[m,b]=function({groupId:e}){const t=function(e){return e?`docusaurus.tab.${e}`:null}(e),[s,r]=(0,a.Dv)(t);return[s,(0,n.useCallback)(e=>{t&&r.set(e)},[t,r])]}({groupId:r}),g=(()=>{const e=u??m;return d({value:e,tabValues:i})?e:null})();(0,o.A)(()=>{g&&c(g)},[g]);return{selectedValue:l,selectValue:(0,n.useCallback)(e=>{if(!d({value:e,tabValues:i}))throw new Error(`Can't select invalid tab value=${e}`);c(e),f(e),b(e)},[f,b,i]),tabValues:i,lazy:e.lazy??!1,block:e.block??!1}}const m=(0,n.createContext)(null);function b(){const e=n.useContext(m);if(!e)throw new Error("useTabsContext() must be used within a Tabs component");return e}function g(e){return(0,c.jsx)(m.Provider,{value:e.value,children:e.children})}},28453(e,t,s){s.d(t,{R:()=>i,x:()=>a});var n=s(96540);const r={},o=n.createContext(r);function i(e){const t=n.useContext(o);return n.useMemo(function(){return"function"==typeof e?e(t):{...t,...e}},[t,e])}function a(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(r):e.components||r:i(e.components),n.createElement(o.Provider,{value:t},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.