If your Meta CPA in food and beverage looks unsustainable, it probably is — as long as you keep measuring it against one 250g bag. Coffee, ghee, granola, cold-pressed juice, protein powder, pickles, dog treats: these are consumables with a known burn rate. A customer who likes the product buys it again in three to six weeks whether you ask them to or not. So the useful question isn't "how do I get CPA down", it's "how much of that repeat behaviour can I lock in at the point of first purchase, and what does that let me pay for a customer?" Subscription-first offers are the mechanism. Done properly, they let you bid past competitors who are still solving for a single-order ROAS.
Here's the part that annoys people: most of the work is on the product page and in the fulfilment plan, not in Ads Manager.
Why Meta ads for food and beverage look broken on first-order maths
Take a single-origin 250g pack at ₹649. COGS, pouch, label, pick-and-pack, forward shipping and payment fees come to ₹247. Contribution is ₹402.
New-customer CPA on Meta, blended across prospecting and retargeting, is ₹470. You are down ₹68 on order one. Every dashboard says the channel doesn't work. Every founder in the category has had this conversation with their ad agency, usually in month two, usually followed by a request to "fix the creative".
Creative is rarely the binding constraint. The offer is. You are selling a two-week supply of something the customer will need for the next two years, and asking Meta to make that transaction profitable inside a 7-day click window.
The arithmetic that justifies a higher acquisition cost
Now put a subscription in front of the same buyer. Monthly delivery at 10% off: ₹584 per shipment. Same cost base of ₹247, so contribution per delivery is ₹337.
Assume a retention curve — and this is an assumption you must replace with your own cohort data before you spend real money on it. Out of 100 subscribers who start:
- Delivery 1: 100
- Delivery 2: 72
- Delivery 3: 58
- Delivery 4: 48
- Delivery 5: 41
- Delivery 6: 36
That's 355 deliveries from 100 starts, so 3.55 deliveries per subscriber across six months. Contribution: 3.55 × ₹337 = ₹1,196.
At a ₹470 CPA you are returning roughly 2.5× on contribution inside two quarters. You could pay ₹900 to acquire that subscriber and still bank about ₹296. Cash payback lands during the third delivery, because cumulative contribution goes ₹337, ₹674, ₹1,011 — it crosses ₹900 in month three. For a category with 30–45 day cycles, that's a working-capital position most founders can actually finance.
But nobody gets a 100% subscription take rate. Say 30% of new buyers choose the subscription and 70% buy one-time. Average contribution per acquired customer becomes (0.3 × 1,196) + (0.7 × 402) = ₹359 + ₹281 = ₹640. A ₹470 CPA now works, though not comfortably.
Push take rate to 50% and the same customers are worth (0.5 × 1,196) + (0.5 × 402) = ₹799. That's a 25% increase in what you can afford to pay Meta, from a product-page change, with no change to the ad account at all.
Which is the whole argument. Subscription take rate is a bigger lever on allowable CPA than anything your media buyer will find this quarter.
The product page changes before the ads do
Things we change, in rough order of impact:
Subscription selected by default, with the one-time option visible and not hidden. If the radio button defaults to one-time, take rate sits low no matter what the ad promised. Making it default typically moves the number more than the discount size does.
Cadence tied to consumption, not to the calendar. Don't offer "monthly" for a pack that lasts 18 days. Offer 2 weeks / 3 weeks / monthly and let the customer pick, or ask a single question — "cups a day?" — and preselect. Cadence mismatch is the quietest killer of subscription programs. If the pack outlasts the cycle, the customer skips; skip twice and they cancel.
Skip, pause and cancel stated before checkout, in plain words, above the fold. Founders resist this because it feels like flagging the exit. It raises take rate. Indian buyers are wary of recurring mandates for good reason, and "pause anytime from WhatsApp" removes the objection cheaply.
Slightly under-size the pack relative to the cycle. A pack that runs out two days early gets replaced. A pack with a week of leftovers gets skipped.
None of this needs a rebuild. It's a selling plan, a page-section change and some Liquid on the cart. If your theme fights it, that's a day or two of work — see how we scope this kind of build rather than waiting for a full redesign cycle.
COD is why this plan fails in India
A subscription needs a prepaid mandate. UPI Autopay or a card e-mandate. If a large share of your orders are cash on delivery, you have just excluded that share from your subscription funnel entirely.
The recurring-mandate ceiling isn't your problem — the AFA-free limit on e-mandates is far above a ₹600 coffee order. The problem is behavioural. Many buyers who would happily reorder every month will not authorise a mandate on a brand they discovered forty seconds ago in a Reels feed.
Two things that work:
- Price the prepaid subscription against COD one-time honestly. If COD costs you ₹40 in handling plus an RTO rate you can quantify, the subscription discount partly pays for itself. Show the gap.
- For the COD-heavy segment, stop pretending. Run a reorder-reminder flow instead: timed to the pack's actual burn rate, one-tap reorder link on WhatsApp, no mandate. It won't produce ₹1,196 of contribution. It will produce more than ₹402.
Run the CPA maths separately for the prepaid and COD cohorts. Blended, they hide each other, and you'll end up funding COD acquisition with subscription economics that don't apply to it.
What to optimise for in the ad account
Keep the Purchase event clean and honest. Real revenue, no predicted LTV stuffed into the value field. Inflate purchase values and you corrupt the only signal Meta's value optimisation has.
Fire a separate Subscribe event from the server side, off the Shopify order webhook, when the order contains a selling plan allocation. Browser pixels get this wrong often enough that we don't rely on them for it.
Then: don't switch your campaigns to optimise for Subscribe until you're clearing roughly 50 of those events per ad set per week. Below that you're feeding the algorithm noise and CPMs will punish you. Under that threshold, optimise for Purchase and control the subscription mix on-site. That's the boring answer and it's usually the right one.
Two exclusions that get missed constantly: active subscribers should not be in prospecting audiences, and they shouldn't be in the same retargeting pool as browsers. Paused and skipped subscribers, on the other hand, are the cheapest audience you own — a reactivation ad against a 400-person paused list will often beat everything else in the account on CPA.
Upload the subscriber cohort as a customer list and build value-based lookalikes from it, weighted by contribution rather than first-order revenue. That's where predicted LTV belongs.
Creative that sells a cadence
Percentage-off hooks bring in one-time bargain buyers, re-anchor your price, and drag take rate down. They also work in the first week, which is why everyone keeps using them.
What holds up longer in this category:
Run-out framing. "You'll finish this in 16 days." It's a claim about the customer's own kitchen, so it earns attention that a discount doesn't. Second-delivery UGC — someone opening the box they didn't have to think about ordering. Cadence as the call to action: the ad asks how often, not whether.
Perishability is a creative asset. Roast date on the pack, cold chain in the shot, "we roast Tuesday, it ships Wednesday". Shelf-life honesty converts in food the way ingredient lists do in supplements.
One warning on FSSAI: whatever nutrition or health framing your creative uses has to match your label and your licence category. We've had ads pulled and, worse, had a claim in a video that the pack couldn't support. Get the copy past whoever owns your labelling before it goes into a paid test.
Pincode reality for chilled and frozen
Meta doesn't target Indian pincodes. You get cities, regions, and pin-drop radii. If you ship chilled to eleven cities and your prospecting campaign is set to India, you are paying for impressions in places you cannot serve, and the resulting cancellations will look like conversion-rate weakness rather than a targeting error.
Build radius clusters around each serviceable hub. Cap the radius at real transit time, not at where the map looks tidy. If a 36-hour lane consumes 30% of a fresh product's shelf life, that lane doesn't get ads.
Also: put the serviceability check before the price on the landing page for cold-chain products. Nothing kills a subscription funnel faster than collecting a mandate and then telling someone you don't deliver to them.
Involuntary churn eats the plan
The 72-58-48 curve above includes people who wanted to stay and were removed by a failed payment. Card mandates expire. UPI Autopay debits fail on insufficient balance and on bank downtime, which in India is not a rare event. Tokenised cards drop out when the card is reissued.
Retry on day 1, day 3 and day 7, then send a manual pay-now link over WhatsApp and email with the exact amount and the delivery date it protects. Notify before the debit, not after the failure. If your subscription app doesn't expose the dunning schedule, that's a reason to change apps.
Recovering even a slice of failed debits changes the LTV number your entire bidding strategy rests on. It is unglamorous work and it pays better than a new creative concept.
Landing page speed, because it caps everything else
Meta traffic is impatient and mostly on mid-range Android over 4G. A product page with a 3.5s LCP on that connection loses a chunk of paid clicks before the price is visible. We usually find the damage in review-widget scripts, a bundle app, and three unused pixels nobody removed. Getting LCP under 2s on the pages your ads point at is a one-time fix with a permanent effect on CPA — how we approach it.
Measure it in a sheet, not in Ads Manager
One tab. Rows are first-order cohorts by month. Columns: new customers (from Shopify, not Meta's attributed count), Meta spend, CPA, subscription take rate, then deliveries 2 through 6 with contribution against each.
Use Shopify's new-customer count as the denominator. Meta on 7-day click / 1-day view will report more purchases than you had; that's fine for optimisation and useless for deciding what you can afford to pay. Recalculate the retention curve every month. When the curve firms up, raise your target CPA deliberately — and expect volume to appear at prices your competitors have decided are irrational.
Start with the cohort sheet. Two hours of arithmetic on last quarter's orders will tell you whether your take rate or your churn is the constraint, and that determines whether the next fix is a page change or a dunning flow. If you want a second pair of eyes on the numbers and the ad account together, request an audit and send the last 90 days of subscription data with it.

