Take a Quick Look at Roastar
Roastar prints custom coffee packaging — the beautiful bags your favorite roaster’s beans come in. Their business has a wrinkle most ecommerce brands don’t: nobody clicks “buy” on day one. A customer submits a project, artwork goes back and forth, proofs get approved, and the actual order might land days or weeks after the first website visit — long after standard analytics has lost the thread.
The Challenge: Conversions That Happen Off the Website
By the time a project became a paid order inside Roastar’s production system, GA4 had no idea. Marketing could see form fills; it couldn’t see which campaigns produced orders — which is the only number that matters when you’re deciding where to spend.
The Build: An Offline Conversion Pipeline Into GA4
- Identity foundation: Roastar’s internal company ID rides along as the GA4 user ID, so every logged-in session ties back to a real customer account — proper B2B account stitching.
- Capture at the source: when a project is submitted, the site quietly captures the GA4 client, session, and session-number identifiers and stores them on the project record.
- Webhooks on lifecycle events: as a project moves through its statuses — artwork submitted, proof approved, ordered — Roastar’s system fires a webhook with the project details and order value.
- Automation does the stitching: the webhook lands in a Make.com scenario that looks up the customer’s original session in BigQuery and sends a properly-formed offline event into GA4 via the Measurement Protocol — attributed to the campaign that started it all.
Alongside it, a server-side tagging container feeds GA4, Meta’s Conversions API, and Google Ads with cleaner, more complete conversion data.
The Result
Lifecycle events that happen weeks after the first click now show up in GA4, attached to the channel and campaign that earned them — so ad budget gets judged on orders, not form fills.