When the TableGo booking widget is embedded on your website, normal page-view tracking cannot always see when a guest completes a reservation because the booking flow runs inside TableGo.
To help with this, TableGo can send a browser message to your website when a booking is fully confirmed. Your developer or agency can use this message to trigger GA4, Google Ads or Meta conversion tags.
When the Event Fires
TableGo sends a browser message only when all of the following are true:
- The guest started the booking from your embedded widget on your website
- The reservation status is confirmed
- Any required deposit is paid, or any required card guarantee is saved
- The same booking has not already been counted in this browser session
The event does not fire on page loads, abandoned forms or bookings still waiting for email confirmation. If guests must confirm by email before the booking becomes final, the conversion will not be sent to your website in v1.
Where to start
- 1
Add the booking widget to your website
In TableGo Business, go to Settings → Integrations and copy your Website Embed (Iframe) code. Add this iframe to the page where guests make bookings.
- 2
Add the conversion listener
Ask your web developer to add the example listener below to the same page that contains the TableGo iframe. The listener receives the confirmed-booking event from the widget and pushes it into your website's dataLayer.
- 3
Connect your conversion tags
In Google Tag Manager, GA4, Google Ads or Meta, use the dataLayer event tablego_booking_confirmed to trigger your conversion tags.
Example Listener
There are two event names used here:
- tablego:booking_confirmed is the browser message sent by TableGo.
- tablego_booking_confirmed is the dataLayer event your website can use in GTM or GA4.
window.addEventListener('message', (event) => {
if (event.origin !== 'https://tablego.uk') return;
if (event.data?.type !== 'tablego:booking_confirmed') return;
// GTM / GA4 event name: tablego_booking_confirmed
window.dataLayer = window.dataLayer || [];
window.dataLayer.push({ event: 'tablego_booking_confirmed', ...event.data });
// Meta Pixel example — choose the event name used in your campaign
// fbq('track', 'Lead', { content_name: event.data.restaurant });
});Event Payload
The message type is tablego:booking_confirmed. It includes the restaurant identifier (slug and short ID, e.g. restaurant-name--abc123), the TableGo reservation ID, party size, date, time and whether a deposit or card guarantee was used. This payload is intentionally limited to non-personal booking data.
Guest names, emails, phone numbers, payment details, Stripe IDs and booking tokens are never included.
{
type: 'tablego:booking_confirmed',
version: 1,
restaurant: 'restaurant-name--abc123',
reservationId: '550e8400-e29b-41d4-a716-446655440000',
partySize: 4,
date: '2026-06-20',
time: '19:30',
source: 'widget_embed',
protection: 'deposit'
}Deposits and Card Guarantees
Stripe payment and card-save steps open in a new browser tab when the widget is embedded.
TableGo will try to deliver the conversion event back to the original website tab automatically, so your developer usually does not need extra code for this flow.
The original website tab must remain open. If the guest closes the original website tab before completing the payment or card step, the conversion event may not be delivered back to your website.
Testing
- 1
Add the listener
Copy the example listener from this guide and add it to the page where the widget is embedded.
- 2
Complete a test booking
Make a reservation through the widget on your site.
- 3
Verify one event
Your developer should see exactly one tablego:booking_confirmed message. Refreshing the confirmation page should not send a duplicate.
- 4
Cancel the test booking
Remove the test reservation from your dashboard when finished.
Conversion tracking only works for the embedded widget on your website. Direct TableGo links and TableGo Page bookings do not send events to your website.