Every Shopify operator has at some point sat in a campaign review and asked the same question: "is a $40 CPA good?" The honest answer is that nobody can tell you, including the person who set the campaign up, until they know what that customer is actually worth and how much it costs to deliver the order they place.

CPA on its own is a halfway number. It tells you what you spent to acquire a customer, but it does not tell you whether that customer was profitable. Most Shopify brands track CPA at the campaign level, set a target ("we need under $35"), and decide if the number is good or bad without ever connecting it to gross margin per order. That is the version that gets you in trouble, and it gets uglier fast across multiple stores.

This post explains what profit-aware CPA actually measures, why blended CPA across multiple stores is dangerous, and what to do once you have the right number.

The short definition

Cost per acquisition (CPA) is total ad spend divided by the number of new customers acquired in the same period. If you spent $4,000 on Meta and acquired 100 new customers, your CPA is $40. The math is simple. Treating that $40 as good or bad in isolation is where things go wrong.

A $40 CPA is excellent for a brand selling premium audio equipment at $200 with 45% gross margin. The same $40 CPA is suicidal for a brand selling $30 t-shirts with 30% gross margin. The number is identical. The economics are different worlds.

Profit-aware CPA fixes this by measuring CPA against contribution margin per first order. The right question is not "is $40 a good CPA" but "is $40 below my first-order contribution margin, with a buffer for fixed costs?"

The formula

Here is the version that matters.

Profit-aware CPA formula
First-order contribution margin = AOV − COGS − Shipping − Payment fees − Refund cost CPA cap = First-order contribution margin Target CPA = First-order contribution margin × (0.60 to 0.75)

If first-order contribution margin is $48, your absolute CPA ceiling is $48. Your target should land between $29 and $36 to leave real profit after fixed costs.

In plain English: if your average first order leaves $48 in your bank after every cost except advertising, your absolute ceiling for CPA is $48. At $48 you broke even before fixed costs (rent, salaries, software). To actually make money, CPA needs to sit somewhere south of $35 to $40 on a one-time buyer, or up to $43 if your repeat rate within 90 days is strong.

Why blended store-wide CPA is misleading

Most brands compute one CPA across every campaign and every product. Meta's reporting shows it as a single number, the team treats it as a unified target, and the message stops there.

The problem is that most stores sell products with very different cost structures. A product with 45% gross margin and a 1% return rate has very different CPA economics from a product with 25% gross margin and a 7% return rate. Same store, same ad accounts, completely different break-points.

If you push 40% of your spend into the lower-margin product but compare results against a blended store CPA target, half your decisions are wrong. The lower-margin campaign looks fine on the blended number while it is bleeding contribution margin in the background. The higher-margin campaign gets killed for missing the blended target when it was actually printing money.

The multi-store version of this problem

For brands running two, three, or four Shopify stores, CPA blending gets uglier. The same paid media accounts often cover multiple stores. The Meta pixel fires across all of them. The "blended CPA" you see in Meta is a mean across all customers across all brands.

That number is meaningless when the underlying stores look like:

A blended $42 CPA across all three tells you literally nothing about whether any single store is acquiring customers profitably. You are looking at an average that nobody actually experienced.

The fix is per-store CPA, broken out by paid channel, with each store measured against its own first-order contribution margin. This sounds obvious. In practice, almost no Shopify operator has it because the data lives in five places: ad spend in Meta and Google, customer counts in each individual Shopify admin, COGS in Shopify variants (sometimes), shipping in 3PL invoices, and fees in payment processor dashboards.

Worked example: same campaign, two stores, two completely different verdicts

A brand runs a single Meta campaign that drives traffic to two of their Shopify stores via different audiences. Meta reports a blended $42 CPA across the campaign. Looks fine. The team scales it.

Store A: vinyl records

LineValue
AOV$42
COGS38%
Shipping absorbed4%
Payment fees3.1%
Refund and chargeback cost0.4%
First-order contribution margin %54.5%
First-order contribution margin $$22.89
CPA cap$22.89

Store B: premium audio

LineValue
AOV$185
COGS52%
Shipping absorbed6%
Payment fees3.0%
Refund and chargeback cost1.1%
First-order contribution margin %37.9%
First-order contribution margin $$70.11
CPA cap$70.11

Same $42 CPA across the campaign. Store A is upside-down by $19 per customer. Store B has $28 of headroom on every order. The blended Meta number says "good campaign". The truth is that one store is losing money on every acquisition while the other is highly profitable.

What "good CPA" actually means

A profit-aware CPA target works backwards from contribution margin. The rule of thumb most serious brands use:

CPA targets relative to first-order contribution margin

Maximum CPA: 100% of first-order contribution margin. This is your ceiling. Above this you are losing money on the order itself.

Target CPA: 60-75% of first-order contribution margin. This leaves real profit on the first order, which covers fixed costs.

Aggressive CPA: 75-90% of first-order contribution margin. Acceptable only if your 90-day repeat purchase rate is above 35% and you have data on it. Repeat economics carry the rest.

For a product with $48 first-order contribution margin: maximum is $48, target is $29 to $36, aggressive is $36 to $43. Set this per store and per product family, never as a single store-wide number.

What to do once you have it

The practical move is to stop looking at blended Meta CPA and start looking at per-store, per-product CPA against the cap. Three rules:

Kill threshold

Kill a campaign when 14-day rolling CPA exceeds the contribution margin of the product or product family it is driving. Three consecutive days over the cap, kill it.

Scale threshold

Scale when 14-day rolling CPA is at or below the target (60-75% of contribution margin) for three consecutive days at the current spend level.

Hold zone

Anything between maximum and target is the danger zone. The campaign is technically profitable on the first order but has no buffer for repeat-rate volatility or unexpected refund spikes. Hold spend, do not scale.

The data problem

Calculating profit-aware CPA per store and per product requires four data sources at minimum: Meta and Google ad spend, Shopify per-product COGS and AOV, payment processor fees by store, and refund and chargeback rates by product. Most Shopify operators have these in five different tools, none of which talk to each other, and the result is that nobody actually computes profit-aware CPA. They eyeball the blended number, set a flat target, and hope.

The alternative is either a SaaS dashboard that handles part of this (Triple Whale and Lifetimely cover simple cases for single-store brands) or a custom build that pulls every source via API and computes contribution margin per first order automatically.

At Perch we build profit-aware CPA per store and per product family directly into every dashboard. Meta and Google spend lands beside Shopify cost data and payment fee data, contribution margin is computed live, and operators see CPA against the cap on every campaign. No blending across stores, no eyeballing a flat target, no decisions made on Meta's version of the number.

Bottom line

CPA in isolation is meaningless. Profit-aware CPA, measured against first-order contribution margin per store and per product family, is the only version that tells you whether your acquisition is actually working.

The rule: maximum CPA equals contribution margin, target CPA is 60-75% of contribution margin, and aggressive CPA up to 90% is acceptable only if your repeat rate carries the rest. Do this per store, per product family, never blended across the brand.

If you are running multiple Shopify stores against a single blended CPA target, you are guessing. The fix requires pulling data from at least four sources and keeping it current. However you build that, the underlying math is what changes the decisions.

See per-store, per-product CPA against the cap in one view.

Every Perch dashboard calculates profit-aware CPA automatically, using live data from your ad accounts, COGS, fees, and refund rates. Tell us about your stack and we'll email your quote.

Get your quote →