> ## Documentation Index
> Fetch the complete documentation index at: https://restoo.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Remarketing to guests who did not complete their booking

> How to build, in GA4, Google Ads, Meta and TikTok, an audience of guests who started a booking in the widget and did not complete it, whichever stage you pick.

Whoever books through the widget leaves an event at each stage: they search for availability, see the details form, submit it and, if the business applies a cancellation policy, sign it. Whoever completes the booking also fires the conversion. The difference between the two, people who reached a stage and did not convert, is the remarketing audience, and it is built with the events [Restoo Connect](/widget/connect) already sends, with no BigQuery and no code.

This guide is for businesses and agencies that want to recover those bookings. It explains which event marks each stage on each platform, how to set the audience up in GA4 and Google Ads, in Google Tag Manager, in Meta and in TikTok, and what is particular about the cancellation policy.

<CardGroup cols={2}>
  <Card title="Bidding & Optimization" icon="chart-line" href="/widget/bidding-optimization">
    Which conversions to hand to bidding, and how audiences fit in.
  </Card>

  <Card title="Event mappings" icon="table" href="/widget/connect-mappings">
    What each Restoo event becomes on each platform.
  </Card>
</CardGroup>

## How the audience is built

The rule is the same on every platform and at every stage: **include** whoever reached the stage you pick and **exclude** whoever completed the booking. The booking conversion only fires once the booking is created, or signed if it carries a cancellation policy, so the difference between the two conditions is exactly the people who dropped off along the way.

You do not need to know why they did not continue. Whether they closed the tab, found no availability or the card failed, the conversion is missing in every case, and that is all the audience needs.

The audience is **per person, not per booking**. Someone who leaves a booking half-done and completes another one later drops out of the audience, which is what you want in remarketing.

## Pick the stage

Later stages leave a smaller audience with more intent to book. Pick the one that fits the message: whoever searched for availability gets a reminder of the business; whoever left a booking half-done is invited to book again.

| Reached...                           | GA4 and GTM                             | Meta Pixel                          | TikTok Pixel                        |
| ------------------------------------ | --------------------------------------- | ----------------------------------- | ----------------------------------- |
| Saw the booking start                | `restoo_booking_start_viewed`           | `RestooBookingStartViewed`          | `RestooBookingStartViewed`          |
| Searched for availability            | `search`                                | `Search`                            | `Search`                            |
| Found no availability                | `restoo_booking_no_availability_viewed` | `RestooBookingNoAvailabilityViewed` | `RestooBookingNoAvailabilityViewed` |
| Saw the details form                 | `restoo_booking_details_form_viewed`    | `ViewContent`                       | `ViewContent`                       |
| Started filling in the form          | `form_start`                            | `RestooBookingDetailsFormStarted`   | `RestooBookingDetailsFormStarted`   |
| Saw the cancellation policy          | `restoo_booking_cp_viewed`              | `RestooBookingCpViewed`             | `RestooBookingCpViewed`             |
| Acknowledged the cancellation policy | `restoo_booking_cp_acknowledged`        | `RestooBookingCpAcknowledged`       | `RestooBookingCpAcknowledged`       |

Each row includes whoever reached **at least** that stage and did not book, so whoever dropped off later is in the rows above too. To narrow it down to a single stage, also exclude the next stage's event. The last row is the exception and needs nothing: there the next stage is the conversion itself, because on a booking with a policy it only arrives if the guest signs it.

Every stage reaches all four platforms; each payload is in the [event mappings](/widget/connect-mappings). With the `gtm` destination they are also in the `dataLayer`, under the names in the "GA4 and GTM" column, and your tags can carry any stage to any platform: its tab explains how. They reach the OpenAI Pixel too, but ChatGPT Ads does not build audiences from pixel events — its audiences are uploaded lists — so this guide does not apply to that destination.

Three rows have a catch:

* **`ViewContent` on Meta and TikTok** is also sent when a guest views an experience's detail. The form's `ViewContent` carries `content_name` with the business name and the detail's does not: when defining the audience, add that parameter to keep only the form.
* **No availability** is not an abandonment: the guest wanted to book and could not. The event carries the reason (`availability_outcome`), the date and the party size they searched for, so the natural message is alternative dates or the waiting list.
* **The cancellation policy** has its own section below: the half-done booking exists and gets canceled on its own, so the message cannot assume the table is still held.

## Exclude whoever completed the booking

The exclusion is the same for every row: the booking conversion. Each booking created fires exactly one of the two, depending on whether it is born confirmed or pending, and both must be excluded: a booking pending confirmation or on a waiting list is also complete for the guest, and telling them they did not finish their booking would be a mistake.

| Booking completed as...                                                               | GA4 and GTM     | Meta Pixel | TikTok Pixel |
| ------------------------------------------------------------------------------------- | --------------- | ---------- | ------------ |
| Confirmed booking (`booking_created` with status `CONFIRMED`)                         | `qualify_lead`  | `Schedule` | `Schedule`   |
| Pending booking: request or waiting list (`REQUESTED` or `PENDING_WAIT_LIST_BOOKING`) | `generate_lead` | `Lead`     | `SubmitForm` |

Google Ads receives no diagnostic events from Restoo Connect, so its audience is built in GA4 and shared with the linked account: that is in the steps of the GA4 tab.

<Note>
  Modifying an existing booking never enters these audiences: when editing, Restoo
  Connect forwards neither the stage events nor the conversion, so it adds and
  excludes nobody. See the [event mappings](/widget/connect-mappings).
</Note>

## Configuring each platform

On every platform the audience is defined with the same time window. Start with **14 days**: the guest was looking for a specific date, and once that date has passed the ad no longer recovers that booking, so a long window keeps people in the audience whose date passed weeks ago. A very short one leaves out guests who book ahead and makes it harder to reach the [minimum size](#minimum-audience-size) Google Ads requires. Go down to 7 days if your guests book for the same week; go up to 30 if the audience does not reach the minimum.

<Tabs>
  <Tab title="GA4 and Google Ads">
    The audience is built in GA4, whether it receives the events through the direct `ga4` destination or through your GTM tags, and shared with the linked Google Ads account. Google Ads receives no diagnostic events, so the audience cannot be built directly in Ads.

    <Steps>
      <Step title="Cover the advertising consent">
        A property that exports audiences to Google Ads feeds advertising. With
        the direct `ga4` destination, that has to be [declared in your Restoo
        account](/widget/integrations#google-analytics-4): from then on GA4 only
        receives events from visitors who also accept advertising cookies. With
        GTM it is your GA4 tag that has to honor the advertising signals of your
        Consent Mode. See [what each destination
        requires](/widget/consent#what-each-destination-requires).
      </Step>

      <Step title="Link GA4 to Google Ads">
        [Link the property to the Ads
        account](https://support.google.com/analytics/answer/9379420) and leave
        **personalized advertising** enabled on the link. Without it the audience
        is not exported.
      </Step>

      <Step title="Create the audience">
        In **Admin → Audiences → New audience → Create a custom audience**:

        * **Include** users who triggered the event of the stage you picked in
          the table, for example `restoo_booking_cp_viewed`.
        * **Exclude** users who triggered `generate_lead` or `qualify_lead`, the
          two conversions in the exclusion table. GA4 offers two exclusions:
          **temporary** removes the user while they meet the condition,
          **permanent** removes them for good if they ever met it. Choose
          temporary: with permanent, anyone who completes a booking once would
          stay out even if they leave another one half-done later.
      </Step>

      <Step title="Set the membership duration">
        GA4 allows up to 540 days. Set **14 days** and enable reset on new
        activity, which restarts the duration every time the user meets the
        inclusion condition: whoever leaves another booking half-done stays in
        the audience for another 14 days.
      </Step>

      <Step title="Use it in Google Ads">
        The audience shows up in the linked account's **Audience Manager** within
        hours. Add it as a segment to the remarketing campaign, or as a signal in
        Performance Max, and keep the [minimum size](#minimum-audience-size) in
        mind.
      </Step>
    </Steps>
  </Tab>

  <Tab title="Google Tag Manager">
    With the `gtm` destination, Restoo Connect leaves every event in `window.dataLayer` and sends nothing to any platform: your tags do. The audience is set up on whichever platform you use, following its tab; this is what changes along the way.

    <Steps>
      <Step title="Forward the events to each platform">
        Each platform needs the event of the stage you picked and the two
        conversions in the exclusion table. If your container already forwards
        Restoo's events, there is nothing to add. If not, one **custom event**
        trigger per event, named after the event arriving in the `dataLayer` —
        the "GA4 and GTM" column of the tables — and one tag per platform on each
        trigger. For the two conversions a single trigger with the regular
        expression `generate_lead|qualify_lead` will do.
      </Step>

      <Step title="Give Meta and TikTok the exact signal">
        Their direct destinations already send every stage under its custom
        name, so if you measure through GTM what you do here is reproduce it: a
        custom event tag — for example `RestooBookingCpViewed` — on the stage's
        trigger, under the same name the direct destination uses, so the audience
        works whichever route you came by. For the conversions use their standard
        events, `Lead` and `Schedule` (`SubmitForm` and `Schedule` on TikTok), so
        the exclusion in their tab still holds.
      </Step>

      <Step title="Apply consent in your tags">
        Restoo Connect pushes the events as soon as consent is known; your tags,
        with your container's Consent Mode, are what sends them to each platform.
        Since these audiences feed advertising, the tags have to honor the
        advertising signals: see [`gtm` and the consent your tags
        apply](/widget/consent#gtm-and-the-consent-your-tags-apply).
      </Step>

      <Step title="One path to each destination">
        If GTM already sends the events to a platform, do not also enable its
        direct destination in Restoo: every event would arrive twice. See
        [avoiding duplicate
        conversions](/widget/bidding-optimization#avoiding-duplicate-conversions-across-ga4-google-ads-and-gtm).
      </Step>
    </Steps>
  </Tab>

  <Tab title="Meta">
    The audience is built from the events the pixel receives, through the direct `metaPixel` destination or through your GTM tags.

    <Steps>
      <Step title="Create the audience">
        In **Audiences → Create audience → Custom audience → Website**, with the
        pixel [declared in your Restoo account](/widget/integrations#meta-pixel)
        as the source.
      </Step>

      <Step title="Include the stage">
        People who performed the event of the stage you picked in the last **14
        days**: `Search`, `ViewContent` or the custom event in its row of the
        table, such as `RestooBookingCpViewed`. With `ViewContent`, add the
        `content_name` parameter to keep the form and not an experience's detail.
      </Step>

      <Step title="Exclude whoever completed the booking">
        **Exclude people** who performed `Lead` or `Schedule` in the same period.
      </Step>

      <Step title="Check that the events show up">
        Custom events appear in the dropdown once the pixel has received them at
        least once. If the one you need is missing, check that the destination or
        the tag is enabled and that someone has already reached that stage.
      </Step>
    </Steps>
  </Tab>

  <Tab title="TikTok">
    The audience is built from the events the pixel receives, through the direct `tiktokPixel` destination or through your GTM tags.

    <Steps>
      <Step title="Create the audience">
        In **Assets → Audiences → Create audience → Custom Audience → Website
        Traffic**, with the pixel [declared in your Restoo
        account](/widget/integrations#tiktok-pixel).
      </Step>

      <Step title="Include the stage">
        The event of the stage you picked in the last **14 days**: `Search`,
        `ViewContent` or the custom event in its row of the table, such as
        `RestooBookingCpViewed`. With `ViewContent`, filter by the `content_name`
        parameter to keep the form.
      </Step>

      <Step title="Exclude whoever completed the booking">
        **Exclude people** with the `SubmitForm` and `Schedule` events in the same
        period. TikTok shows `SubmitForm` as `Lead` in its reports.
      </Step>

      <Step title="Turn on Auto-Refresh">
        So the audience keeps refreshing itself with new events.
      </Step>
    </Steps>
  </Tab>
</Tabs>

## The cancellation policy, a case of its own

If the business applies a cancellation policy, with a guarantee or a prepayment, submitting the form does not complete the booking: the widget shows the policy and the guest has a deadline to **sign it**, that is, to accept it and validate their card. Until then the booking stays pending; if they do not sign in time, it is canceled and fires no conversion. It is the last stage before the conversion: the guest had already chosen a date, a time and a party size and filled in their details.

In GA4 and GTM the signal is direct: `restoo_booking_cp_viewed` is sent when the widget shows the policy. If you prefer a narrower audience, `restoo_booking_cp_acknowledged` marks whoever also ticked "I have read and accept the cancellation policy".

On Meta and TikTok the signal is just as direct, under the stage's custom name: `RestooBookingCpViewed`, or `RestooBookingCpAcknowledged` for the narrower audience. Excluding both booking conversions, what remains is whoever saw the policy and did not sign it.

Since the pending booking is already canceled by the time the ad arrives, the guest has to book again: the message cannot assume their table is still held.

## Other uses of the same audiences

* **Suppression.** Exclude the booking conversion — and `Contact` for phone-first venues — from prospecting campaigns, so you stop paying to reach guests who already booked. They are the same events as in the exclusion table, used as a negative list.
* **Lookalikes.** Seed Meta and TikTok lookalikes and Google similar audiences from guests who completed the booking, not from those who filled in the form.
* **Remarketing by experience.** To retarget whoever viewed a specific experience and did not pick it: include `view_item` in GA4 and GTM, or `ViewContent` with that experience's `content_ids` in Meta and TikTok, and exclude the selection — `select_item` in GA4 and GTM, `RestooBookingItemSelected` on Meta and TikTok — or the booking conversion. Experiences are identified by ID, not by name: see [what Restoo deliberately omits](/widget/connect-mappings#what-restoo-deliberately-omits).

Match rates improve with `customer_identified` matching data enabled: `login` in GA4, Advanced Matching in Meta and `identify` in TikTok.

## Before launching the campaign

### Minimum audience size

Google Ads does not serve ads to a segment until it reaches a minimum of active users in the last 30 days:

| Google network  | Minimum active users |
| --------------- | -------------------- |
| Display, Gmail  | 100                  |
| Search, YouTube | 1,000                |

The later the stage, the harder it is to reach the threshold: an audience of searches gets there before one of unsigned policies. If the audience does not reach it, extend the membership duration to 30 days or pick an earlier stage before giving up on it. Meta and TikTok show the size in the tool itself and warn when it is too small to serve ads.

### Consent

These audiences are advertising. Only visitors who granted the advertising signals enter them, and the numbers will be a fraction of the widget's traffic. [Each destination has its own requirements](/widget/consent#what-each-destination-requires); with the `ga4` destination, the property also has to be declared as "also for advertising".

## Official references

**Google**

* [Google Analytics 4 audiences](https://support.google.com/analytics/answer/9267572)
* [Link Google Analytics to Google Ads](https://support.google.com/analytics/answer/9379420)
* [Audience segments and minimum size in Google Ads](https://support.google.com/google-ads/answer/7558048)

**Meta**

* [Create a Custom Audience from website events](https://www.facebook.com/business/help/666509013483225)

**TikTok**

* [Create a Website Traffic audience](https://ads.tiktok.com/help/article/how-to-create-a-website-traffic-audience)

## Next steps

<CardGroup cols={2}>
  <Card title="Bidding & Optimization" icon="chart-line" href="/widget/bidding-optimization">
    Which conversions to hand to bidding, and how audiences fit in.
  </Card>

  <Card title="Consent" icon="shield-check" href="/widget/consent">
    What each signal unlocks per destination and how it reaches the widget.
  </Card>
</CardGroup>
