Home Articles How to Measure Whether a Feed Change Actually Moved Your ROAS How to Measure Whether a Feed Change Actually Moved Your ROAS Published Date: 14 Sep, 2026 Most teams find out a feed change "worked" the same way: they fixed something in the feed, watched ROAS in Google Ads for a week, and it went up. That is not evidence. Google Ads itself will tell you as much — a Performance Max experiment only compares one full campaign against another; it has no mechanism to split-test one product segment against another inside the same campaign. If you want to know whether relabeling 400 SKUs, fixing a title formula, or adding a margin-based custom_label actually moved ROAS, you have to build that proof yourself, out of reporting tools that were not designed for it. This guide gives you a scoring rubric for deciding when a before/after ROAS number is trustworthy, a worked example using Google's own custom label attribute, and a clear list of what native Performance Max reporting will and will not tell you. It is not about adjusting bids — we do not do bid management, and nothing here asks Google Ads to change how it bids. This is the kind of measurement question growth and performance teams run into constantly once feed optimization work moves past the basics. Why "ROAS went up after the change" is not proof Three things happen at once whenever a feed change goes live: Google's algorithms keep learning, seasonality keeps moving, and your own team keeps making other changes — a new promotion, a budget bump, a competitor going out of stock. A ROAS delta measured across that mess tells you what happened, not why. The problem is structural, not a matter of trying harder: Performance Max does not give you a built-in, randomized way to test a feed segment against a control group within one campaign. Google's own documentation on Performance Max experiments confirms the scope is the whole campaign, not a slice of the catalog: an experiment splits traffic between a "base arm" and a "trial arm" at the campaign level and reports only "aggregated conversions, conversion value, CPA, ROAS, and spend for the groups" (Google Ads Help, Performance Max experiments FAQs). There is no listing-group or custom-label arm inside that structure. So the tool you would reach for first — a proper Google Ads experiment — cannot answer the question "did this specific feed change move ROAS." You are left with observational reporting, and observational reporting needs guardrails before you trust it. What Google actually lets you measure inside Performance Max The only native mechanism for seeing performance broken out by a feed attribute inside Performance Max is the listing groups view inside an asset group. You can subdivide the product set by category, brand, item ID, condition, product type, channel, or up to five custom labels, and the listing groups table reports metrics — Google's own help documentation confirms you can "filter your listing groups to search for the data that interests you the most, like clicks, conversions, or the average cost-per-click" (Google Ads Help, Manage a Performance Max campaign with listing groups). That is different from the asset group "Combinations" report, which only shows which creative assets performed well together and has nothing to do with product-level or feed-attribute performance (Google Ads Help, About asset group reporting for Performance Max). If your plan for measuring a feed change is "check the asset group report," you are looking at the wrong report — and it is worth double-checking exactly what your Google Merchant Center feed is sending before you assume the listing groups are even built on the attribute you think they are. The attribute most teams use to carve out a measurable segment is custom_label_0 through custom_label_4. Per Google Merchant Center's own specification, each is a string of 1–100 characters, optional per product, one value per label per product, and capped at 1,000 unique values account-wide per label attribute (Google Merchant Center Help, custom_label_0–4). Google's own worked examples for how to use the five slots are season, sales performance (BestSeller/LowSeller), clearance status, and profit margin (LowMargin/HighMargin) (Google Ads Help, Use custom labels for Shopping ads) — which is exactly the kind of segment you need if you want to isolate a feed change to a group small enough to reason about, but still large enough to generate data. Two operational details matter for anything you measure this way: label changes take up to 24–48 hours to propagate into Google Ads reporting, and Performance Max caps listing groups at 1,000 per asset group, with Google explicitly warning that going that high "is not a best practice" because performance tends to suffer (Google Ads Help, Manage a Performance Max campaign with listing groups). The measurability scoring rubric Before you read a before/after ROAS number as a verdict on your feed change, score it against six criteria. Each is worth 0, 1, or 2 points, for a maximum of 12. Criterion0 points1 point2 points Segment isolationChange applied to the whole feed at onceChange applied to a named category, no labelChange applied to a distinct custom_label segment you can filter to Conversion volumeSegment generates under 30 conversions/week30–100 conversions/week100+ conversions/week Time window stabilityWindow crosses a sale, holiday, or budget changeWindow is a normal 2–3 week period, minor promo overlapClean 2–3 week window, confirmed no other campaign changes (Google's own experiment guidance recommends this length before drawing conclusions (Google Ads Help, Monitor your experiments)) Confound checkBids, budgets, or targeting also changed in-windowOne minor unrelated change occurredNothing else changed in the account for this segment Propagation bufferMeasured same day as the feed changeMeasured 1 day afterMeasured 48+ hours after, per Google's label propagation window ComparabilityNo pre-change baseline capturedBaseline captured but different length than test windowEqual-length pre/post windows, both captured before analysis Score interpretation: 9–12 means you can act on the number with reasonable confidence. 5–8 means treat it as directional — worth a second cycle before you scale the change. 4 or below means the number is noise; do not present it as a result internally, and do not let it justify a bigger rollout. A worked example: relabeling low-margin SKUs Say your feed has 8,400 SKUs and no margin signal in it. You add custom_label_3 with values HighMargin and LowMargin, populated from your product cost data, and apply it only to your outerwear category (612 SKUs) as a first test before rolling it out account-wide. FieldBeforeAfter custom_label_3(empty)LowMargin idOW-4471OW-4471 titleMen's Packable Down JacketMen's Packable Down Jacket price1,299.00 TRY1,299.00 TRY In Performance Max, you build a listing group node for custom_label_3 = LowMargin inside the outerwear asset group, wait 48 hours for the label to propagate, then let a clean 2–3 week window pass with no other account changes touching that asset group. At the end of the window, you pull ROAS for that listing-group node for the two weeks before the label existed (using category-level performance as your proxy baseline, since the label itself did not exist yet) against the two weeks after. Run that comparison through the rubric above before you say anything about the result: if outerwear generated 140 conversions a week in-window with no confound and you waited the full propagation buffer, you are at 10–12 points and the number is trustworthy. If a Black Friday promotion started three days into your test window, you are down to 5–6 points, and the honest conclusion is "inconclusive, retest in a clean window" — not "ROAS is up 14%." Reading the listing-group report without fooling yourself Three habits keep this measurement honest. First, always compare equal-length windows — a five-day "after" against a fourteen-day "before" will move averages for reasons that have nothing to do with your change. Second, pull the comparison at the listing-group level, not the asset-group or campaign level; campaign-level ROAS will absorb whatever every other segment is doing and dilute your signal. Third, treat every single before/after cycle as one data point, not a verdict — repeat it on a second segment before you roll a labeling change out to the full 8,400-SKU feed. None of this requires touching bid strategy, target ROAS, or budget; it is entirely a feed-data and reporting exercise, which is also why it is something your feed platform should support directly rather than something you do only by hand in the Google Ads UI. Growth and performance teams that have gotten this segmentation work right have used it to justify catalog-wide changes with real numbers behind them — Bilyoner's move into catalog ads is one example where a feed-level change was tied to a measured ROAS outcome rather than a hunch. What this doesn't cover, and where this breaks down This framework gets you a defensible directional read using tools every Performance Max advertiser already has. It is not a randomized controlled trial. Because Google does not expose a true segment-level holdout inside a live Performance Max campaign, you cannot fully rule out that Google's own bidding algorithm reallocated impressions toward your labeled segment for reasons unrelated to the label itself — the rubric reduces that risk, it does not eliminate it. If you need statistically rigorous incrementality measurement — a real control group, confidence intervals, geo-holdouts — that is a job for a dedicated experimentation or marketing-mix-modeling platform, not a feed tool, and you should not expect a feed management platform (Feedance included) to produce that level of proof. Similarly, if your actual goal is automated, margin-aware bid adjustment rather than measurement — having a system act on the profitability label rather than just report on it — that is a product decision some platforms in this space are built around; Feedance's job stops at making sure the label exists, is correctly populated, and is reported on cleanly. We do not adjust bids on your behalf. If your team sits under a growth or performance function, that reporting discipline — not automated bidding — is usually the higher-leverage place to start. Frequently asked questions Can I A/B test one custom_label segment against another inside a single Performance Max campaign?No. Google's own Performance Max experiment structure splits traffic at the campaign level between a base arm and a trial arm, not between listing groups inside one campaign, and reports only aggregated metrics for each arm. How many custom labels can I use, and do they cost anything in feed complexity?Five slots, custom_label_0 through custom_label_4, each a string of 1–100 characters with up to 1,000 unique values allowed account-wide per label. They are optional per product and invisible to shoppers, so adding them does not affect how the product displays. How long should I wait after a label change before measuring anything?At least 48 hours for the label itself to propagate into Google Ads reporting, and then a full clean window — Google recommends 2–3 weeks for its own experiments to produce a reliable read — before drawing conclusions. What is the difference between the asset group "Combinations" report and the listing groups report?The Combinations report shows which creative assets (headlines, images, video) performed well together; it has no product or feed-attribute breakdown. The listing groups report is the one that lets you filter performance by category, brand, item ID, condition, product type, or custom label. My segment only gets 15 conversions a week. Is there any point measuring it?Not reliably on its own. Either widen the segment (a broader category instead of a single custom label value), extend the time window well past three weeks, or accept that any result you see is directional at best — score it accordingly on the rubric above. Does this framework apply to standard Shopping campaigns too?Yes, and in some ways it is cleaner there, since standard Shopping campaigns support Google Ads experiments (drafts and experiments) with true traffic-split testing at the ad group and product group level, unlike Performance Max. Can Feedance run this measurement for me automatically?Feedance can create and maintain the custom_label segmentation in the feed itself, on your sync schedule (daily on Essentials, hourly on Business), so the labels exist cleanly and consistently for you to report on in Google Ads. It does not run the ROAS analysis or touch bidding. What if I changed multiple things in the feed at once — title, images, and the custom label?Then you cannot attribute a ROAS change to any one of them. Score that scenario a 0 on the confound criterion and treat the whole test as void; isolate one variable per measurement cycle. Run a free audit of your product feed to see where your feed is missing the segmentation signals — like clean custom labels — that make this kind of measurement possible in the first place. Prev Article Diagnosing and Fixing TikTok Shop Product Listing Rejections at Feed Scale Related to this topic: How Bilyoner Ran Catalog Ads for the First Time and Lifted ROAS by 49% 15 Aug, 2026 How Note Cosmetics Increased ROAS by 127% — While Spending 10% Less 15 Aug, 2026 How Vivense Lifted ROAS 32% by Not Advertising Products It Couldn't Sell 15 Aug, 2026