Aahfil.

Why Are My Ads Spending on Products That Don't Make Money?

Why ad delivery piles spend onto a few products, how to rank your catalogue by contribution margin instead of revenue, a stop-loss formula for products that never sell, and how to split product sets so margin products get budget on purpose.

·12 min read

Why are my ads spending on the wrong products?

Your ads spend on the wrong products because the delivery system chases the next cheap conversion, and it has no idea what each product earns you. It sees clicks, add-to-carts and the purchase value your pixel sends. It does not see your landed cost, your delivery charge or how often an item comes back. So a cheap, photogenic product that converts easily collects the budget, even when each sale barely covers the ad that produced it.

The concentration feeds itself. Meta's help centre says catalog products are shown dynamically, with each person seeing what they are most likely to find relevant, so the products that win early get more impressions, more data and more confidence. Meta's own recommendations lean the same way: use the all-products set, and switch on add recommended products, which pulls in bestsellers and items with conversions in the last 14 days even when they do not match your filters.

Revenue makes all of this look fine. The product that brings in the most dinars is often the cheapest one, the one on permanent discount, or the one people order on a whim and refuse at the door. In Kuwait, where many stores still offer cash on delivery, a refused parcel costs you a delivery run and the ad that sent it, while Ads Manager counted the purchase the moment the order was placed.

A small market sharpens the problem. If your catalogue runs to dozens of products rather than thousands, two or three items can take most of the spend within weeks, and in a country Kuwait's size the same few thousand people see those items again and again. The fix is not to fight the algorithm. It is to decide which products deserve money, and then to give the system only those choices.

Ready to start your Shopify store?

Start a free trial and try the platform for yourself.

Rank products by contribution margin, not revenue

Contribution margin is what one order leaves you after every cost that order causes: landed product cost, delivery, packaging, payment fees, discounts and the expected cost of returns or refused parcels. It tells you what you can afford to pay an ad for a sale, and it varies by product far more than revenue suggests. Work it out per product, not as a store-wide average, because the average is exactly what hides the problem.

Here is an illustration. Product A sells for KD 12, lands at KD 5, and costs KD 2 to pack and deliver plus KD 0.500 in payment fees, leaving KD 4.500 per order. Product B sells for KD 30, lands at KD 14, with the same KD 2 for delivery and KD 1 in fees, leaving KD 13. Last month A took KD 360 of ad spend for 80 orders, and B took KD 90 for 12 orders.

A looks like the star, with KD 960 in revenue against B's KD 360. But A's 80 orders earned KD 360 of contribution, exactly what its ads cost, so it made nothing. B's 12 orders earned KD 156 against KD 90 of spend, a KD 66 profit. The account gave four times the budget to the product that broke even. Break-even ROAS is price divided by contribution margin: 2.67 for A, about 2.31 for B, and the break-even ROAS calculator works it out per product.

To build the table, export spend, purchases and purchase value from Ads Reporting, which offers a product ID breakdown for catalog ads, and join it to your own cost sheet. Treat that breakdown as a pointer rather than a ledger: someone who tapped a KD 12 scarf can check out with a KD 30 abaya, so check it against your store's orders by product. The guide to ROAS, MER and contribution margin covers the store-wide version.

The stop-loss rule for products that spend without selling

Start with the cost per order you can afford. Allowed cost per order equals contribution margin minus the profit you want to keep on each sale. Then the rule: once a product, or a product set, has spent N times its allowed cost per order since its last sale with nothing to show for it, it comes out of the ads until something changes. The formula is simple, and the only real decision in it is N.

Pick N from probability, not from someone else's benchmark. If a product were genuinely performing at your allowed cost, you would expect roughly one sale for every allowed cost per order you spend. The chance of seeing no sale at all after spending N times that is about e to the power of minus N: roughly one in seven at N = 2, one in twenty at N = 3, and one in fifty-five at N = 4.

That is the chance of pausing a product that was fine, so set N by what a wrong call costs. Use a lower N for thin-margin items and tight cash, and a higher N for new launches, pricier products people consider for longer, and stores where many orders close on WhatsApp, which the pixel never sees. To keep KD 3 per order on Product B, its allowed cost is KD 10, so at N = 3 it gets KD 30 without a sale before it stops.

Apply the rule weekly, not hourly. In catalog ads you do not pause a single product directly; you take it out of the product set, and Meta's help centre advises against editing a product set during a live campaign because performance can suffer while the audience updates. Batch the changes into one weekly edit using a label, and write the rule down so nobody pulls a product on a Sunday just because Friday and Saturday were quiet.

How to split catalog product sets so margin products get budget

Label every product by what it earns, then build sets from the labels. In a Meta catalog you can store your own values in the internal label and custom number fields and filter sets on them, and Meta's help centre now recommends internal labels over custom labels because they do not need a policy review each time you change them. On Google, Merchant Center gives you custom_label_0 to custom_label_4, which shoppers never see.

For a small Kuwait catalogue, three labels usually beat ten: margin products that clear your allowed cost comfortably, hero products that sell in volume and at least break even, and a stop-loss label for anything that has tripped the rule or is running low on stock. Give the margin set its own ad set and budget so it gets spend on purpose, and keep stop-loss products out of every set you advertise.

Then switch off the settings that undo the split. Meta recommends include other products, which lets delivery show items outside your set and is only offered when the set holds less than 60 percent of the catalogue, and add recommended products, which adds bestsellers to a set whatever your filters say. Both make sense if all you want is Meta's efficiency. On a margin set they quietly hand the budget back to the products you were trying to limit.

Mind the minimums and the market. Meta needs at least four unique, valid products in a set for collection ads and two for carousels, and variants count as one, so a margin set of six products where four are the same abaya in different colours holds only three. Meta also says ad sets leave learning after about 50 results in a week, so in a Kuwait-sized audience every extra set divides data you may not have. The product feed checklist covers the labels themselves.

Stock-outs and small catalogues: why spend jumps to the wrong product

Stock-outs move money without asking you. Meta's help centre says out-of-stock products are excluded from ads automatically, which is right, but in a small catalogue it means that when your best margin product sells out, its share of spend flows to whatever is left in the set. In a store with, say, thirty products, that is often low-margin filler you would never have funded on purpose, and the account keeps spending while you wait for the next shipment.

Sizes cause a quieter version of the same thing. A dress can still count as in stock while every size most customers wear has gone, and only one variant appears in each ad anyway, so the ad keeps sending people to a page where their size is sold out. Mark sold-out variants as out of stock in the feed rather than leaving them live, and when the core sizes are gone, move the whole product to the stop-loss label until they return.

If you import your stock, timing matters even more. A reorder that takes weeks means a product can sell its last units under full ad pressure and then disappear for a month. Move it to the stop-loss label when stock falls below what you will sell before the next delivery lands, not when it hits zero, and update the feed on a schedule. When a stock-out lines up with a ROAS drop, the catalog ads recovery plan walks through the checks.

Discount seasons need their own table. During White Friday or Ramadan offers, recalculate contribution at the sale price: Product B's KD 13 falls to about KD 4 at 30 percent off, because the KD 9 discount comes straight out of margin. Meta only shows a sale price lower than the full price, and a sale_price_effective_date stops it outliving the offer. Shopify records a cost per item and reports gross profit by product, so you can start a free Shopify trial and build this table from real orders.

Start your free Shopify trial

Frequently asked questions

Why do my Meta ads spend most of the budget on one or two products?+

Because catalog delivery shows each person the products it predicts they are most likely to act on, so early winners collect more impressions, more data and more budget. The system sees clicks and purchase value, not your landed cost, delivery charge or refusal rate, so a cheap product that converts easily can take most of the spend while earning little. In a small catalogue and a market the size of Kuwait the effect is sharper. Rank products by contribution margin and build product sets so profitable items get budget on purpose.

When should I stop advertising a product that isn't selling?+

Use a stop-loss rule. Allowed cost per order is contribution margin minus the profit you want to keep per sale, and you pause the product once it has spent N times that amount since its last sale without a purchase. Choose N from the odds of a false alarm: if the product were really performing at your allowed cost, the chance of zero sales after N times that spend is about one in seven at N = 2, one in twenty at N = 3, and one in fifty-five at N = 4.

Should I use Meta's all-products set or split my catalog into product sets?+

Meta recommends the all-products set for the best overall ad performance, and that is a fair default when every product is profitable. If some products break even or lose money once delivery and refused cash-on-delivery orders are counted, split the catalogue by a margin label, give margin products their own ad set and budget, and switch off include other products and add recommended products on that set. Keep at least four unique, valid products for collection ads and two for carousels, as Meta requires.

Keep reading

All Paid ads posts →