CLIENT CASE STUDY — Cooper's Hawk Winery — Measurement & Reporting
Data Engineering · D8 · GTM → GA4 + Ads → Looker Studio
Rev. 2026.05 · Live client

Booking data that
finally tells a coherent story.

→ LIVE CLIENT Cooper's Hawk Winery — restaurant booking measurement + reporting GTM · GA4 · Meta Pixel · Google Ads · Looker Studio

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.

7 dashboards in Looker Studio 2 booking funnels Reserve + Takeaway GA4 + Google Ads + Meta aligned Multi-location restaurant brand
Section01
— The challenge

Three platforms. Three different conversion counts. No shared definition of a booking.

Siloed tracking
→ unified measurement

"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."

→ Problem 01

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.

→ Problem 02

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.

→ Problem 03

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.

→ Problem 04

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.

Section02
— The measurement plan

A structured event taxonomy — built around how bookings actually happen.

GTM events
consistent naming
rich parameters
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.

Section03
— How the data flows

GTM fires the events. GA4, Google Ads, and Meta receive them. Looker Studio surfaces everything.

GTM → GA4
→ Ads platforms
→ Looker Studio
→ Step 01

User action on booking site

User clicks Reserve Table, starts the booking flow, or completes a booking at any restaurant location.

→ Step 02

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.

→ Step 03

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.

→ Step 04

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.

→ Step 05

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
→ Web Behaviour + Funnel

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.

→ Paid Search Performance

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.

→ Paid Social Performance

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.

Section04
— The funnel design

Two booking journeys. Every drop-off point visible. Every segment comparable.

Reserve Table
+ Takeaway
funnels
→ Reserve Table funnel

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.

→ Reserve Table funnel steps
  • 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-level parameter breakdown
  • 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)
→ Location-level reporting design

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.

Section05
— What stakeholders see

Seven dashboards — from executive KPIs to location-level booking drill-down.

7 dashboards
daily refresh
Looker Studio
→ Dashboard A

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
→ Dashboard B

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
→ Dashboard C

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
→ Dashboard D

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
→ Dashboard E

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
→ Dashboard F

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
→ Dashboard G

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
Section06
— The stack

GTM, GA4, Meta Pixel, Google Ads, Looker Studio — each tool doing what it does best.

No custom infra
proven platforms
standard connectors
→ Event collection layer

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.

→ Web analytics + conversions

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.

→ Paid attribution + optimisation

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.

→ Reporting layer

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.

001 / Dashboards delivered
7
Executive · GA4 · Funnel · Location · Google Ads · Meta Ads · Blended
002 / Booking funnels mapped
2
Reserve Table + Takeaway — each with full step-by-step drop-off visibility
003 / Platforms aligned
3
GA4 + Google Ads + Meta Ads — same conversion definition, consistent signals
004 / Events in taxonomy
5+
click_reserve_table · click_takeaway · booking_start · booking_complete · view_restaurant
005 / Parameters per event
6+
restaurant_id · city · booking_type · page_type · location · source_platform
006 / Manual reporting steps
Zero
All dashboards refresh automatically from live platform data every day
Section07

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 →
Fixed-price engagements only. We scope it, price it, ship it.
US · UK · EU · APAC · Billing in USD.