Marketing — Facebook
Facebook ad performance
⚠️ These are Facebook's own reported numbers. FB over-credits paid ads for sales that organic and repeat customers would have made anyway — so treat ROAS/purchases here as an ad-ops signal for comparing ads against each other, not your real profit (that's the home page, where CAC is on new customers only).
New-customer CAC = ad spend ÷ actual new Shopify customers — your real cost to acquire someone. The per-ad FB $/purch. in the table below is Facebook's own (inflated) count — good for ranking ads against each other, not your true CAC. (A true per-ad CAC needs UTM attribution — see the roadmap.)
By ad — what's actually working
Catalog Error: Table with name fb_ad_daily does not exist!
Did you mean "pg_catalog.pg_prepared_statements"?
LINE 11: from (select * from trueprofit.fb_ad_daily
^CAC by ad — cost to acquire, cheapest first
Ad spend ÷ FB conversions, per ad. (FB's attributed purchases — includes repeats and FB's over-crediting, so it's for comparing ads to each other, not your true bottom-line CAC.)
Catalog Error: Table with name fb_ad_daily does not exist!
Did you mean "pg_catalog.pg_prepared_statements"?
LINE 11: from (select * from trueprofit.fb_ad_daily
^Spend by ad
Catalog Error: Table with name fb_ad_daily does not exist!
Did you mean "pg_catalog.pg_prepared_statements"?
LINE 11: from (select * from trueprofit.fb_ad_daily
^Spend by ad over time
Catalog Error: Table with name fb_ad_daily does not exist!
Did you mean "pg_catalog.pg_prepared_statements"?
LINE 2: ...:date as period, ad_name, sum(spend) spend from (select * from trueprofit.fb_ad_daily
^When you add more ads, adsets, or campaigns, every table and chart here breaks them out automatically — the pull is at the ad level and carries the full ad → adset → campaign hierarchy.
