[{"data":1,"prerenderedAt":620},["ShallowReactive",2],{"{\"version\":\"published\",\"language\":\"en\"}layout":3,"{\"version\":\"published\",\"language\":\"en\"}content/framework/":207,"content-list-d4e5f6a7-b8c9-0123-defa-234567890123-en-framework":251,"qsg0VcE4RZ":475,"gcOcOnHrUb":490,"XJgu1h55TI":500,"RY5zrg7vD9":510,"GTa8loU39k":520,"roN1L0BVGB":530,"6k9g4ypUi9":540,"vMvjlGnxik":550,"iS1uTtmrs0":560,"w4nvEdADoP":570,"sUyBDryMhc":580,"fNquDD4qwv":590,"Nvsw69th8P":600,"T9GdLtjQnk":610},{"data":4,"headers":185},{"story":5,"cv":182,"rels":183,"links":184},{"name":6,"created_at":7,"published_at":8,"updated_at":9,"id":10,"uuid":11,"content":12,"slug":173,"full_slug":173,"sort_by_date":174,"position":175,"tag_list":176,"is_startpage":32,"parent_id":174,"meta_data":174,"group_id":178,"first_published_at":179,"release_id":174,"lang":180,"path":174,"alternates":181,"default_full_slug":174,"translated_slugs":174},"Layout & Menu Settings","2024-07-09T11:23:15.417Z","2026-08-21T07:00:43.091Z","2026-08-21T07:00:43.104Z",520580076,"d0565ccd-50f8-4a35-9583-813fff54f59a",{"_uid":13,"menu":14,"banner":135,"footer":141,"component":171,"promotion":172},"9245e14a-f18f-4a6c-8060-61e8beb3d9f1",[15],{"_uid":16,"logo":17,"component":22,"rightSide":23,"navigation":40},"fd2f2bd7-3ebb-4923-8327-febceaf9131b",{"id":18,"alt":19,"filename":20,"fieldtype":21},16613298,"","https://a.storyblok.com/f/296300/2078x457/3b34c3fe19/witbee-logo-new.png","asset","mega-menu",[24,34],{"_uid":25,"href":26,"size":27,"text":28,"target":29,"rounded":30,"variant":31,"disabled":32,"component":33,"showArrow":32},"839bb546-784b-4ba0-871b-263f3c901b86","/contact-free-consultation","md","Free consultation","_self","none","primary",false,"button-blok",{"_uid":35,"href":36,"size":27,"text":37,"target":29,"rounded":30,"variant":38,"disabled":32,"component":33,"showArrow":39},"32d63a94-8cbd-474c-9ce1-457cfa576ccf","https://cloud.witbee.com","Login","secondary",true,[41,50,90,129],{"_uid":42,"link":43,"name":47,"subItems":48,"component":49},"3f3dab6a-9cd6-4ea1-9fdd-645b62d9cb49",{"id":19,"url":44,"linktype":45,"fieldtype":46,"cached_url":44},"/services","url","multilink","Services",[],"mega-menu-item",{"_uid":51,"link":52,"name":54,"subItems":55,"component":49},"6951d7b0-368d-4db6-85fa-80af9088e8e0",{"id":19,"url":53,"linktype":45,"fieldtype":46,"cached_url":53},"/usługi","WitCloud Platform",[56],{"_uid":57,"links":58,"title":88,"component":89},"9e0dbc8d-3b23-474c-ab56-2eba6486c651",[59,67,74,81],{"_uid":60,"icon":61,"link":62,"component":64,"lowerText":65,"upperText":66},"2144a1bf-1bdf-4a82-9f59-b5e7d7f73f47","InformationCircleIcon",{"id":19,"url":63,"linktype":45,"fieldtype":46,"cached_url":63},"/witcloud","mega-menu-subitem-link","Learn about WitCloud","Platform overview",{"_uid":68,"icon":69,"link":70,"component":64,"lowerText":72,"upperText":73},"a6f22621-aa4f-4b0c-be09-11b4140d7dea","UsersIcon",{"id":19,"url":71,"linktype":45,"fieldtype":46,"cached_url":71},"/witcloud/integrations","GA4, Ad Systems, E-commerce platforms & more","Our Data Integrations",{"_uid":75,"icon":76,"link":77,"component":64,"lowerText":79,"upperText":80},"42267fc4-06a8-465a-a3cf-56a311ff7022","NewspaperIcon",{"id":19,"url":78,"linktype":45,"fieldtype":46,"cached_url":78},"/witcloud/pricing","Flexible subscription","Pricing",{"_uid":82,"icon":83,"link":84,"component":64,"lowerText":86,"upperText":87},"6333bd24-c3b2-46ba-8dc2-93770459a0bc","BriefcaseIcon",{"id":19,"url":85,"linktype":45,"fieldtype":46,"cached_url":85},"/witcloud/docs/","Check how to configure","Documentation","Overview","mega-menu-subitem",{"_uid":91,"link":92,"name":94,"subItems":95,"component":49},"0182c7f6-b9d7-4e01-81bd-97635c68d72f",{"id":19,"url":93,"linktype":45,"fieldtype":46,"cached_url":93},"/content","Knowledge Hub",[96],{"_uid":97,"links":98,"title":94,"component":89},"0f09839c-f7ce-48b8-8dc4-9269791644c0",[99,104,110,117,123],{"_uid":100,"icon":76,"link":101,"component":64,"lowerText":102,"upperText":103},"dd3ac1b6-d987-496d-bb75-e0db7459a79f",{"id":19,"url":93,"linktype":45,"fieldtype":46,"cached_url":93},"All our guides, case studies and webinars","All resources",{"_uid":105,"icon":61,"link":106,"component":64,"lowerText":108,"upperText":109},"5a1e2f7a-1111-4a00-9101-aa0000000101",{"id":19,"url":107,"linktype":45,"fieldtype":46,"cached_url":107},"/content/framework","Our analytics framework, explained step by step","Framework",{"_uid":111,"icon":112,"link":113,"component":64,"lowerText":115,"upperText":116},"5a1e2f7a-2222-4a00-9102-aa0000000102","VideoCameraIcon",{"id":19,"url":114,"linktype":45,"fieldtype":46,"cached_url":114},"/content/webinars","Recordings of our expert-led sessions","Webinars",{"_uid":118,"icon":83,"link":119,"component":64,"lowerText":121,"upperText":122},"5a1e2f7a-3333-4a00-9103-aa0000000103",{"id":19,"url":120,"linktype":45,"fieldtype":46,"cached_url":120},"/content/case-studies","Real results from our clients","Case studies",{"_uid":124,"icon":76,"link":125,"component":64,"lowerText":127,"upperText":128},"5a1e2f7a-4444-4a00-9104-aa0000000104",{"id":19,"url":126,"linktype":45,"fieldtype":46,"cached_url":126},"/content/knowledge","Guides on GA4, BigQuery and more","Knowledge base",{"_uid":130,"link":131,"name":133,"subItems":134,"component":49},"eaef6de5-12a1-40f0-8bcf-3e00472ef87e",{"id":19,"url":132,"linktype":45,"fieldtype":46,"cached_url":132},"/contact","Contact",[],[136],{"_uid":137,"link":138,"boldText":19,"component":140,"normalText":19},"d23b7c9c-c50d-4704-a330-c5d89f673a95",{"id":19,"url":19,"linktype":139,"fieldtype":46,"cached_url":19},"story","banner-blok",[142],{"_uid":143,"logo":144,"columns":145,"socials":167,"footnote":168,"component":169,"newsletter":170},"6bbe2605-0003-4e0f-9c83-f57387d6b9dc",{"id":18,"alt":19,"filename":20,"fieldtype":21},[146],{"_uid":147,"links":148,"title":165,"component":166},"bb943e00-cbd9-44d3-9ca8-e287f92f9a4c",[149,155,160],{"_uid":150,"link":151,"name":153,"component":154},"fa11f2ce-87a4-40b7-8c26-2248948ecdab",{"id":19,"url":152,"linktype":45,"fieldtype":46,"cached_url":152},"/legal/privacy-policy","Privacy policy","website-footer-link",{"_uid":156,"link":157,"name":159,"component":154},"29ce4cf1-4ae3-4c03-a924-1b7283a52cea",{"id":19,"url":158,"linktype":45,"fieldtype":46,"cached_url":158},"/legal/witcloud-terms-of-use","WitCloud - terms of use",{"_uid":161,"link":162,"name":164,"component":154},"7b2b71ce-9047-493a-ae9a-24f33d13b228",{"id":19,"url":163,"linktype":45,"fieldtype":46,"cached_url":163},"/legal/witcloud-privacy-policy","WitCloud - privacy policy","Legal","website-footer-column",[]," ©2025 Witbee sp. z o. o. All rights reserved.","website-footer",[],"layout-blok",[],"layout",null,30,[177],"Global","961eba08-4135-4b80-aba4-032c02789c49","2024-07-12T13:10:50.158Z","default",[],1787317286,[],[],{"age":186,"cache-control":187,"connection":188,"content-encoding":189,"content-type":190,"date":191,"etag":192,"referrer-policy":193,"sb-be-version":194,"server":195,"transfer-encoding":196,"vary":197,"via":198,"x-amz-cf-id":199,"x-amz-cf-pop":200,"x-cache":201,"x-content-type-options":202,"x-frame-options":203,"x-permitted-cross-domain-policies":30,"x-request-id":204,"x-runtime":205,"x-xss-protection":206},"671","max-age=0, public, s-maxage=604800, stale-if-error=3600","keep-alive","gzip","application/json; charset=utf-8","Fri, 21 Aug 2026 13:20:16 GMT","W/\"51b8f81b929808e39c308ef90f168d6b\"","strict-origin-when-cross-origin","5.946.1","nginx/1.29.1","chunked","Origin,Accept-Encoding","1.1 098d6395a0558ff140166a3bcc78ccbe.cloudfront.net (CloudFront)","8LGyqy-YUyo894_TSrQyTHpKMTx3DM7bPVBYSuNgYvujeQSIKyU-Jw==","WAW51-P2","Hit from cloudfront","nosniff","SAMEORIGIN","6d4eb495-190d-4e8b-871a-b4b70ab34dff","0.033768","0",{"data":208,"headers":244},{"story":209,"cv":182,"rels":242,"links":243},{"name":109,"created_at":210,"published_at":211,"updated_at":212,"id":213,"uuid":214,"content":215,"slug":223,"full_slug":235,"sort_by_date":174,"position":236,"tag_list":237,"is_startpage":39,"parent_id":238,"meta_data":174,"group_id":239,"first_published_at":240,"release_id":174,"lang":180,"path":174,"alternates":241,"default_full_slug":174,"translated_slugs":174},"2026-06-25T07:32:33.729Z","2026-08-21T07:34:24.761Z","2026-08-21T07:34:24.772Z",191214197696419,"4bd62661-a830-47f9-8e07-2351fa9220fb",{"_uid":216,"body":217,"component":227,"meta_tags":228,"meta_title":234},"ccf19e07-bc8b-4f6d-b55f-16553fc2716f",[218],{"_uid":219,"sort":220,"header":221,"source":222,"eyebrow":109,"component":224,"description":225,"displayMode":226,"moduleBackground":19},"d4e5f6a7-b8c9-0123-defa-234567890123","priority","AI-Ready Data Framework",[223],"framework","content-list-blok","Discover our approach to building analytical foundations that unlock the full potential of AI in e-commerce.","list","landing-page",[229],{"_uid":230,"name":231,"content":232,"component":233},"framework-index-meta-description","description","Our approach to building the analytical foundations that unlock the full potential of AI in e-commerce.","meta-tag","AI-Ready Data Framework for e-commerce | Witbee","content/framework/",-120,[],191214118803361,"d7ad0bd9-a0eb-4f3e-8dd9-84e0f8942b78","2026-06-25T08:35:41.216Z",[],[],[],{"age":245,"cache-control":187,"connection":188,"content-encoding":189,"content-type":190,"date":246,"etag":247,"referrer-policy":193,"sb-be-version":194,"server":195,"transfer-encoding":196,"vary":197,"via":198,"x-amz-cf-id":248,"x-amz-cf-pop":200,"x-cache":201,"x-content-type-options":202,"x-frame-options":203,"x-permitted-cross-domain-policies":30,"x-request-id":249,"x-runtime":250,"x-xss-protection":206},"668","Fri, 21 Aug 2026 13:20:19 GMT","W/\"c7ca95d4bf5e809d60c6888d8021a80e\"","bYatoqTMYpWrKOnl1D9KidVQR2rw6yafJvOOXBXo0u1J6k5qJmbopQ==","96d20fa9-ae46-4729-9748-e31bb3de69ba","0.032189",[252,277,321,358,395,431],{"name":253,"created_at":254,"published_at":255,"updated_at":256,"id":257,"uuid":258,"content":259,"slug":271,"full_slug":272,"sort_by_date":174,"position":273,"tag_list":274,"is_startpage":32,"parent_id":238,"meta_data":174,"group_id":275,"first_published_at":255,"release_id":174,"lang":180,"path":174,"alternates":276,"default_full_slug":174,"translated_slugs":174},"AI Assistant in Business","2026-06-25T07:32:56.459Z","2026-08-21T07:00:41.845Z","2026-08-21T10:35:49.198Z",191214290814892,"7ca93d10-0cda-498b-adae-b95b32c15503",{"_uid":260,"title":253,"content":19,"eyebrow":19,"showTOC":39,"category":19,"priority":261,"readTime":19,"subtitle":262,"component":263,"heroImage":264,"meta_tags":268,"meta_title":19,"heroButtons":269,"updatedDate":19,"bottomBlocks":270},"b28c4bcc-cb27-42e1-bd04-d85e3805d44e","6","Put AI to work on your data — automate analysis, surface insights, and act faster.","content-page",{"id":265,"alt":19,"name":19,"focus":19,"title":19,"source":19,"filename":266,"copyright":19,"fieldtype":21,"meta_data":267,"is_external_url":32},191285268950631,"https://a.storyblok.com/f/296300/900x600/63c278d1b3/18-ai-assistant-dark.png",{},[],[],[],"ai-assistant-in-business","content/framework/ai-assistant-in-business",-110,[],"e542adf0-91f1-4bab-87ae-0551d93d8942",[],{"name":278,"created_at":279,"published_at":255,"updated_at":280,"id":281,"uuid":282,"content":283,"slug":315,"full_slug":316,"sort_by_date":174,"position":317,"tag_list":318,"is_startpage":32,"parent_id":238,"meta_data":174,"group_id":319,"first_published_at":255,"release_id":174,"lang":180,"path":174,"alternates":320,"default_full_slug":174,"translated_slugs":174},"Product Perspective","2026-06-25T07:32:53.996Z","2026-08-21T07:00:44.263Z",191214280722347,"7371a7d3-6a01-4fb1-a591-79dfa4bc3d28",{"_uid":284,"title":278,"content":285,"eyebrow":109,"showTOC":39,"category":19,"priority":286,"readTime":287,"subtitle":288,"component":263,"heroImage":289,"meta_tags":293,"meta_title":311,"heroButtons":312,"updatedDate":313,"bottomBlocks":314},"0a259426-0bb2-4a0c-a483-6e3a7187289e","# You have two levers left: budget and segmentation. Both run on data that isn't in your feed [Budget & segmentation]\n\nOver the past few years, ad platforms have steadily taken control away from marketers. Performance Max — the campaign type where Google itself splits the budget across Search, YouTube, Gmail, and the Display Network — decides where to show up, who to show the ad to, and what bid to pay. Meta's Advantage+ works on the same principle. Manual bids are gone, manual network splits are gone, and to a large extent so is manual audience targeting and creative assembly.\n\nThis isn't a bad change. The algorithm bids faster and more consistently than a human ever could, and most of the manual optimizations from five years ago would just get in the way today.\n\nThe algorithm allocates money on its own: it decides how much to spend on which product, where, and at what time of day. Only two things constrain it — **how much it can spend in total** and **what it has to work with**. You set the first in the campaign. The second depends on what you tell it about your assortment — and most stores tell it almost nothing.\n\n# The challenge in short [The challenge]\n\nThe whole thing in five sentences, before we get into details.\n\n- The feed you send to Google and Meta describes your products exactly the way your competitors' feeds describe theirs. It contains no margin, no stock levels, no turnover, and no sales from outside your store.\n- You already have this data — it just sits in systems that don't talk to each other. All it takes is calculating it together and adding it to the feed as a supplemental file, without touching the original.\n- You write the result into labels: profitability, stock situation, product role, clearance status. These are what split your catalog into campaigns — and therefore decide where the money flows.\n- Labels need to be stable. Without that, products drift between campaigns every few days and the algorithm has nothing consistent to learn from.\n- After that it's a rhythm: on a fixed schedule, you check what's changed, what's at risk of running out, and where to shift budget.\n\nThe rest of the article is an expansion of these five points.\n\n# What this looks like today in almost every store [What it looks like today]\n\nThe path is basically the same everywhere. The store runs on some platform — Shopify, Magento, PrestaShop, WooCommerce. A plugin or a simple export generates a **product feed** from it: a file listing every product, built to Google's specification. Inside: ID, name, price, availability, category, brand, and image. The file goes to **Merchant Center**, Google's product catalog, and campaigns are fed from there. The same file, usually unchanged, goes to Meta in parallel.\n\nAnd it all works. The feed passes validation, products show up, campaigns bring in sales. No one feels like anything is missing, because nothing is broken.\n\nThe thing is, this file describes your products exactly the way any other store in your category would describe theirs. Name, price, availability, image — your competitors send Google a file built from the same spec, the same fields. It doesn't contain a single piece of information about what you actually make money on, what's about to run out, what brings in customers who come back, or what sells brilliantly outside your store.\n\nThe second version of the same path looks like this: you take that exact same feed and add a second layer on top of it along the way. You're not buying new data for this — you're assembling it from data you already have, just scattered across systems that don't talk to each other. Calculated together and appended as a supplemental file, they change exactly one thing: how much the algorithm knows about your products. The original feed stays untouched.\n\n![Two paths for the same product feed](https://a.storyblok.com/f/296300/1d7245c14f/product-perspective-01-dwie-sciezki-feeda.png)\n*Two paths for the same product feed*\n\nThis whole article is about that second layer: where it comes from, exactly what to put in it, and how to use it day to day.\n\n# The feed became a control panel, not just a catalog [The feed as control]\n\nIn product campaigns, you don't bid on keywords — there's nothing to set. The role that campaign structure used to play is now taken over by how you split the catalog. It's the feed that decides what the algorithm can even group together, and therefore what you can actually control with budget. **This is where your two levers come back: money and assortment.** One doesn't work without the other — a budget without a catalog split is just one big pile the system draws from however it likes.\n\nGoogle lets you split the catalog within a campaign by category, product type, ID, brand, condition, and channel. Any other split — that is, anything that comes from your business rather than from the product description — requires **custom labels**. These are simply extra columns in the feed where you enter your own value: \"high margin\", \"clearance\", \"new arrival\". In the campaign, you can then use them to build a separate product group or a separate campaign with its own budget. You get five such columns, you can put whatever you want in them, they're visible only in your own ad account, and you can change them whenever you like.\n\nFive fields. In most stores, two of them are filled in, statically, and no one has touched them in two years — usually \"season\" and \"clearance\".\n\nThat's your entire control panel in a world where everything else happens automatically.\n\n# What the ad platform knows, and what it can never calculate [What the platform doesn't know]\n\nThere's a common oversimplification that platforms \"know nothing about products.\" That's not true. They know quite a lot: impressions, clicks, sales, and cost at the level of a single product, often even a single variant — a specific model in a specific size and color. They're good at this.\n\nWhat they don't know is your business:\n\n| What the platform sees | What your business knows |\n| --- | --- |\n| in stock | 3 units left, 6 days of coverage at the current pace |\n| in stock, conversions look fine | only sizes XS and XXL are left — the customer clicks, doesn't find their size, and buys something else |\n| price: $89 | margin after discounts and returns: 11% |\n| conversions are climbing | but this product is a one-time purchase and the customer doesn't come back |\n| conversions are low | but after this product, customers most often come back for a second purchase |\n| conversions are weak | the same product is a bestseller on the marketplace |\n| no data — the product never got a budget | it's been selling steadily on the marketplace for six months and has never once been advertised |\n| no signal | 20% of the entire business's revenue — store, marketplaces, and in-person sales combined — rests on this one SKU |\n\nYou can't just see the right-hand column. You have to calculate it — by joining data that today sits in several different places — and then hand it to the ad platforms in the only form they'll accept: a label.\n\nSales from outside the store deserve their own callout. Google and Meta only see what happens on your website, so they pile budget onto products that are already converting there. They have no way of knowing that a mediocre performer in your store is actually a bestseller on a marketplace like Amazon — and that's usually the strongest signal you have that a product is worth testing in ads. Without this information, the automation keeps consistently scaling what already works, and never reaches for the assortment your business has known for ages actually sells.\n\nThe worst part is that the same mechanism works on your side too. A product never makes it onto the list of things worth featuring in a campaign, because it never showed good results there — and it never showed good results because it never got a budget. Meanwhile, it's been selling steadily somewhere else for six months. The way out of this loop won't come from the ad account, because as far as the ad account is concerned, this product barely exists.\n\n![Store and marketplace sales compared against ad spend](https://a.storyblok.com/f/296300/265bb086d7/product-perspective-02-sprzedaz-sklep-marketplace.png)\n*Store and marketplace sales compared against ad spend*\n\nSince this information lives neither in the feed nor in the ad account, the question is where the system is supposed to get it from. Here's the full list of sources — none of them will send anything to Google on their own.\n\n**Where this data comes from**\n\n- **CRM or ERP** — the system where you keep orders, stock, and purchase prices — stock levels and variants, your own attributes, margins, and sales from your store and from other channels, including marketplaces and in-person sales.\n- **GA4**, i.e., Google Analytics — traffic to the product page, user behavior, sales effectiveness, revenue broken down by channel.\n- **Google Ads** — impressions, clicks, cost, and sales at the level of a single product.\n- **Meta Ads** — the same thing, product by product.\n- **Merchant Center**, Google's product catalog — free listing visibility, product disapprovals, and price position. That last one is an underrated source: if your product has an EAN or GTIN also used by other sellers, Google can compare your price to the market and tell you whether you're clearly cheaper, comparable, or clearly more expensive. Reading this daily turns it from a curiosity into a signal.\n\nOne methodological decision here matters more than all the integrations combined: **revenue has to be calculated from a single source.** Google reports its own sales value, Meta reports its own, each counts things its own way, and each takes credit for the same orders. Add them up and you get a number that doesn't exist in your P&L — and as long as every channel is graded on its own yardstick, comparing them to each other doesn't mean anything.\n\n# Five dimensions for evaluating a product [Five evaluation dimensions]\n\nA proper evaluation means looking from five angles at once:\n\n- **Performance** — traffic, conversion, and ROAS, i.e., revenue per unit spent advertising this product, measured against its own category, not the whole catalog.\n- **Stock** — not \"in stock,\" but how many units, in which variants, and for how many days.\n- **Turnover** — how fast it's moving, whether it's speeding up or slowing down, and how long it's been sitting.\n- **Business impact** — margin, share of revenue, how much the overall result depends on this one SKU.\n- **Strategic role** — whether it's an entry-level product, a seasonal one, an image product, or one that sells modestly on its own but pulls the rest of the cart along with it.\n\nThis last dimension is the one most often skipped — and it can be the most expensive to ignore, which is why it gets its own section right below.\n\n![The five product evaluation dimensions, written as questions](https://a.storyblok.com/f/296300/f7d3d2777c/product-perspective-03-piec-wymiarow-oceny.png)\n*The five product evaluation dimensions, written as questions*\n\n# Products whose value lies outside their own numbers [Value beyond the numbers]\n\nThe ad platform judges a product by its own sales. That's convenient, and it's enough most of the time — but there are three situations where this kind of scoring systematically undervalues a product, and usually it's exactly the products you care about most.\n\n**The cart-puller.** It sells modestly on its own, drives plenty of traffic, and converts poorly — but the orders it appears in are noticeably larger than average. The customer lands on its page, ends up buying something else, and the conversion gets credited to whatever actually landed in the cart. In the campaign report, this product looks like a candidate to cut.\n\n**The gateway product — the one customers come back after.** The first purchase has average value, but people who started with this product come back for a second order far more often than everyone else. No attribution window catches this, because the second purchase arrives weeks later, often through a different channel, with no visible link to the original campaign. This information is produced on the customer-analysis side, and only from there can it flow back into the catalog as a label. More on this in a separate article on working with your customer base.\n\n**Acquisition product vs. repeat-purchase product.** This distinction is even more practical, because it leads straight to a campaign split. Part of your assortment is great for attracting someone who doesn't know the brand yet: low barrier to entry, a simple choice, a price that makes the decision easy. A completely different set works when you want to talk someone who has already bought from you into a second or third order — because here it's brand trust doing the work, not a price incentive.\n\nIf both pools sit in the same campaign, you're grading them against the same threshold even though they're doing completely different jobs. An acquisition product can have a lower return and still be the best investment in the catalog, as long as it brings in customers who stick around. A repeat-purchase product makes no sense in a reach campaign, because it's shown to people who have no reason to want it yet.\n\nThe conclusion is the same in all three cases: **a product has to be judged by the role it plays, not just by its own numbers.** Role is another dimension you can calculate and send to the ad platforms as a label — and without it, the algorithm keeps consistently cutting budget exactly where it should be increasing it.\n\n![A product's own sales vs. the sales it pulls along with it](https://a.storyblok.com/f/296300/add42187ef/product-perspective-04-wlasna-sprzedaz-koszyk.png)\n*A product's own sales vs. the sales it pulls along with it*\n\n# STEP 1: build the labels layer [Step 1: labels]\n\nYou have five columns for your own labels and complete freedom in what you put there; Meta builds product sets from those same fields.\n\nFive columns sounds like very little if you think of them as the place where all your catalog knowledge has to fit. That's exactly the wrong way to think about them. **On the analysis side, there are as many dimensions as you need** — performance rating, stock situation, channel structure, clearance status, cart role, plus operational flags like \"new arrival in test phase\" or \"blocked by manager decision.\" The five feed fields aren't that whole set — they're the window through which selected conclusions go out to the ad platforms.\n\nWhat goes out to the ad platforms is however much fits and however much you actually need to steer budget. The rest stays on the analysis side and is used for making decisions, not for targeting.\n\nAn example split of what's worth pushing out:\n\n| Dimension | What it's for | Example values |\n| --- | --- | --- |\n| Performance | main budget split | core performer, scale up, in test, watch list, paused |\n| Stock situation | protects against spending on stock that's about to run out | long coverage, a couple weeks of coverage, a few days of coverage, out of stock |\n| Channel structure | where the product actually sells | paid-dominant, organic-dominant, marketplace-dominant, evenly spread |\n| Clearance status | separates normal sales from liquidation | normal, watch list, clearance |\n| Season or campaign | a field for the team to override manually | depends on the calendar |\n\nThe first four fill in automatically and change along with the data. The last one stays open for the team — for seasons, holidays, and promotions that no algorithm will predict.\n\nThis is a starting point, not a canon. Depending on your catalog, other dimensions can matter more, and it's worth considering giving one of the five fields to:\n\n- **Price band** — a classic that works almost everywhere. A $12 product and a $220 product have a different purchase path, a different decision time, and a different reasonable acquisition cost — and dumped into one campaign, they get graded against a shared threshold that's wrong for both of them.\n- **Price position vs. the competition** — whether you're clearly cheaper, comparable, or clearly pricier than the market on this product. Where you're cheaper, it's worth pushing harder, because the advantage will do its work anyway. Where you're clearly pricier, a weak campaign result isn't a campaign problem, and throwing more budget at it won't fix it.\n- **Product role** — whether it mainly sells itself, pulls the cart along, or is a gateway customers come back through. This is also where you separate acquisition products from repeat-purchase ones — and that split almost always ends up as two separate campaigns with two separate thresholds.\n- **Supplier or private label** — if margins between suppliers differ enough to justify separate budgets.\n\n![Share of ad spend by price position, with average ROAS](https://a.storyblok.com/f/296300/62cd321cdc/product-perspective-05-udzial-wydatkow-roas.png)\n*Share of ad spend by price position, with average ROAS*\n\n**This isn't a one-time setup.** Labels get designed, watched, and corrected: you analyze how products behave in each group, check whether the split is actually separating what it was meant to separate, and move the thresholds. A catalog looks different after a year than it did at the start, so the definitions have to keep up.\n\nAt this stage, the most useful thing is being able to just ask the question directly: where does a sensible margin line fall in this catalog, how many products land on each side of the threshold, and how would that change budget distribution. Instead of clicking through a dozen views, you ask the question and get an answer along with the reasoning behind it.\n\n**The thresholds are yours, not ours.** What margin makes a product profitable, how many days of coverage counts as a risk, what \"slow turnover\" means — in seasonal fashion these lines look different than in household chemicals or electronics. The first setup is built around your catalog and delivery cycle, then corrected based on what actually happens.\n\nOne thing worth remembering from the start, because it has direct budget consequences. You used to be able to set a separate cost-per-click for each product group. With automated bid strategies — where you give the system a goal and it bids on its own — there are no bids to set anymore, so splitting into groups inside a single campaign gets you, at best, a nicer-looking report. If you actually want to control money, each group needs to land in **its own campaign with its own budget**.\n\n![The analytics layer and the five label fields in the feed](https://a.storyblok.com/f/296300/21b23cc8f8/product-perspective-06-warstwa-analityczna-etykiety.png)\n*The analytics layer and the five label fields in the feed*\n\n# STEP 2: watch the changes, not just the snapshots [Step 2: changes]\n\nThe catalog split by itself is just a snapshot from one day. The real value starts where you can see **movement between groups** — exactly the way customer analysis looks at people moving from new to returning, not just at how many new customers you have today.\n\nIt looks like this. A product that's only been in testing for the past few weeks starts delivering sales and should get a bigger budget. Another one, previously a core performer, is weakening and no longer deserves priority. A third disappears from ads entirely because it's run out of stock.\n\nEvery such change has its own reason and its own moment, and it's worth having both recorded — together with the numbers that applied at the time. That way the question \"why is this product in this campaign now\" has an answer, not a guess.\n\nThis changes the nature of the morning review. Instead of reading through the entire catalog from scratch, you look at a list of changes from the past week: what moved up, what moved down, what disappeared, and why. Or you simply ask, in one sentence, and get a summary instead of a table to scroll through. Across a few thousand SKUs, that's the difference between a report you skim and a report you actually read.\n\n![Product group changes over the past month and the sales behind them](https://a.storyblok.com/f/296300/6a263912ff/product-perspective-07-zmiany-grup-produktowych.png)\n*Product group changes over the past month and the sales behind them*\n\n**A label can't flip-flop**\n\nThere's a trap here that's easy to trip over during a first rollout. If a label recalculates every day and can change every day, a product starts drifting between campaigns day to day — bestseller today, watch list tomorrow, back again the day after. For you, that's chaos. For the algorithm, which needs data continuity to learn anything at all, it's sabotage.\n\nThat's why a label change can't happen instantly. The condition needs to hold for a set period — a different one for moving up than for moving down, since it should be easier to earn a promotion than to lose one, because a single bad week shouldn't erase a good quarter. The exception is running out of stock, which takes effect immediately, since there's nothing to wait and see there.\n\nThe second rule is about people. When a manager deliberately makes a decision against what the automation says, that decision has to be protected for some period — otherwise the next day's recalculation overwrites it and no one understands why. Automation only takes back over after that period.\n\nThese two rules look like a technical detail, but they decide whether the rollout survives at all. Without them, the first month looks great and the third ends with someone saying \"this keeps flipping anyway, let's just go back to doing it manually.\"\n\n![The same label recalculated daily vs. with a required confirmation period](https://a.storyblok.com/f/296300/6c9210bf68/product-perspective-08-etykieta-okres-potwierdzenia.png)\n*The same label recalculated daily vs. with a required confirmation period*\n\n# STEP 3: manage for profitability, not revenue [Step 3: profitability]\n\nThe automation is graded on revenue, because that's the only value you hand it. The effect can look like this:\n\n- Product A: ROAS 8, margin 12%. Out of $100 in revenue, $12 is margin, against $12.50 in media cost. Result: a loss.\n- Product B: ROAS 3, margin 55%. Out of $100 in revenue, $55 is margin, against $33 in media cost. Result: $22 in profit.\n\nIn the campaign report, the first product looks almost three times better. In the P&L, it's the only one losing money.\n\n**You are not sending your margin to Google.** This worry stalls a lot of rollouts before they even start, so let's settle it right away. What goes into the feed is a bucket, not a number: \"high\", \"medium\", \"low\". The actual figures, purchase prices, and supplier agreements stay on your side, in your own Google Cloud. The ad platform only gets told that this group of products is worth defending harder than that one — with no visibility into why.\n\nIt's worth checking one more thing while you're at it, because it can shift the whole calculation. A store usually reports sales gross, while media costs are net. So before you even get to margin, returns, and logistics costs, the ROAS shown in the dashboard is already inflated by the tax rate. At a 20% VAT rate, a dashboard ROAS of 5.0 is actually a little over 4.0 on comparable terms — and that's often the difference between a campaign that holds up and one that doesn't.\n\nOnce margin information sits in a label, this stops being a theoretical problem. High-margin products land in campaigns with a bigger budget and a more relaxed return requirement — you can afford to pay more for them. Products you're losing money on land in campaigns with a threshold tight enough that the system cuts their spend on its own, or they disappear from ads until the price changes.\n\n**10% of your products probably account for most of your revenue — but not for anywhere near the same share of margin.** The more these two rankings diverge, the more budget the automation steers toward what looks like a win in the report but isn't one in the P&L.\n\nSetting profitability thresholds is, in fact, a classic question that's better answered by a conversation with your data than by a spreadsheet: how much would you lose if you cut everything below a certain margin, and whether you'd accidentally be cutting cart-pulling products along with it.\n\nIt's worth comparing every product against its own category average, not against the whole catalog's average. A ROAS of 4 in electronics, where margins are thin and prices are high, means something completely different than the same ROAS in accessories. A shared threshold across both categories moves budget in the wrong direction — while still looking like a data-driven decision.\n\n![The same products ranked by revenue vs. by profit](https://a.storyblok.com/f/296300/196a29b0f3/product-perspective-09-produkty-przychod-zysk.png)\n*The same products ranked by revenue vs. by profit*\n\n# STEP 4: treat stock as a signal [Step 4: stock]\n\nA scenario everyone who runs product campaigns knows. On Monday, ROAS is on target, revenue is growing, everything looks fine. On Tuesday, ROAS collapses, revenue drops, and everyone starts hunting for the cause in the campaigns, in the auction, in seasonality. The cause is in the warehouse: a product responsible for a big chunk of sales has run out.\n\nBy that day, there was nothing left to do. But it could have been seen two weeks earlier.\n\nThe feed knows two states: in stock and out of stock. To manage budget, you need four answers.\n\n**How much is left and for how long.** Not \"in stock,\" but coverage in days at the current sales pace. A product with eight days of stock left, while it's simultaneously pulling in a growing budget, is a situation that calls for a decision — pull back, speed up the next delivery, or deliberately sell through the remaining stock.\n\n**How much this product means for the result.** Coverage on its own says nothing until you know how much money flows through this product: how much you spend on it, how much you make on it, and what share of revenue it holds. Only together do they answer the question that actually matters — **what happens to the result when it runs out.** Knowing this two weeks ahead turns the conversation from explaining away a bad result into planning. The question \"what happens to the result if these three products run out next week\" is, in fact, exactly the kind of question you'll get answered faster in a conversation with your data than by digging through a report.\n\n**That a product dropped out of the feed.** Stock ran out, the listing vanished from ads, and no one noticed for a week, because nothing broke — it just stopped existing.\n\n**That a product is only nominally in stock.** The trickiest case, because it doesn't look like a failure. The model still shows \"in stock,\" but only the lowest-selling sizes are left. The system sees availability and keeps promoting it — the ad still collects clicks, and some of those clickers buy something anyway, just a different product. The conversion gets credited to whatever they actually clicked into, so nothing flashes red in the report. You're paying for traffic to a listing you can't actually sell, and the algorithm has no way of learning that something's wrong. We call this variant erosion, and in stores that sell by size it's one of the more common hidden causes behind declining results.\n\nOne important thing a stock label should **not** do: automatically cut a product from the campaign. Low coverage is information for a human, not a verdict — sometimes you actually want to sell through the last units, and sometimes the next delivery arrives Friday. Only what's physically out of stock drops out of ads automatically. Everything else is an alert and a decision.\n\n![Ad spend and remaining stock for four products](https://a.storyblok.com/f/296300/7b992b53e2/product-perspective-10-wydatki-zapas-cztery-produkty.png)\n*Ad spend and remaining stock for four products*\n\n![One product's disappearing sizes while its budget stays unchanged](https://a.storyblok.com/f/296300/dc13bf11f5/product-perspective-11-znikajace-rozmiary.png)\n*One product's disappearing sizes while its budget stays unchanged*\n\n# STEP 5: give new arrivals their own budget [Step 5: new arrivals]\n\nA product with no history can't be judged by any of the five dimensions. Dropped into a shared campaign, it loses to listings that already have data — the automation has something to choose from, and it chooses what already works. A new collection starts from a worse position every single time.\n\nThis is exactly the case where your only real lever — budget — has to be used deliberately. A new arrival needs its own campaign, its own pool of money, and a window in which the normal evaluation rules are suspended — because judging a product with no data against the usual thresholds ends with it getting shut off before it can show anything. You also need an exit threshold set in advance: after how much time and what result the product gets its target label.\n\nThe same bucket includes products that aren't new to your business, just new to advertising: they're selling on marketplaces or in a physical store, but campaigns have never given them a budget. They have a sales history — it's just recorded somewhere the ad platform never looks. From a testing standpoint, these are the best candidates in the whole catalog, because the risk is lower than with a genuine new arrival — someone has already proven this product gets bought.\n\n![A new product's test window and its three possible outcomes](https://a.storyblok.com/f/296300/b06c667ee5/product-perspective-12-okno-testowe-nowosci.png)\n*A new product's test window and its three possible outcomes*\n\n# The second lever: audience segmentation [Audience segmentation]\n\nThe same mechanism works on the people side. The automation decides on its own who to show the ad to, but only within whatever you give it — and you're the one who builds the audience lists.\n\nThis is where the two analyses meet. Which products customers come back for a second purchase after comes out of customer lifecycle analysis and flows back into the catalog as a label. And the other way around: customer segments feed exclusion lists and lookalike audiences. The catalog and the customer base are two sides of the same segmentation, not two separate projects.\n\nMore on this in a separate article on working with your customer base.\n\n# What this is built from [What it's built from]\n\nEverything above is a way of working — but someone has to keep it running. That's what WitCloud does: the platform we deploy on your own data. Data from your CRM, GA4, Google Ads, Meta Ads, and Merchant Center flows into a single set of product tables that recalculates every day. You don't have to build or wire any of it together yourself.\n\nThree things run on this same foundation:\n\n- **Reports and analysis** answer the question of what's happening and why. Profitability, turnover, stock coverage, variant erosion, movement between groups, new-arrival performance.\n- **Label export** answers the question of how to put it into action. The conclusions come back as supplemental files — extra sheets that add columns to your existing feed without touching the original. They feed custom labels in Google and product sets in Meta.\n- **WitCloud MCP** is the conversational layer on top of the data. You ask in plain language and get conclusions and recommendations in the context of your industry.\n\n**The key consequence: you define a label once.** \"Product at risk of running out\" means the same thing in the report, in Google, and in Meta. There aren't three different definitions of \"bestseller\" across three tools, and no manually-set labels that go stale within a week.\n\nThe module also works when you don't have the full set of sources. Without a CRM you can't calculate margin or stock coverage, but performance evaluation and budget splitting still work normally — missing data means a narrower range of labels, not no rollout at all.\n\n![From a chat question to labels in the ad platforms](https://a.storyblok.com/f/296300/b71b13935d/product-perspective-13-od-pytania-do-etykiet.png)\n*From a chat question to labels in the ad platforms*\n\n# How this differs from Merchant Center rules [Merchant Center rules]\n\nThe most obvious objection is: I already have rules and custom labels. Four differences:\n\n**Rules can only see what's already in the feed.** They can't calculate margin, media cost, marketplace sales, or repeat-purchase behavior, because that data isn't in the feed and never will be.\n\n**A manual label goes stale within a week.** A product tagged \"bestseller\" on Monday can be out of stock ten days later. The label stays.\n\n**A rule has no memory.** It doesn't know a product has only been in this group for three days and drops out of it after one bad weekend. It can't tell a lasting change apart from a blip.\n\n**No one measures it after rollout.** The label split gets built once, as part of some project, and no one ever comes back to ask whether it changed anything.\n\n![Merchant Center rules vs. labels calculated from data](https://a.storyblok.com/f/296300/ddf1d2e7bf/product-perspective-14-reguly-merchant-center.png)\n*Merchant Center rules vs. labels calculated from data*\n\n# This is a process, not a one-off project [A process, not a project]\n\nA catalog moves faster than a customer base. Stock changes daily, a season shift can flip turnover within a few weeks, and a new collection can turn the whole ranking upside down. A product evaluation done once stays current for a shorter time than almost anything else you calculate in the business.\n\nThe work splits into three layers, and only the first one happens without your involvement.\n\n![How the work splits between the system, the marketing team, and your decisions](https://a.storyblok.com/f/296300/99f73cd334/product-perspective-15-podzial-pracy.png)\n*How the work splits between the system, the marketing team, and your decisions*\n\n1. Data and labels — the system does it\n\nSales, stock, variants, margins, and media costs flow in daily and join up on their own. Labels recalculate from scratch, but only change once the change is lasting. Every change gets recorded with a reason and the numbers that applied at that moment. Supplemental files are ready in their current version, with no manual spreadsheet assembly.\n\n2. Campaigns — the marketing team does it\n\nA label doesn't sell anything by itself. Someone has to build structure on top of it:\n\n- **In Google Ads and Meta Ads:** splitting campaigns by label and assigning them separate budgets, different performance goals for different profitability tiers, separate campaigns for clearance and for new arrivals.\n- **In creative and on product pages:** a different message for clearing out aging stock, a different one for a new arrival with no history, a different one for a product whose job is to pull up the cart rather than maximize its own sales.\n\nThis is real work, and it's heaviest at the start: the first few weeks are spent rebuilding campaign structure around the labels. After that, it's adjustments, not building from scratch.\n\nYou don't need a new department for this, but you do need clearly assigned ownership — these campaigns have to be someone's actual scope, not a side task done in passing. Who that is depends on how your marketing is set up: your own team, or the agency that already runs your campaigns.\n\n3. Decisions — they're yours\n\nWhat margin makes a product worth a budget, when to mark down aging stock instead of advertising it, whether to pull back a campaign at low coverage, how much money to put into testing new arrivals, where to move the thresholds after the first quarter. These are business decisions, not calculations.\n\nMCP takes you as far as it possibly can: it gives you the numbers, points out what follows from them, and frames recommendations in the context of your industry. The last step stays on your side. If you want someone to talk it through with, we step in as advisors.\n\n**Rhythm: a fixed point on the calendar**\n\nYou need one fixed slot where three people sit down together: someone from product campaigns, someone from buying or assortment management, and someone who decides on prices and markdowns. How often depends on how fast your catalog turns over; with fast turnover and strong seasonality, more often makes more sense. What matters more than frequency is that the slot is fixed.\n\nFive questions for every check-in:\n\n1. What's changed since last time — what moved up, what moved down, what disappeared?\n2. Which products are at risk of running out, and what will the impact on results be if they do?\n3. Where are variants eroding, and which campaigns are already feeling it?\n4. How did new arrivals from the last test window perform?\n5. Which thresholds need correcting, and are budgets still sitting where they should be?\n\nNo materials need preparing, because the reports are already there, and you pull the answers from MCP during the meeting itself.\n\n**In this process, we're your advisor, not your executor.** We work on three things: setting up labels and thresholds for your catalog, analyzing what the numbers mean, and running the rhythm in which you measure results and pick the next move. The campaigns stay yours — we're responsible for making sure they know what they're promoting and why.\n\n![The product view you come back to every week](https://a.storyblok.com/f/296300/64a4fb5924/product-perspective-16-widok-produktowy.png)\n*The product view you come back to every week*\n\n# Where to start [Where to start]\n\nYou need traffic data from GA4 and cost data from Google Ads and Meta Ads — that's the minimum needed for performance evaluation and budget splitting. Stock, variant, and margin data from a CRM or ERP unlocks the entire stock and profitability layer. The rest is configuring thresholds for your catalog and delivery cycle.\n\nOn the team side: clearly assigned ownership of product campaigns, and one regular check-in.\n\n# Summary [Summary]\n\nThe more ad platforms do on their own, the more what you feed them matters. Bidding, targeting, and creative selection are already out of your hands — what's left is budget and segmentation.\n\nThe feed answers the question of what you're selling. The label layer answers the question of what's worth selling, to whom, and for how much longer you can keep doing it — and then carries that answer to wherever you spend your money.\n\n::content-cta\n---\neyebrow: Free trial\nheading: See your catalog as a budget control panel — during your free trial.\ndescription: \"Let's talk: we'll show you the WitCloud module running on your own data — with labels, priorities, and profitability thresholds built around your catalog.\"\nbuttonText: Book a call\nbuttonHref: /contact\n---\n::\n","5","30 min read","See how your products perform, which drive growth, and which drag it down.",{"id":290,"alt":19,"name":19,"focus":19,"title":19,"source":19,"filename":291,"copyright":19,"fieldtype":21,"meta_data":292,"is_external_url":32},191285268971115,"https://a.storyblok.com/f/296300/900x600/0a227d486d/17-product-perspective-dark.png",{},[294,297,301,304,307],{"_uid":295,"name":231,"content":296,"component":233},"b2c10001-0000-4000-8000-000000000001","Turn your product feed into a budget control panel — see how profitability, stock, and product role should drive your ad spend, not just clicks.",{"_uid":298,"name":299,"content":300,"component":233},"b2c10001-0000-4000-8000-000000000002","og:title","Product Perspective — WitCloud",{"_uid":302,"name":303,"content":296,"component":233},"b2c10001-0000-4000-8000-000000000003","og:description",{"_uid":305,"name":306,"content":291,"component":233},"b2c10001-0000-4000-8000-000000000004","og:image",{"_uid":308,"name":309,"content":310,"component":233},"b2c10001-0000-4000-8000-000000000005","twitter:card","summary_large_image","Product Perspective — WitCloud Product Analysis",[],"2026-08-20 00:00",[],"product-perspective","content/framework/product-perspective",-90,[],"af59a5e0-7ba8-4c82-b164-b9569a233ab6",[],{"name":322,"created_at":323,"published_at":255,"updated_at":324,"id":325,"uuid":326,"content":327,"slug":352,"full_slug":353,"sort_by_date":174,"position":354,"tag_list":355,"is_startpage":32,"parent_id":238,"meta_data":174,"group_id":356,"first_published_at":255,"release_id":174,"lang":180,"path":174,"alternates":357,"default_full_slug":174,"translated_slugs":174},"Customer Perspective","2026-06-25T07:32:49.223Z","2026-08-21T07:00:44.049Z",191214261176233,"059f461a-adc2-48ae-915e-63a609a937fc",{"_uid":328,"title":322,"content":329,"eyebrow":109,"showTOC":39,"category":19,"priority":330,"readTime":19,"subtitle":331,"component":263,"heroImage":332,"meta_tags":336,"meta_title":349,"heroButtons":350,"updatedDate":19,"bottomBlocks":351},"940a2169-98e0-4e6c-b473-32687b00eac8","Advertising keeps getting more expensive. The same budget that brought in customers a year ago brings in fewer today, and each additional one costs more than the last. There are two natural reflexes, and both fail. You can pour more into the budget — but auctions get more crowded, so doubling spend doesn't double sales. You can pull back and focus on existing customers — but then the base stops growing, and the same problem returns in a few months, just with fewer customers. The way out is somewhere most stores don't look: what happens to a customer after their first purchase. That's the knowledge that tells you how much a new customer is actually worth — and therefore how much you can afford to pay to acquire one, so acquisition adds up again.\n\nWe show how to analyze buyer behavior and turn that knowledge into actions that increase revenue from existing customers and make acquiring new ones worthwhile again.\n\n![Share of customers vs. share of revenue, by number of orders placed](https://a.storyblok.com/f/296300/fddcd57b3c/customer-perspective-01-liczba-zamowien-przychod.png)\n*Share of customers vs. share of revenue, by number of orders placed*\n\nIn the store we ran this analysis on, 61% of customers bought exactly once, and together they account for 22% of revenue. Meanwhile, the 8% of customers with five or more orders bring in 44% of revenue — almost half. Your proportions will differ, but the shape usually repeats: the largest group contributes the least, and the smallest group drives the result.\n\n# Two levers you have to pull together [Two levers]\n\nWorking with your customer base isn't about giving up on advertising. The effect only comes from combining two things:\n\n- **Retention.** Precisely identify which customers need attention and how to help them buy more, more often.\n- **Acquisition.** Combine customer behavior data with traffic and ad cost data. That tells you which customers are worth acquiring and which products to attract them with, so you build high LTV from day one.\n\n# Starting point: see the customer, not just the transaction [Starting point]\n\nMost reports only answer one question: how much did we sell today? Working with the customer base requires deeper questions: who's actually buying from us, what happens to them after their first order, and how much are they worth to us over time?\n\nTo measure this, we build a customer lifecycle map from three signals: how recently the customer bought, how many times they've bought, and how much they're worth relative to their own average order value. That produces over a dozen precise segments, which group into five readable stages:\n\n- New\n- Returning\n- Loyal (split into standard and highest-value)\n- At risk of churning\n- Lost / won back\n\nThe thresholds are yours, not ours. How many days without a purchase means a customer is at risk? How many means they're lost? What value makes a customer your most valuable one? In fashion, these lines look completely different than in supplements or cosmetics. You set them all around your actual purchase cycle — and that's the difference between segmentation that describes your business and segmentation that forces someone else's template onto it.\n\n**The two transitions that matter most**\n\nCustomers are constantly moving between stages, but not every transition carries equal weight:\n\n- **From first to second purchase.** A one-time purchase can be a fluke. Only the second turns a buyer into a customer. Customers who never came back are usually the largest and most underrated group in the base.\n- **From returning to loyal.** This is where it gets decided whether a customer stays with you for years.\n\nEvery such move has a name and a size — from a customer promoted into your most valuable group, through a warning about rising churn risk, to a confirmed loss. Instead of asking whether you're losing customers, you see how many, from which segment, and in which direction.\n\n![What happened to each customer group over twelve months, as a share of the starting group](https://a.storyblok.com/f/296300/a719b942f2/customer-perspective-02-przeplywy-segmentow.png)\n*What happened to each customer group over twelve months, as a share of the starting group*\n\nLook at the \"New\" row: 21% churned within one comparison period. That's just above the level our analysis flags as critical — which is exactly why the first transition deserves the most attention.\n\nAs you analyze these movements, you start noticing real business problems. If customers leave en masse after buying a pricier product, the reason might be poor packaging or a lack of post-purchase support. You form a hypothesis, change the customer experience, and check live whether the return rate improved.\n\n# STEP 1: work with the customer you already have [Step 1: existing customers]\n\nOnce you know which customers to focus on, you translate that into automated actions in email and ads:\n\n- **A new customer who hasn't come back yet** — usually the largest group in the base, and therefore the biggest lever. The question isn't whether to reach out, but when and with what. From the data, you know how many days it typically takes customers in your store to place a second order — you set the sequence to land before that moment, not disconnected from it.\n- **Returning** — halfway to loyalty, and the best moment to check what separates those who kept going from those who stopped. The category of the second and third purchase usually says a lot.\n- **Loyal** — your most valuable group, and at the same time the easiest one to burn budget on, paying for sales that would have happened anyway. Excluding loyal customers from broad reach campaigns is a test worth running, not a dogma. Ad platforms learn from conversions, so the effect varies by account. A less controversial use of the same list: material for lookalike audiences.\n- **At risk of churning** — you react before they show up in a report as lost. What matters isn't just that a customer has been quiet for a few months, but how much they were worth.\n\nIt's worth pausing on the loyal-customer point, because it's counterintuitive. Among the channels that look most profitable in reports, part of the revenue comes from customers who would have bought anyway, without ads. Separating these two streams doesn't save anything by itself, but it shows you where it's even worth looking, and turns a discussion about cutting budget into a conversation about numbers.\n\nImportant: audience lists have to recalculate automatically. A static file uploaded to the ad manager stops telling the truth after two weeks — some people from the \"at risk\" list have already bought, and new ones have taken their place. It's also worth remembering platform realities: a segment under roughly 100 people usually won't form a working audience, and a lookalike audience needs a thousand or more.\n\n![From a chat question to an audience list that refreshes every day](https://a.storyblok.com/f/296300/c41e90b456/customer-perspective-03-czat-do-listy-odbiorcow.png)\n*From a chat question to an audience list that refreshes every day*\n\nThe division of labor here is clear: the conversation gives you the conclusion and the number, and the export module keeps the list current in the ad platforms. You configure the segment once, then it refreshes itself.\n\n# STEP 2: acquire better customers using data from your base [Step 2: acquisition]\n\nOnce you combine customer value data with cost and traffic-source data, you stop burning budget on one-time deal hunters. You acquire people who will naturally move onto the repeat-purchase path after their first transaction.\n\n**Evaluation horizon: count the whole cycle, not the first purchase**\n\nTake every customer you acquired in a given month and check how much they've spent with you since then. Part of the revenue came from the first order, part from later ones — and that second part grows with every additional month.\n\n![Revenue from a monthly acquisition cohort, split into first order and subsequent orders](https://a.storyblok.com/f/296300/8d6fdc78ba/customer-perspective-04-przychod-kohorta-miesieczna.png)\n*Revenue from a monthly acquisition cohort, split into first order and subsequent orders*\n\nIn cohorts acquired earlier, which had time to mature, about 35% of revenue shows up after the first order. The June and July cohorts show a lower share only because they're younger. The conclusion is simple: a campaign graded solely on the first purchase hides a third of its own result.\n\n**Assortment: products that attract the right people**\n\nA bestseller with a nice first-purchase ROAS is rarely the same product customers come back for. Looking at the base, you start distinguishing four completely different roles in the catalog:\n\n- **volume products** — attract lots of customers who don't come back afterward,\n- **gateway products** — attract fewer customers, but ones who stay with the brand longer,\n- **franchise products** — near the top of both first and repeat orders; they acquire and retain,\n- **deep-loyalty products** — only bought after many orders, the hallmark of your best customers.\n\nAcquisition budgets are worth pumping into the second and third categories. The fourth is material for a loyalty program, not a reach campaign.\n\n![Share of first orders vs. share of acquired loyal customers, by product](https://a.storyblok.com/f/296300/552c2e0625/customer-perspective-05-produkty-udzial-lojalni.png)\n*Share of first orders vs. share of acquired loyal customers, by product*\n\nWhen the blue bar is taller than the gray one, the product attracts customers who stick around. Product A has the largest volume and the weakest profile; Product E is the opposite. Keep scale in mind, though — a product responsible for 5% of first orders might simply be too small to build a campaign on, even with the best loyalty profile.\n\n**Channels: it's not one question, it's two**\n\nThis is where the most common mistake happens. \"Which channel is effective?\" is actually two different questions, and the answer to each can be completely different:\n\n- **Which channel acquires the best customers?** What matters is acquisition cost and what share of acquired customers actually stayed loyal. A low-volume, high-quality channel tends to be systematically underfunded.\n- **Which channel generates current revenue?** Here, a big part of the result is purchases from customers this channel never actually acquired — it just picked up their repeat order.\n\nMixing up these two questions leads to scaling a channel that's only harvesting what's already there, and cutting the one that actually brings people in. On top of that comes the attribution model question: a channel that looks weak under last-click often initiates purchase paths that other channels close out.\n\n![Share of acquired customers who became loyal, alongside customer acquisition cost](https://a.storyblok.com/f/296300/ef18cc37e9/customer-perspective-06-kanaly-koszt-lojalnosc.png)\n*Share of acquired customers who became loyal, alongside customer acquisition cost*\n\nThe cheapest channel is Paid social: $24 per new customer. The most expensive is Affiliate: $155 — over six times as much. But cost alone isn't enough to judge by. In Paid search, one in four acquired customers becomes loyal; in Affiliate, fewer than one in ten. So Affiliate is simultaneously the most expensive and the weakest on quality — the easiest candidate to cut from the acquisition budget.\n\nA gap above 3x is the point where it's worth shifting budget. Free channels were left out — at zero cost, there's nowhere for them to land on this axis.\n\n**Discounts: check who you're actually buying**\n\nCohorts of customers acquired with a discount code can be compared to cohorts acquired without one — not by their first order, but by how much they spent in the following months. It's the simplest way to check whether a promotion brings in customers or just speeds up sales you would have made anyway.\n\n![Cumulative revenue per customer over time — customers acquired with a discount code vs. without one](https://a.storyblok.com/f/296300/8cbce6a9cb/customer-perspective-07-rabat-kohorty.png)\n*Cumulative revenue per customer over time — customers acquired with a discount code vs. without one*\n\n# What this is built from [What it's built from]\n\nEverything above is a way of working, but someone has to keep it running. That's what WitCloud does: the platform we deploy on your data. Orders, customers, and ad costs flow into a single foundation, from which segments, flows between them, cohorts, and audience lists are all calculated. You don't have to build or wire any of it together yourself.\n\nThree things run on this same foundation:\n\n- **Reports and analysis** answer the question of what's happening and why. Live dashboards plus ready-made analyses for specific business questions: base structure, cohort quality, products, channels.\n- **List export** answers the question of how to put it into action. Segments go out as live audience lists to Google Ads, Meta Ads, TikTok Ads, and email marketing systems.\n- **WitCloud MCP** is the conversational layer on top of the data. You ask in plain language and get conclusions along with recommendations, without ordering a report from an analyst.\n\n**The key consequence: you define a segment once.** The same \"at-risk customer with high LTV\" is identical in the report you look at, in the list uploaded to Meta, and in the answer you get in chat. There aren't three definitions of the same customer across three tools that stop matching each other after six months — which is the default state at most companies still running this on exports and spreadsheets.\n\n# How this differs from the report you might already have [How it differs]\n\nThree things that actually make the difference in practice:\n\n**The analysis knows what the numbers mean.** You don't get a table to interpret yourself. You get a conclusion: where value is concentrated, what share of the base is already inactive, which customer flow is a critical signal, and which one is within normal range.\n\n**MCP knows your business, not just your data.** Before it calculates anything, it loads your company's context — industry, brand, market, seasonality. That's why its recommendations sound like they come from someone who understands what you sell, not like the output of a database query.\n\n**Conclusions end in action.** List export is a full part of the system, not a file for manual upload. Segments recalculate automatically and land, in the same form, in Google Ads, Meta Ads, TikTok Ads, and email marketing systems.\n\nThe whole thing runs in your own Google Cloud — your data remains 100% your property.\n\n# This is a process, not a one-off project [A process, not a project]\n\nA customer-base analysis done once has a short shelf life. The base is alive: customers move between stages every day, and the ones you flagged as at-risk a month ago have either already bought again or are lost by now. The value doesn't come from a single report — it comes from watching these movements regularly and reacting to them regularly.\n\nLet's be clear about this: you're not buying a report subscription here. You're launching a new campaign line that serves your existing customers, alongside the one that acquires new ones. The work splits into three layers, and only the first happens without your involvement.\n\n1. Data and lists — the system does it\n\nStore orders, ad platform costs, and GA4 traffic data flow in daily and join up on their own. With every refresh, segments recalculate from scratch: a customer who just placed a second order moves from \"new\" to \"returning\" without anyone lifting a finger, and one who crossed your inactivity threshold falls into \"at risk\" on their own.\n\nThe same applies to audience lists. A segment connected once to Google Ads, Meta Ads, TikTok, or an email system syncs daily — whoever bought drops off the at-risk list before the next send, and whoever stopped buying takes their place. There are no CSV exports, no manual file uploads, and no watching for when a list has gone stale.\n\nYou set it up once: inactivity thresholds, the value threshold for your best customers, and mapping your store to its data sources. After that, you don't have to maintain or watch over it.\n\n2. Campaigns — the marketing team does it\n\nA segment doesn't sell anything by itself. Someone has to build a campaign on top of it — on both sides: paid ads and email.\n\n- **In Google Ads, Meta Ads, and TikTok Ads:** remarketing campaigns to at-risk and lost customers, with a higher bid for those with the highest LTV; excluding loyal customers from reach campaigns so you don't pay for sales that would happen anyway; lookalike audiences built on your best customers; shifting budget toward products that attract repeat customers rather than just the bestseller. You can also add your most-loyal-customer segment as a signal in, for example, Google PMax campaigns, so your most critical campaigns get fed data about your best customers.\n- **In email and CRM:** activation toward a second purchase for new customers who haven't come back, messaging for at-risk customers, and separate communication for loyal and win-back customers.\n\nOn top of that, creative — a different message reaches someone who bought once and vanished than the one meant to keep a customer around for their fifth order. This is real work, and it's heaviest at the start: the first few weeks go into setting up campaigns and lists in the ad platforms and preparing creative and messaging by segment. After that come adjustments and tests, not building from scratch.\n\nIt's worth planning this like the launch of a new campaign type, because that's exactly what it is. You don't need a new department or a full-time analyst, but you do need clearly assigned ownership: these campaigns have to be someone's actual scope, not a side task done in passing — because otherwise, after two months, all that's left are lists with no messaging behind them. Who that is depends on how your marketing is set up: your own team, or the agency that already runs your campaigns.\n\nWe don't take on the execution itself: your team or agency handles the messaging and creative. Our part is everything before and after that: which segments are worth reaching, in what order, at which point in the purchase cycle, with what intent — and afterward, whether the result came out the way you expected.\n\n3. Decisions — they're yours\n\nWhich products to promote upfront, whether a discount attracts customers or just speeds up sales that would have happened anyway, what offer to give at-risk customers, how to split budget across channels. These are business decisions, not calculations. The system is meant to prepare them for you, not make them for you.\n\nMCP takes you as far as it possibly can here: it gives you the numbers, points out what follows from them, and frames recommendations in the context of your industry and brand. The last step — whether and how to act on it — stays on your side. If you want someone to talk it through with, we step in as advisors: we help build assortment and discount strategy on these numbers, set priorities, and decide where to shift budget.\n\n**Rhythm: a fixed point on the calendar**\n\nSo this doesn't just fizzle out, you need one fixed point on the calendar: a short check-in where three people sit down together — someone from paid campaigns, someone from email marketing or CRM, and someone who decides on assortment and promotions. How often depends on scale: at lower volume, once a month is usually enough; at higher volume, every two weeks makes more sense. What matters more than frequency is that the slot is fixed. You go through five questions:\n\n1. How has the health of the base changed since last time?\n2. Which flows between segments look concerning?\n3. Which channel brought in customers who stick around, and which one just brought volume?\n4. Which of the actions launched since last time worked?\n5. What's the one thing we're changing before the next check-in?\n\nChannels belong in this same rhythm, because their evaluation changes over time. Acquisition cost rises seasonally, the share of acquired customers who go loyal shifts along with creative and targeting, and a channel that looks weak under last-click can be bringing in the customers with the highest return rate. Looking at the base and the channels at the same table, you shift budget during the quarter, not after it's closed.\n\nNo materials need preparing, because the reports are already there, and you pull the answers from MCP during the meeting itself, just by asking. This check-in is where you measure the previous period's results and pick one change for the next one. Without it, campaigns launch fine, but after a quarter no one will know whether they're working.\n\n**In this process, we're your advisor, not your executor.** We work on the three things that matter most for the result: setting up segmentation around your actual purchase cycle, analyzing what the numbers mean and which hypotheses are worth testing, and running the rhythm in which you measure results and pick the next step. The campaigns stay yours, and we're responsible for making sure they know who they're going to and why.\n\nWhat's usually missing isn't data or hands to send things out — it's someone who regularly makes sure something actually comes out of those numbers.\n\n# Where to start [Where to start]\n\nFor the first full analysis, you need three things you most likely already have: order history from your store, media costs from the ad platforms, and traffic data from GA4. The rest is configuring thresholds around your purchase cycle.\n\nOn the team side: clearly assigned ownership of these campaigns and one regular check-in. The first sequences and creative are a few weeks of work spread out normally, not a separate project with its own budget and team.\n\n# Summary [Summary]\n\nWorking with your customer base isn't about giving up ad spend. It's about understanding how to help existing customers buy more — and how to use that knowledge to acquire new buyers with the highest potential.\n\nIt's not a one-and-done action either. It's a rhythm: the base changes, lists refresh, and you regularly make a handful of decisions based on what actually happened, not on what seems likely.\n\n::content-cta\n---\neyebrow: Free trial\nheading: See your customers as self-updating segments — during your free trial.\ndescription: \"Let's talk: we'll show you what your segments look like on your own data, test MCP, and figure out the best place to start.\"\nbuttonText: Book a call\nbuttonHref: /contact\n---\n::\n","4","Understand your customers deeply — from acquisition to lifetime value.",{"id":333,"alt":19,"name":19,"focus":19,"title":19,"source":19,"filename":334,"copyright":19,"fieldtype":21,"meta_data":335,"is_external_url":32},191285268971114,"https://a.storyblok.com/f/296300/900x600/772cb9cd8d/16-customer-perspective-dark.png",{},[337,340,343,345,347],{"_uid":338,"name":231,"content":339,"component":233},"c3d20001-0000-4000-8000-000000000001","Turn your customer base into a growth engine — see how retention and acquisition data should drive your segments, campaigns, and ad spend.",{"_uid":341,"name":299,"content":342,"component":233},"c3d20001-0000-4000-8000-000000000002","Customer Perspective — WitCloud",{"_uid":344,"name":303,"content":339,"component":233},"c3d20001-0000-4000-8000-000000000003",{"_uid":346,"name":306,"content":334,"component":233},"c3d20001-0000-4000-8000-000000000004",{"_uid":348,"name":309,"content":310,"component":233},"c3d20001-0000-4000-8000-000000000005","Customer Perspective — WitCloud Customer Analysis",[],[],"customer-perspective","content/framework/customer-perspective",-70,[],"3caf753e-943c-43f7-b9d9-13dc2d2cba1d",[],{"name":359,"created_at":360,"published_at":255,"updated_at":361,"id":362,"uuid":363,"content":364,"slug":389,"full_slug":390,"sort_by_date":174,"position":391,"tag_list":392,"is_startpage":32,"parent_id":238,"meta_data":174,"group_id":393,"first_published_at":255,"release_id":174,"lang":180,"path":174,"alternates":394,"default_full_slug":174,"translated_slugs":174},"Marketing and Business Control","2026-06-25T07:32:46.158Z","2026-08-21T07:00:43.906Z",191214248626088,"0649e4e2-cd54-4919-b384-9c11f5987990",{"_uid":365,"title":359,"content":366,"eyebrow":109,"showTOC":39,"category":19,"priority":367,"readTime":19,"subtitle":368,"component":263,"heroImage":369,"meta_tags":373,"meta_title":386,"heroButtons":387,"updatedDate":19,"bottomBlocks":388},"36f48a38-1915-4aa0-aebc-a1f92cd6809d","You already have a single source of truth — data from your store, ads, analytics and marketplaces gathered in one place and brought down to a common language. That's the foundation. But an organized dataset on its own doesn't yet tell you whether the business is heading the right way. For that you need two more things: goals arranged into a logical structure — a KPI tree — and a mechanism that watches those goals for you and lets you know when something drifts from normal. And once it does, instead of guessing, you drill down the same tree all the way to the cause. From KPI, through alert, to diagnosis.\n\n# A list of metrics is not the same thing as a KPI tree [List vs. tree]\n\nMost companies have plenty of metrics. A dashboard where revenue, ROAS, session count, ad spend, conversion rate and ten other numbers all sit side by side. The problem is that this is a list, not a structure. When revenue drops, a list like that doesn't tell you where to look — it shows you twenty numbers at once and leaves you with the question \"okay, but why?\".\n\nA KPI tree flips that logic. Instead of a flat list, you build a hierarchy: one top-level goal at the top, and beneath it the metrics that make it up — and so on, deeper and deeper, down to the levers you can actually pull. Every level answers the question \"what does the level above it break down into?\".\n\n![KPI tree: the top-level goal at the top, the metrics that make it up below, and at the very bottom the levers you actually control. Movement at the top can always be explained by movement on one of the branches below.](https://a.storyblok.com/f/296300/e333674391/marketing-control-01-drzewo-kpi.png)\n*KPI tree: the top-level goal at the top, the metrics that make it up below, and at the very bottom the levers you actually control. Movement at the top can always be explained by movement on one of the branches below.*\n\nIn e-commerce, the simplest and at the same time most important tree starts from revenue. Revenue from traffic isn't one number — it's the product of three: session count, conversion rate, and average order value (AOV). If revenue dropped, one of those three branches dropped — and you already know where to look next.\n\nAnd each of those branches breaks down further still. Conversion rate isn't a constant either — it's the outcome of the whole funnel: of all sessions, some add a product to the cart (add-to-cart rate), of those some move on to checkout (checkout rate), and of those some complete the purchase (purchase rate). When conversion drops, you don't ask \"why did conversion drop\" — you ask \"at which step of the funnel am I losing traffic\". Because a drop at the cart stage is a different problem (price, shipping cost) than a drop at the payment stage (the gateway, the last step of checkout).\n\n![The funnel is a branch of the KPI tree broken down step by step. A conversion drop always sits at a specific stage — and every stage has its own, specific cause.](https://a.storyblok.com/f/296300/c5d57896d8/marketing-control-02-lejek-konwersji.png)\n*The funnel is a branch of the KPI tree broken down step by step. A conversion drop always sits at a specific stage — and every stage has its own, specific cause.*\n\nThe same logic works on the ads side. ROAS is revenue divided by cost — so when ROAS drops, either cost went up or ad revenue went down. If cost went up, it's because the price per click (CPC) or per impression (CPM) rose, or you simply bought more traffic. Each of those \"eithers\" is a different branch and a different action.\n\n> A KPI tree isn't a prettier dashboard. It's a map that tells you upfront which way to go down when something breaks — instead of leaving you with a list of numbers and a gut feeling.\n\nIn WitCloud, that tree doesn't stay a diagram on paper — you build it as a concrete definition. You pick the metrics that matter to you from the All In One data, and assign three things to each one. First, related metrics — the branches below it that explain its movement: for ROAS you attach cost, revenue, CPC and CPM; for conversion rate, the next steps of the funnel. Second, comparison windows that make sense for that metric: some things you review week over week, others month over month, and for strongly seasonal metrics only year over year shows the real picture. Third, whether you want notifications when that metric drifts from normal.\n\n![Every node of the tree is a definition: the metric itself, the related metrics attached to it, the right comparison windows, and a monitoring flag. Once built, the tree is at the same time a diagnosis map, a set of comparisons, and a list of what's worth watching.](https://a.storyblok.com/f/296300/58f9407c5a/marketing-control-03-definicja-metryki.png)\n*Every node of the tree is a definition: the metric itself, the related metrics attached to it, the right comparison windows, and a monitoring flag. Once built, the tree is at the same time a diagnosis map, a set of comparisons, and a list of what's worth watching.*\n\nThat way, one definition powers everything that comes after: it's what you drill down through during diagnosis, it's whose comparison windows monitoring uses, and it's what AI queries — through our connector. You don't maintain three separate configurations or paste anything into the model: you have one tree in WitCloud, and all three functions run on it.\n\nAnd this is where the foundation from the earlier articles comes back. A tree like this only makes sense if all its branches are counted from one, consistent source. If you take revenue from one system, cost from another, and sessions from a third — each counting its own way and speaking its own language — the tree falls apart before you even finish building it. All In One gives it common ground: one data model, where spend and cost are already a single metric, and you know exactly which question CRM revenue answers and which one GA4 revenue answers.\n\n# You can't watch everything at once [Monitoring]\n\nYou have the KPI tree. But a living tree for a real store isn't five metrics — it's dozens of branches across several markets, several channels, hundreds of campaigns. Nobody reviews that by hand every morning. And even if someone does, they'll only catch the big, obvious changes — the subtle ones that are just starting to build get lost in the noise.\n\nThat's why the second element is proactive monitoring. Instead of you logging into reports every day to check whether anything changed, the system does it for you — and you only find out when there's actually something to know about.\n\nIt works simply. You define which metrics are critical to you and what movement you consider concerning — for example \"let me know when ROAS from the ad systems drops by more than 20% week over week\", \"when ad cost rises by more than 25%\", \"when order count drops by more than 20%\", or \"when conversion rate drops by more than 15%\". Monitoring uses exactly what you set in the tree. Once a day, the system takes every metric flagged for tracking and compares it over the window you defined for it — day over day, week over week, or year over year for seasonal ones — checking whether the movement crossed the threshold. If a metric crosses it, you get an email notification. If nothing crossed it — silence, and that's good news.\n\nThe whole trick is in setting the thresholds right. Marketing data naturally fluctuates day to day — if you set a threshold too sensitively, you'll get an alert on every small wobble and stop reading them within a week. The threshold needs to sit above the normal noise, so a notification means a real change, not an ordinary fluctuation. That's why thresholds are picked for the specific business: what's sensible for a store doing 50 orders a day is different from one doing 5,000 — because at lower volume, every number swings harder. A well-set-up monitoring system stays quiet most days and speaks up only when it's genuinely worth a look.\n\n![You set the thresholds on the critical metrics. The system watches them daily and speaks up only when a threshold gets crossed — on the right market, in the right channel.](https://a.storyblok.com/f/296300/c2f2169e82/marketing-control-04-progi-monitoringu.png)\n*You set the thresholds on the critical metrics. The system watches them daily and speaks up only when a threshold gets crossed — on the right market, in the right channel.*\n\nThe key difference is in the direction of attention. Without monitoring, you have to remember to check the data yourself — and most often you do it too rarely, or only once someone notices the problem after the fact. With monitoring, the data speaks up to you. The anomaly reports itself on the day it appears, not at month end, when it's already too late to react to it.\n\nAnd again — this only works because underneath it all there's a single source of truth. Monitoring calculates metrics from exactly the same organized tables you read your reports from. There's never a situation where the alert says one thing and the report shows another, because both take their numbers from the same place and the same definition.\n\n::content-cta\n---\neyebrow: KPI monitoring\nheading: Want to know about a ROAS drop the day it happens — not at month's end?\ndescription: \"We'll show you how to set up proactive monitoring on your critical metrics.\"\nbuttonText: Book a call\nbuttonHref: /contact\n---\n::\n\n# The alert fired — don't guess, diagnose [Alert & diagnosis]\n\nYou get a notification: ROAS in the PL market dropped 22%. This is the moment where most teams start guessing. \"Probably seasonal\", \"maybe something with the brand campaign\", \"competitors might have raised their bids\". Guessing has a cost — you either cut budget where you shouldn't, or you wait to react until the problem grows.\n\nInstead of guessing, you drill down the KPI tree. This is exactly the structure you built at the start — now it works as your diagnosis path. There's one rule: from general to specific.\n\nFirst you ask where. Since the alert is about ROAS, you break it down by market — which market is behind the drop? Say it's PL, while DE and CZ are stable. So you drill into PL and break it down by channel — which channel is dragging ROAS down? Google Ads. You drill into Google Ads and break it down by campaign — and you see one that stands out, where cost spiked and revenue didn't keep up.\n\n![Drilldown is going down the tree: market → channel → campaign. At each level you ask \"which branch is behind the change above it\" and you go only into that one.](https://a.storyblok.com/f/296300/4fb7cf462a/marketing-control-05-drilldown.png)\n*Drilldown is going down the tree: market → channel → campaign. At each level you ask \"which branch is behind the change above it\" and you go only into that one.*\n\nThen you ask why. This is where you decompose the metric itself. ROAS dropped — because cost went up, or because revenue went down? Turns out it's cost. So why did cost go up — because you bought more clicks, or because each click got more expensive? Turns out CPC rose by half at the same click volume. That's no longer \"something's going on with ROAS\". It's a concrete sentence: on campaign X in Google Ads in the PL market, CPC rose by around 50%, likely due to an auction shift, and that's what ate into ROAS. With a sentence like that, you know what to check and what to do.\n\nAnd here's where an important choice comes in: how to run that diagnosis. There are two paths — and both go down the same tree, from the same source of truth.\n\nThe first is self-service exploration in the report. WitCloud provides a ready-made template — the All In One report — where your data is already arranged around real questions: markets, channels, campaigns, funnel. You click through the levels yourself: filter by market, drill into a channel, break down a campaign, look at the levers underneath. Some teams simply like this mode — they want the data under their fingers, laid out where they expect it, and would rather browse a report than ask anything. That's completely fine, and we're not taking it away.\n\nThe second is exploring with AI. Instead of clicking, you ask directly: \"why did ROAS in PL drop?\". And here's the crux: the KPI tree you set up once in WitCloud is immediately available to AI. The question goes through our MCP connector straight to that same tree, and the answer comes back in a few seconds. You don't paste anything, don't rebuild the configuration a second time, don't export data to the model — the definition sits in WitCloud, and AI simply queries it. The model then walks the same path you would in the report — it breaks the metric down by market, drills into the channel, then the campaign, checks the levers underneath: CPC, CPM, conversion count, order value — only it goes deeper, and at the end it gives the most likely cause along with a concrete recommendation. It doesn't hallucinate over raw, contradictory tables — it explores the same consistent dataset you read your reports from.\n\n![You configure the KPI tree once in WitCloud. AI reaches the same definition through the MCP connector and comes back with a ready answer — no data export, no re-pasting the configuration.](https://a.storyblok.com/f/296300/1db8dffd11/marketing-control-06-ai-mcp.png)\n*You configure the KPI tree once in WitCloud. AI reaches the same definition through the MCP connector and comes back with a ready answer — no data export, no re-pasting the configuration.*\n\nWe recommend AI the most — because it drills down the tree faster and deeper than you would by hand, and it doesn't get tired at the tenth branch in the middle of the day. But the report stays, deliberately: not everyone wants to talk to a model, and a good, well-organized report is often the fastest route to an answer when you know exactly what you're looking for. What matters most is that both stand on the same source of truth — so whichever path you take, you arrive at the same number and the same cause.\n\nAnd one more thing AI gives you beyond a manual drilldown: it doesn't have to limit itself to a single alert. Since you've already defined the whole tree in WitCloud — with related metrics and the right comparison window on every branch — the model can walk through all of it through that same connector. It takes every metric, checks it in its own window, drills into wherever something stands out, and hands back one coherent health check of your entire marketing at once — from the top of the tree down to the levers you'd otherwise drill into by hand anyway. That's no longer a reaction to a single signal — it's a full diagnosis on demand: \"go through the whole tree and tell me what needs my attention\".\n\n> Diagnosis isn't another tool — it's drilling down the tree you already have. The alert tells you what and where. Drilldown tells you why. AI does the same thing, just deeper and faster.\n\nIt's worth adding one rule that guards against a wrong conclusion: diagnosis doesn't mix sources. If the alert is about a metric from the ad systems, the whole analysis drills down through ad data. If it's about the funnel from GA4, you drill down through the GA4 funnel. You don't combine revenue from one system with cost from another halfway through a drilldown, because then you're right back at the mismatched-numbers problem from the data quality article. Every diagnosis path stays within a single source of truth.\n\n# From goal to cause — without guessing [Summary]\n\nLet's put it all together. A single source of truth gives you consistent data. A KPI tree gives it structure — and you define it once, assigning each metric its branches, the right comparison windows, and whether you want to monitor it. Three things stand on that one definition: monitoring, which watches it for you and speaks up on the day something drifts from normal; self-service exploration in the All In One report; and AI, which will drill down from a single alert or walk the whole tree at once and tell you what needs your attention.\n\n![The full loop: single source of truth → KPI tree → monitoring → alert → diagnosis → action. Every element rests on the same, organized dataset.](https://a.storyblok.com/f/296300/9faceadf93/marketing-control-07-pelny-obieg.png)\n*The full loop: single source of truth → KPI tree → monitoring → alert → diagnosis → action. Every element rests on the same, organized dataset.*\n\nThe effect is that the path from \"something's wrong\" to \"I know what and why\" shrinks from days to minutes. You don't have to stare at dashboards every day or guess where to look when the result drifts from plan. Your goals are laid out, the system watches them, and when you need to dig into the data, you have a ready path and a single source to follow.\n\nThe best moment to put this in place is once the foundation — a single source of truth — is already standing. And if it isn't yet, that's the first step we start from. Instead of chasing results after the fact — keep your marketing under control, from KPI to diagnosis.\n\n::content-cta\n---\neyebrow: Free trial\nheading: See your KPIs organized into a tree — with monitoring and diagnosis on your own data.\ndescription: \"Let's talk: we'll show you monitoring and drilldown on your own single source of truth.\"\nbuttonText: Book a call\nbuttonHref: /contact\n---\n::\n","3","Full visibility into your marketing spend, ROI, and business performance.",{"id":370,"alt":19,"name":19,"focus":19,"title":19,"source":19,"filename":371,"copyright":19,"fieldtype":21,"meta_data":372,"is_external_url":32},191285268971113,"https://a.storyblok.com/f/296300/900x600/96c4a0c41f/15-marketing-control-dark.png",{},[374,377,380,382,384],{"_uid":375,"name":231,"content":376,"component":233},"a4c30001-0000-4000-8000-000000000001","See how a KPI tree, proactive monitoring, and AI-powered drilldown turn a marketing alert into a clear diagnosis — without guessing.",{"_uid":378,"name":299,"content":379,"component":233},"a4c30001-0000-4000-8000-000000000002","Marketing Under Control — WitCloud",{"_uid":381,"name":303,"content":376,"component":233},"a4c30001-0000-4000-8000-000000000003",{"_uid":383,"name":306,"content":371,"component":233},"a4c30001-0000-4000-8000-000000000004",{"_uid":385,"name":309,"content":310,"component":233},"a4c30001-0000-4000-8000-000000000005","Marketing Under Control — WitCloud KPI Monitoring",[],[],"marketing-and-business-control","content/framework/marketing-and-business-control",-50,[],"9e63050e-5c01-4bc1-90c4-e9c9e224a4da",[],{"name":396,"created_at":397,"published_at":255,"updated_at":398,"id":399,"uuid":400,"content":401,"slug":425,"full_slug":426,"sort_by_date":174,"position":427,"tag_list":428,"is_startpage":32,"parent_id":238,"meta_data":174,"group_id":429,"first_published_at":255,"release_id":174,"lang":180,"path":174,"alternates":430,"default_full_slug":174,"translated_slugs":174},"Data Quality","2026-06-25T07:32:42.796Z","2026-08-21T07:00:43.813Z",191214234867622,"6b02343d-c062-4616-97d0-798ee62bac8d",{"_uid":402,"title":396,"content":403,"eyebrow":109,"showTOC":39,"category":19,"priority":404,"readTime":405,"subtitle":406,"component":263,"heroImage":407,"meta_tags":411,"meta_title":417,"heroButtons":423,"updatedDate":19,"bottomBlocks":424},"9d78dfb6-4b8a-4f74-8dc2-8f99b60d05b4","## Everyone wants to automate. First, you need something to automate. [Start with data]\n\nAutomating everything is the current fashion — and yes, it can be done. But automation is only ever as good as the data it's fed. And in e-commerce, the most dangerous errors never show up red. The system shows a green light, data keeps flowing — yet it can still be incomplete or untrue, and you won't know it until someone checks: by hand, or through a properly built automated control.\n\nTwo examples, to make it concrete. First — at the point of collection. A customer pays through an external gateway: PayU, Przelewy24, PayPal. After paying they don't return to the confirmation page, or they return via a URL where the `purchase` tag doesn't fire. The transaction is completed and paid — but it doesn't exist in analytics. Nothing turns red, because as far as the system is concerned, nothing happened. Real revenue and campaign ROAS are simply understated, and nobody sees it.\n\n![](https://a.storyblok.com/f/296300/2448x960/d501dcd871/g1_purchase_v2.png)\n\nSecond — downstream, once data is already flowing into reports. An integration pulling data from an ad platform runs flawlessly for a year. Then one day the platform retires an old API version — and the connection starts returning less data. No error, no warning. The report keeps generating, because the other sources are working fine — it's just that one stopped returning the full picture. And once part of the cost from one channel is missing in the warehouse, costs and revenue stop reconciling, and every metric built on them — ROAS, margin, acquisition cost — is simply wrong. You only find out once someone notices that revenue from that channel \"somehow dropped.\" The green light was on the whole time — because the report was running. The numbers in it just weren't true.\n\n![](https://a.storyblok.com/f/296300/2448x960/1a639c4655/g2_integration_v2.png)\n\nTwo different errors in two different places — but one thing connects them: the interface showed that everything was fine.\n\nWe use AI every day in our data work. That's exactly why we know its limitations first-hand. If you simply tell AI to look at the data and judge whether it's fine, it will see a green light and return a status of \"all good.\" Except \"all good\" isn't always true — and the decision then gets made on a signal that isn't actually there.\n\nThe reason is structural. E-commerce analytics involves dozens of non-standard connections that have never been properly documented anywhere: custom order statuses, unusual integrations, exceptions in payment logic, local market quirks. AI by nature fills documentation gaps with its most probable guess — and in analytics, \"probable\" and \"true\" are two different things. That's why the risk of hallucination here is enormous.\n\nThat doesn't mean automation doesn't work — only that not every kind does. Good automation here isn't AI \"looking and approving.\" It's specific, purpose-built control rules that check exactly the places where data tends to break — plus manual verification wherever context matters. Not because we don't trust automation, but because we know where it breaks down.\n\nThat's why it's worth looking at data quality through two lenses: how data **enters** individual systems, and how it **flows out** into a single warehouse. These are two different sources of errors and two different ways of working. But one thing connects them from the start: the easiest way to verify anything is when data from every system sits side by side in one place.\n\n![](https://a.storyblok.com/f/296300/2448x894/9431c24220/20-audyt-dwie-warstwy-dark.png)\n\n> **Layer one** determines whether the data is even true to begin with. **Layer two** — whether it stays consistent as everything around it changes.\n\n---\n\n## Layer one — data entering the systems [Layer one]\n\nEverything that happens before data lands in GA4, Meta Ads, your ad platform, or CRM: the website, the app, the data layer, tags, events, Consent Mode, server-side. The most dangerous errors at this layer share one trait — **everything looks fine from the interface**.\n\n### Consent Mode that only looks correct\n\nA user declines marketing consent — and through a configuration error, analytics consent gets declined too. The rejection message looks correct. GA4 reports everything working as expected under consent mode. And you simply have less data than you should — systematically, across every channel at once, with no signal that anything is wrong.\n\n![](https://a.storyblok.com/f/296300/2448x834/c0bb21c93d/21-audyt-consent-mode-dark.png)\n\n> In the EU this is most often the single largest, **invisible** gap in your data. That's why the audit checks not what the system declares, but the actual requests and consent parameters (**GCS**, **GCD**, **NPA**) — before acceptance, after rejection, and after consent.\n\n### Missing **purchase** events\n\nBack to the payment gateway example — because it's one of the most common and costly gaps at this layer. PayU, Przelewy24, PayPal, InPost Pay: the customer pays, but doesn't return to the confirmation page, or returns via a URL where the **purchase** tag doesn't fire. The transaction is completed and paid, but it doesn't exist in analytics.\n\n![](https://a.storyblok.com/f/296300/2448x654/68e7978441/22-audyt-purchase-gap-dark.png)\n\n> The more payments flow through external gateways and wallets, the larger the gap — and the more **understated the real revenue and ROAS** of every campaign that generated that transaction.\n\n### Messy identifiers and currency\n\nEvery system collects data its own way: **item_id** in the data layer doesn't match the ID in the product feed, transactions arrive without a passed value or in the wrong currency when selling across multiple markets. The event technically fired, so nothing turns red — but the data doesn't join across systems, and ROAS calculated from those values is simply wrong.\n\n### Product feed: incomplete and missing steering signals\n\nA feed isn't just a product list — it's the data on which Google's and Meta's machine-driven campaigns make decisions on your behalf. Feeds usually have two problems at once. The first is plain errors and gaps: inconsistent **item_id**, missing attributes, outdated prices and availability. The second, more serious one, is missing data that gives campaigns direction.\n\n![](https://a.storyblok.com/f/296300/2448x894/0d98f2a0ca/23-audyt-feed-sygnaly-dark.png)\n\n> Custom labels turn the feed from a **passive list** into a **campaign steering tool** — carrying what the algorithm doesn't know on its own: margin, turnover, stock level, clearance status.\n\n### User ID that isn't being sent at all\n\nIt's not a subtlety like \"only sent on login.\" In practice, **user_id** often isn't reaching GA4 at all — even though the client is certain it's implemented. Without it, you can't connect one user's sessions across devices or between web and app. Each person fragments into several \"new\" users, and all retention, cross-device, and purchase-path analysis is built on fiction.\n\nThe outcome of errors at this layer is always the same: the data is wrong from the source, and the interface doesn't show it. Everything downstream — reports, campaign optimisation, AI recommendations — inherits that error with no way to detect it.\n\nThat's why a tracking audit isn't a dashboard read — we combine automated tests with manual verification wherever context matters. We walk the full path from ad click to paid transaction and verify: data layer events (**purchase**, **add_to_cart**, **begin_checkout**), actual Consent Mode and CMP behaviour, value and identifier integrity, User ID implementation, feed completeness and steering signals, and consistency between web and app. The result is a document with the status of every element and an action plan for IT. Automation and AI do the first, broad pass over the data; non-standard connections, exceptions, and results that look \"too clean\" get confirmed by hand — so no silent gap ever slips through as \"OK.\"\n\n::content-cta\n---\neyebrow: Data Quality Audit\nheading: Find out if your data is telling the truth.\ndescription: \"We'll walk the whole path — from click to paid transaction — and hand you a report with the status of every element and a fix plan for IT.\"\nbuttonText: Get a data quality audit\nbuttonHref: /contact\n---\n::\n\n---\n\n## Layer two — keeping data consistent over time [Layer two]\n\nThe nature of the problem changes here. Layer one can be fixed once. Layer two can never be fixed for good — because marketing data isn't a state, it's a process that keeps changing without your consent.\n\nAnd here comes the temptation to just build your own warehouse and be done with it. The problem is that the hard part isn't building it — it's maintaining it.\n\n### Fresh data is always incomplete\n\nConversions are attributed to the click date, but they trickle in over the following days and weeks, with some arriving as modelled. That's why yesterday's and last week's numbers always look worse than they really are — and will \"improve\" on their own over the coming days. This isn't an error, it's data maturing. But if someone reads a fresh period as final, they cut budget exactly where the campaign is actually working.\n\n![](https://a.storyblok.com/f/296300/2448x924/34faede8c1/24-audyt-dojrzewanie-dark.png)\n\n> You read a fresh week as the final result — and cut budget where the campaign **is actually working**. The rest of the conversions are still on their way.\n\n### Integrations break quietly\n\nThis was the second example from the intro — and it's back here for a reason, because it's one of the sneakiest errors at this layer. Platform APIs are versioned and deprecated. An integration that worked for a year can quietly stop returning some of the data without any error — it simply starts returning less. Tracking itself can be flawless: events collected without a hitch, while the warehouse still ends up with a three-week gap, because the transfer from one source broke. And it only takes one such source to distort every aggregated metric calculated from that data.\n\n### Keys and structures change, and reports fail silently\n\nThis is the daily, most tedious part of working with data. A store changes its **item_id** format after a migration — and suddenly CRM data doesn't join with the feed or with GA4, because they join on an identifier that no longer exists. Someone renames a campaign and breaks the channel-mapping rule, so costs land in \"other.\" A marketplace platform renames columns in its export. None of these changes throws an error — the report still generates, the numbers still show up, they're just inconsistent or incomplete.\n\n### The hand-stitched warehouse holds together because of one person\n\nThe most common alternative looks like this: someone wrote scripts pulling data from Meta, Google Ads, and the CRM, added a handful of manual fixes for edge cases, joined it all in BigQuery, and built reports on top. It works — until it doesn't.\n\n![](https://a.storyblok.com/f/296300/2448x834/f72e716b81/25-audyt-pipeline-dark.png)\n\n> The more sources and manual exceptions, the more fragile the whole thing. A data warehouse **shouldn't be one specialist's private creation** that stops working the moment they stop watching over it.\n\n### Definitions drift. History has seams.\n\nEvery system counts differently: different attribution windows, different conversion definitions, different consent handling, different time zones. That's why GA4 and the CRM will, by default, show different conversion numbers — and that's normal, it's not something you \"fix.\" The real problem starts elsewhere: when those numbers drift apart more than the definitions alone explain, or when the gap suddenly shifts over time for no reason. At that point it's no longer a natural methodology gap — it's a signal that something broke. And switching analytics platforms or relaunching a store is its own moment of risk — the data breaks off or changes methodology, so year-over-year comparison becomes worthless unless someone deliberately unifies the historical data.\n\nThis is the difference between a hand-stitched warehouse and a maintained platform. It isn't a project that ends — it's operational work: monitoring source completeness, detecting anomalies, updating connectors after API changes and, above all, continuously normalising data into one coherent model. **WitCloud does this automatically, regardless of who happens to be on the team**: it maps data from every system onto a shared structure and makes sure a change to the item_id format or a campaign rename doesn't blow up reporting. When a transfer breaks or data drifts from the norm, an alert fires — before the gap distorts a decision. The data stays in your Google Cloud project and belongs to you, but its maintenance and consistency no longer depend on one person's memory.\n\n---\n\n## The warehouse doesn't wait for perfect data — it helps fix it [The warehouse]\n\nIt's easy to draw the wrong conclusion from all this: \"I first need six months to get my data in order before I can roll out a warehouse.\" That's not true — it reverses the order.\n\nAs long as data sits in five separate systems, nobody sees how it relates to itself. That GA4 and the CRM show different numbers — that's natural. But whether the gap fits what attribution and consent explain, or whether it's already too large and growing over time — you can't judge that when you're looking at each number in a different panel, on a different day. It only becomes visible once they're all standing side by side.\n\n![](https://a.storyblok.com/f/296300/2448x894/c905c40b16/26-audyt-jedna-hurtownia-dark.png)\n\n> Consolidating data into one warehouse is **the fastest way to see problems at all** — gaps in **purchase**, broken integrations, feeds without labels.\n\nFor us, this runs in parallel, not in sequence. Very often it's the data in WitCloud that gives the first signal something is wrong — numbers that suddenly stop reconciling, a channel that disappeared, revenue that doesn't match the CRM. The warehouse shows that a problem exists. The audit says where it comes from and how to fix it. Each drives the other.\n\n> You don't need perfect data to start. You need to see it in one place — because only then do you know what to fix first and what can wait.\n\nAnd above all of this, AI finally has something solid to hold onto: not raw, contradictory systems, but a single, maintained source — one that signals for itself when it stops being reliable.\n\n---\n\n## Truth first, then peace of mind [Summary]\n\nData quality plays out on two layers and calls for two different moves. The first — whether the data is even true at the source — is work you do once: an audit that catches the invisible gaps in tracking and tells you plainly what to fix. The second — whether the data stays consistent as everything around it changes — is ongoing work that can never be \"checked off.\" That's exactly why building a warehouse yourself rarely holds up: it's not the build you trip over, it's the upkeep. WitCloud does that for you — it keeps a single, maintained source in your own Google Cloud project and signals for itself when something stops adding up.\n\nThe audit fixes the data at the source. WitCloud makes sure it doesn't break again. You don't need perfect data to start — you need to see it in one place and know which numbers you can trust.\n\n::content-cta\n---\neyebrow: WitCloud\nheading: Let's talk about your data.\ndescription: \"We'll show you how WitCloud maintains data quality for you — and where's the best place to start in your case.\"\nbuttonText: Let's talk about WitCloud\nbuttonHref: /contact\n---\n::","2","9 min","We love working with AI — but we've seen more than once where it breaks down: on data that looks correct but isn't. That's why we look at data quality from two sides: an audit that catches and helps fix errors at the source, and WitCloud, which maintains that quality over time.",{"id":408,"alt":19,"name":19,"focus":19,"title":19,"source":19,"filename":409,"copyright":19,"fieldtype":21,"meta_data":410,"is_external_url":32},191752415560470,"https://a.storyblok.com/f/296300/2448x1044/910a31042b/19-audyt-trzy-systemy-dark.png",{},[412,415,418,420],{"_uid":413,"name":231,"content":414,"component":233},"mt-desc-001","Learn why reliable marketing data is the foundation of AI-driven decisions — and how to audit GA4, ad platforms, and your CRM for invisible gaps.",{"_uid":416,"name":299,"content":417,"component":233},"mt-ogt-001","Data Quality | Witbee",{"_uid":419,"name":303,"content":414,"component":233},"mt-ogd-001",{"_uid":421,"name":306,"content":422,"component":233},"mt-ogi-001","https://a.storyblok.com/f/296300/900x600/675e5dffc3/14-data-quality-dark.png",[],[],"data-quality","content/framework/data-quality",-30,[],"a558aba1-4b52-410d-a930-e01155d5ed08",[],{"name":432,"created_at":433,"published_at":255,"updated_at":434,"id":435,"uuid":436,"content":437,"slug":469,"full_slug":470,"sort_by_date":174,"position":471,"tag_list":472,"is_startpage":32,"parent_id":238,"meta_data":174,"group_id":473,"first_published_at":255,"release_id":174,"lang":180,"path":174,"alternates":474,"default_full_slug":174,"translated_slugs":174},"Single Source of Truth","2026-06-25T07:32:39.182Z","2026-08-21T07:00:43.641Z",191214220044196,"0f19eb25-d201-46bd-bd36-9bc2fe2ca0e9",{"_uid":438,"title":439,"content":440,"eyebrow":441,"showTOC":39,"category":19,"priority":442,"readTime":443,"subtitle":444,"component":263,"heroImage":445,"meta_tags":449,"meta_title":455,"heroButtons":462,"updatedDate":467,"bottomBlocks":468},"019bbd02-c3d2-4bf0-b0ee-4ad4dcd7cac0","A single source of truth","All In One is our module in the WitCloud platform. In one place it gathers all your data — from your store, ad systems, analytics and marketplaces — and organizes it into ready-to-use sets you can read answers straight off. It sounds simple, but it's exactly this order that decides whether you make decisions from your data in minutes or in weeks. Let's start with the problem All In One solves.\n\n# You have data everywhere — answers nowhere [The data problem]\n\n“What was our actual ROI last quarter?” — a seemingly simple question that very few people can answer off the top of their head. The data is right there: in GA4, Google Ads, Meta, the e-commerce platform, on the marketplace. And yet, to calculate a single number, someone has to pull it out of every system separately, stitch it together, reconcile the names and clean it up.\n\nSome companies still do it the old way — an analyst glues a report together in a spreadsheet for a week, or everyone waits until the end of the month for the “results to come in,” and only then makes decisions. Some, in 2026, do it in a more modern way: they connect AI directly to their systems — GA4, Meta, the store — via MCP, for example, and ask the model to assemble the report itself. And it works — up to a point.\n\n![](https://a.storyblok.com/f/296300/6b3bf68be1/aio_01_wyspy_systemow.png)\n\n*Every system holds its own piece of the truth — and its own naming. As long as they sit apart, a simple number takes manual stitching every single time, from scratch.*\n\nBecause the problem doesn't disappear when you plug in AI — it just moves. Raw, scattered data is just as hard for the model as it is for a human: to calculate anything, the AI queries six sources, pulls thousands of raw rows about products and transactions into context, fires off query after query — and on larger datasets it simply chokes. It answers slowly, expensively and unreliably.\n\nSo the problem lies neither in a lack of data nor a lack of tools. It lies in the fact that the data is scattered and every source speaks its own language. Gathering it in one place is only half the journey.\n\n**Gathering the data is half the journey. Organizing it so you can read answers straight off it — that's the second half, and the more important one.**\n\n---\n\n# First, everything in one place — and it's yours [One place]\n\nThe first step is mundane, but everything starts with it: All In One brings all your sources — store, ads, analytics, marketplace — together in one place and refreshes them automatically. No more manual exports, no more “yesterday's data.”\n\n![](https://a.storyblok.com/f/296300/9bdb4f254b/aio_02_jedno_miejsce.png)\n\n*The warehouse sits on your own Google Cloud project, not on our servers. The data is and stays yours — with full control and ownership.*\n\nWhere that place lives matters. The warehouse sits on your own Google Cloud project — not on our servers. The data is and stays yours: you have full control over it, full ownership, and the certainty that it isn't locked in with an external vendor that's hard to detach from later.\n\nAnd since it lives in your BigQuery, you open it with whatever you like — Looker Studio, Power BI, Tableau, Google Sheets (Connected Sheets), your own SQL or AI tools. No re-plugging, no exports, no waiting on us. This isn't a legal detail — it means you're building your own asset that stays with you regardless of who you work with, and that nobody can switch off on you.\n\n::content-cta\n---\neyebrow: Data audit\nheading: Not sure where your data actually lives today?\ndescription: \"Let's audit your sources — we'll show what can be connected, and how fast.\"\nbuttonText: Book a free audit\nbuttonHref: /contact\n---\n::\n\n---\n\n# From raw tables to ready answers [Ready answers]\n\nGathering data in one place doesn't yet mean it's ready. A raw API export isn't an answer to a question — it's the raw material you still have to compute the answer from. And the material from every system looks different.\n\nThe simplest example: Facebook calls the money spent **spend**, Google calls it **cost**. It's exactly the same thing — advertising cost — but until someone brings it down to a common word, the two systems refuse to add up. All In One does this automatically: both become a single metric — **ad_system_cost**. And there are hundreds of such mismatches: different names, different date formats, different currencies, different conversion definitions.\n\n![](https://a.storyblok.com/f/296300/92a2d1e9d6/image_3.png)\n\n*Advertising cost is advertising cost — no matter whether a system calls it **spend** or **cost**. Unification brings hundreds of such mismatches down to one consistent model.*\n\nThis is exactly what All In One's whole job is: it brings all your sources down to one common language, and then builds ready-made datasets (datamarts) from them, arranged around real business questions. Instead of dozens of raw tables you still have to join, you get ready-made views:\n\n- **ad_systems** — all costs, clicks, impressions and conversions from ads in one consistent view.\n- **orders** — hard sales from the store combined with marketing costs; here you calculate ERS, ROI, new vs. returning customers.\n- **orders_products** — sales at the level of a single product: what sells, what earns, how it changes over time.\n- **ga_sessions** — traffic and behavior from GA4 combined with ad costs, i.e. blended ROAS for each channel.\n- **ga_orders, ga_attribution_paths, ga_attribution_summary** — sales and multi-channel conversion paths for attribution analysis and budget allocation.\n\n![](https://a.storyblok.com/f/296300/cb2421366e/image_4.png)\n\n*The difference is like between a warehouse full of parts and a finished car. Both “contain” the same thing — but only one of them you can actually drive away.*\n\nAnd all of it tied together from one place, no matter how many tools you use today for ads and sales:\n\n![](https://a.storyblok.com/f/296300/e80687159a/aio_04_integracje.png)\n\nThe question “what was our actual ROI last quarter” then stops being a week-long project. It becomes something you simply read off.\n\n---\n\n# Only now does AI have something to work with [AI has data]\n\nLet's come back to AI, because this is where it all comes together. What wears down an analyst stitching data together wears down the model too — with the difference that the model won't tell you. Thrown at raw, scattered tables it does exactly what we described at the start: it multiplies queries, pulls huge, disorganized sets into context, confuses **spend** with **cost**, computes slowly, expensively and with no guarantee it's right.\n\n![](https://a.storyblok.com/f/296300/1b559fc9be/image_5.png)\n\n*On the left, AI on raw data: many queries, an overloaded context, unstable results. On the right, on ready-made sets from All In One: one question, a clean context, an accurate answer.*\n\nOnce it's organized, the setup flips. The heaviest lifting — joining, cleaning and aggregating millions of rows — All In One does earlier, in the warehouse, on Google Cloud's compute power. So the AI doesn't have to grind through raw tables: it asks for a ready, lightweight set and gets an answer right away. The context stays clean, the queries cheap, and the model does what it's genuinely good at — it analyzes and suggests action, instead of fighting the data format.\n\n---\n\n# Lay the foundation and organize your data — get in touch [The foundation]\n\nA single source of truth isn't a convenience for the people doing the reporting. It's the precondition for everything that comes next. All In One arranges the data once, and the whole WitCloud platform gets a solid, clean base — along with the next modules you run on it: KPI monitoring, customer segmentation, product analysis, an AI assistant.\n\n![](https://a.storyblok.com/f/296300/764135b48c/aio_05_moduly_platformy.png)\n\n*All In One arranges the data once — and every next module of the platform gets a ready, clean base.*\n\nAnd here's the crux. A well-designed, organized dataset lets you move quickly from questions to action: segment customers, analyze product profitability, ask the AI assistant straight out — without a week of stitching reports together and without guessing whether the numbers add up. All In One takes on the hardest part: gathering the data in one place and bringing it to a common language. What's left on your side is just decisions.\n\nThe best moment to lay that foundation is now — and the easiest way to start is a short conversation with us. **Instead of fighting your data — manage it.**\n\n::content-cta\n---\neyebrow: Free trial\nheading: See your data organized — while you're still in the free trial.\ndescription: \"Let's meet: we'll show All In One on your own sources, arranged into ready-made datamarts.\"\nbuttonText: Book a call\nbuttonHref: /contact\n---\n::","WITCLOUD PLATFORM · ALL IN ONE MODULE","1","5 min read","All In One — the WitCloud platform module that brings data from your store, ads, GA4 and marketplaces into one organized source, ready for reports, decisions and AI.",{"id":446,"alt":19,"name":19,"focus":19,"title":19,"source":19,"filename":447,"copyright":19,"fieldtype":21,"meta_data":448,"is_external_url":32},191285268958824,"https://a.storyblok.com/f/296300/900x600/80fd4fadf9/13-ssot-dark.png",{},[450,453,456,458,460],{"_uid":451,"name":231,"content":452,"component":233},"f1a00001-0000-4000-8000-000000000001","All In One brings every data source into one warehouse on your own Google Cloud — unified and arranged into ready-made datamarts, so people and AI can read answers straight off it.",{"_uid":454,"name":299,"content":455,"component":233},"f1a00001-0000-4000-8000-000000000002","A single source of truth — WitCloud All In One",{"_uid":457,"name":303,"content":452,"component":233},"f1a00001-0000-4000-8000-000000000003",{"_uid":459,"name":306,"content":447,"component":233},"f1a00001-0000-4000-8000-000000000004",{"_uid":461,"name":309,"content":310,"component":233},"f1a00001-0000-4000-8000-000000000005",[463],{"_uid":464,"href":132,"size":465,"text":466,"target":29,"rounded":465,"variant":31,"disabled":32,"component":33,"showArrow":39},"799e4e2a-4575-4f9f-89b9-30846035fd89","lg","Book a call","2026-06-30 00:00",[],"single-source-of-truth","content/framework/single-source-of-truth",-10,[],"d206dc5d-43ec-4f6b-bbca-a34e6d8f691f",[],{"data":476,"body":477,"excerpt":-1,"toc":487},{"title":19,"description":221},{"type":478,"children":479},"root",[480],{"type":481,"tag":482,"props":483,"children":484},"element","p",{},[485],{"type":486,"value":221},"text",{"title":19,"searchDepth":488,"depth":488,"links":489},2,[],{"data":491,"body":492,"excerpt":-1,"toc":498},{"title":19,"description":225},{"type":478,"children":493},[494],{"type":481,"tag":482,"props":495,"children":496},{},[497],{"type":486,"value":225},{"title":19,"searchDepth":488,"depth":488,"links":499},[],{"data":501,"body":502,"excerpt":-1,"toc":508},{"title":19,"description":439},{"type":478,"children":503},[504],{"type":481,"tag":482,"props":505,"children":506},{},[507],{"type":486,"value":439},{"title":19,"searchDepth":488,"depth":488,"links":509},[],{"data":511,"body":512,"excerpt":-1,"toc":518},{"title":19,"description":444},{"type":478,"children":513},[514],{"type":481,"tag":482,"props":515,"children":516},{},[517],{"type":486,"value":444},{"title":19,"searchDepth":488,"depth":488,"links":519},[],{"data":521,"body":522,"excerpt":-1,"toc":528},{"title":19,"description":396},{"type":478,"children":523},[524],{"type":481,"tag":482,"props":525,"children":526},{},[527],{"type":486,"value":396},{"title":19,"searchDepth":488,"depth":488,"links":529},[],{"data":531,"body":532,"excerpt":-1,"toc":538},{"title":19,"description":406},{"type":478,"children":533},[534],{"type":481,"tag":482,"props":535,"children":536},{},[537],{"type":486,"value":406},{"title":19,"searchDepth":488,"depth":488,"links":539},[],{"data":541,"body":542,"excerpt":-1,"toc":548},{"title":19,"description":359},{"type":478,"children":543},[544],{"type":481,"tag":482,"props":545,"children":546},{},[547],{"type":486,"value":359},{"title":19,"searchDepth":488,"depth":488,"links":549},[],{"data":551,"body":552,"excerpt":-1,"toc":558},{"title":19,"description":368},{"type":478,"children":553},[554],{"type":481,"tag":482,"props":555,"children":556},{},[557],{"type":486,"value":368},{"title":19,"searchDepth":488,"depth":488,"links":559},[],{"data":561,"body":562,"excerpt":-1,"toc":568},{"title":19,"description":322},{"type":478,"children":563},[564],{"type":481,"tag":482,"props":565,"children":566},{},[567],{"type":486,"value":322},{"title":19,"searchDepth":488,"depth":488,"links":569},[],{"data":571,"body":572,"excerpt":-1,"toc":578},{"title":19,"description":331},{"type":478,"children":573},[574],{"type":481,"tag":482,"props":575,"children":576},{},[577],{"type":486,"value":331},{"title":19,"searchDepth":488,"depth":488,"links":579},[],{"data":581,"body":582,"excerpt":-1,"toc":588},{"title":19,"description":278},{"type":478,"children":583},[584],{"type":481,"tag":482,"props":585,"children":586},{},[587],{"type":486,"value":278},{"title":19,"searchDepth":488,"depth":488,"links":589},[],{"data":591,"body":592,"excerpt":-1,"toc":598},{"title":19,"description":288},{"type":478,"children":593},[594],{"type":481,"tag":482,"props":595,"children":596},{},[597],{"type":486,"value":288},{"title":19,"searchDepth":488,"depth":488,"links":599},[],{"data":601,"body":602,"excerpt":-1,"toc":608},{"title":19,"description":253},{"type":478,"children":603},[604],{"type":481,"tag":482,"props":605,"children":606},{},[607],{"type":486,"value":253},{"title":19,"searchDepth":488,"depth":488,"links":609},[],{"data":611,"body":612,"excerpt":-1,"toc":618},{"title":19,"description":262},{"type":478,"children":613},[614],{"type":481,"tag":482,"props":615,"children":616},{},[617],{"type":486,"value":262},{"title":19,"searchDepth":488,"depth":488,"links":619},[],1787319087312]