I'll be completely transparent here: at Fulfill.com, we're a 3PL marketplace focused on logistics operations, not a paid social advertising platform. We don't typically track paid social CAC payback using GA4 and BigQuery because that's not our core business model. However, I can share how we've helped our e-commerce clients think about this problem from a fulfillment perspective. The most valuable insight I can offer is that understanding true CAC payback requires blending marketing data with fulfillment costs, which most brands overlook. When our clients at Fulfill.com calculate their 90-day payback, they often forget that fulfillment expenses directly impact profitability and can make or break whether their paid social campaigns are actually profitable. What I've observed working with hundreds of e-commerce brands is that they'll celebrate hitting their target CAC, but then realize their fulfillment costs ate into margins so much that the unit economics don't work. The brands that succeed are those who integrate their GA4 conversion data with their actual fulfillment costs per order from their 3PL. Here's the approach I recommend to our clients: export your GA4 conversion data into BigQuery, then join it with your warehouse management system data that includes actual pick, pack, and ship costs per order. This gives you true profitability by channel, not just revenue. One client discovered their Instagram ads had great CAC on paper, but the products driving those conversions were bulky items with 40 percent higher fulfillment costs, making those campaigns unprofitable within 90 days. The specific decision this informed was reallocating ad spend away from campaigns driving high-fulfillment-cost products toward campaigns converting customers on lighter, more profitable items. This increased their actual 90-day payback rate by 23 percent even though their reported CAC stayed the same. If you're looking for someone who specifically runs paid social campaigns and uses BigQuery for attribution modeling, I'd recommend connecting with a performance marketing expert or e-commerce CMO rather than a logistics CEO. I'm happy to discuss how fulfillment economics impact overall customer acquisition profitability, but the technical GA4 query implementation isn't my area of expertise.
I've used GA4 + BigQuery to line up paid social costs with 90-day revenue from those users, then check if payback happens inside that window. The core method was: join GA4 user-level data (with traffic source info) to downstream revenue events, then join that to a daily paid social spend table from the ad platform. In BigQuery, I first built a view that: - Filters GA4 to first_touch_channel = "Paid Social". - Groups users by the date they first arrived and the campaign/ad set. - Sums all revenue events for those users over the next 90 days. - Joins that to daily campaign spend from a separate cost table. In SQL terms, the key bit was a user-level cohort join like: FROM ga4_events e JOIN ( SELECT user_pseudo_id, MIN(event_date) AS ft_date FROM ga4_events WHERE first_user_source_medium LIKE '%paid social%' GROUP BY user_pseudo_id ) u ON e.user_pseudo_id = u.user_pseudo_id AND e.event_date BETWEEN u.ft_date AND DATE_ADD(u.ft_date, INTERVAL 90 DAY) Then I rolled it up by ft_date and campaign, added the spend column, and calculated "90-day revenue / CAC" for each cohort. CAC here is total paid social spend for that campaign cohort divided by new customers in the cohort. One decision this drove: in one ecommerce account, a Meta campaign looked good in-platform on last-click ROAS, but in this 90-day view its payback was much worse than other campaigns. It brought in lots of one-and-done buyers with low order values. We cut that campaign and moved budget to a creative set that had slower first purchases but a much better 90-day payback in BigQuery.
I pulled daily Meta spend at the user level into BigQuery through Supermetrics, then tied it to GA4 conversion data by matching session IDs and timestamps. From there, I built a SQL view that rolled up paid social spend, mapped it to users who converted within a 90-day window, and totaled the revenue those same users brought in during that period. That view made it painfully clear which audiences were actually paying back. One Lookalike segment was earning back about 80% of its CAC in the first month, while another struggled to clear 40% even after three. We cut the underperformer the same day and shifted that budget into the better-performing creative and audience mix.
We don't use the standard GA4 interface for actual CAC payback tests--we need to see the journey at user-level to truly understand CAC paybacks. Our solution is exporting everything to BigQuery for a more joined-up view. We start with the GA4 event export, which we join with our CRM to understand subscription revenue and then each paid social platform on a daily basis to see ad spend. The trick is then making a user materialized view from that. We use a SQL window function to find the very first paid social touchpoint for each `user_pseudo_id` then attach the acquisition campaign and date to them. Beyond this we then know how much money that user has generated in 90 days of acquisition. So we can connect acquisition $ to revenue and time. This analysis help contributed to a big budget reallocation. We'd discover that one campaign had very cheap cost per install but a very poor 90 day payback while another campaign was +30% CAC but 50% faster payback because of user LTV. We'd get confident cutting spend from the "cheaper" channels and doubling down on the more expensive channels however faster payback.