Booking data that
finally tells a coherent story.
Cooper's Hawk had GA4, Google Ads, and Meta Ads all tracking booking conversions separately — each with its own definition of what a conversion meant. We built a structured GTM event taxonomy to track the full Reserve Table and Takeaway journeys, aligned conversion signals across all three platforms, and delivered seven Looker Studio dashboards that give leadership, marketing, and operations teams a single, consistent view of booking performance across all restaurant locations.
Three platforms. Three different conversion counts. No shared definition of a booking.
"The marketing team was reporting ROAS from Meta. The analytics team was counting conversions from GA4. Finance was looking at the booking system. None of the numbers agreed — and everyone had a different explanation for why."
No consistent definition of a booking conversion
GA4, Google Ads, and Meta Ads each counted conversions differently. GA4 tracked page views on the confirmation URL. Google Ads imported a different event. Meta Pixel fired on a separate trigger. None mapped cleanly to a real completed booking — and comparing them across platforms was meaningless.
No funnel visibility — drop-off points were invisible
The team knew overall booking rates were low, but had no way to see where in the journey users were leaving. Was it before clicking Reserve Table? During the booking form? On a specific mobile device or from a specific campaign? Without structured funnel events, there was no way to answer any of these questions.
Paid attribution was unreliable across Google Ads and Meta
Campaign performance was being evaluated on platform-reported conversions, but neither platform's conversion tracking was properly aligned with the actual booking journey. Meta Pixel was firing on page load rather than booking completion. Google Ads was importing the wrong GA4 event. ROAS figures were inflated and not actionable.
Manual reporting — slow decisions, stale data
There was no centralised reporting layer. Performance reviews required someone to manually pull data from GA4, Google Ads, and Meta Ads separately, reconcile the numbers in a spreadsheet, and then present them. Reports were always at least a week behind and inconsistent from week to week.
A structured event taxonomy — built around how bookings actually happen.
| Event name | When it fires | Key parameters captured | What it enables |
|---|---|---|---|
| click_reserve_table | User clicks "Reserve Table" button | restaurant_id, restaurant_name, restaurant_city, page_type, booking_type | Top-of-funnel intent signal; restaurant-level reservation interest; channel attribution for demand |
| click_takeaway | User clicks "Takeaway" button | restaurant_id, restaurant_city, booking_type, page_type | Takeaway funnel entry; separates reserve vs takeaway intent by location and channel |
| booking_start | Booking flow initiated (form opened or step one reached) | restaurant_id, restaurant_name, booking_type, source_platform | First committed step in funnel; drop-off between intent click and booking start is calculated here |
| booking_complete | Booking confirmed successfully | restaurant_id, restaurant_name, restaurant_city, booking_type, location, source_platform | Primary conversion; fed to Google Ads + Meta Pixel; powers all conversion rate and CPA calculations |
| view_restaurant | Restaurant detail page viewed | restaurant_id, restaurant_name, restaurant_city | Location-level demand signal; which restaurants get organic interest before intent clicks |
Design principle: every event carries restaurant_id and booking_type as standard parameters — so any dimension in any dashboard can be sliced by location or booking journey without additional tracking work.
GTM fires the events. GA4, Google Ads, and Meta receive them. Looker Studio surfaces everything.
User action on booking site
User clicks Reserve Table, starts the booking flow, or completes a booking at any restaurant location.
GTM fires event tags
Configured triggers detect the user action. GTM fires the GA4 event tag, the Meta Pixel custom event tag, and the Google Ads conversion tag simultaneously.
GA4 records events + marks conversions
All events land in GA4 with their full parameter payloads. booking_complete is marked as a conversion. Funnel exploration and channel attribution are available immediately.
Ad platforms receive conversion signals
Google Ads receives booking_complete for bid optimisation. Meta Pixel receives a booking conversion event for audience targeting and campaign ROAS measurement.
Looker Studio pulls everything
GA4 and Google Ads connect via native connectors. Meta Ads connects via Supermetrics. All seven dashboards refresh daily from live platform data.
-
01
→ GTM Implementation
Tags, triggers, and variables — built for reliability and auditability.
Every GTM tag was built against explicit trigger conditions — CSS selectors for button clicks, element visibility for form steps, and URL-based triggers for confirmation pages. Variables were configured to extract restaurant name, location, and booking type from the page DOM and dataLayer. All tags were QA'd in GTM Preview/Debug mode before publishing, and validated in GA4 DebugView and Realtime reports.
- GA4 event tags for all 5 events in the taxonomy
- Meta Pixel custom event tag for booking_complete conversion
- Google Ads conversion tag aligned to booking_complete
- Custom variables: restaurant_name, restaurant_id, booking_type (DOM + dataLayer)
- UTM variable for campaign parameter persistence across booking flow
- QA via GTM Preview + GA4 DebugView + Meta Events Manager
-
02
→ GA4 Configuration
Conversions marked, custom dimensions registered, channel attribution verified.
booking_complete was marked as the primary conversion in GA4. Custom dimensions were registered for restaurant_id, booking_type, and location so event parameters are available as breakdowns in GA4 explorations and in Looker Studio. UTM-based channel attribution was verified against GA4's default channel grouping, with custom channel rules applied where campaign naming conventions required it.
- booking_complete marked as primary conversion event
- Custom dimensions: restaurant_id, booking_type, location, page_type
- Funnel exploration built: click_reserve_table → booking_start → booking_complete
- Takeaway funnel built: click_takeaway → booking_complete
- Channel attribution verified + custom rules applied where needed
-
03
→ Meta Pixel + Google Ads Alignment
Both platforms now optimise against the same real booking event.
The original Meta Pixel implementation was firing on page load rather than booking completion — inflating conversion counts and causing the algorithm to optimise toward low-intent users. We replaced it with a GTM-fired custom conversion event that fires only on confirmed booking_complete. Google Ads conversion tracking was aligned to the same event via a GTM tag, replacing the old imported-goal setup that was pulling from the wrong GA4 event.
- Meta Pixel: custom booking_complete event replaces old page-load trigger
- Event match quality verified in Meta Events Manager
- Google Ads conversion tag fires on booking_complete (GTM trigger)
- Old GA4 imported goal removed from Google Ads to prevent double-counting
- Both platforms now receiving the same conversion signal, correctly attributed
GA4 is the source of truth.
Sessions, users, engagement, funnel completion, and device-level behaviour are all owned by GA4. Funnel analysis and restaurant-level intent vs completion comparisons are run from GA4 explorations and reported in Looker Studio via the native connector.
Google Ads data is the source of truth.
Spend, impressions, clicks, CPC, and campaign-level conversion data come directly from Google Ads via the native Looker Studio connector. CPA and ROAS for paid search are calculated from Google Ads figures — not from GA4 session attribution, which can differ.
Meta Ads data is the source of truth.
Facebook and Instagram paid performance — spend, reach, conversions, and campaign-level efficiency — is pulled from Meta Ads via Supermetrics into Looker Studio. Platform-reported Meta conversions are used for Meta-specific ROAS; GA4-attributed conversions are used for cross-channel blended views.
Two booking journeys. Every drop-off point visible. Every segment comparable.
Three events. Every drop-off calculated at each step.
The Reserve Table funnel tracks three events in sequence: click_reserve_table (intent), booking_start (committed entry into the booking flow), and booking_complete (confirmed booking). Each step conversion rate is available in GA4 funnel exploration and surfaced in the Looker Studio Funnel Analysis dashboard.
The funnel can be sliced by device (mobile vs desktop), source/medium, campaign, and restaurant location — making it possible to identify not just where users drop off, but which channel or location is responsible for the highest drop-off rate. This is where the event parameters pay off: without restaurant_id on every event, the funnel would show aggregate drop-offs with no way to act on them at a location level.
- Step 1 — click_reserve_table (top-of-funnel intent click)
- Step 2 — booking_start (user entered the booking flow)
- Step 3 — booking_complete (confirmed reservation)
- Breakdowns: device · source/medium · campaign · restaurant
- Drop-off rate calculated between every consecutive step
- Available in GA4 funnel exploration + Looker Studio dashboard
- restaurant_id — unique identifier per location
- restaurant_name — human-readable for dashboard labels
- restaurant_city — geographic grouping for geo analysis
- booking_type — reserve_table vs takeaway per event
- page_type — listing / restaurant_detail / checkout context
- source_platform — web (extendable for app or future channels)
Which restaurants need more demand? Which ones are losing bookings at the form?
The event parameter design was built specifically to answer operations and marketing questions at the restaurant level — not just in aggregate. By capturing restaurant_id and restaurant_name on every event, every metric in every dashboard can be filtered or grouped by individual location.
This made it possible to compare: which restaurant gets the highest click_reserve_table rate per session? Which location has the lowest booking_start to booking_complete conversion? Is the drop-off worse on mobile or on desktop for a specific city? These are the questions that drive real operational decisions — and they require restaurant-level parameters from day one, not as an afterthought.
Seven dashboards — from executive KPIs to location-level booking drill-down.
Executive Overview — All Channels
Leadership-ready view of overall performance across the business and all paid channels, updated daily.
- Sessions, users, booking starts, booking completions
- Conversion rate: booking_complete / sessions
- Paid spend — Google Ads + Meta Ads
- Blended cost per booking (combined paid)
- ROAS and trend lines week-over-week
GA4 Website Performance
Traffic quality, user behaviour, and conversion indicators — what the website is doing for bookings.
- Acquisition by default channel grouping + source/medium
- Landing page performance (which entry points drive bookings)
- Device comparison: mobile vs desktop conversion differences
- Engagement metrics, bounce patterns, session depth
- Conversion trend by acquisition channel
Funnel Analysis — Reserve + Takeaway
The core analytical dashboard — step-by-step conversion rates and drop-off points for both booking flows.
- Reserve Table: click_reserve_table → booking_start → booking_complete
- Takeaway: click_takeaway → booking_complete
- Drop-off rate by step, by device, by source, by restaurant
- Funnel comparison across campaigns where applicable
- Mobile vs desktop split per step
Restaurant / Location Booking Performance
Operations and marketing view — which locations drive intent vs which locations lose bookings.
- Bookings by restaurant / location
- Booking intent (click_reserve_table) vs completion by restaurant
- Conversion rate per restaurant location
- Day and time trends for each location
- Geo analysis: where users come from per restaurant
Google Ads Performance
Paid search efficiency dashboard — from campaign level to individual ad, with CPA and ROAS where booking value is available.
- Spend, impressions, clicks, CTR, CPC
- Conversions (bookings), CPA, ROAS
- Campaign → ad group → ad breakdown
- Device and geo performance splits
- Performance trend over time
Meta Ads Performance
Paid social performance across Facebook and Instagram — spend, reach, and booking conversion efficiency via Meta Pixel.
- Spend, reach, impressions, frequency, CTR
- Conversions (bookings), CPA from Meta Pixel data
- Campaign → ad set → ad breakdown
- Creative performance and audience insights where available
Blended Paid Media — Cross-Channel
The unified paid media view — total spend, total bookings, and blended efficiency across Google Ads and Meta Ads side by side.
- Total spend: Google Ads + Meta Ads
- Total bookings (platform-reported, clearly defined)
- Blended CPA and blended ROAS
- Channel contribution and share of spend trend
- Spend vs bookings trend — budget shift signals
GTM, GA4, Meta Pixel, Google Ads, Looker Studio — each tool doing what it does best.
Google Tag Manager
Central tag management for all event firing — GA4 tags, Meta Pixel, and Google Ads conversion tags all deployed and maintained through GTM. Trigger-based architecture means new tracking requirements don't require code changes on the website itself.
Google Analytics 4
Receives all events with full parameter payloads. booking_complete is marked as the primary conversion. Custom dimensions enable restaurant-level segmentation in explorations and in Looker Studio via the native connector. Funnel explorations built for both booking journeys.
Meta Pixel + Google Ads
Both platforms receive the booking_complete conversion signal via GTM — aligned to the same real event. Meta Pixel enables audience optimisation and social ROAS measurement. Google Ads conversion tag supports bid strategy optimisation toward confirmed bookings.
Looker Studio + Supermetrics
Seven dashboards connected to GA4 and Google Ads via native connectors, and to Meta Ads via Supermetrics. Daily refresh. One metric definition change in the data source propagates to every dashboard simultaneously — no manual updates, no stale numbers.
Running GA4, Google Ads, and Meta with no shared definition of a conversion?
We build the measurement foundation — structured GTM event tracking, aligned conversion signals across all ad platforms, and automated Looker Studio dashboards — so your team makes decisions from one consistent set of numbers.
Book a 30-min call →US · UK · EU · APAC · Billing in USD.