> This is part 1 of 2 of the full documentation (pages 1–100 of 197).
> The content is paginated: fetch every part to see all of it.
> Next part: https://docs.flip.to/llms-full.txt/1
> Page index: https://docs.flip.to/llms.txt

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
This site has an agentic ask interface you may use to query the documentation dynamically by asking a question.

Perform an HTTP GET request on the following URL with the `ask` and `goal` query parameters:

```
GET https://docs.flip.to/index.md?ask=<question>&goal=<user_goal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is what the user is ultimately trying to achieve, the reason they need the answer. Sharing it helps GitBook give you a better, more relevant answer. A goal is most helpful when it describes the outcome the user wants rather than restating the question. For example, with `ask=how do I create an API token`, a goal like `automate deployments from our CI pipeline` lets GitBook tailor the answer to that use case.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

---

# Ready for lift off

Find everything you need to know to get started with Flip.to.

{% embed url="<https://stream.flip.to/welcome-aboard?v=5>" %}

Flip.to is a collaborative marketing platform built to reach, inspire and win over travelers in the dreaming and planning phases of the traveler journey. Our platform is designed to spark better conversations with every traveler to grow a highly targeted, high-quality audience at scale. And all this tracks to increases in direct revenue.

### Explore our guides and how to easily integrate Flip.to

<table data-view="cards"><thead><tr><th></th><th></th><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><i class="fa-terminal">:terminal:</i></td><td><mark style="color:$primary;">Documentation</mark></td><td>Get started with the platform, and find answers to questions about settings or strategies along the way.</td><td><a href="https://docs.flip.to/get-started/quickstart">https://docs.flip.to/get-started/quickstart</a></td><td><a href="https://2958427785-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FG80gO5DouAlKp5wQbLe2%2Fuploads%2FI9PcHGIpOxV80BY8xPvn%2F1.png?alt=media&amp;token=ed92f852-48ac-46e0-902e-972a8a7f9eba">1.png</a></td></tr><tr><td><i class="fa-server">:server:</i></td><td><mark style="color:$primary;">Changelog</mark></td><td>Find a record of all the new and noteworthy features, upgrades and changes here.</td><td><a href="https://docs.flip.to/changelog">https://docs.flip.to/changelog</a></td><td><a href="https://2958427785-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FG80gO5DouAlKp5wQbLe2%2Fuploads%2FCvmyfwSg8D3Mv8Nj3dp5%2F2.png?alt=media&amp;token=22cea287-e497-4f25-96ca-05db3c505f45">2.png</a></td></tr><tr><td><i class="fa-leaf">:leaf:</i></td><td><mark style="color:$primary;">Policies</mark></td><td>Get access to agreements, privacy, security, and compliance docs for all you need about how the Flip.to platform works.</td><td><a href="https://docs.flip.to/policies">https://docs.flip.to/policies</a></td><td><a href="https://2958427785-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FG80gO5DouAlKp5wQbLe2%2Fuploads%2FtWpnSh984c7eHRKeCJq9%2F3.png?alt=media&amp;token=c999257d-700d-42cb-aff7-08d8233c7723">3.png</a></td></tr></tbody></table>

### You're joining an exceptional community of global brands and travel marketers

Don't hesitate to say hello to our [Customer Success team](https://docs.flip.to/support/customer-success) at any point.


# Quickstart

Getting started with Flip.to is a copy and paste. And at every step along the way, our [Customer Success team](/docs/support/customer-success) is here to help.

**Wondering what to expect?** Here's Hal from our team to share a peek at what the coming days-to-weeks will look like:

{% embed url="<https://stream.flip.to/getting-started-what-onboarding-to-flip-to-looks-like?v=5>" %}

## Implementation

Add this to the **\<head>** tag of every page of your website and booking engine:

```html
<script async src="https://integration.flip.to" crossorigin="anonymous"></script>
```

For any additional configuration, see [Set up your website](/docs/integrations/websites/set-up-your-website) and [Set up your booking engine](/docs/integrations/booking-engines/set-up-your-booking-engine). Or [introduce us](/docs/support/customer-success) to your tech contacts and we'll take it from there.

{% hint style="info" %}
After you've completed these steps, there will be no visible changes on your website or booking engine until Flip.to is configured in your account. You'll have a chance to preview everything before switching live.
{% endhint %}

## Configuration

If you're starting on implementation, odds are that our [Customer Success team](/docs/support/customer-success) is well underway configuring every aspect of your platform.

We'll be sharing over preview links for approval, and working with you to ensure everything aligns to inspire and win over travelers for your brand.


# Discovery

Discovery reimagines your booking path, sparking better conversations with travelers across the planning phase and unveiling prospects who are interested in your brand.

Your website is transformed to bring the best experience and to engage and win over planners who are at the top, middle, and bottom of funnel. All this with impact tracked to revenue.

{% embed url="<https://stream.flip.to/introducing-discovery?v=5>" %}


# Launchpad

The goal of Discovery is to unveil a new audience of planners on your site and turn them into guests—and more direct booking revenue. Here's what to expect for getting up and running:

## Prep for launch

Our [Customer Success team](/docs/support/customer-success) configures every aspect of Discovery to get you started. We'll likely ask for a few things, like [seasonal photos](/docs/platform/mission-control/seasonal-photos) and a [friendly point person](/docs/platform/mission-control/point-person).

You'll receive preview links to review and approve, and at any point you can tweak the configuration in your account.

## Lift off

Once you give approval, Discovery is switched live for your site visitors.

Discovery is designed to measure its impact in real-time to ensure that it performs well and drives measurable revenue.

On launch, our [Customer Success team](/docs/support/customer-success) will ensure everything looks good, and then Discovery kicks off as an A/B test. Discovery tracks impact in real-time to ensure that it performs well and drives measurable revenue.

## A/B test

The Discovery A/B test is measured in one of two ways, depending upon your volume of site traffic and conversions.

{% embed url="<https://stream.flip.to/rolling-out-discovery-measuring-performance-in-an-apples-to-apples-way?v=5>" %}

During the A/B test, every site visitor will automatically be assigned either Discovery or Control (your website without Discovery).

<details>

<summary>For sites with a higher volume of traffic</summary>

The Discovery A/B test will compare Discovery to Control (your website without Discovery) in real-time. 50% of your site visitors will see Discovery and the other 50% will see Control.

The A/B test will reach statistical relevance within a few weeks to a couple of months. Once this happens, and Discovery has proven to outperform Control, the A/B test is concluded. Discovery is then available to all site visitors.

</details>

<details>

<summary>For sites with a lower volume of traffic</summary>

The Discovery A/B test will compare its performance to platform averages to ensure that planner unveils, re-engagement communication and conversions are looking good.

</details>

{% hint style="info" %}
If you'd like to see Discovery, you can add a special parameter to the URL:\
<http://www.yourwebsite.co&#x6D;**?ftvariation=flipto**\\>
\
And if you'd like to see Control:\
<http://www.yourwebsite.co&#x6D;**?ftvariation=client>\*\*
{% endhint %}

## Mission accomplished

And with that, you're ready to go. Discovery is now growing your audience of planners each and every day, and you can measure its impact in real-time from your account.


# Day-to-day

Every day, Discovery sparks conversations with travelers in the planning phase in a more authentic way. To see the impact, [sign in to your account](https://manage.flip.to/) and go to **Platform → Discovery**.

{% embed url="<https://stream.flip.to/congratulations-discovery-is-live?v=5>" %}

**The Big Picture** gives you a bird's eye view at some key stats as well as the revenue impact of Discovery.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FsWgIeTDKjhH9tJwDfZW4%2Fmanage.flip.to_p_margaritaville-beach-resort-hollywood-beach_discovery_journeys%20(1).png?alt=media&amp;token=77ee9432-31ef-4c38-837c-3da325202188" alt=""><figcaption></figcaption></figure>

**Journeys** gives you a step-by-step guide to what your audience will see with Discovery, and you can customize traveler-facing settings here as well.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FPVd2xyK2b3BEFMccazra%2Fmanage.flip.to_p_margaritaville-beach-resort-hollywood-beach_discovery_journeys.png?alt=media&amp;token=a6c5662d-932d-40b4-90d9-5705b22f5b80" alt=""><figcaption></figcaption></figure>

For any questions on the results, or how to adjust Discovery, feel free to reach out to our [Customer Success team](/docs/support/customer-success).


# Experiences

With **Discovery + Experiences**, inspire travelers planning a stay by introducing the experiences and local community where they'll spend their time.

Plus, start learning new signals of traveler’s interests, blend into the site and communication, and save their plans for when they’re ready to book.

## Experiences in the planner journey

### Start with a better user experience that's proven to outperform

This reimagined approach ultimately helps properties to **sell more time**.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2F8lssrSLZ3U4BWaZSvujy%2Fdiscovery-plannerflow-ranges.png?alt=media&amp;token=7da07609-5846-4f5a-89fe-c912f35f545c" alt=""><figcaption></figcaption></figure>

### Guide planners, and encourage longer stays

Elevate the reasons for choosing your property, and provide the opportunity to convert and increase stay length.

<div><figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fggi67g5c8IWzzN1YaPF9%2Fdiscovery-plannerflow-linear.png?alt=media&amp;token=bc963e8b-6c3e-4cce-9010-ec36cd398c19" alt=""><figcaption></figcaption></figure> <figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FOlkJAoSEwlH0usYNhDnW%2Fdiscovery-plannerflow-experience.png?alt=media&amp;token=01d54ef6-02a5-4cf8-b8e1-6b816b72f1e9" alt=""><figcaption></figcaption></figure></div>

{% embed url="<https://stream.flip.to/new-and-improved-planner-flow-on-the-way?v=5>" %}

## Impact is proven

Don't just take our word for it. The impact of inspiring planners right from the planner journey has a major impact on your bottom line.

{% embed url="<https://stream.flip.to/what-is-discovery-flip-to-x-og-case-study-68fff8?v=5>" %}


# Collection management

Sign into your platform, and head over to **Stories** and click on **Experiences.** You may see a few other collections too depending on your platform, such as [Traveler Stories](/docs/platform/advocacy/stories) and [Local Events](/docs/platform/discovery/experiences/flip.to-occasiongenius).

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FtFg2YrHqXVQtrgJE5Lns%2F1expmgmt.png?alt=media&amp;token=9c9c8ced-1949-4d51-84d2-b588b63f0d5e" alt=""><figcaption></figcaption></figure>

## Add a new experience

In a few clicks, add a new experience to your collection. Once in circulation, it will help inspire travelers on your site.

{% stepper %}
{% step %} <mark style="color:$primary;">**In your Experiences collection, click to add a New Experience**</mark>

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FT3IS5eVn3QTwiI7qT5j1%2F2expmgmt.png?alt=media&amp;token=c756081a-a109-46ac-8012-d527cdbd6aca" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %} <mark style="color:$primary;">**Fill in the dates and details about your experience.**</mark>

Be sure to include the experience **name**, **description**, **dates**, **venue address** and a **photo**.

{% hint style="info" %}
**Hint:** look for the green check to ensure that you have everything you need. :white\_check\_mark:
{% endhint %}

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FYM8d72AHKZfHUTpvnTFP%2F3expmgmt.png?alt=media&amp;token=b2504153-95e4-49c8-b19f-9c5437cb71ea" alt=""><figcaption></figcaption></figure>

For events and experiences with multiple dates, edit right from the calendar, or have the option for more advanced settings:

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2F1qI4o0SEWCAVAnkJiUmA%2F4expmgmt.png?alt=media&amp;token=84036f28-d6e2-44ae-a876-03bfdc92c6b8" alt=""><figcaption></figcaption></figure>

**That's it!** If you're not ready to send to circulation, at any time **save your progress as a draft** to come back to.
{% endstep %}

{% step %} <mark style="color:$primary;">**Save and publish**</mark>**&#x20;🚀**

Visit your site to see your Experience live to the world.
{% endstep %}
{% endstepper %}

## A guide to providing the best experience content

Keeping your content fresh and engaging doesn't have to be tricky. Here's a few best practices that we recommend for the best user experience.

### <mark style="color:$info;">Descriptions</mark>

At this point, aim to inspire (not instruct). Use language that tells a story on why this experience is memorable. Avoid check lists or instructions or policies that are intended for later on.

Here's an example of what we'd recommend:

{% hint style="success" %}
Hike the Hoh Rain Forest along the ever-flowing Hoh River that carves its way from Mount Olympus towards the Pacific Coast.
{% endhint %}

And an example of content that's less important at this time of the journey:

{% hint style="warning" %}
Hike the Hot Rain Forest. Be sure to bring water and review information regarding facilities, picnic areas, camping, and regulations.
{% endhint %}

{% hint style="info" %}
We recommend avoiding the mention of prices. These can often change, and aren't required for inspiring a trip at this point in the buying journey. Right now, get travelers excited about the possibility of a stay.
{% endhint %}

### <mark style="color:$info;">Images</mark>

Here's a chance to highlight your experience in the best way. Choose high-quality, engaging images that belong to you.

{% hint style="info" %}
Here's a check list for your best content:<br>

* Choose images that are at lest 1200px wide x 800px tall. *<mark style="color:$info;">(Not required, but these will look your best!)</mark>*
* Use images that are **owned**, **rights-managed**, or **royalty free**.
* Avoid images with text or watermarks, or images of promotional material, since text about the event will live elsewhere.
  {% endhint %}

## Managing published experiences

At any time, head over to your collection and edit any aspect of your experiences—like the description or dates. If an experience has already passed, you may find it in the archive.

***

If you need help adding or managing experiences, or want to switch on Discovery, get in touch with [the friendly team at Customer Success](/docs/support/customer-success).


# Library

Sign into your platform, and head over to **Stories** where you may see a few collections, depending on your platform:

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th><th data-hidden data-card-target data-type="content-ref"></th></tr></thead><tbody><tr><td>See <a href="/docs/platform/advocacy/stories"><strong>stories shared from past travelers</strong></a> to your property.</td><td><a href="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FCp63J1u2rQme9cC4n7u4%2FScreenshot%202025-03-18%20at%202.16.07%E2%80%AFPM.png?alt=media&amp;token=2544e3c2-035a-49be-9e49-d6af5b5eb38b">Screenshot 2025-03-18 at 2.16.07 PM.png</a></td><td><a href="/docs/platform/advocacy/stories">Stories</a></td></tr><tr><td>Share <strong>experiences happening on property</strong>.</td><td><a href="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fv7ZE3TLqejBTyno2qts7%2FScreenshot%202025-03-18%20at%202.16.35%E2%80%AFPM.png?alt=media&amp;token=a769efc4-9629-4954-b544-69cc4dc7dabd">Screenshot 2025-03-18 at 2.16.35 PM.png</a></td><td></td></tr><tr><td>Tap into a <a href="/docs/platform/discovery/experiences/flip.to-occasiongenius"><strong>curated collection of in-destination events</strong></a>.</td><td><a href="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fk3mG8YmDNmVvEUeMWxJn%2FScreenshot%202025-03-18%20at%202.16.44%E2%80%AFPM.png?alt=media&amp;token=5a23d81f-392e-45d3-90c9-e4868e5df170">Screenshot 2025-03-18 at 2.16.44 PM.png</a></td><td><a href="/docs/platform/discovery/experiences/flip.to-occasiongenius">Flip.to 🤝 OccasionGenius</a></td></tr></tbody></table>

{% hint style="info" %}
**Not seeing any libraries?** To activate, get in touch with [Customer Success](/docs/support/customer-success) and we'll help switch on and configure Experiences for you.
{% endhint %}

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2F2HyWT0SRgBfEoOvn93zS%2FPropertylibrary.png?alt=media&amp;token=00574dee-41e8-4627-a869-ca0ce581825e" alt=""><figcaption></figcaption></figure>

## Management

**Check back soon** for an enhanced user experience to build and manage events and experiences in only a few clicks.

Until then, don't hesitate to say hello to your friendly, neighborhood[ Customer Success Manager](/docs/support/customer-success) to get you started on Experiences!


# Add, edit and manage Experiences

**Build and manage Experiences in only a few clicks**. From there, see them in the Library, and in circulation where they'll inspire planners for your property.

{% stepper %}
{% step %} <mark style="color:$primary;">**Sign into your account and head to Stories.**</mark>

Navigate to **Experiences** at your hotel.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FtFg2YrHqXVQtrgJE5Lns%2F1expmgmt.png?alt=media&amp;token=9c9c8ced-1949-4d51-84d2-b588b63f0d5e" alt=""><figcaption></figcaption></figure>

Click to add a **New Experience**.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FT3IS5eVn3QTwiI7qT5j1%2F2expmgmt.png?alt=media&amp;token=c756081a-a109-46ac-8012-d527cdbd6aca" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %} <mark style="color:$primary;">**Fill in the dates and details about your experience.**</mark>

Be sure to include the Experience **name**, **description**, **dates**, **venue address** and a **photo**.

{% hint style="info" %}
**Hint:** look for the green check to ensure that you have everything you need. :white\_check\_mark:
{% endhint %}

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FCAs4lABkv1GDFuZ3by4D%2F3expmgmt.png?alt=media&amp;token=6f4bc6cb-2a0a-4d61-a51e-a8c8719cf95b" alt=""><figcaption></figcaption></figure>

For events and experiences with multiple dates, edit right from the calendar, or have the option for more advanced settings:

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2F1qI4o0SEWCAVAnkJiUmA%2F4expmgmt.png?alt=media&amp;token=84036f28-d6e2-44ae-a876-03bfdc92c6b8" alt=""><figcaption></figcaption></figure>

**That's it!** If you're not ready to send to circulation, at any time **save your progress as a draft** to come back to.
{% endstep %}

{% step %} <mark style="color:$primary;">**Save and publish.**</mark>**&#x20;🚀**

Visit your site to see your Experience live to the world!
{% endstep %}
{% endstepper %}

If you need help managing experiences, or want to switch on Discovery for your property, [get in touch with the friendly team at Customer Success](/docs/support/customer-success).


# Flip.to 🤝 OccasionGenius

Together, we believe that travel marketing can be both authentic, and really great for business, making travel better for everyone.

<div align="left"><figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FZ6rCLAAnzKrMRw21sxiH%2Fog-logo-top.svg?alt=media&amp;token=88a88e26-127e-441b-b79c-2eebc8d91607" alt=""><figcaption></figcaption></figure></div>

## Launch a curated collection of major events that's updated daily and incredibly easy to manage

[OccasionGenius](https://occasiongenius.com/) is an award winning, hand-curated events API connecting individuals to the events that they care about.

Together with **Flip.to X OccasionGenius**, enhance planner conversations with unique,\
premium event content that converts.

{% embed url="<https://stream.flip.to/flip-to-x-occasiongenius-a-reimagined-planning-journey?v=5>" %}

## Dynamic Events from OccasionGenius

Keeping a finger on the pulse of events and experiences in your local community takes effort and time, but experiences drive travel. OccasionGenius is here to help.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FRmyawYwqZSYElRzKxsqp%2FOGlibrary.png?alt=media&amp;token=d8a72a30-7570-45d6-82b0-3d70433ddb7b" alt=""><figcaption></figcaption></figure>

Content includes **a rolling 12-month library** of hand-curated events, plus:

* **Full indemnification** from all copyright issues
* **Updated every day** for cancellations, postponements & sold-out events
* Each event has the **Event Genome**™—the most sophisticated understanding of what each event is going to be like

{% embed url="<https://stream.flip.to/occasiongenius-the-challenges-of-selling-time?v=5>" %}

## Unlock the OccasionGenius Event Collection

To tap into a curated blend of travel-worthy and trip-extending events, [get in touch with Customer Success](/docs/support/customer-success) to get switched on.


# Planner audiences

## Level up with a highly-targeted audience

Discovery learns valuable signals about the audience of prospects considering your property, starting with when they're looking to visit.

Use this insight to amplify other marketing initiatives and provide an edge by tapping into the perfect audience for the next campaign.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FRu78Zr17iEYTn3qnP3iX%2Fscreenshot_planneraudience.png?alt=media&amp;token=fbc2869c-8b1e-4ef4-a0b6-8ed2dbe4434d" alt=""><figcaption></figcaption></figure>

## Amplify other efforts

Whether it's the latest promotion, or months ahead to increase bookings, Discovery can boost impact.

Easily identify past planners who fit an offer or need period particularly well. After that, target them directly with a **personal** message **relevant to their plans**.

### <mark style="color:green;">Use cases</mark>

Here's one example of a typical marketing goal, and game plan using Discovery.

> :warning: It's the beginning of March. Spring break is the first week in April, and bookings are trending behind.\
> \
> :clipboard: Segment these two audiences to prepare an outreach just for them:
>
> 1. Planners who showed interest in the booking window eligible for the Spring Break offer, and who haven't booked yet. (Typically those who started planning 30+ days ago.)
> 2. Planners whose booking dates just recently passed, and warm them up with this new offer—acknowledging they’d recently been looking to stay.

### <mark style="color:green;">Find your audience and get started</mark>

Easily pull and segment audiences in clicks.

{% stepper %}
{% step %}
**Navigate to Platform → Reports**

Select the appropriate date range to find recent planners.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FslDlYD58DbYnxslldlFv%2Fscreenshot_reports.png?alt=media&amp;token=9dcc549c-b218-47de-a536-36abd3b92dfb" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Scroll to Planners revealed by Discovery**

Download a list of planners whose plan is more than 10 days old.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2F7AaVinAJ1axUracLCq7y%2Fscreenshot_planners.png?alt=media&amp;token=e96a21df-4508-4abd-bc6f-3020bb00432c" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Segment your audience**

Filter and segment your list by matching a planner's **interested arrival date** with the **eligible booking window**. :handshake:

Craft and share a outreach around these planners' interests.
{% endstep %}
{% endstepper %}

## An important note about content

Potential travelers respond to messages that are **wanted** and **expected**.

Speak to audience segments about their specific plans. This approach to better marketing nets better results, winning over more travelers considering a stay.

## Additional consent settings

Discovery can be configured to ask for additional consent at the moment a planner is submitting their name and email address.

{% hint style="info" %}
When configuring an additional consent, keep in mind that it may impact submission rates and overall conversion.\
\
Plus, it's recommended that site visitors have a specific and meaningful understanding of the opt-in for an additional consent, including why it's required and the value for the planner.
{% endhint %}

Once switched on, a planner is presented with an opt-in checkbox that supports custom messaging and tracking tags. Any consent given is tracked to the context of each planner and is available in our reports and API.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FGa2A5NFcbqiUR15IbkWO%2FScreenshot%202025-03-13%20at%201.43.00%E2%80%AFPM.png?alt=media&amp;token=9096e7f3-272c-47a0-b5e5-72841c05af25" alt=""><figcaption></figcaption></figure>


# Special Codes

Discovery is designed to handle all types of conversations on your site, including with visitors interested in a promotion, who belong to a group, or have other codes to put to use.

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-cover data-type="files"></th></tr></thead><tbody><tr><td>Planners enter their code into Discovery, or it's passed in automatically.</td><td><a href="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2F8aAWSVPtUYzHL6zgew5z%2Fspecialcodes1.png?alt=media&amp;token=66ea4990-62ab-4faa-8f3f-fe76bcae5f53">specialcodes1.png</a></td></tr><tr><td>Planners can view and edit their promotion or group code at any point.</td><td><a href="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FRNT6is6bfnawaFcp4c1a%2Fspecialcodes2.png?alt=media&amp;token=cd465c37-9023-4de9-942d-31cfb79e7a8f">specialcodes2.png</a></td></tr><tr><td>If planners don't complete their booking, their code is saved to their plan when returning.</td><td><a href="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FWUsBLzFmBphq8kXdJQAJ%2Fspecialcodes3.png?alt=media&amp;token=eb9f7c7d-979f-4838-ab07-94e58f111206">specialcodes3.png</a></td></tr></tbody></table>

## Support for special codes is easily configured

{% stepper %}
{% step %}
**Sign into your account and head to Mission Control → Booking.**

Scroll down to the details for Special Codes.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FU1Y5W0sMQ7mfDjCldfHs%2Fsc_step1.png?alt=media&amp;token=b6168b9e-db64-45e2-802d-f140886cc952" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Configure your code types.**

Add the code type you want to support, rename it if you prefer, and save.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FvGI2Sd6VOVHqUsEaZKN4%2Fsc_step2.png?alt=media&amp;token=1205635d-ed1c-48b5-a654-371bd0e97a5c" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Switch on.**

Planners will now be able to manually enter a code in Discovery.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FfANLiUvQdchRbea6loeH%2Fsc_step3.png?alt=media&amp;token=fb9b0f5a-69d4-4f5b-b014-ecbe86f93ab9" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

## Passing codes in automatically

There are two ways Discovery passes special codes, out-of-the-box:

First, Discovery detects if a booking link contains additional parameters for a promotion or group code.

Alternatively, Discovery also detects special codes on any triggers where [website markup](/docs/integrations/websites/website-markup) has been added.

Either way, the code will automatically pass in to the booking engine so it **just works**.

For more on this feature, or to switch on, [head over to your account](https://manage.flip.to/home), or say hello to the Flip.to team.


# Advocacy

Advocacy turns your guests into powerful advocates who introduce your brand to their friends & family. This keeps conversations authentic and instills the trust of word-of-mouth recommendations to a massive new audience of like-minded travelers, all ready to be inspired for their own future travel plans.

Tapping into an audience just one degree away, Advocacy is a proven, cost-effective way to grow your top of funnel and keep your property top of mind with travelers who will become your future guests.


# First campaign

Travelers are excited about their trip, and ready to share their experiences with friends & family. They make the perfect advocates—an invaluable, renewable resource who will help you reach a massive audience who are the perfect fit. Here's a look at what running an Advocacy campaign looks like:

## Day 1

Our [Customer Success team](/docs/support/customer-success) typically sets up Advocacy based on our experience of what works best, allowing you to tweak from there.

Advocacy can kick off at different points of a traveler's journey, which can be managed right from [your account](https://manage.flip.to) at **Platform → Advocacy → Journeys**.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fs7UVf2vubAMKqAAS1oxB%2Fmanage.flip.to_p_margaritaville-beach-resort-hollywood-beach_advocacy_journeys%20(1).png?alt=media&amp;token=74ec5af3-5834-45be-a1a9-10fcf7a97de5" alt=""><figcaption></figcaption></figure>

In this example, we're aiming to turn a guest into an advocate for your brand after their stay. Once that journey is configured, we can create a new campaign. Go to **Platform → Advocacy → Campaigns** and click **New Campaign**.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FFmhpdG9YmqKe2zU5XH45%2Fmanage.flip.to_p_margaritaville-beach-resort-hollywood-beach_advocacy_journeys%20(2).png?alt=media&amp;token=07277dd1-c9d3-4b2b-91d5-d221eac610bf" alt=""><figcaption></figcaption></figure>

Once a new campaign is all set, you can switch it on.

You'll be able to monitor its progress, view submissions, manage winners, adjust details and invite more participants.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FdMlAr5Wnqveo2CIRkoZ6%2Fmanage.flip.to_p_margaritaville-beach-resort-hollywood-beach_advocacy_journeys%20(3).png?alt=media&amp;token=07ff6c21-8d96-400a-9d06-e94755f5797b" alt=""><figcaption></figcaption></figure>

## Day 2 and beyond

Once you've switched your first campaign live, you'll begin receiving email notifications whenever you have new storytellers. With a few clicks, you can [curate the story](/docs/platform/advocacy/curation) and let your advocates begin sharing with their friends & family.

Along the way, you can configure the other journeys and start creating more campaigns to reach and inspire new audiences of travelers.

Don't hesitate to let our [Customer Success team](/docs/support/customer-success) know how we can help hit your goals.


# Places

Let guests share where their stories happened in the community

{% hint style="info" %}
**Places** is in beta. To switch this on for your property, [get in touch with your Customer Success Manager.](/docs/support/customer-success)
{% endhint %}

When inviting storytellers to share their favorite moment, you may want to know where their experience happened.

That includes if it was on-site—like at one of your property's restaurants, spas or anywhere else. Easily configure the platform to do just that.

## First, set up your places

{% stepper %}
{% step %}
**Head to Mission Control.**

On the details tab, scroll down to **Your places**.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FFwTyomnI2bI66UmFiSd0%2Fplacesconfig1.png?alt=media&amp;token=83e876b6-e88d-4f0a-8ca1-e7fcb9cf30c3" alt=""><figcaption></figcaption></figure>

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FaibGElBE8Tb9uFqvIWUi%2Fplacesconfig2.png?alt=media&amp;token=a48e228c-6624-47f1-94d6-c01a5ff0a927" alt=""><figcaption></figcaption></figure>

Search for and add places that belong to the property. Save them to your account.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fe8fYtTyogsOtGdTPA6b1%2Fplacesconfig3.png?alt=media&amp;token=17412a00-91bf-4b81-bf2e-c46ebd0e6ef9" alt=""><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Next, configure Advocacy**

Navigate to **Campaigns** and head to **Invitations**.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FZSmRztB1ftekEEcUuPHb%2Fplacesconfig4.png?alt=media&amp;token=b6ba4b61-c959-419d-b9ed-385d4a2b2d8a" alt=""><figcaption></figcaption></figure>

Scroll down to places details to configure the campaign. **Save and you're all set.**

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2F20J3BgTWmfpyXthhQ7pP%2Fplacesconfig5.png?alt=media&amp;token=51083a4f-7106-47e2-bc2c-7193d0921260" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}


# Curation

Advocacy lets travelers introduce your brand using real, authentic stories shared by friends & family.

Before that happens, you'll have a chance to curate your advocates' stories and invite them to become storytellers, all in a few clicks.

{% embed url="<https://stream.flip.to/turn-travelers-into-storytellers-curation?v=5>" %}


# Getting the most out of Curation

Congratulations on curating your first story! You’ve taken the first step to introduce your hotel to a right-fit audience by turning this storyteller into an advocate.

[As we shared, this is done in clicks.](https://docs.flip.to/platform/advocacy/curation) And from here, the platform puts these stories to work. By rating your stories, curation impacts how that happens. Here’s how you can ensure your top picks are bubbled up.

***

## Advancing storytellers

Most customers advance the majority of stories they receive. That’s because more storytellers means a bigger audience.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fqim5GLnzhE8hhIYp8rSp%2Fcuration.png?alt=media&amp;token=8148f300-56eb-4e34-a5d9-a6a0e023ef24" alt=""><figcaption></figcaption></figure>

#### What if the image isn't marketing-quality

Don’t worry, we’ll take care of that in the ratings, below.

#### When to say "No"

On a rare occasion, you’ll come across a story not to advance. Consider this a judgment call for anything that’s inappropriate or offensive.

And if you need additional guidance, say hello to your friendly, neighborhood [Customer Success Manager.](/docs/support/customer-success) 👋

***

## How ratings are used

The higher the rating, the more we’ll put a story to work. For examples on where stories might appear:

* Three-star ratings are used across your experiences with the most frequency—consider these your all-stars.
* Two-star ratings can appear on the story river or home page, and [places unique to a campaign](https://rushcreeklodge.stories.travel/invite/guest-storytellers).
* A one-star rating can appear in a [Story Explorer](https://rushcreeklodge.stories.travel/photo-explorer/gallery) for your property.
* Stories that you give a thumbs down would only appear in specific campaign experiences, and to a storyteller's own audience of friends.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FgBVGwTmZUqHLJ8IBRg93%2Fcuration2.png?alt=media&amp;token=1748dc0a-1092-45b5-8f94-32d8cd3420f7" alt=""><figcaption></figcaption></figure>

***

## Nice-to-knows

### What to expect

{% hint style="success" %}
**How will I know when I have stories to curate?**

* Your platform automatically notifies you with a daily email every time new stories are submitted. Let your [Customer Success Manager](/docs/support/customer-success) know anyone you’d like to be included.

**How often should I curate stories?**

* Curate stories within a day or two. The sooner you can curate, the sooner the storyteller can start becoming an advocate for your brand.

**How often should I curate stories?**

* Curate stories within a day or two. The sooner you can curate, the sooner the storyteller can start becoming an advocate for your brand.

**How long does curation take?**

* Curation should be one of the exciting parts of your day, and takes **just ten to fifteen minutes a week** for top-performing customers.
  {% endhint %}

### Dialing in even more

{% hint style="info" %}
**Once a story is curated, can I change my mind?**

* Ratings can be changed at any time.
* If you’ve advanced a storyteller and need to make a change, your dedicated Customer Success Manager can jump in.

**What about Quotes and Captions?**

* You can also keep in mind that Quotes typically take precedence over Captions, unless the rating reflects otherwise.
  {% endhint %}

***

## I need more help!

If you ever need extra guidance, we’re just a few clicks away. [Say hello today.](/docs/support/customer-success)


# Stories

The goal of Advocacy is to warmly introduce your brand to the widest audience through stories that your advocates share, showing other would-be travelers the most memorable moments from their trip. This is one of the most significant details—you'll be the source of inspiration for an audience of dreamers before your competitors even have a chance.

An added benefit, you'll grow a really amazing library of stories! Every story is curated and every image is cleaned of personal data, resized & reformatted for multiple uses, and automatically tagged so your entire library is searchable.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FDTLLkoMnsw7uOejstfW2%2Fmanage.flip.to_p_margaritaville-beach-resort-hollywood-beach_advocacy_journeys%20(4).png?alt=media&amp;token=5e56ecef-abc2-47b9-b6d3-e4aeec0ec785" alt=""><figcaption></figcaption></figure>

When you click on a story, you can see the storyteller's impact, download the image in different sizes, view usage rights, and edit some of the image's attributes. You can even broadcast the story, using the platform-generated share image.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FyuP0SOoNkhPftz8SO6Ow%2Fmanage.flip.to_p_margaritaville-beach-resort-hollywood-beach_advocacy_journeys%20(5).png?alt=media&amp;token=fde5b8a1-7b30-4dd8-b892-d0ebd9df47a0" alt=""><figcaption></figcaption></figure>


# Promoting a campaign

**Advocacy** engages audiences to become storytellers, netting introductions for your brand in an authentic and trustworthy way. The platform nurtures storytellers, out-of-the-box. **And if you're ready to amplify impact, start down below.** :mega:

{% embed url="<https://stream.flip.to/growing-your-storytellers?v=5>" %}

## Getting started on Invitations

Reach out to potential storytellers and get more submissions through **Invitations**.

Navigate to **Platform → Advocacy → Campaigns → Invitations** to preview and edit your Invitation page, or broadcast more widely.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FgGaK833EPtD4nwjpiH76%2Fscreenshot_invitations.png?alt=media&amp;token=e5497cc9-2f7e-467c-a31c-bf0de24b96d0" alt=""><figcaption></figcaption></figure>

{% hint style="success" %}
Check out your **Invitation link**

https\://**yourwebsite**.stories.travel/invite/guest-storytellers

This broadcast link is dynamic—it always routes to the current, active campaign so you'll never send people to outdated experiences.
{% endhint %}

## Promoting your campaign

### <mark style="color:green;">Website presence</mark>

Create your own custom landing page on the website that points to the **Invitation link**.

Or, switch on **Story River**, out-of-the-box. The platform shows website visitors authentic guest stories that resonate with their travel aspirations, and encourage them to share their own.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fhp5mFdSvqer5jdscPmIT%2Fscreenshot_storyriver.png?alt=media&amp;token=dc708e5e-cabd-4d17-9583-177ceb037656" alt=""><figcaption></figcaption></figure>

Simply navigate to **Platform → Advocacy → Journeys → Story River** to configure, or get in touch with your friendly neighborhood CSM to help Story River switched on.

### <mark style="color:green;">Tap into email marketing</mark>

Kick off a campaign with immediate impact by inviting those who have opted in to receive email updates about your brand. Build your own, or [reach out to our Customer Success team for guidance and best practices](/docs/support/customer-success).

<div align="center"><figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FkJDI23eH2rzRvyvssfUP%2Fcampaign-emailmarketing.png?alt=media&amp;token=d54a4330-08b8-4d47-a48b-8674d0e51089" alt=""><figcaption></figcaption></figure></div>

### <mark style="color:green;">Share to followers & fans</mark>

Social is another engaged audience you may encourage to share their story. Broadcast right to your social pages. Or, select [one of your favorite stories](/docs/platform/advocacy/stories) to highlight along the way.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FEF3pieLTEo8e3qMuNHQf%2F_storybroadcast_fb.png?alt=media&amp;token=984b1a25-5844-46e8-82e9-d3c21735d815" alt=""><figcaption></figcaption></figure>

### <mark style="color:green;">Partnerships</mark>

Work together with local partners (like the destination marketing organization, fellow neighbors, or any other partner) to share on about the campaign. [Dig into these case studies to see how.](https://drive.google.com/file/d/1LL3H64E6LbTIMJUT5bW7uRhJ8qV1Qdwt/view?usp=sharing)

## Sample campaign rollout

<table><thead><tr><th>Steps to launch</th><th></th><th data-hidden></th></tr></thead><tbody><tr><td><ol><li>Build campaign + strategy together with your Customer Success Manager.</li></ol></td><td>Pre-launch</td><td></td></tr><tr><td><ol start="2"><li>Finalize campaign details &#x26; Go Live!</li></ol></td><td><span data-gb-custom-inline data-tag="emoji" data-code="1f680">🚀</span> Launch</td><td></td></tr></tbody></table>

<table><thead><tr><th>Promote &#x26; Share</th><th></th><th data-hidden></th></tr></thead><tbody><tr><td><ol start="3"><li>Invite past guests to share their story with an email.<br><br>(Be ready to <a href="/docs/platform/advocacy/curation">curate</a> your first stories!)</li></ol></td><td>Week 1</td><td></td></tr><tr><td><ol start="4"><li>Invite social audiences.<br><br>Share weekly directly from Flip.to, or create your own post using the <strong>Invitation Link</strong>.</li></ol></td><td>Weeks 2–5</td><td></td></tr><tr><td><ol start="5"><li>Now that the stories are flowing in, add <strong>Story River</strong> to the website.</li></ol></td><td>Week 6</td><td></td></tr><tr><td><ol start="6"><li>Amplify impact. Share a second email.<br><br>Or, consider asking key partners share your <strong>Invitation Link</strong> to their audiences.</li></ol></td><td>Weeks 7, 8 + 9</td><td></td></tr><tr><td><ol start="7"><li>Make the last call for entries.<br><br>Broadcast and invite social audiences to cast their vote for their top picks. <span data-gb-custom-inline data-tag="emoji" data-code="1f5f3">🗳️</span></li></ol></td><td>Weeks 10 + 11</td><td></td></tr><tr><td><ol start="8"><li>Pick <a href="/docs/platform/advocacy/top-storytellers">Top Storytellers</a> and share!</li></ol></td><td><span data-gb-custom-inline data-tag="emoji" data-code="1f3c6">🏆</span> Week 12</td><td></td></tr></tbody></table>


# Top storytellers

Every day, your travelers are sharing their stories with friends and family around the world. That adds up to som incredible impact, measured in a massive new audience who are the perfect demographic.

At the end of your [campaign](/docs/platform/advocacy/first-campaign), it’s time to highlight a few of your favorite storytellers. It takes just a few clicks:

{% embed url="<https://stream.flip.to/highlighting-your-favorite-storytellers?v=5>" %}

## Highlighting top picks

When you’re ready, [sign into your account](https://manage.flip.to/home), and under **Advocacy** navigate to **Current Campaigns**. Select the campaign you’d like to close out, and add your favorites to the podium.

The platform takes it from here, getting in touch with your top picks.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fdh8NQxYAizr1EMpkLr81%2F_advocacycampaigns.png?alt=media&amp;token=6c2def1c-bd07-4611-9c75-ed487d3c0a5c" alt=""><figcaption><p>Under Platform, choose Advocacy. Navigate to Current Campaigns.</p></figcaption></figure>

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FVKbUY6zTmpRtiAzBg3Ot%2F_advocacypodium.png?alt=media&amp;token=dbaebe5a-03c5-4b34-82b6-a38df9c4bc23" alt=""><figcaption><p>Select your top storytellers, and move them to the podium.</p></figcaption></figure>

## Broadcast top stories to spread the word

When you’re done, if you’d like you can show some extra love by sharing your favorites to your other channels, like your audience of followers and fans.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FHLXg3I8PgMl6YKly5Nw3%2F_story.png?alt=media&amp;token=ebe8f627-2050-4a2f-9e34-f884d991a8a0" alt=""><figcaption><p>Select your top storyteller to view their story.</p></figcaption></figure>

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FpUWDW7s7URsLuxTHhHmr%2F_storybroadcast.png?alt=media&amp;token=d95d72f7-37bd-4c05-843c-464b16865d9f" alt=""><figcaption><p>Select what attributes you'd like to include.</p></figcaption></figure>

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FEF3pieLTEo8e3qMuNHQf%2F_storybroadcast_fb.png?alt=media&amp;token=984b1a25-5844-46e8-82e9-d3c21735d815" alt=""><figcaption><p>Select your channel, and broadcast.</p></figcaption></figure>


# Spacetime

To fuel growth and gain a competitive edge, travel brands must rely on insights with confidence. We've combined the most comprehensive data layer and the best business intelligence, launching **Spacetime**: the **only** analytics infrastructure built specifically for the **non-linear travel journey.**

{% embed url="<https://stream.flip.to/a-first-look-at-spacetime?v=5>" %}

### Spacetime delivers on more than just data

It's a platform that's aimed at helping to get better every day. It's dedicated support to ensure success is executed through to the last mile. And it's getting a better understanding to winning over travelers, increasing revenue, and reducing dependencies (in clicks) all aimed at driving profitability.


# Getting started

Spacetime combines better business intelligence with the highest quality dataset and most resilient tracking so that you can unlock insight that drives immediate action.

Here’s what it will look like as you’re coming on board.

{% hint style="info" %}
After implementation, it takes days-to-weeks for behavioral data to stack up. During this initial period, Customer Success keeps in touch. It’s a great time to get familiar with what’s bespoke for travel.
{% endhint %}

## Week 1

### <mark style="color:$primary;">Navigate time</mark>

Spacetime was designed for travel, so it provides a guided path of the space and time you’re aiming to explore.

In **Navigation**, start by choosing the timeframe for when travelers made reservations (<mark style="background-color:blue;">transactions</mark>). The first thing you’ll see is the future plots of time they bought (<mark style="background-color:green;">reservations</mark>).

{% embed url="<https://stream.flip.to/understanding-space-and-time-custom-ranges?v=5>" %}

### <mark style="color:$primary;">Segment space</mark>

If you’re part of a group, also speedily get to the right segment of **properties**, **brands** and **destinations**. Spacetime automatically maps to your business.

{% embed url="<https://stream.flip.to/understanding-space-and-time-easily-sort-and-filter?v=5>" %}

{% embed url="<https://stream.flip.to/understanding-space-and-time-mapped-to-your-brand?v=5>" %}

### <mark style="color:$primary;">Easily understand what's contributing to wins</mark>

After you’ve selected the space and time you’re interested in, walk through **Synopsis**: your business, in a sentence. This is the highest-level look at how the direct channel audience became booked guests.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fua4TcJIg6OEztaGPMQ9L%2Fimage.png?alt=media&amp;token=47301d55-4660-4da6-9b14-0cb3dea06b86" alt=""><figcaption></figcaption></figure>

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FO5k9HdF6acy173TJ4q2d%2Fimage-1.png?alt=media&amp;token=7e189cb4-62f8-4682-ae98-21d7cf1e5fad" alt=""><figcaption></figcaption></figure>

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fosy8arEbIxOGatshj24b%2Fimage-2.png?alt=media&amp;token=8b8d380b-9048-4b69-8367-7c646630f16d" alt=""><figcaption></figcaption></figure>

### <mark style="color:$primary;">Understand traveler audiences</mark>

A traveler might visit your site dozens of times across weeks or months before booking. Traditional tools (built for ecommerce) can't track that journey.

Out-of-the-box, Spacetime segments your audience for travel. Get familiar:

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FuNd04V1u7CSfwAaHTk3J%2Faudiences.png?alt=media&amp;token=33ac0a74-722e-4734-aa13-59e93f5643b7" alt=""><figcaption></figcaption></figure>

<mark style="color:$success;">**Booked Guests**</mark> are those who made a reservation.

<mark style="color:blue;">**Planners**</mark> searched dates, visited the booking engine, or showed other consideration and buying signals. This audience is currently considering a stay and are ready to be won over.

<mark style="color:orange;">**Explorers**</mark> are a unique opportunity. These budding planners may be early in their journey, and are taking stock of what the property and destination are all about.

That leaves <mark style="color:red;">**Unengaged**</mark> (people who visited and left without much action) and <mark style="color:$info;">**No Consent**</mark>. Both of these passive audiences are normal to have. (Simply keep an eye out for big swings in traffic).

## Week 2 + beyond

### <mark style="color:$primary;">Get more granular</mark>

As your data set grows in time, explore more areas of the platform for places to take action. Plus, configure level-ups like [Ad Accounts](https://docs.flip.to/docs/integrations/advertising) and [Goals](https://docs.flip.to/docs/platform/spacetime/goals) if you're ready to make your platform even more powerful.

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td>Head to <strong>Marketing</strong> to see every channel, source or audience’s contribution to revenue.</td><td><a href="https://docs.flip.to/changelog/november-2025/your-marketing-reignited">https://docs.flip.to/changelog/november-2025/your-marketing-reignited</a></td><td><a href="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FaoVepA3vMyuNOGC555FE%2Fimage.png?alt=media&amp;token=3b0eb1d1-9202-4f09-9452-d1522492c7ff">image.png</a></td></tr><tr><td><p>Dig into <strong>Campaigns</strong> and explore <strong>Attribution</strong> models.</p><p><br></p></td><td><a href="https://docs.flip.to/changelog/january-2026/one-visual-to-rule-them-all">https://docs.flip.to/changelog/january-2026/one-visual-to-rule-them-all</a></td><td><a href="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fao9o91ezeNtvmjkZKAYr%2Fimage.avif?alt=media&amp;token=1d6bf415-7363-4d3c-a385-a3a8305f9982">image.avif</a></td></tr><tr><td>See where you've been, and where you're heading when you set <strong>Goals</strong>.</td><td><a href="/docs/platform/spacetime/goals">Goals</a></td><td><a href="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FX816ESjSBjK1HEcyFrma%2FScreenshot%202026-04-14%20at%2011.07.27%E2%80%AFAM.png?alt=media&amp;token=1aa6af84-d99a-4cce-8726-b5965f4d6751">Screenshot 2026-04-14 at 11.07.27 AM.png</a></td></tr><tr><td>Set up <strong>Ad Accounts</strong> in clicks to enrich your data set.</td><td><a href="https://docs.flip.to/docs/integrations/advertising">https://docs.flip.to/docs/integrations/advertising</a></td><td><a href="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FVFjgzb8NieRHCXMsypEM%2FScreenshot%202026-04-14%20at%2011.13.26%E2%80%AFAM.png?alt=media&amp;token=c66a8b08-bfc4-4cf3-99ab-1bef64af976c">Screenshot 2026-04-14 at 11.13.26 AM.png</a></td></tr><tr><td>Read our <strong>Taxonomy</strong> to understand how campaign data is classified &#x26; organized.</td><td><a href="/docs/platform/spacetime/analytics-taxonomy">Analytics taxonomy</a></td><td><a href="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2F1JeYyrLaEkxOFAJNGm7N%2Fimage.png?alt=media&amp;token=d97d4d88-55a7-4b87-a095-0719cda649e2">image.png</a></td></tr></tbody></table>


# Goals

Goals set up teams, agencies and partners for success. Work together toward wins for heightened profitability, while getting a better understanding of what's contributing to growth.

{% hint style="info" %}
**Before you begin:** New to setting goals? Set an achievable win.

If previous monthly site performance is known, start here and set a stretch goal. Or, take the total need based on occupancy, less any expected bookings from [sources outside of the direct channel](#user-content-fn-1)[^1].

Keep in mind that goals are about progress over perfection, and can be dialed at any time.
{% endhint %}

### Set up your goals

Choose a property, and then navigate to the **Goals** tab. Pick the month to start with:

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fd3RSwnhJC8dAdLrNRa7G%2Fgoalmonths.png?alt=media&amp;token=83e80e97-3456-4fa8-b272-4c70cebb5cb4" alt=""><figcaption></figcaption></figure>

The calendar heat map gives you a sense of where you are today. Enter the number of room nights and the the revenue goal you’ve set as your target:

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FIvsypG1qvpOi4POnFDR6%2Fsetgoals.png?alt=media&amp;token=ca4aa7f0-daff-4804-a66e-93fe9f3b524e" alt=""><figcaption></figcaption></figure>

After you've saved your goals, you’ll see how close you are to achieving your target:

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FMAUbONhhhBX89yF6qKd4%2Fsetgoals_set.png?alt=media&amp;token=361c00a2-4d0b-4c15-8906-82d62a280108" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
**Why set both?** The relationship between room nights and revenue tells a bigger story: profitability.\
\
When getting set up, if starting with one metric, we recommend a simple estimate of the second. Your Customer Success Manager is standing by to help at any point.
{% endhint %}

### Dial in your goals

Check back often to see how performance is stacking up. The platform makes it easy to see what’s contributing to wins in clicks.

Quickly see demand periods and planner opportunity toward your goal month:

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2F4CMk0QQSyRqAKc00rcC6%2Fdialin_transactions.png?alt=media&amp;token=f18d5b82-4687-4cee-b890-88013dbf3936" alt=""><figcaption></figcaption></figure>

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fgzf5AIF2Hk4teenNbhUp%2Fdialin_planners.png?alt=media&amp;token=e72b2797-c386-44f3-80b4-ff27e677327b" alt=""><figcaption></figcaption></figure>

Plus, understand the channels that are making the biggest impact:

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FAdi3vVJsNmIEtZJxUgQO%2FScreenshot%202026-03-13%20at%2012.32.12%E2%80%AFPM.png?alt=media&amp;token=ea5555bf-3c1a-4ddb-b116-cd32da7aa58e" alt=""><figcaption></figcaption></figure>

### Travel marketing is a team sport

Once you’ve started getting goals set up, get more players on the field. Let your Customer Success Manager know any new team members, agencies, or partners who’d benefit from the platform.

{% hint style="info" %}
**Want benchmarks from day one?** Share historical transactions and Spacetime will measure performance against goal from your first month — no waiting for new bookings to accumulate. See [Historical transactions import](/docs/platform/spacetime/goals/historical-transactions-import) for the field spec.
{% endhint %}

<br>

[^1]: Examples include bookings from call centers, corporate and groups, online travel agencies, and more.


# Historical transactions import

Want to see how you’re tracking against goal from your very first month? Share your historical transaction data with Flip.to and we’ll load it into Spacetime—so room nights and revenue are measured against your targets from day one, no waiting for new bookings to accumulate.

{% hint style="info" %}
**Before you begin:** This one’s for the data or IT contact at your property—whoever can pull a transaction export from your booking engine, PMS, or data warehouse. Your Customer Success Manager will help coordinate the hand-off, and is standing by if you have any questions along the way.
{% endhint %}

### What to include

Send every transaction with a **stay date** that falls inside the import window you’ve agreed with your Customer Success Manager. Stay date is the period the guest was physically on-property—so we need both **arrival** and **departure** dates to land each stay in the right goal months. Include the **reservation date** too, which is the date the booking was originally created.

### Required fields

A simple CSV works great. Use the field names below—they let us map your data straight into Spacetime.

| Field              | Description                                      | Format                                             |
| ------------------ | ------------------------------------------------ | -------------------------------------------------- |
| `name`             | Full name of the property.                       | String                                             |
| `code`             | Internal identifier used by the booking engine.  | Alphanumeric                                       |
| `reservation_date` | When the reservation was created, in UTC.        | `yyyy-MM-ddTHH:mm:ss` (e.g. `2026-03-15T13:25:21`) |
| `crs_number`       | Booking engine confirmation number.              | String                                             |
| `amount`           | Total pre-tax amount for the room purchase.      | Decimal (`0.00`)                                   |
| `currency`         | ISO 4217 3-character currency code (e.g. `USD`). | String                                             |
| `arrival_date`     | Check-in date.                                   | `yyyy-MM-dd`                                       |
| `departure_date`   | Check-out date.                                  | `yyyy-MM-dd`                                       |
| `adults`           | Total adult guests on the reservation.           | Integer                                            |
| `children`         | Total child guests on the reservation.           | Integer                                            |
| `rooms`            | Total rooms on the reservation.                  | Integer                                            |

### A few formatting notes

* **Dates** follow ISO 8601—`yyyy-MM-dd` for dates, and `yyyy-MM-ddTHH:mm:ss` in UTC for timestamps.
* **Amounts** are decimals, no currency symbols and no thousands separators.
* **Property codes** match what’s currently configured in your booking engine, so reservations line up with the right property in Spacetime.

### Sending it over

When the file’s ready, share it with your Customer Success Manager via a secure file share—Google Drive (link shared directly with your CSM), a one-time Dropbox link, or your own SFTP all work well. If you’d prefer a different method, just let your CSM know and we’ll set one up.

Once it’s loaded, hop back into the **Goals** tab and you’ll see history feeding into the same calendar heat map and progress views—ready to dial in from there.


# Data Signals

Data Signals brings the outside world into Spacetime. Alongside your first-party booking behavior, it layers in live market intelligence — rate competitiveness, search demand, brand visibility, reputation, and the events driving travel to your destination — so your team can act on what's happening *around* your property, not just inside it.

Everything is collected, scored, and surfaced for you right inside **Spacetime** — alongside the booking behavior you already track. No spreadsheets, no separate logins, no analyst required.

{% hint style="info" %}
Data Signals is purpose-built for travel. Every signal is framed as a decision — what it means and what to do about it — not just a number on a chart.
{% endhint %}

## <mark style="color:$primary;">What you'll see</mark>

### Rate Parity

Know instantly whether your direct rate is winning, at parity, or losing against the OTAs — for every future check-in date, not just tonight. A 90-day forward curve shows where you're exposed, and a channel breakdown pinpoints exactly which channels are undercutting you and by how much.

> *"With demand at peak levels, you're losing parity on 38% of check-in dates — potential direct bookings are shifting to OTAs."*

### Demand Trends

A 52-week view of search demand for your destination, your brand, and flight search to your market. Spot momentum early, see when your brand is outpacing (or trailing) the market, and read flight-search lead time as an early signal for when to price up.

> *"Flight bookings are running three weeks ahead of destination searches — your premium-pricing window is opening."*

### Branded Search Defense

When someone searches your hotel's name, who shows up? Data Signals scores who owns your top 10 search results — you, your affiliates, or third parties — and flags when OTAs are ranking above you or booking your rooms below your direct rate.

> *"Third parties own 4 of the top 10 results for your own name, and 3 competitors book below your $189 direct rate for Jan 15."*

### Search Volume & Market Pressure

See real search demand for your market, what advertisers are paying per click, and where there's room to compete. Tie paid-search economics directly to your parity position so you're not paying to send traffic to channels that undercut you.

### Property Reviews

A weekly pulse on your Google reputation — review velocity, sentiment split, rating trend versus your lifetime baseline, and the specific topics guests are talking about — so you catch a developing issue before it shows up in your bookings.

### Ranked Keywords

Your organic footprint in Google's top 100, translated into estimated traffic value. Track which terms you own, where you're slipping, and what your SEO is actually worth — month over month.

### Demand Events

The events that move travel to your market — school and public holidays, conferences, sports, concerts, and festivals — scored by predicted attendance and accommodation spend, on a **12-month forward-looking window**. Know what's coming, how big it is, and how close to your door.

> *"Spring break overlaps eight drive-market school districts mid-March — an estimated $4.2M in accommodation spend is heading to your corridor."*

## <mark style="color:$primary;">How it fits together</mark>

The real power is in the connections. High demand *and* losing parity is an urgent signal. A competitor ranking above you *and* undercutting your rate is a defense priority. A major event *and* an open pricing window is a revenue opportunity. Data Signals draws those lines for you.

## <mark style="color:$primary;">Packages</mark>

{% hint style="info" %}
Data Signals comes in two packages. Talk to your Flip.to team to find the right fit for your portfolio.
{% endhint %}

### Market Signals

Rate Parity, Demand Trends, Search Volume & Market Pressure, Branded Search Defense, Property Reviews, and Ranked Keywords — the full market-intelligence picture for your direct channel.

**From $49 / property / month.**

### Demand Intelligence

Everything in Market Signals, plus **Demand Events** — predicted attendance and accommodation spend for the events driving travel to your market, on a 12-month forward window. Built for revenue and marketing teams planning ahead.

**Talk to us** — pricing scales with your portfolio.

***

Ready to turn on Data Signals? Reach out to your Customer Success contact, or [get in touch](https://www.flip.to).


# Analytics taxonomy

The Spacetime marketing analytics taxonomy is a standardized framework used to name, classify, and organize campaign data across all of your different marketing efforts.

Built with the contributions of top-tier travel marketers and agency leaders, this taxonomy creates a new gold standard for the industry—and one that's ever-improving to bring clarity required by modern travel brands looking to scale.

## Channel Collections & Groups

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FoZ0H5Y8jW0mW14omfySQ%2FScreenshot%202025-12-04%20at%209.15.28%E2%80%AFAM.png?alt=media&amp;token=1633d330-07e0-45f2-8221-c00e323f2fc0" alt=""><figcaption></figcaption></figure>

### <mark style="color:$primary;">Collections</mark>

Channel Collections are just that, collections of Channel Groups, designed to categorize traffic into meaningful groups for analysis in insights.

Collections give an overview of performance, and identify broad looks at where to start dialing in.

### <mark style="color:$primary;">Groups</mark>

Channel Groups are the expanded upon and refined industry-standard sources that are used for traffic analysis.

Groups are designed to segment data into individual categories within collections. Groups streamline the ability to find and take action when more precision is needed.

## Definitions

### <mark style="color:$primary;">Organic</mark>

Organic encompasses unpaid traffic sources where visitors arrive via search engines, social media, video platforms, or shopping listings without ad spend. It relies on the quality and relevance of content, product data, and presence on metasearch engines or directories to drive natural engagement.

<table><thead><tr><th width="291.00390625">CHANNEL GROUPS</th><th>DEFINITION</th></tr></thead><tbody><tr><td>Direct</td><td>The channel by which users arrive at your site or app via a saved link or by manually entering your URL. It often represents brand awareness or repeat visitors.</td></tr><tr><td>Referral</td><td>Traffic arriving via non-ad links on other websites, such as blogs or news sites. It is a catch-all group for third-party traffic where no specific tracking campaign or financial arrangement is identified.</td></tr><tr><td>Organic Search</td><td>Traffic that comes from unpaid search engine results. This includes visitors finding your site through algorithms on engines like Google or Bing rather than paid advertisements.</td></tr><tr><td>Organic Social</td><td>Traffic originating from non-paid posts, stories, or interactions on social media platforms. This includes visitors clicking links in your profile bio or timeline updates.</td></tr><tr><td>Organic Video</td><td>Users who arrive at your site via unpaid video content on platforms like YouTube or Vimeo. This traffic comes from clicks on links within video descriptions or channel profiles.</td></tr><tr><td>Organic Metasearch</td><td>Traffic from unpaid listings on metasearch engines that aggregate price and availability. These are standard listings that appear without a specific bidding model attached.</td></tr><tr><td>Organic Shopping</td><td>Visitors arriving from unpaid product listings on shopping engines or tabs. This traffic is driven by the quality and relevance of product data rather than ad spend.</td></tr><tr><td>Organic Directory Listing</td><td>Visitors coming from unpaid citations or profiles on online directories. This includes traffic from basic listings on sites like Tripadvisor and Google My Business.</td></tr></tbody></table>

### <mark style="color:$primary;">Paid</mark>

Paid covers all traffic acquired through financial investment, including search ads, social media sponsorship, display banners, and video commercials. It aggregates diverse paid strategies ranging from targeted shopping and metasearch placements to broad cross-network campaigns and affiliate partnerships.

<table><thead><tr><th width="291.00390625">CHANNEL GROUPS</th><th>DEFINITION</th></tr></thead><tbody><tr><td>Paid Search</td><td>An ad type that functions as an inbound intent marker where the user was shopping for a term, typed it in, and was acquired. Advertisers bid on relevant keywords to display text or shopping ads in search results.</td></tr><tr><td>Paid Social</td><td>Traffic from social media platforms specifically used to display sponsored ads to targeted audiences. Formats can vary, including sponsored posts, video ads, and carousel ads.</td></tr><tr><td>Paid Video</td><td>Users arriving at your site or app via ads on video sites like TikTok, Vimeo, and YouTube.</td></tr><tr><td>Paid Metasearch</td><td>Traffic from aggregators that gather data, such as prices and availability, from many different websites. This includes paid placements on engines like Google Hotel Ads, Tripadvisor, Kayak and others.</td></tr><tr><td>Paid Shopping</td><td>Users arriving at your site or app via paid ads on shopping sites like Amazon, eBay, or individual retailer sites.</td></tr><tr><td>Paid Directory Listing</td><td>Traffic from paid business listings or enhanced profiles on directory sites, like specific paid campaigns on Tripadvisor for example.</td></tr><tr><td>Paid Native</td><td>Sponsored content that matches the form and function of the editorial content on a publisher's site. This makes the advertisements feel less intrusive than traditional display ads.</td></tr><tr><td>Paid Other</td><td>Users arriving at your site or app via ads, but not through an ad identified as Search, Social, Shopping, or Video. For example, if there was a Google Click ID that hasn't been matched through your ad account integration.</td></tr><tr><td>Cross-network</td><td>Ads that appear on a variety of networks (e.g., Search and Display) to drive traffic. This includes campaign types like Demand Gen, Performance Max, and Smart Shopping.</td></tr><tr><td>OTT</td><td>Over-the-Top video advertisements delivered directly to a viewer through a streaming service. These ads play before, during, or after video content on devices like Roku.</td></tr><tr><td>Display</td><td>Visual ads, such as banners, delivered online usually with call-to-action messaging that links to a landing page.</td></tr><tr><td>Affiliate</td><td>Traffic driven by partners who are paid a commission for the leads or sales they generate. These links are mandatory to track and measure the ROI of partner programs.</td></tr></tbody></table>

### <mark style="color:$primary;">Messaging</mark>

Messaging consolidates traffic originating from direct communication channels, including both transactional and marketing emails as well as SMS and chat platforms. It captures users engaging with personal or automated messages, whether they are receiving order updates, newsletters, or interacting via apps like WhatsApp.

<table><thead><tr><th width="291.00390625">CHANNEL GROUPS</th><th>DEFINITION</th></tr></thead><tbody><tr><td>Transactional Email</td><td>Traffic generated from non-promotional emails sent to facilitate an agreed-upon transaction. This includes order confirmations, receipts, and shipping notifications.</td></tr><tr><td>Marketing Email</td><td>Traffic from emails sent primarily to promote a product, service, or content. This category covers newsletters, sales announcements, and nurturing campaigns.</td></tr><tr><td>Other Email</td><td>Email traffic known from the referrer or source (e.g., an email client) but lacking specific UTMs to indicate if it is transactional or marketing.</td></tr><tr><td>Text Messaging</td><td>Traffic originating from SMS, RCS, or iMessage links sent to mobile devices</td></tr><tr><td>Chat</td><td>Traffic originating from messaging apps and platforms, such as WhatsApp.</td></tr></tbody></table>

### <mark style="color:$primary;">AI</mark>

This collection tracks high-intent traffic coming from generative AI tools, conversational search engines, and on-site chatbots. It distinguishes between organic referrals from platforms like ChatGPT and paid placements within AI interfaces to monitor the impact of artificial intelligence on site visitation.

<table><thead><tr><th width="291.00390625">CHANNEL GROUPS</th><th>DEFINITION</th></tr></thead><tbody><tr><td>AI Platform</td><td>Traffic originating from links within generative AI tools and conversational search engines like ChatGPT or Gemini. This isolates high-intent traffic specifically from AI consumers.</td></tr><tr><td>Paid AI Platform</td><td>A custom channel to distinguish paid advertising within AI interfaces from organic AI referrals.</td></tr><tr><td>Site Chatbot</td><td>Traffic or interactions driven by automated chatbot tools embedded on a website. This tracks users engaging with on-site virtual assistants.</td></tr></tbody></table>

### <mark style="color:$primary;">Omnichannel</mark>

This collection bridges the gap between physical and digital experiences by tracking traffic from offline sources such as print materials, direct mail, and QR codes. It allows for the measurement of digital responses to real-world assets like brochures, webcams, and physical mailers.

<table><thead><tr><th width="291.00390625">CHANNEL GROUPS</th><th>DEFINITION</th></tr></thead><tbody><tr><td>Print</td><td>Traffic resulting from URLs or QR codes placed on physical print materials. This allows for tracking the digital response to offline print campaigns.</td></tr><tr><td>QR Code</td><td>Users arriving at the site by scanning a Quick Response code. These are often used in physical locations or on printed collateral to bridge offline and online experiences.</td></tr><tr><td>Webcam</td><td>Traffic originating from links associated with live webcam feeds. This is common for destinations or resorts showcasing real-time views.</td></tr><tr><td>Direct Mail</td><td>Traffic generated from physical mailers sent to a user's address. It is typically tracked via personalized URLs (PURLs) or specific landing pages.</td></tr></tbody></table>

### <mark style="color:$primary;">Internal</mark>

Internal accounts for interactions that occur within the organization or on the site itself, such as employee visits, Wi-Fi logins, and clicks on internal calls-to-action. It is primarily used to filter out non-customer traffic or to track specific on-site behaviors without overriding the original marketing source.

<table><thead><tr><th width="291.00390625">CHANNEL GROUPS</th><th>DEFINITION</th></tr></thead><tbody><tr><td>Onsite CTA</td><td>Internal interactions like button or link that used marketing UTMs for tracking. We recommend using custom parameters (instead of UTM parameters) or event tracking to track internal interactions on your site or elsewhere.</td></tr><tr><td>Internal Traffic</td><td>Visits to the site from employees or internal systems. This data is often filtered out of main reports to maintain data accuracy.</td></tr><tr><td>Wifi Login</td><td>Traffic generated when users connect to a provided Wi-Fi network, often redirecting them to a landing page. This is common in hospitality and retail environments.</td></tr></tbody></table>


# Direct data access

Spacetime provides direct data access to analytics data via Google BigQuery authorized views. This approach allows you to connect any BI tool (Looker, Power BI, Tableau, etc.) directly to BigQuery or pull data on demand via ad-hoc queries without needing to copy or sync data between environments. Data is always fresh and access to specific properties is platform-enforced at the authentication level.

{% hint style="info" %}
A service account and key are provided by the Flip.to team for direct data access.
{% endhint %}

### Data Access

Dataset: `flipto-external-data.shared_views`

| View                                                         | Description                                                                 |
| ------------------------------------------------------------ | --------------------------------------------------------------------------- |
| **Lookup & Reference**                                       |                                                                             |
| properties\_lookup                                           | Property names and identifiers                                              |
| companies\_lookup                                            | Company names and metadata                                                  |
| companies\_properties\_associations                          | Company-to-property mapping                                                 |
| property\_hosts                                              | Hostnames (domains) associated with each property                           |
| **Transactions**                                             |                                                                             |
| transactions                                                 | Individual transaction records (booking details, revenue, room nights)      |
| **Traffic & Engagement Metrics**                             |                                                                             |
| traffic\_metrics\_root                                       | Daily user/engagement metrics by property and dimensions (HLL)              |
| **Transaction & Reservation Metrics (Attribution-Weighted)** |                                                                             |
| transaction\_metrics\_root                                   | Transaction metrics by purchase date with multi-touch attribution           |
| reservation\_metrics\_root                                   | Transaction metrics by reservation/arrival date with attribution            |
| transaction\_reservation\_metrics\_root                      | Cross-date: purchase date rows with reservation date as secondary dimension |
| reservation\_transaction\_metrics\_root                      | Cross-date: reservation date rows with purchase date as secondary dimension |
| **Demand & Search Metrics**                                  |                                                                             |
| demand\_metrics\_root                                        | Search demand / availability check user counts (HLL)                        |
| search\_metrics\_root                                        | Booking engine search user counts (HLL)                                     |
| demand\_search\_metrics\_root                                | Cross-date: demand date rows with search date as secondary dimension        |
| search\_demand\_metrics\_root                                | Cross-date: search date rows with demand date as secondary dimension        |
| **Media & Advertising**                                      |                                                                             |
| media\_ad\_accounts                                          | Ad account metadata (Google, Meta, Microsoft, TikTok)                       |
| media\_ads                                                   | Individual ad creative details                                              |
| media\_ad\_metrics                                           | Ad platform reported metrics (impressions, clicks, spend)                   |
| media\_ad\_click\_ids                                        | Click ID mapping for ad click attribution                                   |

### Attribution models

Five different attribution models are supported out of the box:

| Model        | Description                                        |
| ------------ | -------------------------------------------------- |
| first\_touch | 100% credit to the first marketing touchpoint      |
| last\_touch  | 100% credit to the last touchpoint before purchase |
| linear       | Equal credit across all touchpoints                |
| positional   | 40% first, 40% last, 20% split across middle       |
| time\_decay  | Exponential decay with 7-day half-life             |

### Granularity

Daily data is available. The examples show weekly aggregation, but you can choose any granularity:

| Granularity | Approach                                  |
| ----------- | ----------------------------------------- |
| Daily       | Use granular\_date directly               |
| Weekly      | DATE\_TRUNC(granular\_date, WEEK(MONDAY)) |
| Monthly     | DATE\_TRUNC(granular\_date, MONTH)        |

### Understanding array\_source (Transaction Views)

Transaction and reservation views contain an array\_source column that controls which dimensions are populated on each row. Each transaction appears multiple times — once per array source — so you must always filter to the one you need, or you will double-count.

| array\_source    | Dimensions populated                                           | Use case                                    |
| ---------------- | -------------------------------------------------------------- | ------------------------------------------- |
| traffic\_sources | Channel, source, medium, campaign, ad network, ad campaign     | Channel or campaign performance reports     |
| nonpositional    | Country, region, city, device class, room type, booking window | Geographic, device, or room type breakdowns |
| landing\_pages   | Email send UUID                                                | Email campaign attribution                  |

{% hint style="info" %}
For example, a single $200 transaction with 2 marketing touchpoints and a device type will appear as rows in both traffic\_sources (attributed across the 2 touchpoints) and nonpositional (with the device dimension). Querying without an array\_source filter would count that transaction multiple times.

**Unless you specifically need geo, device, room type, or email breakdowns, use array\_source = 'traffic\_sources'.**
{% endhint %}

***

## Initial setup & first query

### Infrastructure

1. You'll need your own Google Cloud project with billing enabled. If you don't have one, you can create one at [console.cloud.google.com](https://console.cloud.google.com).

{% hint style="info" %}
A billing account must be linked to the project — BigQuery will not run queries without one.
{% endhint %}

2. Grant the Flip.to service account permission to run queries in their project. A GCP admin runs this in their project’s IAM console or via gcloud:

```console
gcloud projects add-iam-policy-binding YOUR-PROJECT-ID-HERE --member="serviceAccount:
YOUR-SERVICE-ACCOUNT-EMAIL-HERE
" --role="roles/bigquery.jobUser"
```

3. This grants the service account permission to execute queries billed to your project.
4. Receive the service account key file from Flip.to. This is a JSON file used to authenticate. Flip.to will provide it securely.

### Connecting a BI Tool

When configuring a BI tool (Power BI, Looker, Tableau, etc.) or a BigQuery client library:

| Setting                     | Value                                               |
| --------------------------- | --------------------------------------------------- |
| Authentication              | Service account JSON key file (provided by Flip.to) |
| Billing / Execution Project | Your GCP project ID                                 |
| Dataset to query            | flipto-external-data.shared\_views                  |

{% hint style="warning" %}
The execution project setting is critical as it tells BigQuery which project owns the query and where to create jobs. It must be set to your project, as the service account does not have job creation permission on the flipto-external-data project so all requests will fail unless this is configured properly!
{% endhint %}

### Running your first query

To verify everything works, run this in the BigQuery console from your project or from a BI tool:

```sql
SELECT property_uuid, name
FROM `flipto-external-data.shared_views.properties_lookup`
```

If this returns property names, the setup is complete. If not, here are some common errors and how to fix them.

| Error                                                                      | Cause                                                        | Fix                                          |
| -------------------------------------------------------------------------- | ------------------------------------------------------------ | -------------------------------------------- |
| Access Denied: User does not have bigquery.jobs.create permission          | Service account not granted bigquery.jobUser in your project | Your admin runs the gcloud IAM command above |
| Access Denied: Table flipto-external-data.shared\_views.properties\_lookup | Dataset read access not yet granted by Flip.to               | Flip.to runs the GRANT dataViewer command    |
| Empty results (0 rows)                                                     | service\_account\_id not set on your company record          | Flip.to updates companies\_lookup            |

***

## Example query

All queries should include a date filter and a property filter for best performance. Examples below use a one-month window.

### Daily Traffic + Revenue By Property / Channel / Source / Medium / Ad Campaign

```sql
DECLARE date_from DATE DEFAULT '2026-02-01';
DECLARE date_to DATE DEFAULT '2026-02-28';
DECLARE properties ARRAY<STRING> DEFAULT ['YOUR-PROPERTY-UUID-HERE'];

WITH ad_names AS (
  SELECT
    campaign.campaign_id                AS ad_campaign,
    ANY_VALUE(campaign.name)            AS campaign_name,
    ad_group.ad_group_id,
    ANY_VALUE(ad_group.name)            AS ad_group_name,
    ad_id,
    ANY_VALUE(name)                     AS ad_name
  FROM `flipto-external-data.shared_views.media_ads`
  GROUP BY campaign.campaign_id, ad_group.ad_group_id, ad_id
),

traffic AS (
  SELECT
    granular_date AS day,
    property_uuid,
    default_channel_group,
    NULLIF(NULLIF(utm_source, 'xxxx'), 'unknown')     AS utm_source,
    NULLIF(NULLIF(utm_medium, 'xxxx'), 'unknown')     AS utm_medium,
    NULLIF(NULLIF(ad_campaign, 'xxxx'), 'unknown')    AS ad_campaign,
    NULLIF(NULLIF(ad_group_id, 'xxxx'), 'unknown')    AS ad_group_id,
    NULLIF(NULLIF(ad_id, 'xxxx'), 'unknown')          AS ad_id,
    HLL_COUNT.MERGE_PARTIAL(metrics.total_hll)    AS visitors_hll,
    HLL_COUNT.MERGE_PARTIAL(metrics.is_engine_hll) AS planners_hll,
    HLL_COUNT.MERGE_PARTIAL(metrics.is_booked_hll) AS booked_guests_hll
  FROM `flipto-external-data.shared_views.traffic_metrics_root`
  WHERE granular_date BETWEEN date_from AND date_to
    AND entity_uuid IN UNNEST(properties)
  GROUP BY ALL
),

txn AS (
  SELECT
    transaction_date AS day,
    property_uuid,
    default_channel_group,
    NULLIF(NULLIF(utm_source, 'xxxx'), 'unknown')     AS utm_source,
    NULLIF(NULLIF(utm_medium, 'xxxx'), 'unknown')     AS utm_medium,
    NULLIF(NULLIF(ad_campaign, 'xxxx'), 'unknown')    AS ad_campaign,
    NULLIF(NULLIF(ad_group_id, 'xxxx'), 'unknown')    AS ad_group_id,
    NULLIF(NULLIF(ad_id, 'xxxx'), 'unknown')          AS ad_id,
    SUM(first_touch.transactions) AS first_touch_transactions,
    SUM(first_touch.revenue)      AS first_touch_revenue,
    SUM(last_touch.transactions)  AS last_touch_transactions,
    SUM(last_touch.revenue)       AS last_touch_revenue
  FROM `flipto-external-data.shared_views.transaction_metrics_root`
  WHERE transaction_date BETWEEN date_from AND date_to
    AND property_uuid IN UNNEST(properties)
    AND array_source = 'traffic_sources'
  GROUP BY ALL
)

SELECT
  COALESCE(tr.day, tx.day)                                           AS day,
  p.name                                                              AS hotel,
  COALESCE(tr.default_channel_group, tx.default_channel_group)        AS channel,
  COALESCE(tr.utm_source, tx.utm_source)                              AS source,
  COALESCE(tr.utm_medium, tx.utm_medium)                              AS medium,
  COALESCE(an.campaign_name, tr.ad_campaign, tx.ad_campaign)          AS campaign,
  COALESCE(an.ad_group_name, tr.ad_group_id, tx.ad_group_id)         AS ad_group,
  HLL_COUNT.EXTRACT(tr.visitors_hll)                                  AS visitors,
  HLL_COUNT.EXTRACT(tr.planners_hll)                                  AS planners,
  HLL_COUNT.EXTRACT(tr.booked_guests_hll)                             AS booked_guests,
  ROUND(tx.first_touch_transactions, 2)                               AS first_touch_transactions,
  ROUND(tx.first_touch_revenue, 2)                                    AS first_touch_revenue,
  ROUND(tx.last_touch_transactions, 2)                                AS last_touch_transactions,
  ROUND(tx.last_touch_revenue, 2)                                     AS last_touch_revenue
FROM traffic tr
FULL OUTER JOIN txn tx
  ON  tr.day = tx.day
  AND tr.property_uuid = tx.property_uuid
  AND tr.default_channel_group = tx.default_channel_group
  AND IFNULL(tr.utm_source, '') = IFNULL(tx.utm_source, '')
  AND IFNULL(tr.utm_medium, '') = IFNULL(tx.utm_medium, '')
  AND IFNULL(tr.ad_campaign, '') = IFNULL(tx.ad_campaign, '')
  AND IFNULL(tr.ad_group_id, '') = IFNULL(tx.ad_group_id, '')
  AND IFNULL(tr.ad_id, '') = IFNULL(tx.ad_id, '')
LEFT JOIN ad_names an
  ON  an.ad_campaign = COALESCE(tr.ad_campaign, tx.ad_campaign)
  AND an.ad_group_id = COALESCE(tr.ad_group_id, tx.ad_group_id)
  AND an.ad_id = COALESCE(tr.ad_id, tx.ad_id)
LEFT JOIN `flipto-external-data.shared_views.properties_lookup` p
  ON p.property_uuid = COALESCE(tr.property_uuid, tx.property_uuid)
ORDER BY day, last_touch_revenue DESC NULLS LAST, channel, source, medium, campaign, ad_group
```

## Best Practices

1. **Always include a date filter** — data is partitioned by date. Without a date filter, the query scans all historical data and costs more.
2. **Add a literal property filter when possible** — If querying a specific property, add `AND entity_uuid = 'uuid-here'` (or `property_uuid` for transaction views). This enables cluster pruning, improves query performance and can reduce data scanned.
3. **Aggregate by week or month** — Daily granularity is available, but weekly/monthly aggregation reduces result set size for BI dashboards.
4. **HLL metrics must be merged, not summed** — User counts use HyperLogLog sketches for accurate cross-dimension deduplication. Always use HLL\_COUNT.MERGE() when aggregating, never SUM.

## Sample Data

{% hint style="info" %}
HLL Data is binary and not represented in the samples below.
{% endhint %}

### 1. companies\_lookup

| service\_account\_id      | company\_name     | company\_uuid                        | company\_type\_id | url                       | is\_active |
| ------------------------- | ----------------- | ------------------------------------ | ----------------- | ------------------------- | ---------- |
| Your service acount email | Your company name | 594cabdb-a86f-4b74-beb5-0d09bb7a9358 | 1                 | <https://www.example.com> | true       |

### 2. companies\_properties\_associations

| property\_uuid                       | company\_uuid                        |
| ------------------------------------ | ------------------------------------ |
| 36a49ed0-8e63-4f25-b6f6-a7423a1a5e59 | 594cabdb-a86f-4b74-beb5-0d09bb7a9358 |

### 3. properties\_lookup

| website\_url              | is\_active | name               | property\_uuid                       | is\_spacetime\_enabled | property\_type\_id |
| ------------------------- | ---------- | ------------------ | ------------------------------------ | ---------------------- | ------------------ |
| <https://www.example.com> | true       | Your property name | f7416e5b-f68f-486f-9079-666b793bd79b | true                   | 2                  |

### 4. property\_hosts

<table data-full-width="true"><thead><tr><th>hostname</th><th>property_uuid</th></tr></thead><tbody><tr><td>yourdomain.com</td><td>f7416e5b-f68f-486f-9079-666b793bd79b</td></tr></tbody></table>

### 5. transactions

| purchase\_tstamp    | transaction\_id                      | amount\_in\_cents | currency | nights | arrival\_date | departure\_date | room\_type             | rate\_plan\_name    | property\_uuid                       | booking\_engine | geo\_country | geo\_city | device\_class |
| ------------------- | ------------------------------------ | ----------------- | -------- | ------ | ------------- | --------------- | ---------------------- | ------------------- | ------------------------------------ | --------------- | ------------ | --------- | ------------- |
| 2025-11-13 21:07:50 | d275b263-a960-4ac4-9eec-54c73c495991 | 41644             | usd      | 2      | 2026-04-10    | 2026-04-12      | superior room 2 double | best available rate | f7416e5b-f68f-486f-9079-666b793bd79b | ihotelier       | es           | barcelona | desktop       |

### 6. traffic\_metrics\_root

| granular\_date | entity\_uuid                         | channel\_collection | default\_channel\_group | ad\_network | utm\_source | utm\_medium | utm\_campaign | geo\_country | geo\_city | device\_class | property\_uuid                       | room\_type | booking\_window\_week |
| -------------- | ------------------------------------ | ------------------- | ----------------------- | ----------- | ----------- | ----------- | ------------- | ------------ | --------- | ------------- | ------------------------------------ | ---------- | --------------------- |
| 2026-03-01     | f7416e5b-f68f-486f-9079-666b793bd79b | Organic             | Direct                  | Organic     | NULL        | NULL        | NULL          | us           | NULL      | desktop       | f7416e5b-f68f-486f-9079-666b793bd79b | NULL       | 0                     |

### 7. demand\_metrics\_root

| reservation\_date | property\_uuid                       | channel\_collection | default\_channel\_group | ad\_network | utm\_source | utm\_medium | geo\_country | geo\_city           | device\_class | room\_type         | booking\_window\_week |
| ----------------- | ------------------------------------ | ------------------- | ----------------------- | ----------- | ----------- | ----------- | ------------ | ------------------- | ------------- | ------------------ | --------------------- |
| 2026-03-01        | f7416e5b-f68f-486f-9079-666b793bd79b | NULL                | NULL                    | unknown     | NULL        | NULL        | mx           | venustiano carranza | desktop       | Deluxe Room 1 King | 0                     |

### 8. search\_metrics\_root

|            | property\_uuid                       | channel\_collection | default\_channel\_group | ad\_network | utm\_source | utm\_medium | geo\_country | geo\_city | device\_class | room\_type | booking\_window\_week |
| ---------- | ------------------------------------ | ------------------- | ----------------------- | ----------- | ----------- | ----------- | ------------ | --------- | ------------- | ---------- | --------------------- |
| 2026-03-01 | f7416e5b-f68f-486f-9079-666b793bd79b | Paid                | Paid Metasearch         | Trivago     | trivago     | meta        | us           | new york  | desktop       | NULL       | 0                     |

### 9. transaction\_metrics\_root

| transaction\_date | property\_uuid                       | array\_source    | channel\_collection | default\_channel\_group | ad\_network | utm\_source | utm\_medium | geo\_country | geo\_city  | device\_class | room\_type             | booking\_window\_week |
| ----------------- | ------------------------------------ | ---------------- | ------------------- | ----------------------- | ----------- | ----------- | ----------- | ------------ | ---------- | ------------- | ---------------------- | --------------------- |
| 2026-03-01        | f7416e5b-f68f-486f-9079-666b793bd79b | traffic\_sources | Paid                | Cross-network           | Google      | unknown     | unknown     | mx           | cuauhtémoc | desktop       | superior room 2 double | 0                     |

### 10. reservation\_metrics\_root

| reservation\_date | property\_uuid                       | array\_source | channel\_collection | default\_channel\_group | ad\_network | geo\_country | geo\_city   | device\_class | room\_type           | booking\_window\_week |
| ----------------- | ------------------------------------ | ------------- | ------------------- | ----------------------- | ----------- | ------------ | ----------- | ------------- | -------------------- | --------------------- |
| 2026-03-01        | f7416e5b-f68f-486f-9079-666b793bd79b | nonpositional | NULL                | NULL                    | NULL        | mx           | guadalajara | desktop       | superior room 1 king | 0                     |

### 11. transaction\_reservation\_metrics\_root

| transaction\_date | reservation\_date | property\_uuid                       | array\_source    | channel\_collection | default\_channel\_group | ad\_network | geo\_country | geo\_city | device\_class | room\_type             |
| ----------------- | ----------------- | ------------------------------------ | ---------------- | ------------------- | ----------------------- | ----------- | ------------ | --------- | ------------- | ---------------------- |
| 2026-03-01        | 2026-03-16        | f7416e5b-f68f-486f-9079-666b793bd79b | traffic\_sources | Paid                | Paid Search             | Google      | mx           | ecatepec  | phone         | superior room 2 double |

### 12. reservation\_transaction\_metrics\_root

| reservation\_date | transaction\_date | property\_uuid                       | array\_source | channel\_collection | default\_channel\_group | ad\_network | geo\_country | geo\_city            | device\_class | room\_type      |
| ----------------- | ----------------- | ------------------------------------ | ------------- | ------------------- | ----------------------- | ----------- | ------------ | -------------------- | ------------- | --------------- |
| 2026-03-01        | 2026-02-04        | f7416e5b-f68f-486f-9079-666b793bd79b | nonpositional | NULL                | NULL                    | NULL        | mx           | tlajomulco de zúñiga | desktop       | accessible room |

### 13. demand\_search\_metrics\_root

| reservation\_date | search\_date | property\_uuid                       | channel\_collection | default\_channel\_group | ad\_network | geo\_country | geo\_city | device\_class |
| ----------------- | ------------ | ------------------------------------ | ------------------- | ----------------------- | ----------- | ------------ | --------- | ------------- |
| 2026-03-01        | 2025-12-09   | f7416e5b-f68f-486f-9079-666b793bd79b | NULL                | NULL                    | unknown     | us           | san diego | desktop       |

### 14. search\_demand\_metrics\_root

| search\_date | reservation\_date | property\_uuid                       | channel\_collection | default\_channel\_group | ad\_network | geo\_country | geo\_city | device\_class |
| ------------ | ----------------- | ------------------------------------ | ------------------- | ----------------------- | ----------- | ------------ | --------- | ------------- |
| 2026-03-01   | 2026-04-06        | f7416e5b-f68f-486f-9079-666b793bd79b | Paid                | Paid Metasearch         | Trivago     | mx           | saltillo  | phone         |

### 15. media\_ad\_accounts

| media\_ad\_account\_uuid             | name              | account\_id | media\_ad\_account\_type\_id | company\_uuid                        | property\_uuid                       | start\_date | is\_allow\_properties\_access |
| ------------------------------------ | ----------------- | ----------- | ---------------------------- | ------------------------------------ | ------------------------------------ | ----------- | ----------------------------- |
| ca0c909b-dd45-4680-8296-ba7636338784 | Tiktok ad account | 7890123456  | 4                            | 594cabdb-a86f-4b74-beb5-0d09bb7a9358 | f7416e5b-f68f-486f-9079-666b793bd79b | 2025-04-17  | false                         |

### 16. media\_ads

| ad\_id     | media\_ad\_account\_uuid             | name    | campaign\_name   | campaign\_id | campaign\_status | ad\_group\_name | ad\_group\_id |
| ---------- | ------------------------------------ | ------- | ---------------- | ------------ | ---------------- | --------------- | ------------- |
| 5647382910 | ca0c909b-dd45-4680-8296-ba7636338784 | Ad Name | Ad Campaign Name | 0987654321   | Active           | Ad Group Name   | 1234567890    |

### 17. media\_ad\_metrics

| ad\_id     | date       | total\_cost | clicks | impressions | unique\_clicks | conversions | landing\_page\_views |
| ---------- | ---------- | ----------- | ------ | ----------- | -------------- | ----------- | -------------------- |
| 5647382910 | 2026-03-02 | 12.34       | 12     | 12345       | 14             | NULL        | NULL                 |


# Collaboratives

Brands and their local communities can join together on the Flip.to platform to drive impact, giving everyone an edge that leads to becoming more profitable.

By working together, everyone taps a larger, more highly targeted, right-fit demographic and wins over travelers with the revenue impact measured in real-time.

## Enlist ambassadors

Turn visitors into storytellers, growing a massive army of marketers for the destination and your brand with [Advocacy](/docs/platform/advocacy).

## Win over a new audience

Win over the most profitable business with an entirely reimagined booking path, and introduce local experiences with [Discovery](/docs/platform/discovery).

## Unlock an industry first

Bring a regional understanding of the marketing ecosystem in real-time to every member of the collaborative—tracked to revenue.

Directly help lodging partners and the local community win over the most profitable business and improve their own marketing with demographic & behavioral [Insights](/docs/platform/collaboratives/collaborative-insights).


# Collaborative Insights

Collaborative Insights are the first-of-its-kind benchmarks and insights for brands, groups and destinations.

{% embed url="<https://stream.flip.to/take-a-tour-of-collaborative-insights-4ca42f?v=5>" %}

Launch a [Collaborative](/docs/platform/collaboratives) with turnstile analytics for your brand, group or destination. For the first time, travel marketers are getting an understanding of their marketing ecosystem in real-time.

This industry-first directly helps ensure travel marketers are winning over the most profitable business. Dial in the deployment of marketing effort and spend, unveil and segment your most valuable traveler audiences, and get attribution all the way down to revenue.


# Campaign Tracking

Flip.to allows Collaborative Sponsors to easily measure effectiveness of marketing campaigns across all Collaborative Members under Collaborative Insights.

UTM parameters (utm\_source, utm\_medium and utm\_campaign) defined for each campaign are tracked across the Collaborative Sponsor’s website and the Collaborative Members’ websites.

<br>

***

## Before you begin…

* We recommend using a consistent prefix for your UTM parameters to avoid mixing up your campaigns with those being run by Collaborative Members.\
  \
  For example, a utm\_source of **sponsorprefix**\_google and a utm\_campaign of **sponsorprefix**\_summer2023, where **sponsorprefix** is defined by you. For the guide below, we’re going to use **overlook** as the **sponsorprefix**.<br>

***

## Setting up Collaborative Marketing Campaigns

Sign in to Flip.to, navigate to your Collaborative, then to Insights and click add a Campaign.

The first step is to define the Campaign Display Name. This is only visible inside of the Collaborative, and ideally is easy to understand.<br>

<figure><img src="https://lh7-us.googleusercontent.com/adaVH30i4QNabCU8Qd8ZgeSxupAp7m_0ZE1YW0eyXjQaQnc_oD4gxedgOvWANo0h6z1feETpBKsB9-fukMaTrAYafbbgwS2AG4Ka3Ve2ia_F9EvWWHvOhnGC6HKwcZUcwKexvRBYoipM2T7l3aDr63k" alt=""><figcaption></figcaption></figure>

The second step is to define the Campaign Parameters.

Flip.to supports wildcards on names (%), to make it easier to include all sources or campaigns that have a commonality (i.e. all campaigns that have the search term “summer” can be included by setting Campaign to “%summer%”). It is important to set the parameters so they only match the relevant campaigns.

<figure><img src="https://lh7-us.googleusercontent.com/HarQOTlnfTjlYQGjICPMp-EESwBoyjaIiRvhyvsfVX8lT7YVC3nu_81F7CbJ4NTtKeTQVBmnaOQnUN8emoM4WjRI4_BT-4YVVogJ0dOIuDG6EdblV_3EfFY63bB7Uz56guO-LZSRA6e_hteWBl-9plU" alt=""><figcaption></figcaption></figure>

Click Save and you’re all set.

***

And here are some examples of how to set up Campaign Parameters with wildcards:<br>

**Example 1: All campaigns that run on google**

* Source: overlook\_google

**Example 2: All campaigns that run during the summer across all sources**

* Campaign: overlook\_summer%

**Example 3: All paid campaigns on google that run during the summer**

* Source: overlook\_google
* Medium: cpc
* Campaign: overlook\_summer%

<br>


# Brand Resources

Roll out a helpful new way to share logos, images, colors and other content with everyone in your collaborative, while easily keeping sponsor and member brand assets up to date.

## Sponsor Collection

Brand assets are made available to all members when they click into the sponsor's collaborative space.

A collection of logos, colors and brand imagery allow every member an easy way to view and use these assets—like adding the sponsor's logo to the footer of their site, for example.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FGjCQBr87Vu6RUXMAcbkE%2FSponsor%20Collection.jpg?alt=media&amp;token=b1b69b0b-ed7b-408f-a023-f094c2882b89" alt=""><figcaption></figcaption></figure>

## Member Collections

From property photos to seasonal images, hotels and resorts curate their own collection to share with the collaborative sponsor and other members.

And these assets are automatically synced from each members' platform account. That means there is no extra work for members and every asset is kept up to date.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FyndnBefLPYRqZv62JtgV%2FMember%20Collection%20Crop.jpg?alt=media&amp;token=da6582aa-b01b-43c0-bdd4-568cc0110593" alt=""><figcaption></figcaption></figure>


# Mission Control


# Branding

Flip.to is designed to work seamlessly with your brand in every way. To update your brand logos, colors, and images, head over to **Platform → Mission Control → Branding**.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2F7d7vV0JCSzgVAN7kdiXo%2FScreenshot%202023-09-25%20at%204.34.31%20PM.png?alt=media&amp;token=1e0964a6-1b87-491e-ad90-505a0f624051" alt=""><figcaption></figcaption></figure>


# Point person

We'll need a friendly persona to be the "face" of your introductions to travelers at designated touch points within Discovery and Advocacy. This person lends a personal touch to your brand's messaging.

This should be someone who is guest-facing on property. For a hotel, we recommend using your General Manager.

<div align="center"><figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2F7KVcCFYlPw1UCiKDC8jI%2Fadvocacy-confirmation-overlay.png?alt=media&amp;token=b445f82e-0be0-48ff-9fcf-3f23744e6537" alt="" width="563"><figcaption><p>Point person in the Confirmation Experience from Advocacy</p></figcaption></figure></div>

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Flc3JsUrjIfoMzokbsYGl%2Fseasonalimages_pointperson.png?alt=media&amp;token=4815f70f-2402-4721-bc12-6fed34e439bb" alt="" width="563"><figcaption><p>Point person in the Re-engagement Email in Discovery</p></figcaption></figure>

### Guidelines

1. A head-and-shoulders portrait works best (think a LinkedIn profile pic!)
2. The minimum size for images should be 250x250px or higher

Let our [Customer Success team](/docs/support/customer-success) know who is best and we'll get that squared away.


# Seasonal photos

Seasonal photos give travelers an aspirational look at your destination throughout the year, and will be used in context of when your audience wants to travel. Set it up in **Platform → Mission Control → Branding**.

These photos will be used in many ways across your platform, like this moment in Discovery where your audience will choose their dates:

<div align="center"><figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2F8lssrSLZ3U4BWaZSvujy%2Fdiscovery-plannerflow-ranges.png?alt=media&amp;token=7da07609-5846-4f5a-89fe-c912f35f545c" alt=""><figcaption></figcaption></figure></div>

Or this one, where we send a friendly reminder to re-engage your audience, bringing them back to finish booking their plan:

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Flc3JsUrjIfoMzokbsYGl%2Fseasonalimages_pointperson.png?alt=media&amp;token=4815f70f-2402-4721-bc12-6fed34e439bb" alt=""><figcaption></figcaption></figure>

## Guidelines

1. Photos should be in landscape orientation, and close to 4:3 ratio.
2. The minimum size for images should be 800x600px or higher.
3. Upload any of these image file types: .jpg, .jpeg, .png, .gif.
4. Provide photos that best represent each season in your area: Winter, Spring, Summer, Fall.
5. Provide at least one photo per season, but 3 or more is better for variety.
6. Photos should be a mix of activities with people and scenic environment shots. The focus area should be near the middle of the image to prevent odd compositions when it is cropped for different displays.

## Tips

{% hint style="success" %}
**Aim** for photos where the subject is near the vertical middle. Photos may get cropped in different ways when displayed and we want to avoid undesirable cropping of heads, etc.
{% endhint %}

{% hint style="warning" %}
**Avoid** photos with watermarks or any other post-processed markings like logos, frames, etc.
{% endhint %}

{% hint style="warning" %}
**Avoid** dimly lit photos.
{% endhint %}


# Booking engine URL

Flip.to can pass many variables to your booking engine through URL parameters that you define. Set up your **Booking engine URL template** in **Platform → Mission Control → Booking**. There are two URLs that can be set up—one is for booking a stay at an accommodation, the other is for booking a stay that includes flight packages.

In addition, depending on the features you use, some areas of your platform will allow you to set a different booking engine URL template to override the original settings in Mission Control.

{% code title="Example URL using tokens" overflow="wrap" %}

```
https://your.bookingengine.com/page.html?hotel=12345&aDate={start-date,format=MM/dd/yyyy}&dDate={end-date,format=MM/dd/yyyy}&rooms={rooms,fallback=1}&adults={adults}&child={children,fallback=0}&pc={promo-code}&airport={traveler-airport-code}
```

{% endcode %}

<table><thead><tr><th width="295">Token</th><th>Description</th></tr></thead><tbody><tr><td>{product-booking-engine-code}</td><td>The code that identifies your product.<br><br><em>Use only if your platform has been set up with multiple accommodation/destination types and each one is using a unique booking engine code.</em></td></tr><tr><td>{property-booking-engine-code}</td><td>The code that identifies your property in your booking engine.<br><br><em>Use only if your platform has been mapped with multiple properties and each one is using a unique booking engine code.</em></td></tr><tr><td>{fallback-booking-engine-code}</td><td>Optional fallback for the property booking engine code.<br><br><em>Use only if there is a possibility that a property code might be passed in that is invalid or not recognized by the platform.</em></td></tr><tr><td>{start-date,format=MM/dd/yyyy}</td><td><p>The arrival date requested for the reservation.<br><br><em>Format the date using components and separators that your booking engine supports.</em></p><p><em><strong>Components</strong></em><br><code>yy</code> <em>– two-digit year, ie 24</em><br><code>yyyy</code> <em>– four-digit year, ie 2024</em><br><code>M</code> <em>– one-digit for any month below 10, ie 3</em><br><code>MM</code> <em>– two-digit month, ie 03</em><br><code>MMM</code> <em>– three-letter month, ie Sep</em><br><code>MMMM</code> <em>– full name of month, ie September</em><br><code>d</code> <em>– one-digit for any day below 10, ie 5</em><br><code>dd</code> <em>– two-digit day, ie 05</em></p><p><em><strong>Separators</strong></em><br><code>/</code> <em>– slash</em><br><code>.</code> <em>– period</em><br><code>-</code> <em>– dash</em></p></td></tr><tr><td>{end-date,format=MM/dd/yyyy}</td><td>The departure date requested for the reservation.<br><br><em>Refer to arrival date for specifics.</em></td></tr><tr><td>{nights}</td><td>The number of nights requested for the reservation.</td></tr><tr><td>{rooms}</td><td>The number of rooms requested for the reservation.<br><br><em>Supports fallback as follows:</em><br><code>{rooms,fallback=1}</code></td></tr><tr><td>{adults}</td><td>The number of adults who are part of the reservation.</td></tr><tr><td>{children}</td><td>The number of children who are part of the reservation.<br><br><em>Supports fallback as follows:</em><br><code>{children,fallback=0}</code></td></tr><tr><td>{child-age}</td><td><p>The age of any children.<br><br><em>Supports formatting as follows:</em></p><p><code>{child-age, format=0-onlap, arrayFormat=repeated}</code><br></p><p><em>Use <strong>format</strong> to declare the lap child preference as part of the child age parameter. "0" represents the numerical value in the custom string, which can be configured in various ways ie "0-onlap", "lapchild-0", "age-0-onlap". The platform will automatically insert the custom string to any age under 2.</em></p><p><em>Use <strong>arrayFormat</strong> to define how to handle multiple child ages. The following values are supported:</em><br><code>delimited</code><br><code>repeated</code><br><code>brackets</code><br><code>incrementing</code><br></p><p><em>Examples</em><br><em>If token is set to</em><br><code>&#x26;ages={child-age, arrayFormat=delimited, delimiter=,}</code><br><em>the output would be</em><br><em>&#x26;ages=9,11</em></p><p><em>If token is set to</em><br><code>&#x26;ages={child-age, arrayFormat=repeated}</code><br><em>the output would be</em><br><em>&#x26;ages=9&#x26;ages=11</em></p><p><em>If token is set to</em><br><code>&#x26;ages={child-age, arrayFormat=brackets}</code><br><em>the output would be</em><br><em>?ages[]=9&#x26;ages[]=11</em><br><br><em>If token is set to</em><br><code>&#x26;ages={child-age, arrayFormat=incrementing}</code><br><em>the output would be</em><br><em>?ages1=9&#x26;ages2=11</em></p></td></tr><tr><td>{promo-code}</td><td>The promo code used for the reservation.</td></tr><tr><td>{group-code}</td><td>The group code used for the reservation.</td></tr><tr><td>{short-code}</td><td>A short code used when handling unusual booking link URLs.</td></tr><tr><td>{language-code}</td><td><p>The user's preferred language.</p><p><em>Supports formatting as follows:</em><br><em>If lowercase format is required, use</em><br><code>{language-code,format=xx}</code></p><p><em>If uppercase format is required, use</em><br><code>{language-code,format=XX}</code></p><p><em>If the language code needs to be location-specific, use</em><br><code>{language-code,format=xx-XX}</code><br><em>and adjust the lowercase/uppercase format as needed</em></p><p><em>For reservHotel booking engine, use</em><br><code>{language-code,format=reservhotel}</code></p></td></tr><tr><td>{traveler-airport-code}</td><td>The airport that the user will be flying from.</td></tr><tr><td>{rate-plan-code}</td><td>The rate plan code used for the reservation.</td></tr><tr><td>{travel-agent-code}</td><td>The specific code for travel agent use.</td></tr><tr><td>{corporate-code}</td><td>The specific code for employee use.</td></tr></tbody></table>


# Custom domains

Your platform provides hosted web experiences, right out-of-the-box, for certain features like Story Explorer. These experiences live on a domain that looks like **`yourpropertyname.stories.travel`**.

If you'd prefer to blend these platform experiences into your own website, you can do this by setting up **a custom domain** in just a few steps.

## Before you begin

A custom domain serves platform experiences using your domain, providing a cohesive brand experience and the best search engine optimization (SEO).

{% hint style="info" %}
**A common approach is to create a subdomain.**

For example: for the primary domain *yourproperty.com*, create a subdomain like *stories.yourproperty.com* to serve Flip.to experiences. Any subdomain name can be used.
{% endhint %}

{% hint style="warning" %}
There are two requirements:

1. **The custom domain must be configured on a domain that you own and maintain.** Below, see how to point the domain to Flip.to's servers by creating a CNAME record in the domain registrar’s DNS records.
2. **This custom domain must be dedicated to Flip.to.** Since pointing to Flip.to, no other content will be served through the subdomain.\
   \&#xNAN;*(Also since using a subdomain, only this subdomain must be dedicated to Flip.to, and the primary domain and all other subdomains are not affected.)*
   {% endhint %}

## Set up a custom domain

There are two steps to set up a custom domain. First, a CNAME record must be configured with your domain registrar to point to Flip.to’s servers. Second, your custom domain must be added to your Flip.to account.

### Step 1: Head over to your domain registrar to add a CNAME

Add a CNAME record in your domain registrar’s DNS records.

* **Name** will be your custom domain, such as **`stories.yourwebsite.com`**
* **Value** (sometimes called points-to, not redirect) will be **`hub.flip.to`**

{% hint style="info" %}
Your domain registrar might be your website hosting provider, or a domain registration company such as Network Solutions, Cloudflare, or GoDaddy.\
\
Optionally, if your provider supports it, you can set up a http proxy as well. A proxy allows you to secure your custom domain with your own SSL certificate. Follow your registrar’s instructions to add a cname record.
{% endhint %}

### Step 2: Sign in to your Flip.to account to set up your domain

#### Adding a domain

In your account, go to **Platform → Domains** and add a domain. Type the custom domain name exactly as it was configured in your CNAME record, and save.

The platform checks that the custom domain is properly pointing to Flip.to’s servers. If configured correctly the custom domain will be turned on and is ready-to-go.

{% hint style="danger" %}
If the custom domain is not connecting to Flip.to’s servers, the record will be saved, but will remain switched off. Check the configuration with your registrar. It can take up to 24 hours for DNS changes made with the registrar to propagate.
{% endhint %}

#### Testing the server connection

On the platform, you can test, or re-test, to check the connection at any time.

#### Mapping properties to the custom domain

Your custom domain will include all properties associated with your account automatically.

Alternatively, you can assign specific properties to a custom domain. Here are examples of different ways it can be configured:

* Each property can have its own custom domain
* Groups of properties can be organized into a shared domain
* A single property can be associated with more than one domain

{% hint style="info" %}
If you need help setting up your account, reach out to [Customer Success](/docs/support/customer-success) and we'll be happy to get you up and running.
{% endhint %}

## 🎉 Explore your new custom domain!

Once your custom domain is set up, visit the URL you created and explore your platform experiences right from your own website.\
\
\ <br>


# Languages

Flip.to includes multi-language support, so you can reach, inspire and win over travelers around the world. Find language support over at **Platform → Mission Control → Languages**.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fgz8XPXJoJHPsvMtkXVWZ%2Flanguages.png?alt=media&amp;token=601626f1-cecc-4f44-816e-93bdf3a07428" alt=""><figcaption></figcaption></figure>


# Team

Add more team members to your account at **Platform → Team**.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FK14QlQX11heODkIgBrxp%2FScreenshot%202023-09-26%20at%208.39.36%20AM.png?alt=media&amp;token=2d5be592-a9ff-4eb3-88a8-514b68abbd1d" alt=""><figcaption></figcaption></figure>

{% hint style="info" %}
If the Team section doesn't show up in your account, you may need more permissions—say hello to our [Customer Success team](/docs/support/customer-success) about that.
{% endhint %}

## Roles

There are three types of platform roles you can assign any team member:

1. **Platform Lead** can add team members, and the has ability to do anything in the account.
2. **Editor** can edit platform settings, publish content, view audience details, and review stats and reports.
3. **Reviewer** can only review stats and reports.


# Privacy Requests

Flip.to supports your audience’s rights over their personal data. The full details live in our[ privacy policy](https://docs.flip.to/policies/platform/privacy-policy#requests-pd).&#x20;

One of those is the right to erasure: a request to delete all of their data from your system, and those of your data processors. These requests are a normal and routine part of marketing, and all requests are required to be handled promptly. To better support this need, we built it right in.&#x20;

Here's how:

{% hint style="warning" %}
**Before you begin:** You must be a **Platform Lead** to handle privacy requests. If you are not, contact a team member who was designated as the lead for managing your platform.
{% endhint %}

## Fulfilling privacy deletion requests

{% stepper %}
{% step %}

### Head over to Privacy Requests

Sign in to your account, then open the **Platform** menu and click **Privacy Requests**.
{% endstep %}

{% step %}

### Search for the user

In the search field, enter the email of the user who made the request, then find the user in the list and click **Request to delete**.

<div data-with-frame="true"><figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FuQkThuye9X5jSy6Y2zpP%2Fprivacy%20request%20-%20search.png?alt=media&amp;token=5bf9ce27-e62a-4500-a99e-36e1087d5b73" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

### Review user's records and proceed with deletion

Every interaction with your property that is on record will be displayed. If you're ready to delete, enter the phrase "proceed" and click **Delete**.

<div data-with-frame="true"><figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Ff1CNquUtOw3Umi1SZ2co%2Fprivacy%20request%20-%20confirm.png?alt=media&amp;token=d5162696-aaa9-497b-bf71-e953a8f4cdfd" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

### Confirmation

After deletion, a confirmation screen will display a summary of the deletion request as well as a Request Receipt ID.

<div data-with-frame="true"><figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fkd6d4Xtqh6x1tR9ZurcC%2Fprivacy%20request%20-%20confirmation.png?alt=media&amp;token=dee4b234-8526-4303-b091-d3068051f00a" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}

### Check History for all deleted records

All user that was deleted will be logged in the **History** tab.&#x20;

<div data-with-frame="true"><figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FyA37LGJKASGP7wvpkwIZ%2Fprivacy%20request%20-%20history.png?alt=media&amp;token=ae3d188d-af2b-4a59-997c-a6650cf1db73" alt=""><figcaption></figcaption></figure></div>

{% hint style="info" %}
If the request is still processing, wait a few minutes and try reloading the page. The information will update when the process has completed.
{% endhint %}
{% endstep %}
{% endstepper %}


# Websites


# Set up your website (legacy)

Adding Flip.to to your website requires the following code snippet on every page of your website.

{% hint style="warning" %}
**Before you begin:** you'll need your unique IDs, which you should have received by email. If not, ask our [Customer Success team](/docs/support/customer-success).
{% endhint %}

{% embed url="<https://stream.flip.to/let-s-get-set-up-website-edition?v=5>" %}

{% hint style="warning" %}
If your website and booking engine are on the same domain, the instructions below apply only to your website pages. A different snippet is required for [your booking engine pages](/docs/integrations/booking-engines/set-up-your-booking-engine).
{% endhint %}

***

## Website code snippet

The following snippet should be added to the **\<head>** tag of every page of the website. Make sure to include your unique **Website ID** in your snippet.

```html
<!--Flip.to - Integration Start-->
<script async src="https://integration.flip.to/YOUR_WEBSITE_ID_HERE"></script>
<!--Flip.to - Integration End-->
```

{% hint style="info" %}
The user experience and tracking on the website can be impacted if the tags are delayed on page load. So it loads asynchronously, we recommend using the \<head> tags over GTM.
{% endhint %}

{% hint style="info" %}
For single-page applications, this snippet should only be loaded at application start, not on virtual pageviews.
{% endhint %}

If you're implementing Discovery, you'll also need to add the following snippet. Make sure to include your unique **Discovery ID** in your snippet.

```html
<!--Flip.to - Discovery Start-->
<script async src="https://components.flip.to/discovery/YOUR_DISCOVERY_ID_HERE"></script>
<!--Flip.to - Discovery End-->
```

{% hint style="warning" %}
If you use JavaScript to navigate users from your website to your booking engine, there's one extra step—see the guide for [Cross-domain tracking](/docs/integrations/websites/cross-domain-tracking).
{% endhint %}


# Set up your website

To set up Flip.to, add the following code snippet to the **\<head>** tag of every page of your website and take a peek below at any additional configurations.

```html
<script async src="https://integration.flip.to" crossorigin="anonymous"></script>
```

{% hint style="info" %}
The user experience and tracking on the website can be impacted if the tag is delayed on page load. To ensure it loads asynchronously, we recommend adding it directly to the \<head> tag over GTM.
{% endhint %}

***

## Configurations

<details>

<summary>Implementing Discovery</summary>

If you're implementing Discovery, you'll also need to add the following snippet. Make sure to include your unique **Discovery ID** in your snippet.

```html
<script async src="https://components.flip.to/discovery/YOUR_DISCOVERY_ID_HERE" crossorigin="anonymous"></script>
```

{% hint style="warning" %}
You'll need your unique Discovery ID, which you should have received by email. If not, ask our [Customer Success team](/docs/support/customer-success).
{% endhint %}

</details>

<details>

<summary>Setting up Consent Management</summary>

Flip.to reads consent signals from your CMP out of the box—native integrations with the major platforms, any platform implementing the IAB TCF, and Google Tag Manager for most everything else. See the guide for [Consent management for your website](/docs/integrations/websites/consent-management/consent-management-for-your-website).

</details>

<details>

<summary>Supporting JavaScript navigation</summary>

If you use JavaScript to navigate users from your website to your booking engine, there's one extra step—see the guide for [Cross-domain tracking](/docs/integrations/websites/cross-domain-tracking).

</details>

<details>

<summary>Configuring single-page applications</summary>

For single-page applications, this snippet should only be loaded at application start, not on virtual pageviews.

</details>

***

Adding Flip.to to your booking engine? See [Set up your booking engine](/docs/integrations/booking-engines/set-up-your-booking-engine).


# Consent Management

Travelers decide what they share. Consent management is how you respect that: collecting those preferences, storing them, and applying them everywhere a technology touches.

We've built for that from the start, and put together every step below so your setup lines up with GDPR, CCPA, and the rest.

#### Get started for here:

<table data-view="cards"><thead><tr><th></th><th data-hidden data-card-target data-type="content-ref"></th><th data-hidden data-card-cover data-type="image">Cover image</th></tr></thead><tbody><tr><td><strong>For your website</strong></td><td><a href="/docs/integrations/websites/consent-management/consent-management-for-your-website">For your website</a></td><td><a href="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FpNvzz4208bXnhjdwhAau%2Fimage.png?alt=media&amp;token=f24bc3f1-c168-4c9a-ba59-85c356196686">image.png</a></td></tr><tr><td><strong>For hosted pages</strong></td><td><a href="/docs/integrations/websites/consent-management/for-hosted-pages">For hosted pages</a></td><td><a href="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2F8k01j1pn9pZ02rfDKfkO%2Fimage.avif?alt=media&amp;token=e3e52649-af1c-4453-a39e-d4be42cbbd85">image.avif</a></td></tr></tbody></table>

Or, if you're looking for [Consent Management for your booking engine, head this way.](/docs/integrations/booking-engines/consent-management-for-your-booking-engine) 👉


# For your website

Flip.to **only** uses first-party cookies that are placed on the site that the user is visiting. We are a **data processor** (or **service provider**) and our customers have full ownership of all data collected or processed on their behalf.

Flip.to reads consent signals from your CMP out of the box. Three paths, no extra configuration:

* **Native integrations:** Cookiebot, OneTrust, Osano, CookieYes, Termly, TrustArc, Usercentrics, Didomi, Iubenda, Ketch, Civic Cookie Control, Complianz, Cookie Notice (Hu-manity.co)
* **IAB TCF:** any platform implementing the Transparency & Consent Framework
* **Google Tag Manager:** most everything else. If your CMP writes to GTM, we read it.

{% hint style="info" %}
If you are configuring a consent management platform, you can find more information below on the two types of cookies that are used by Flip.to—**Strictly Necessary** and **Analytics**.

Be sure to include the **asterisk (\*)** when configuring these cookies in your consent management platform. The cookie names are prefixes and the asterisk is a wildcard representing a variety of property-specific suffixes.
{% endhint %}

Flip.to scripts are **essential** and should always run. There are three products, [Spacetime](#spacetime), [Discovery](#discovery), and [Advocacy](#advocacy) that require consent management configuration for your website.

***

## **Spacetime**

Spacetime is behavioral analytics for travel and categorized as **Analytics**, and **places one cookie** on a visitor's browser if and when consent is provided for **Analytics**.

<table><thead><tr><th width="207.66666666666666">Cookie</th><th width="213">Description</th><th>Duration</th></tr></thead><tbody><tr><td>sa_ft*</td><td>Analytics identifiers</td><td>400 days</td></tr></tbody></table>

Based on the visitor's consent, Spacetime logs pageviews without any PII, in the following way:

* When **Analytics** consent is **granted**: the pageview would include the analytics user-id.
* When **Analytics** consent is **not granted**: the pageview would include a randomized and anonymized id.

## **Discovery**

Discovery is akin to shopping cart behavior and categorized as **Strictly Necessary** throughout the customer journey as it’s required for the application to function (website + third party booking engines), in compliance with all consent management and privacy regulations.

Discovery **places one local storage and one session storage entry** on the visitor's browser.

<table><thead><tr><th width="208">Local Storage</th><th width="217">Description</th><th>Duration</th></tr></thead><tbody><tr><td>ftDiscoveryState</td><td>Maintains guest plan state.</td><td>N/A</td></tr></tbody></table>

<table><thead><tr><th width="208">Session Storage</th><th width="217">Description</th><th>Duration</th></tr></thead><tbody><tr><td>ftDiscoveryState</td><td>Maintains guest interaction state.</td><td>Session</td></tr></tbody></table>

## **Advocacy**

Advocacy turns travelers into storytellers and categorized as **Analytics,** and **places two cookies** on the visitor's browser.

<table><thead><tr><th width="208.05859375">Cookie</th><th width="216.671875">Description</th><th>Duration</th></tr></thead><tbody><tr><td>ft-photo-source*</td><td>Indicates user type of guest or friend.</td><td>1 year</td></tr><tr><td>ft-it*</td><td>Maintains Flip.to components' interaction state.</td><td>6 months</td></tr></tbody></table>

***

Spacetime, Discovery, and Advocacy are fully compliant with consent management as well as with all privacy regulations, such as GDPR, CCPA and others.

Flip.to implements a number of measures to comply with privacy regulations. Find out more at our [Privacy and Security Overview](https://policies.flip.to/platform/privacy-and-security-overview) and our [Privacy Policy](https://policies.flip.to/platform/privacy-policy).


# For hosted pages

Flip.to hosts some guest-facing pages on our own domain (your <mark style="background-color:purple;">post-stay experience</mark>, <mark style="background-color:purple;">storyteller invitations</mark>, <mark style="background-color:purple;">certificates</mark> and <mark style="background-color:purple;">landing pages</mark>, to name a few).

Your website's consent banner doesn't reach them, so here's **how we run your consent platform** on those pages instead, and **what we need from you**.

### What's different about hosted pages

You own everything on your site, from the experiences to the data. Flip.to **only** uses first-party cookies, and acts as your data processor.

On your own experiences we read the signal your platform provides when you set up [Consent Management for your Website](https://docs.flip.to/docs/integrations/websites/consent-management-for-your-website).

**Hosted pages are different**. They're served from a branded subdomain of your own domain, pointed at Flip.to. Rather than show our own consent banner, <mark style="background-color:purple;">we install</mark> *<mark style="background-color:purple;">yours</mark>*.

Using the consent platform <mark style="background-color:purple;">account ID,</mark> we load your platform's script on hosted pages. Guests see your consent banner so that your categories govern what runs, and their choices are honored.

{% hint style="info" %}
Where no consent platform is configured, hosted pages still apply a default policy (analytics storage denied in regions that require it) before any tags load.
{% endhint %}

### Setup at a glance

1. [Send us your account ID](#send-us-your-account-id) so we can load your platform.
2. [Confirm your branded subdomain](#domains-to-add) is covered by your platform, and allow our scripts.
3. [Add our cookies](#cookies-we-set) to your cookie declaration.

{% stepper %}
{% step %}

### Send us your account ID

If you use one of the consent platforms below, we load it on hosted pages directly. We need one value: <mark style="background-color:purple;">the consent platform account ID issued when you set up a site</mark>. It isn't a secret—it's visible in the script on any page where your banner already runs. Find it using the links below and send it to your Flip.to account manager.

{% hint style="warning" %}
**It's usually the same ID as your main website.** Because hosted pages are served from a branded subdomain of your own domain, they normally sit under a domain group your platform already covers.

Some platforms issue an account ID per site or domain group, so check yours before sending it—Cookiebot and OneTrust in particular can issue a separate CBID or domain script per group.

[See Domains to add.](#domains-to-add)
{% endhint %}

**Don't see your platform?** Tell your account manager which one you use—the list below is the set we currently load, and we can look at adding others.

| Platform                     | What to send us                                                                                                       | Where to find it                                                                                                                                                |
| ---------------------------- | --------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Cookiebot                    | Your CBID (Domain Group ID)                                                                                           | [Finding your CBID](https://support.cookiebot.com/hc/en-us/articles/26407199363996-Your-CBID-or-Domain-group-ID-and-where-to-find-it-in-your-Cookiebot-Manager) |
| OneTrust                     | Your domain script ID, plus both category names                                                                       | [Finding your domain ID](https://my.onetrust.com/s/article/Finding-Domain-ID-in-Cookie-Consent?language=en_US)                                                  |
| Osano                        | Customer ID and configuration ID, as `customerId/configId`                                                            | [Consent prompt setup](https://developers.osano.com/consent-prompts/getting-started)                                                                            |
| CookieYes                    | Your website key                                                                                                      | [Banner installation code](https://www.cookieyes.com/documentation/banner-installation-code/)                                                                   |
| Termly                       | Your website UUID                                                                                                     | [Embed script versions](https://support.termly.io/hc/en-us/articles/30710458065681-Termly-CMP-embed-script-versions)                                            |
| TrustArc                     | Your provisioned domain                                                                                               | [Consent Manager reference](https://developer.trustarc.com/docs/cookieconsentmanager/consentmanagerapi)                                                         |
| Usercentrics                 | Your Settings ID                                                                                                      | [Finding your Settings ID](https://support.usercentrics.com/hc/en-us/articles/18097606499100-What-is-a-Settings-ID-and-where-can-I-find-it)                     |
| Didomi                       | Public API key, or `apiKey\|noticeId` for a specific notice                                                           | [Web SDK setup](https://developers.didomi.io/cmp/web-sdk/getting-started)                                                                                       |
| Iubenda                      | Site ID and cookie policy ID, as `siteId/cookiePolicyId`                                                              | [Finding your IDs](https://www.iubenda.com/en/help/3812-where-can-i-find-my-cookie-policy-and-site-ids-2/)                                                      |
| Ketch                        | Organization and property codes, as `organization/property`                                                           | [Web implementation](https://developers.ketch.com/docs/web-implementation)                                                                                      |
| Civic Cookie Control         | API key and product code, as `apiKey/product`                                                                         | [Getting started](https://www.civicuk.com/cookie-control/documentation/getting-started)                                                                         |
| Complianz                    | Your site ID                                                                                                          | [Complianz documentation](https://complianz.io/documentation/)                                                                                                  |
| Cookie Notice (Hu-manity.co) | Your site ID                                                                                                          | [Hu-manity.co documentation](https://www.hu-manity.co/docs/)                                                                                                    |
| Google Tag Manager           | Nothing—we read consent mode straight from your container                                                             | [Consent mode in GTM](https://support.google.com/tagmanager/answer/13802165)                                                                                    |
| Other (IAB TCF)              | Tell us which platform—if it implements the IAB Transparency & Consent Framework we read it generically, no ID needed | [About the TCF](https://iabeurope.eu/transparency-consent-framework/)                                                                                           |

{% hint style="warning" %}
**Didomi uses a vertical bar.** Sending an API key and a notice ID together? Separate them with `|` rather than a slash—`apiKey|noticeId`. Every other two-part value on this page uses a slash.
{% endhint %}

#### Matching your category names <a href="#categories" id="categories"></a>

To honor a guest's choice, we need to know which of your categories covers strictly necessary cookies and which covers analytics. Most platforms use standard names and we match them automatically.

<mark style="background-color:purple;">If yours was set up with custom category names</mark>, send those along with your account ID.

{% hint style="warning" %}
**OneTrust customers: both category names are required.** OneTrust identifies categories by codes specific to your configuration (commonly `C0001` through `C0004`) so there's nothing for us to fall back on. Send the code for your strictly necessary category and the code for your analytics category along with your domain script ID. You'll find them in Cookie Consent under your site's categories.
{% endhint %}
{% endstep %}

{% step %}

### Domains to add

#### Your hosted page domain

Consent platforms only run on domains listed in your account.

{% hint style="warning" %}
**A branded subdomain is required.** Running your consent platform on hosted pages is supported only when those pages are served from your own domain via CNAME—for example `stories.yourhotel.com`. Ask your account manager to set one up before starting here.
{% endhint %}

Because the subdomain sits under a root domain your consent platform already covers, there is usually nothing new to add and no new account ID to send us. Your account manager will confirm the exact hostname.

{% hint style="warning" %}
**Cookiebot treats every subdomain as a separate domain**, each with its own subscription. If you're on Cookiebot, check whether your branded subdomain is covered by your existing plan before sending us the CBID.
{% endhint %}

Add the same hostname to your platform's cookie scanner. A scan pointed only at your website won't crawl the hosted pages, so the cookies below would be missing from the declaration it generates.

#### Scripts to allow

If your platform offers automatic script blocking, we turn it on for hosted pages. Since this feature holds back any script it doesn't recognize, you must categorize our scripts as follows:

| Domain                     | What it serves                                  | Category  |
| -------------------------- | ----------------------------------------------- | --------- |
| Your hosted page domain    | The page itself, and the scripts that render it | Necessary |
| `integration.flip.to`      | Flip.to's own tag container                     | Necessary |
| `cdn.flip.to`              | Flip.to scripts and assets                      | Necessary |
| `sa.flip.to`               | Spacetime analytics                             | Analytics |
| `www.googletagmanager.com` | Your own Google Tag Manager container           | Analytics |

{% hint style="warning" %}
**Blocking a necessary domain stops the page rendering.** It doesn't reduce tracking—Flip.to already applies your guest's choice before anything is measured. The analytics domains above are gated by that choice whether or not your platform also blocks them.
{% endhint %}
{% endstep %}

{% step %}

### Cookies we set

Most of these are named with a prefix and a suffix specific to your property or campaign. Include the asterisk (`*`) when you add them to your consent platform.

#### Analytics <mark style="background-color:$primary;">`ANALYTICS`</mark>

Set only when a guest grants analytics consent. If a guest later withdraws it, we remove any that were already set. A guest who denies analytics is still measured anonymously—we count the visit, without an identifier tied to them.

| Cookie    | What it does                                                                | Duration                |
| --------- | --------------------------------------------------------------------------- | ----------------------- |
| `sa_ft*`  | Spacetime analytics identifiers. Also stored in local storage.              | Up to 2 years           |
| `ft-it*`  | Remembers which parts of the experience a guest engaged with.               | Session, 6 or 18 months |
| `flipto*` | Set on *your* website after a guest signs up, so they aren't invited twice. | Varies                  |

#### Strictly necessary `NECESSARY`

These keep the experience working and are never used for measurement.

| Cookie                      | What it does                                                                     | Duration           |
| --------------------------- | -------------------------------------------------------------------------------- | ------------------ |
| `ftvoter*`                  | Records a photo contest vote so it isn't counted twice.                          | 6 months to 1 year |
| `ftcontestpromotioncode*`   | Remembers whether the visitor arrived as a guest, a friend or a browser.         | 6 months to 1 year |
| `ft-invitee*`               | Stops a guest being invited to the same contest twice.                           | 1 year             |
| `ftDiscoveryState`          | Local storage. Keeps the guest's plan state as they move through the experience. | Until cleared      |
| `ftReturningUserPopupState` | Session storage. Stops a message repeating within the same visit.                | Session            |
| {% endstep %}               |                                                                                  |                    |
| {% endstepper %}            |                                                                                  |                    |

### What happens once it's set up

* Your platform's script loads first on every hosted page, before anything that could set a cookie.
* Guests see your banner, with your branding, categories and language.
* Your own Google Tag Manager container is loaded on these pages too, and the guest's decision reaches it, so tags gated on `analytics_storage` behave the way they do on your site.
* Every hosted page carries a control to reopen your banner, so a guest can change their mind.
* Consent given on a hosted page is recorded by your platform as usual, so it appears in your consent records alongside everything else.

{% hint style="info" %}
**If the banner doesn't appear.** Check the hosted domain is listed in your consent platform first—that's the most common cause, and the script will load without rendering anything.

After that, check the account ID wasn't copied incompletely: a missing character, or only one half of a two-part value. Then let your account manager know so we can confirm what's stored.
{% endhint %}

### Compliance

Hosted pages operate under the same terms as the rest of the platform: first-party cookies only, Flip.to as data processor, and full ownership of collected data remaining with you. The experiences served on these pages comply with GDPR, CCPA and other privacy regulations.


# Cross-domain tracking

During your first few weeks on Flip.to's Discovery, we conduct A/B tests that rely on cross-domain tracking to measure results accurately. Discovery supports this tracking out-of-the-box. For the Control (your current booking flow without Discovery), you may need an additional snippet of code to set your website up for tracking.

If you use JavaScript to navigate users from your website to your booking engine, this guide will help you complete your implementation of Discovery.

{% hint style="warning" %}
**Before you begin**: your Flip.to code snippets should already be added to your website. See the guide to [set up your website](/docs/integrations/websites/set-up-your-website) if you haven't completed this step.
{% endhint %}

***

## Setting up cross-domain tracking

There are specific ways to set up tracking based on different JavaScript navigation approaches. Look for the approach that you use on your website and apply the appropriate code.

### Approach 1: Delayed redirects

If you use the location.href property to redirect users (can also be **location.assign**, **location.replace**, **window\.open**, **$.post**, or similar), and there is a delay or a user action is required before redirecting:

Add the following code before you redirect the user (using **location.href** as an example).

```javascript
if ('function' == typeof window.fliptoDecorate) {
    bookingEngineUrl = fliptoDecorate(bookingEngineUrl);
}

location.href = bookingEngineUrl;
```

### Approach 2: Form element redirects

If you use a **formObject** to redirect users (can also be **document.form\[0].submit()**, **document.querySelector(“nav.form”).submit,** or similar):

Add the following code before you redirect the user (using **formObject.submit()** as an example).

```javascript
if ('function' == typeof window.fliptoDecorate) {
   fliptoDecorate(formObject);
}

formObject.submit();
```

### Approach 3: Immediate redirects

If you use **location.href** to redirect users (can also be **location.assign**, **location.replace**, **window\.open**, **$.post**, or similar), and there is no delay and no user action is required before redirecting:

Replace your existing redirect with the following code. Adjust the code for your specific redirect property and preferred timing options (using **location.href** as an example).

```javascript
(function(url, delay, max){
    var i = 0;
    var interval = window.setInterval(function() {
    if ('function' == typeof window.fliptoDecorate) {
        window.clearInterval(interval);
        window.location.href = window.fliptoDecorate(url);
    } else if (i++ >= max){
        window.clearInterval(interval);
        window.location.href = url;
    }
}, delay);
})(bookingEngineUrl, 100, 20);
```

*The above shows waiting on fliptoDecorate up to 2 seconds, checking every 100ms.*

<br>


# Member tracking

Flip.to helps collaboratives understand how their website visitors convert into direct bookings for their accommodation providers, along with many other features.

The goal is to measure the revenue impact in real-time, and help everyone in the community level up.

{% hint style="warning" %}
**Before you begin:** your Flip.to snippets should already be added to your website
{% endhint %}

***

## Automatic tracking

Flip.to automatically appends a parameter to each link in order to track visitor sessions across a collaborative. You can ensure that this works without any issues by:

* Removing any intermediary pages that are used to count clicks before redirecting to external websites.
* Removing any site redirects that are done server-side or via JavaScript and replace them with anchor tags (href=”hotel.com”).

***

## Additional tracking settings

### Identify member on external links

Some links may lead to a booking engine or a click-to-call that does not clearly indicate which member the link is for. In these cases, add the **data-flipto-host** attribute so it can be identified. Set the value to the member's website (generally the root link that exists in the CMS).

{% code title="Example booking engine" overflow="wrap" %}

```html
<a href="https://synxis.com?hotelid=123456" data-flipto-host="https://www.overlookhotel.com">Overlook Hotel</a>
```

{% endcode %}

{% code title="Example click-to-call" overflow="wrap" %}

```html
<a href="tel://8558331448" data-flipto-host="https://www.overlookhotel.com">Call (855) 833-1448</a>
```

{% endcode %}

\ <br>


# Website markup

If you're aiming to create entirely bespoke website experiences, add markup to your site to fine-tune control of how the Flip.to platform blends into the site.

This markup tells the Flip.to platform whether an element should [trigger a flow](#setting-up-trigger-markup), [pass along signals](#setting-up-signal-markup), or [display content](#setting-up-content-markup).

***

## Setting up trigger markup

Allow for links, buttons, or other elements to initiate actions through the Flip.to platform.\
[See examples for specific scenarios](#scenarios).

{% code title="Example trigger structure" overflow="wrap" fullWidth="false" %}

```html
<a href="#" ft-trigger="discovery" ft-trigger-step="experiences-list" ft-property="your-property-slug" class="ft-trigger-discovery" style="display:none;">Your action text</a>
```

{% endcode %}

<table><thead><tr><th width="193.33333333333331">Attribute</th><th width="191">Value</th><th>Description</th></tr></thead><tbody><tr><td>ft-trigger</td><td>discovery</td><td><p><em>Required</em><br>Defines the flow that should be displayed.</p><div data-gb-custom-block data-tag="hint" data-style="info" class="hint hint-info"><p>The platform dynamically determines the first step of the flow based on the user's signal, href URL, or other context signals.</p></div></td></tr><tr><td>ft-trigger-step</td><td><ul><li>experiences-list</li><li>router</li></ul></td><td><p><em>Optional</em><br>Defines a specific step to drop the user in to start the flow.</p><div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p>Configure ft-trigger-step when seeking to override default platform behavior.</p></div></td></tr><tr><td>ft-property</td><td>{property-slug}</td><td><p><em>Optional</em><br>Defines a specific property for the flow.</p><p>Find your property-slug in your Flip.to account.</p><div data-gb-custom-block data-tag="hint" data-style="warning" class="hint hint-warning"><p>Configure ft-property when seeking to override default platform behavior.</p></div></td></tr><tr><td>class</td><td>ft-trigger-discovery</td><td><em>Required</em><br>Provides a class name for additional styling if needed.</td></tr><tr><td>style</td><td>display:none;</td><td><em>Required</em><br>If Discovery should fail to load, the markup CTA will be hidden.</td></tr></tbody></table>

### Scenarios

#### Show Discovery

{% code overflow="wrap" %}

```html
<a href="#" ft-trigger="discovery" class="ft-trigger-discovery" style="display:none;">Your action text</a>
```

{% endcode %}

#### Show Discovery at the experiences list step

{% code overflow="wrap" fullWidth="false" %}

```html
<a href="#" ft-trigger="discovery" ft-trigger-step="experiences-list" ft-property="your-property-slug" class="ft-trigger-discovery" style="display:none;">Your action text</a>
```

{% endcode %}

{% hint style="warning" %}
The ft-property attribute is required for this markup on sites with multiple properties. It is not required on sites that have only one property set up for Discovery.
{% endhint %}

#### Show Discovery for a specific property (for sites with multiple properties)

{% code overflow="wrap" %}

```html
<a href="#" ft-trigger="discovery" ft-property="your-property-slug" class="ft-trigger-discovery" style="display:none;">Your action text</a>
```

{% endcode %}

#### Show Discovery at the router step (for sites with multiple properties)

{% code overflow="wrap" %}

```html
<a href="#" ft-trigger="discovery" ft-trigger-step="router" class="ft-trigger-discovery" style="display:none;">Your action text</a>
```

{% endcode %}

{% hint style="warning" %}
The ft-property attribute must not be set for this markup.
{% endhint %}

## Setting up signal markup

Allow for a trigger to pass along signals to Flip.to components.

{% code title="Example trigger structure" overflow="wrap" fullWidth="false" %}

```html
<a href="#" ft-promo-code="mayday-promo" ft-arrival-date="2025-05-01" ft-departure-date="2025-05-07">Your action text</a>
```

{% endcode %}

{% hint style="warning" %}
If the trigger also has URL parameters that provide the same type of signal as an existing attribute, the URL parameter will override the attribute.
{% endhint %}

<table><thead><tr><th width="193.33333333333331">Attribute</th><th width="555.5546875">Value</th></tr></thead><tbody><tr><td>ft-promo-code</td><td>custom</td></tr><tr><td>ft-group-code</td><td>custom</td></tr><tr><td>ft-rate-code</td><td>custom</td></tr><tr><td>ft-travel-agent-code</td><td>custom</td></tr><tr><td>ft-corporate-code</td><td>custom</td></tr><tr><td>ft-room-code</td><td>custom</td></tr><tr><td>ft-arrival-date</td><td>custom</td></tr><tr><td>ft-departure-date</td><td>custom</td></tr></tbody></table>

***

## Setting up content markup

Allow for content to display on the website.

{% hint style="info" %}
Content markup is currently in beta. Please reach out to our [Customer Success team](/docs/support/customer-success) for more details.
{% endhint %}


# Feature previews

See a preview of Flip.to **right on your website**.

When a new feature is set up for your platform, your Customer Success Manager will provide a link to preview it in just a few clicks.

Share this link with other members of your team, dial in any changes and approve for launch. (And don’t worry—nothing goes live until we flip the switch.)

Plus, preview other features from Flip.to that you might want to supercharge your impact.

{% embed url="<https://stream.flip.to/see-a-preview-of-flip-to-right-on-your-website?v=5>" %}

{% hint style="success" %}
**Ready to switch on something new?** Get in touch your Customer Success Manager to start setting it up.
{% endhint %}

## Using preview links

To see all features available for preview, visit your website with the ?flipto-preview parameter added to your URL. For example:

```
https://yourwebsite.com?flipto-preview
```

Or, to go to a specific feature, add the feature ID to the flipto-preview parameter. For example:

```
https://yourwebsite.com?flipto-preview=planner-headcount
```

<table><thead><tr><th width="271">Feature ID</th><th>Description</th></tr></thead><tbody><tr><td>discovery</td><td>Preview the Discovery flow if it isn't already turned on for your platform.</td></tr><tr><td>planner-headcount</td><td>Headcount adds extra steps to Discovery learn more about who's traveling.</td></tr><tr><td>planner-flight</td><td>Flight path adds extra steps to Discovery for planners to provide airport-related details.</td></tr><tr><td>planner-experiences</td><td>Experiences displays upcoming experiences alongside the Discovery calendar, to better inspire planners considering your property.</td></tr><tr><td>planner-special-codes</td><td>Special codes adds support for promo, group, and other special codes in Discovery.</td></tr></tbody></table>

{% hint style="info" %}
If the settings for a feature aren't fully configured, you might see placeholders for text, images, or other data. **Placeholders are** **only visible to you during preview.**
{% endhint %}


# Allowing Flip.to Scout

{% columns %}
{% column %}
Meet **Scout**, Flip.to's friendly watchdog. Scout automatically loads your website and confirms your Flip.to integration (the Discovery component, tracking script, and booking links) is installed and working. If something breaks, Scout lets our team know so we can help you fix it quickly.
{% endcolumn %}

{% column %}

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FfCgMIZcSsdE8ZNts8Pt0%2FScout-Running.svg?alt=media&amp;token=72d02b1b-e408-479e-b92e-f3aa0d604aed" alt="Scout, the Flip.to integration watchdog"><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

{% hint style="success" %}
**Scout is read-only and safe.** It loads your pages the way a normal browser would. It never logs in, submits forms, makes bookings, or changes anything on your site.
{% endhint %}

{% hint style="warning" %}
**Seeing this page because your bot protection is blocking Scout?**

When a website firewall or bot-protection service (Cloudflare, Akamai, DataDome, Imperva, and similar) serves Scout a "challenge" or block page instead of your real site, Scout can't verify your integration. That produces false *"integration missing"* results on our side, and it means you won't get a real alert if your integration actually breaks. **Allowing Scout through fixes this.**
{% endhint %}

## How to identify Scout

Every request Scout makes includes **`FliptoScout`** in its User-Agent string:

```
Mozilla/5.0 (...) Chrome/... Safari/537.36 FliptoScout/1.0 (+https://www.flip.to/scout)
```

Match on the **`FliptoScout`** token, not the whole string, because the Chrome version changes over time.

{% hint style="info" %}
**For your security team:** a User-Agent on its own can be spoofed. Where your provider can verify the source of a request, pair the `FliptoScout` match with that check. The Cloudflare tab below shows how.

**Do not allow by IP address.** Scout runs on shared cloud infrastructure and its IP addresses are not stable.
{% endhint %}

## Allow Scout through your bot protection

Pick your provider below. In every case, the goal is the same: let requests whose **User-Agent contains `FliptoScout`** reach your site.

{% tabs %}
{% tab title="Cloudflare" %}
In Cloudflare, Scout's browser sessions appear as **Cloudflare Browser Run** (category **AI Assistant**). How you allow Scout depends on which Cloudflare bot product you use:

* **Bot Fight Mode (free plans):** Bot Fight Mode does **not** honor WAF skip/allow rules, so a User-Agent rule will not work. Either turn Bot Fight Mode off for your site, or upgrade to a plan with Super Bot Fight Mode / Bot Management.
* **Super Bot Fight Mode (Pro/Business) and Bot Management (Enterprise):** add a **custom rule**:
  1. Go to **Security → Security rules → Create rule → Custom rules**.
  2. Set the field to **User Agent**, operator **contains**, value **`FliptoScout`**.
  3. Set the action to **Skip**, and select both **All remaining custom rules** and **All Super Bot Fight Mode rules**.
  4. Place the rule **first** in your custom rules, then deploy.
* **Bot Management (Enterprise), stronger match:** add **Bot Detection ID** equals **`119853733`** to the same rule's expression (combined with the User-Agent condition). That ID is Cloudflare's own identifier for Cloudflare Browser Run sessions and can't be spoofed, so the rule only matches genuine Browser Run traffic that carries Scout's token.
* **AI crawler / AI agent blocking.** If you block AI crawlers or agents (in **AI Crawl Control** or your bot settings), allow **Cloudflare Browser Run** there. The custom rule above also lets Scout past an AI Crawl Control block, because that block is itself a custom rule that runs after yours.

{% hint style="info" %}
Cloudflare's own guidance: [Allowlisting Browser Run](https://developers.cloudflare.com/browser-run/faq/#can-i-allowlist-browser-run-on-my-own-website) and [Skip rule options](https://developers.cloudflare.com/waf/custom-rules/skip/options/).
{% endhint %}
{% endtab %}

{% tab title="Akamai" %}
In your bot management / **Bot Manager** policy, add an **allow (exception) rule** that matches the **User-Agent** containing **`FliptoScout`**, so requests from Scout bypass bot mitigation.
{% endtab %}

{% tab title="DataDome" %}
In the **DataDome dashboard**, add a **custom rule / allowlist** entry matching the **User-Agent** containing **`FliptoScout`**, and set it to **Allow**.
{% endtab %}

{% tab title="Imperva" %}
In your **Imperva (Incapsula)** site security settings, add a **Bot Access Control / allowlist** exception for the **User-Agent** containing **`FliptoScout`**.
{% endtab %}

{% tab title="Other / origin firewall" %}
Any WAF or origin firewall that lets you write rules on the request User-Agent can allow Scout the same way: **permit requests whose User-Agent contains `FliptoScout`**.
{% endtab %}
{% endtabs %}

## After you've allowed Scout

{% columns %}
{% column %}
That's it. There's nothing else you need to do. Scout re-runs automatically on its regular schedule, so once your rule is in place, its next visit should reach your live site and the integration check will clear on its own.
{% endcolumn %}

{% column %}

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2F6KBwCC9oAPFMFRumv2qx%2FScout-Sitting.svg?alt=media&amp;token=30e5658f-610b-47fa-b19f-6d4cca4f2361" alt="Scout, happy to be let through"><figcaption></figcaption></figure>
{% endcolumn %}
{% endcolumns %}

{% hint style="info" %}
Need a hand, or want us to confirm Scout is getting through? Reach out to your Flip.to contact and we'll verify it together. 🐾
{% endhint %}


# Booking Engines


# Set up your booking engine

To set up Flip.to, add the following code snippet to the **\<head>** tag of every page of your booking engine—**including the confirmation page**—and take a peek below at any additional configurations.

```html
<script async src="https://integration.flip.to" crossorigin="anonymous"></script>
```

{% hint style="info" %}
We have step-by-step guides for **SynXis**, **Cloudbeds**, **iHotelier** and others—see the [vendor guides](/docs/integrations/booking-engines/vendors) for exactly where the snippet goes in yours.
{% endhint %}

***

## Configurations

Once the snippet is in place, Flip.to reads what it needs from the booking engine directly:

* **Which property the page is for.** Depending on the engine, that's read from the URL, from values the engine exposes on the page, or from its data layer.
* **The language**, from the page's own markup.
* **The reservation**, from the confirmation page—confirmation number, guest details, dates, room and rate, currency and amount.

Flip.to has built-in detection for dozens of booking engines. **If yours isn't one of them, the snippet still works**—you supply the same values through the data layer instead, as described under Overrides.

See below for specific configurations that may apply to your booking engine.

<details>

<summary>Tracking add-ons and other products</summary>

If you sell experiences, events or ancillary items at time of booking, those are the one thing we can't read from the page—see [E-commerce tracking](/docs/integrations/booking-engines/e-commerce-tracking).

</details>

<details>

<summary>Setting up Consent Management</summary>

See the guide for [Consent management for your booking engine](/docs/integrations/booking-engines/consent-management-for-your-booking-engine).

</details>

<details>

<summary>Configuring single-page applications</summary>

For single-page applications, this snippet should only be loaded at application start, not on virtual pageviews.

</details>

<details>

<summary>Overrides</summary>

**Most implementations need none of this**—if Flip.to has built-in detection for your engine, it works from the snippet alone. Use the overrides below when it can't detect what it needs: an engine we don't have built-in detection for, a custom booking-engine domain, or a page whose language markup is wrong or missing. If you're not sure, ask [Customer Success](/docs/support/customer-success) first.

#### Setting the property or language directly

Put `data-flipto-code` on any element to set the property code:

```html
<body data-flipto-code="YOUR-PROPERTY-CODE">
```

For language, the attribute goes **on the `<html>` element specifically**—it is not read anywhere else:

```html
<html lang="fr" data-flipto-language="fr">
```

#### Setting values via the data layer

Where a data attribute isn't practical, the same values can be pushed before the snippet loads. This takes precedence over everything Flip.to detects on its own, and goes **before** the Flip.to snippet rather than instead of it.

```javascript
<!-- Flip.to - Booking Engine Integration -->
<script>
!function(b,e,i){(b[e]=b[e]||[]).push({flipto:i, event: 'flipto.configuration.load'})}(window,'fliptoDataLayer',{
	bookingEngine: '[BOOKING-ENGINE]',
	companyCode: '[COMPANY-CODE]',
	code: '[PROPERTY-CODE]',
	language: '[LANGUAGE-CODE]'

});
</script>
<!-- Flip.to - End Booking Engine Integration -->
```

<table><thead><tr><th width="192">Field</th><th>Description</th></tr></thead><tbody><tr><td>bookingEngine</td><td>The Flip.to string identifying your booking engine vendor.<br><br>Ask <a href="/docs/support/customer-success">Customer Success</a> for the value to use.</td></tr><tr><td>companyCode</td><td>Your internal Flip.to company code.</td></tr><tr><td>code</td><td>The property code used by the booking engine.</td></tr><tr><td>language</td><td><p><em>Optional.</em> The ISO 639-1 language code the engine is displaying—<code>'en'</code>, <code>'fr'</code> and so on. A culture name such as <code>'en-US'</code> also works.</p><p>Only needed when the page's own language markup is missing or wrong; otherwise Flip.to reads it from the page.</p></td></tr></tbody></table>

#### Sending the reservation directly

If your engine can't be read from the confirmation page—or you want to send values you know are correct rather than have them detected—push the reservation on the confirmation page. Anything you send here takes precedence over what Flip.to would otherwise read.

```javascript
<!--Flip.to - Confirmation Page Start-->
<script>
	!function(n,e,w){
		w.eventData={category:'Booking_Engine',action:'Load',value:w.amount};
		(n[e]=n[e]||[]).push({flipto:w,event:'flipto.confirmation.load'});
	}(window,'fliptoDataLayer',
	{
		bookingEngine: '[BOOKING-ENGINE]',
		companyCode: '[COMPANY-CODE]',
		code: '[PROPERTY-CODE]',
		confirmation: '67890',
		loyalty: '12333322',
		first: 'John',
		last: 'Smith',
		email: 'jsmith@flip.to',
		phone: '(212) 123-4567',
		startDate: '2027-4-10',
		endDate: '2027-4-13',
		guests: 5,
		adults: 3,
		children: 2,
		type: 'KING',
		rateCode: 'BAR',
		language: '[LANGUAGE-CODE]',
		currency: 'USD',
		amount: 1234.12,
		addonAmount: 234.56,
		dateFormat: 'yyyy-M-d'
	});
</script>
<!--Flip.to - Confirmation Page End-->
```

<table><thead><tr><th width="219">Field</th><th>Description</th></tr></thead><tbody><tr><td>bookingEngine</td><td>The Flip.to string to define the booking engine used.<br><br>Please contact <a href="/docs/support/customer-success">Customer Success</a> if you need the name to use for your booking engine vendor.</td></tr><tr><td>confirmation</td><td>Guest’s confirmation number.</td></tr><tr><td>loyalty</td><td>Guest's loyalty program number, if any.</td></tr><tr><td>first</td><td>Guest’s first name.</td></tr><tr><td>last</td><td>Guest’s last name.</td></tr><tr><td>email</td><td>Guest’s email address.</td></tr><tr><td>phone</td><td>Guest’s phone number.</td></tr><tr><td>startDate</td><td>Guest’s check-in date.<br><br>This should be formatted as <code>'yyyy-MM-dd'</code> (i.e. 2027-05-15).<br>If you prefer a different date format use the dateFormat field.</td></tr><tr><td>endDate</td><td>Guest’s check-out date.<br><br>See start date for specifics.</td></tr><tr><td>guests</td><td>The total number of guests.</td></tr><tr><td>adults</td><td>The total number of adult guests.</td></tr><tr><td>children</td><td>The total number of children guests.</td></tr><tr><td>type</td><td>The guest’s room type, if available. Otherwise leave it blank.<br><br>This should include the booking engine internal code, and not the room type description.</td></tr><tr><td>rateCode</td><td>The guest’s rate code, if available; otherwise blank</td></tr><tr><td>groupCode</td><td>The guest’s group code (or block code), if available. Otherwise leave it blank.</td></tr><tr><td>promoCode</td><td>The guest’s promo code, if available. Otherwise leave it blank.</td></tr><tr><td>language</td><td>The language ANSI code the guest has used to make the reservation.<br><br>For English use 'en', French 'fr', etc. Refer to the <a href="http://www.loc.gov/standards/iso639-2/php/code_list.php">complete list of language codes</a>. Use the ISO 639-1 Code for the language parameter.<br><br>Optionally, a culture name can be used as well. For example, this can be set to <code>'en-US'</code> or <code>'en_US'</code>.</td></tr><tr><td>currency</td><td>The 3 character currency code the guest has used to make the purchase.<br><br>A complete list of currency codes can be found <a href="http://www.xe.com/iso4217.php">here</a>. For instance 'USD' for US dollars.</td></tr><tr><td>amount</td><td>The total pre-tax amount used for the room purchase based on the defined currency.<br><br>Amount should be supplied as a valid number including a decimal point if appropriate.</td></tr><tr><td>flightAmount</td><td><p><em>Optional</em></p><p>The total pre-tax amount of the flight portion of the purchase. This can be omitted or set to null if booking engine does not support purchasing flights.</p><p>Amount should be supplied as a valid number including a decimal point if appropriate.</p></td></tr><tr><td>addonAmount</td><td><p><em>Optional</em></p><p>The total amount used for any add-on products and/or services.<br><br>Amount should be supplied as a valid number including a decimal point if appropriate.</p></td></tr><tr><td>dateFormat</td><td><p>Specify a different date format for the startDate and endDate parameters.<br><br>All date fields should be set using the default format:</p><p><code>'yyyy-M-d'</code>.<br></p><p>However, you can define your preferred format instead with this field. For example, if you want to use 12/31/2027 the dateFormat should be set to: <code>'M/d/yyyy'</code>.</p></td></tr><tr><td>products</td><td>To track additional e-commerce products purchased at time of booking, such as events, experiences, ancillary items or other, see our <a href="/docs/integrations/booking-engines/e-commerce-tracking">E-commerce tracking</a>.</td></tr></tbody></table>

#### Optional dynamic configuration

```javascript
<!-- Flip.to - Configuration -->
<script>
  window.ftParams = {
  "_ga-ft"= "................."
  "enableAdobeCrossDomain": true
}
</script>
<!-- Flip.to - Configuration  -->
```

<table><thead><tr><th width="253">Field</th><th>Description</th></tr></thead><tbody><tr><td>_ga-ft</td><td>Page persistent access to the value of the _ga-ft url parameter.<br><br>Used as a fallback in case the _ga-ft url parameter is removed by the booking engine.</td></tr><tr><td>enableAdobeCrossDomain</td><td>Flag denoting whether Flip.to should attempt to add adobe analytics cross-domain parameters to outbound links.<br><br>Used to enable cross-domain tracking for Adobe analytics.</td></tr></tbody></table>

</details>

<details>

<summary>Troubleshooting: a website tag firing on engine pages</summary>

We recommend adding the snippet directly to the page rather than through Google Tag Manager. If you do deliver your **website** tag via GTM, make sure its trigger fires on your website pages but **excludes** the booking engine, or the two will both fire on engine pages. The triggers should look like this:

<figure><img src="https://lh3.googleusercontent.com/HQ3hq9QI8Oy9AQFCPao30eHMGJchPZqr3qInzjjRpAd_A-yClBZEqIiU2ZyrXfINGDq_ql4iF09pw6JiwVVF5d4c0HOsJMNm6_Ean67YtbRGCMR7MaRdDGvf-I2gu0qU0Ahk202Um5hoj3yPnRHrxA" alt=""><figcaption></figcaption></figure>

</details>

***

Adding Flip.to to your website? See [Set up your website](/docs/integrations/websites/set-up-your-website).


# Consent management for your booking engine

Flip.to **only** uses first-party cookies that are placed on the site that the user is visiting. We are a **data processor** (or **service provider**) and our customers have full ownership of all data collected or processed on their behalf.

Flip.to reads consent signals from your CMP out of the box. Three paths, no extra configuration:

* **Native integrations:** Cookiebot, OneTrust, Osano, CookieYes, Termly, TrustArc, Usercentrics, Didomi, Iubenda, Ketch, Civic Cookie Control, Complianz, Cookie Notice (Hu-manity.co)
* **IAB TCF:** any platform implementing the Transparency & Consent Framework
* **Google Tag Manager:** most everything else. If your CMP writes to GTM, we read it.

{% hint style="info" %}
If you are configuring a consent management platform, you can find more information below on the two types of cookies that are used by Flip.to—**Strictly Necessary** and **Analytics**.

Be sure to include the **asterisk (\*)** when configuring these cookies in your consent management platform. The cookie names are prefixes and the asterisk is a wildcard representing a variety of property-specific suffixes.
{% endhint %}

Flip.to scripts are **essential** and should always run. There are three products, [Spacetime](#spacetime), [Discovery](#discovery), and [Advocacy](#advocacy) that require consent management configuration for your booking engine.

***

## **Spacetime**

Spacetime is behavioral analytics for travel and categorized as **Analytics**, and **places one cookie** on a visitor's browser if and when consent is provided for **Analytics**.

<table><thead><tr><th width="207.66666666666666">Cookie</th><th width="213">Description</th><th>Duration</th></tr></thead><tbody><tr><td>sa_ft*</td><td>Analytics identifiers</td><td>400 days</td></tr></tbody></table>

Based on the visitor's consent, Spacetime logs pageviews without any PII, in the following way:

* When **Analytics** consent is **granted**: the pageview would include the analytics user-id.
* When **Analytics** consent is **not granted**: the pageview would include a randomized and anonymized id.

## **Discovery**

Discovery is akin to shopping cart behavior and categorized as **Strictly Necessary** throughout the customer journey as it’s required for the application to function (website + third party booking engines), in compliance with all consent management and privacy regulations.

Discovery **places one local storage entry** on the visitor's browser.

<table><thead><tr><th width="208">Local Storage</th><th width="217">Description</th><th>Duration</th></tr></thead><tbody><tr><td>ftDiscoveryState</td><td>Maintains guest plan state.</td><td>N/A</td></tr></tbody></table>

The Discovery script logs the completion of the transaction. There are no other cookies or local storage entries.

## **Advocacy**

Advocacy turns travelers into storytellers and categorized as **Analytics,** and **places one cookie** on the visitor's browser when on the booking engine.

<table><thead><tr><th width="208.05859375">Cookie</th><th width="216.671875">Description</th><th>Duration</th></tr></thead><tbody><tr><td>ft-it*</td><td>Maintains Flip.to components' interaction state.</td><td>6 months</td></tr></tbody></table>

***

Spacetime, Discovery, and Advocacy are fully compliant with consent management as well as with all privacy regulations, such as GDPR, CCPA and others.

Flip.to implements a number of measures to comply with privacy regulations. Find out more at our [Privacy and Security Overview](https://policies.flip.to/platform/privacy-and-security-overview) and our [Privacy Policy](https://policies.flip.to/platform/privacy-policy).


# E-commerce tracking

In addition to reservations, e-commerce products purchased at time of booking—events, experiences, ancillary items and the like—can be tracked and measured.

Flip.to reads the reservation itself from your confirmation page, but it can't see what else was in the basket. **If you sell add-ons at time of booking, this is the one thing you still need to send us.**

Add the products to a confirmation-page push, as shown below. This is the same shape as the reservation override described under [Sending the reservation directly](/docs/integrations/booking-engines/set-up-your-booking-engine#sending-the-reservation-directly). Below is an example, followed by the supported fields.

```javascript
<!--Flip.to - Confirmation Page Start-->
<script>
	!function(n,e,w){
		w.eventData={category:'Booking_Engine',action:'Load',value:w.amount};
		(n[e]=n[e]||[]).push({flipto:w,event:'flipto.confirmation.load'});
	}(window,'fliptoDataLayer',
	{
		bookingEngine: '[BOOKING-ENGINE]',
		companyCode: '[COMPANY-CODE]',
		code: '[PROPERTY-CODE]',
		confirmation: '67890',
		loyalty: '12333322',
		first: 'John',
		last: 'Smith',
		email: 'jsmith@flip.to',
		phone: '(212) 123-4567',
		startDate: '2027-4-10',
		endDate: '2027-4-13',
		guests: 5,
		adults: 3,
		children: 2,
		type: 'KING',
		rateCode: 'BAR',
		language: '[LANGUAGE-CODE]', // optional
		currency: 'USD',
		amount: 1234.12,
		addonAmount: 234.56,
		dateFormat: 'yyyy-M-d',
		products: [
		    {
		      id: "ABC",
		      name: "Wine Tasting Tuesdays",
		      category: "Event/Onsite/Wine",
		      price: 100,
		      currency: "USD"
		    },
		    {
		      id: "DEF",
		      name: "Sunglasses",
		      brand: "Oakley",
		      category: "Womens/Apparel",
		      price: 200.50,
		      inventory_status: "in stock",
		      currency: "USD"
		    }
		  ] 
	});
</script>
<!--Flip.to - Confirmation Page End-->
```

<table><thead><tr><th width="155.5390625">Field</th><th width="478.89453125">Description</th><th width="106.4765625" data-type="checkbox">Required</th></tr></thead><tbody><tr><td>id</td><td>SKU or product ID.</td><td>true</td></tr><tr><td>currency</td><td>Currency in which the product is being priced (ISO 4217).</td><td>true</td></tr><tr><td>price</td><td>Price of the product at the current time, supplied as a valid number including a decimal point if appropriate.</td><td>true</td></tr><tr><td>name</td><td>Name or title of the product.</td><td>false</td></tr><tr><td>category</td><td>Category the product belongs to. Use a consistent separator to express multiple levels, e.g., <code>Event/WineTasting</code> or <code>Womens/Apparel</code>.</td><td>false</td></tr><tr><td>list_price</td><td>Recommended or list price of a product.​List price should be supplied as a valid number including a decimal point if appropriate.</td><td>false</td></tr><tr><td>quantity</td><td>Quantity of the product taking part in the action.​Quantity should be supplied as a valid number including a decimal point if appropriate.</td><td>false</td></tr><tr><td>size</td><td>Size of the product, e.g., <code>XL</code>, <code>XS</code>, <code>M</code>.</td><td>false</td></tr><tr><td>variant</td><td>Variant of the product, e.g., <code>Red</code>, <code>Heavy</code>, <code>Leather</code>.</td><td>false</td></tr><tr><td>brand</td><td>Brand of the product.</td><td>false</td></tr><tr><td>inventory_status</td><td>Inventory status of the product, e.g., <code>in stock</code>, <code>out of stock</code>, <code>preorder</code>, <code>backorder</code>.</td><td>false</td></tr><tr><td>creative_id</td><td>Identifier/Name/Url for the creative presented on a list or product view.</td><td>false</td></tr></tbody></table>


# Vendors


# SynXis

Adding Flip.to to your SynXis booking engine is done in two steps.

***

## Step 1: Whitelisting Flip.to

To whitelist Flip.to on SynXis:

* After you sign in to SynXis, click **Setup** → **Channels** → **BE Designer**
* Then click **Manage** → **Allow Domains**
* Click **Add Domain** and enter **https\://\*.flip.to** into the **Domain Field**
* Click **Save** at the top of the page to publish the change

***

## Step 2: Add the snippet

* Click **Setup** → **Channels** → **BE Designer**
* Go to **Manage** → **Manage Configuration** → **Edit Active Config** → **General** → **Tracking Hooks**
* Click the pencil icon to edit the **Head Tracking Hook**

Copy and paste the snippet below into the black field in the center of the page, then click **SAVE** at the top right.

```html
<script async src="https://integration.flip.to" crossorigin="anonymous"></script>
```

The same line goes on your website—see [Set up your website](/docs/integrations/websites/set-up-your-website).

***

## Configurations

<details>

<summary>Overriding what Flip.to detects (rarely needed)</summary>

For a custom booking-engine domain, or a page whose language markup is wrong or missing. See [Overrides](/docs/integrations/booking-engines/set-up-your-booking-engine#overrides) on Set up your booking engine.

</details>

<details>

<summary>Tracking add-ons and other products</summary>

If you sell experiences, events or ancillary items at time of booking, those still need to be passed to Flip.to—see [E-commerce tracking](/docs/integrations/booking-engines/e-commerce-tracking).

</details>

***

If we can be of any help, say hello to our [Customer Success team](/docs/support/customer-success).


# iHotelier

Adding Flip.to to your iHotelier booking engine takes one line of code.

{% hint style="warning" %}
**Before you begin:** if you ask your Amadeus point person to grant Engine Container access to **<integrations@flip.to>**, our [Customer Success team](/docs/support/customer-success) can take care of the configuration below for you.
{% endhint %}

***

## Add the Flip.to tag

* Click into **Tags** → **New** to create a new tag
* Set the **Tag Name** to **Flip.to booking engine**
* Set the **Tag Configuration** as **Custom HTML**
* Set the **Tag Firing Option** to **Once per page**
* Set the **Firing Triggers** to **Page View Event** (fires on the engine's "content-view" event, after iHotelier configuration is available)

Then paste the snippet below into the HTML field.

```html
<script async src="https://integration.flip.to" crossorigin="anonymous"></script>
```

The same line goes on your website—see [Set up your website](/docs/integrations/websites/set-up-your-website).

***

## Configurations

<details>

<summary>Overriding what Flip.to detects (rarely needed)</summary>

For a custom booking-engine domain, or a page whose language markup is wrong or missing. See [Overrides](/docs/integrations/booking-engines/set-up-your-booking-engine#overrides) on Set up your booking engine.

</details>

<details>

<summary>Tracking add-ons and other products</summary>

If you sell experiences, events or ancillary items at time of booking, those still need to be passed to Flip.to—see [E-commerce tracking](/docs/integrations/booking-engines/e-commerce-tracking).

</details>

***

If we can be of any help, say hello to our [Customer Success team](/docs/support/customer-success).


# Cloudbeds

Adding Flip.to to your Cloudbeds booking engine takes one line of code.

***

## Let's start

{% stepper %}
{% step %}
**Sign in to your Cloudbeds account**

Then open the profile menu found in the top-right corner and look for **Settings**.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FPLwgHP3guuFb5LtsaRcQ%2FSettings.jpg?alt=media&amp;token=0b8614e3-55f7-44c3-8b20-638ec728fb81" alt="" width="227"><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Go to Settings**

Click on **Booking Engine** on the left, then the **Customize** tab.

<div data-full-width="true"><figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FiLGRDeMaTGoKGjkbG9Nl%2FCustomize.jpg?alt=media&amp;token=7afa70ac-7b47-4e81-a08e-064c3d941dab" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
**Add the Flip.to snippet**

Paste the snippet below into the **Javascript** section.

```html
<script async src="https://integration.flip.to" crossorigin="anonymous"></script>
```

{% endstep %}
{% endstepper %}

And you're all set! If we can be of any help, say hello to our [Customer Success team](https://docs.flip.to/support/customer-success).


# RevRaise by AZDS

Adding Flip.to to your RevRaise booking engine takes one line of code.

***

## Add the snippet

Copy and paste the snippet below into the **\<head> tag** of every page of your RevRaise booking engine, **including the confirmation page**.

```html
<script async src="https://integration.flip.to" crossorigin="anonymous"></script>
```

The same line goes on your website—see [Set up your website](/docs/integrations/websites/set-up-your-website).

***

## Configurations

<details>

<summary>Overriding what Flip.to detects (rarely needed)</summary>

For a custom booking-engine domain, or a page whose language markup is wrong or missing. See [Overrides](/docs/integrations/booking-engines/set-up-your-booking-engine#overrides) on Set up your booking engine.

</details>

<details>

<summary>Tracking add-ons and other products</summary>

If you sell experiences, events or ancillary items at time of booking, those still need to be passed to Flip.to—see [E-commerce tracking](/docs/integrations/booking-engines/e-commerce-tracking).

</details>

***

If we can be of any help, say hello to our [Customer Success team](/docs/support/customer-success).


# Newbook

Adding Flip.to to your Newbook booking engine takes one line of code.

{% hint style="warning" %}
**Before you begin:** you'll need to sign a Newbook + Flip.to data share agreement. Ask your Newbook point person for the agreement to sign. This allows our platform to retrieve information about bookings directly from Newbook, while ensuring the integration is stable, secure and compliant.
{% endhint %}

***

## Add the snippet

Copy and paste the snippet below into the **\<head> tag** of every page of your Newbook booking engine, **including the confirmation page**.

```html
<script async src="https://integration.flip.to" crossorigin="anonymous"></script>
```

The same line goes on your website—see [Set up your website](/docs/integrations/websites/set-up-your-website).

***

## Configurations

<details>

<summary>Overriding what Flip.to detects (rarely needed)</summary>

For a custom booking-engine domain, or a page whose language markup is wrong or missing. See [Overrides](/docs/integrations/booking-engines/set-up-your-booking-engine#overrides) on Set up your booking engine.

</details>

<details>

<summary>Tracking add-ons and other products</summary>

If you sell experiences, events or ancillary items at time of booking, those still need to be passed to Flip.to—see [E-commerce tracking](/docs/integrations/booking-engines/e-commerce-tracking).

</details>

***

If we can be of any help, say hello to our [Customer Success team](/docs/support/customer-success).


# SiteMinder

Configuring Flip.to for your SiteMinder booking engine takes just a few minutes.

{% hint style="warning" %}
**Before you begin:** you'll need your **Flip.to companyCode**, which you should have received by email. If not, ask our [Customer Success team](/docs/support/customer-success).
{% endhint %}

***

## Configuring Flip.to

* Sign into your SiteMinder Booking Button account
* Go to **Setup** → **Display Preferences**
* Click the **Booking Engine** tab
* Under **Booking Engine Version,** select **New booking engine** and click **Save**
* Once saved, go back to **Setup** → **Integrations** → **Digital Partners**
* Under **Flip.to:**
  * Click **Enabled**
  * In **Code,** enter your **SiteMinder Hotel ID**
  * In **Company code**, enter your **Flip.to** **companyCode**
* Click **Save** and you're all set


# Selfbook

Adding Flip.to to your Selfbook booking engine takes one line of code.

{% hint style="info" %}
This is a Google Tag Manager integration. While putting code directly on the page is more reliable, this is the publicly documented way of integrating with Selfbook: [Selfbook GTM Data Layer Documentation](https://drive.google.com/file/d/11jxXwX7EJqa3AojWtW2GIVpr12qVmnkd/view)
{% endhint %}

***

## Add the snippet

Create a new tag in **your Google Tag Manager** that runs on the booking engine, and set the trigger to:

```
Selfbook - Opened
```

Then paste the snippet below into your new tag.

```html
<script async src="https://integration.flip.to" crossorigin="anonymous"></script>
```

The same line goes on your website—see [Set up your website](/docs/integrations/websites/set-up-your-website).

***

## Configurations

<details>

<summary>Overriding what Flip.to detects (rarely needed)</summary>

For a custom booking-engine domain, or a page whose language markup is wrong or missing. See [Overrides](/docs/integrations/booking-engines/set-up-your-booking-engine#overrides) on Set up your booking engine.

</details>

<details>

<summary>Tracking add-ons and other products</summary>

If you sell experiences, events or ancillary items at time of booking, those still need to be passed to Flip.to—see [E-commerce tracking](/docs/integrations/booking-engines/e-commerce-tracking).

</details>

***

If we can be of any help, say hello to our [Customer Success team](/docs/support/customer-success).


# RezTrip

Adding Flip.to to your RezTrip booking engine takes one line of code.

***

## Add the snippet

Copy and paste the snippet below into the **\<head> tag** of every page of your RezTrip booking engine, **including the confirmation page**.

```html
<script async src="https://integration.flip.to" crossorigin="anonymous"></script>
```

The same line goes on your website—see [Set up your website](/docs/integrations/websites/set-up-your-website).

***

## Configurations

<details>

<summary>Single-page applications</summary>

Load the snippet at application start, not on virtual pageviews.

</details>

<details>

<summary>Overriding what Flip.to detects (rarely needed)</summary>

For a custom booking-engine domain, or a page whose language markup is wrong or missing. See [Overrides](/docs/integrations/booking-engines/set-up-your-booking-engine#overrides) on Set up your booking engine.

</details>

<details>

<summary>Tracking add-ons and other products</summary>

If you sell experiences, events or ancillary items at time of booking, those still need to be passed to Flip.to—see [E-commerce tracking](/docs/integrations/booking-engines/e-commerce-tracking).

</details>

***

If we can be of any help, say hello to our [Customer Success team](/docs/support/customer-success).


# Cloudbeds (beta)

Connecting Flip.to with Cloudbeds takes a few clicks, and configuring your booking engine takes one line of code.

***

## How to sign up for Flip.to?

Visit <https://intro.flip.to/by/ed/cloudbeds-customers> and request a demo, or sign up to get started.

## How to connect Cloudbeds for the first time?

{% stepper %}
{% step %}
**Head over to Integrations**

Sign into [your Flip.to account](https://manage.flip.to/) and navigate to **Platform → Mission Control** or **Account Settings → Integrations**
{% endstep %}

{% step %}
**Click on Cloudbeds**

You'll find it in the **Booking Engines** section.
{% endstep %}

{% step %}
**Click Connect**

You'll be prompted to sign into your Cloudbeds account and you will then receive your API key.
{% endstep %}

{% step %}
**Next, sign in to your Cloudbeds account**

Open the profile menu found in the top-right corner and look for **Settings**.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FPLwgHP3guuFb5LtsaRcQ%2FSettings.jpg?alt=media&amp;token=0b8614e3-55f7-44c3-8b20-638ec728fb81" alt="" width="227"><figcaption></figcaption></figure>
{% endstep %}

{% step %}
**Go to Settings**

Click on **Booking Engine** on the left, then the **Customize** tab.

<div data-full-width="true"><figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FiLGRDeMaTGoKGjkbG9Nl%2FCustomize.jpg?alt=media&amp;token=7afa70ac-7b47-4e81-a08e-064c3d941dab" alt=""><figcaption></figcaption></figure></div>
{% endstep %}

{% step %}
**Add the Flip.to snippet**

Paste the snippet below into the **Javascript** section.

```html
<script async src="https://integration.flip.to" crossorigin="anonymous"></script>
```

{% endstep %}
{% endstepper %}

And you're all set! If we can be of any help, say hello to our [Customer Success team](https://docs.flip.to/support/customer-success).

***

## **Specific functionalities with Cloudbeds**

Flip.to is seamlessly integrated with Cloudbeds. With our Cloudbeds integration you have access to all our advanced functionalities :

* Advocacy can automatically reach and turn past guests into storytellers.
* Discovery can share the interests of your planners and upcoming guests.
* Spacetime receives more signals to improve your behavioral analytics.

## **How to disconnect**

Sign into [your Flip.to account](https://manage.flip.to/) and navigate to **Platform → Mission Control** or **Account Settings → Integrations.** Find Cloudbeds under Booking Engines and click Disconnect.

To disconnect on the Cloudbeds side, [refer to this article](https://myfrontdesk.cloudbeds.com/hc/en-us/articles/219774407-How-to-disconnect-an-app-from-Cloudbeds-PMS).


# Campspot

Adding Flip.to to Campspot may be done in one of two ways:

## Using your Campspot Admin Portal

{% hint style="warning" %}
**Before you begin:** To implement from the Campspot Admin Portal, the Google Tag Manager field must not be in use. **It will be empty** when arriving at your settings. [If it's already in use, instead, jump to the instructions below.](#if-you-already-have-a-google-tag-manager-set)
{% endhint %}

Flip.to can be implemented by entering this **Flip.to GTM container ID** into the **Google Tag Manager** field in the Analytics section:

```
GTM-5V6K52RQ
```

When complete, your dashboard should look like this:

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FhCNeltEjafk3qML04dy8%2FCS_GTM1.png?alt=media&amp;token=5e21ea97-d4ed-49f2-8bb5-0d95a384e6d4" alt=""><figcaption></figcaption></figure>

## Directly through Google Tag Manager

If the Google Tag Manager through your admin portal is already in use, start here.

**Go to your existing GTM container for Campspot**, and **add a Custom HTML Tag** with the following snippet. Make sure it's set to trigger for **all pages.**

```html
<script async src="https://integration.flip.to" crossorigin="anonymous"></script>
```

Your GTM **Custom HTML Tag** should look like this:

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2FsmBbkq4QSt0AQYG7bn1K%2FCS_GTM2.png?alt=media&amp;token=d9ff6c65-af26-4ad8-b185-e4fe7d97882c" alt=""><figcaption></figcaption></figure>

That's it! Once complete, simply let your Customer Success Manager know and we'll do the rest of the lift to launch your platform.


# Analytics


# Signals & subscriptions

Discovery helps accommodation providers win over travelers in the planning phase of the traveler journey. The goal is to spark conversations with travelers deciding where to go next, increasing conversion and revenue with impact tracked in real-time.

Third-party integrations, analytics, logging, and many other use cases can be supported through Discovery signals and subscriptions to enrich these conversations in a way that’s good for both brand and traveler.

[Set Signals](#set-signals) allow you to push data into Discovery.

[Get Signals](#get-signals) allow you to retrieve data from Discovery.

[Discovery Actions](#discovery-actions) allow you to make Discovery do something.

[Discovery Behaviors](#discovery-behaviors) allow you to customize and configure Discovery behavior.

[Signal Subscriptions](#signal-subscriptions) allow you to subscribe to real-time application signals

* [Discovery Signals](#discovery-events)
* [Experience Signals](#experience-signals)
* [Booking Engine Signals](#booking-engine-signals)

***

## Set Signals

When your website visitor chooses a category or page that can provide useful data and insight for Discovery, you can send a signal (via GTM, Javascript, etc.) so Discovery can respond with the appropriate context. This creates a seamless, cohesive experience as your visitor interacts with your website and Discovery.

<table><thead><tr><th width="238">Set Signal</th><th>What does this change?</th></tr></thead><tbody><tr><td><em><strong>PLAN</strong></em></td><td></td></tr><tr><td>adults</td><td>Default adults.</td></tr><tr><td>children</td><td>Default children.</td></tr><tr><td>endDate</td><td>Default departure date.</td></tr><tr><td>email</td><td>Planner email address.</td></tr><tr><td>first</td><td>Planner first name.</td></tr><tr><td>promoCode</td><td>Default promo/discount/group code.</td></tr><tr><td>rooms</td><td>Default number of rooms.</td></tr><tr><td>beds</td><td>Default number of beds.</td></tr><tr><td>startDate</td><td>Default arrival date.</td></tr><tr><td>language</td><td>Sets the Discovery language (if supported).</td></tr><tr><td><em><strong>PROPERTY</strong></em></td><td></td></tr><tr><td>property</td><td>Default plan location.</td></tr><tr><td>product</td><td>Default product. Requires property.</td></tr><tr><td>linkerValue</td><td><p>Passes an analytics linker value to associate the current session with a group booking or property code. This is typically used when a visitor arrives via a direct link that contains tracking parameters.</p><pre><code>linkerValue: {
  propertyCode: '10000',
  groupId: 'SUMMER2026'
}
</code></pre></td></tr><tr><td><em><strong>LOCATION</strong></em></td><td></td></tr><tr><td>country</td><td>Default country for map navigation.</td></tr><tr><td>region</td><td>Default region for map navigation. Requires country.</td></tr><tr><td>city</td><td>Default city for map navigation. Requires region.</td></tr></tbody></table>

#### Example

The sample code below passes signals from a specific website page to Discovery. In this example, if the visitor triggered Discovery from that page, the experience they see will be suited for planners looking for vacation rentals in Orlando.

```javascript
(window.ftSignals = window.ftSignals || []).push({
  type: 'set',
  payload: {
    property: {
      property: 'my-prop',
      product: 'rentals'
    },
    location: {
      country: 'us',
      region: 'fl',
      city: 'orlando'
    }
  }
});
```

***

## Get Signals

Discovery will learn valuable signals as your visitor progresses through their travel planning on our application. You may want to pass these signals to your website or booking engine so that those experiences respond better to your visitors' interactions.

<table><thead><tr><th width="239">Get Signal</th><th>What does this return?</th></tr></thead><tbody><tr><td>plan</td><td><p>Callback is called with an object matching the following schema:</p><pre><code>{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "LanguageCode": {
      "type": "string"
    },
    "Beds": {
      "type": "integer"
    },
    "Rooms": {
      "type": "integer"
    },
    "Children": {
      "type": "integer"
    },
    "Adults": {
      "type": "integer"
    },
    "Email": {
      "type": "string"
    },
    "PlannerName": {
      "type": "string"
    },
    "StartDate": {
      "type": "string"
    },
    "EndDate": {
      "type": "string"
    },
    "DestinationName": {
      "type": "string"
    },
    "NamedRangeTitle": {
      "type": "string"
    },    "PropertyPhotoUrl": {
      "type": "string"
    },
    "PropertyName": {
      "type": "string"
    }
  },
  "required": [
    "LanguageCode",
    "Email",
    "PlannerName",
    "StartDate",
    "EndDate",
    "DestinationName",
    "NamedRangeTitle",
    "PropertyPhotoUrl",
    "PropertyName"
  ]
}
</code></pre></td></tr><tr><td>experiment</td><td><p>Returns the current experiment flag for the user. The callback receives a boolean:</p><ul><li><code>true</code> if the user is in the Discovery group.</li><li><code>false</code> if user is in the Control group.</li></ul><pre><code>(window.ftSignals = window.ftSignals || []).push({
  type: 'get',
  payload: {
    experiment: function(isExperiment) {
      console.log('User is in experiment:', isExperiment);
    }
  }
});
</code></pre></td></tr></tbody></table>

#### Example

The sample code below passes insight that Discovery learned about a travel planner into the booking engine using the call “prePopulateBookingEngine” with the full plan object.

```javascript
(window.ftSignals = window.ftSignals || []).push({
  type: 'get', 
  payload: {
    plan: prePopulateBookingEngine      
}});
```

***

```javascript
function logBookingEngineTransfer(e) {
 //Enter code to log the fact that the current user is being transferred to the booking engine
 //dataLayer.push({event:’Discovery.Transfer.Bookingengine’, …e});
}
(window.ftSignals = window.ftSignals || []).push({
  type: 'subscribe', 
  payload: {
    onDiscoveryTransfer: logBookingEngineTransfer
}});
```

***

## Discovery Actions

Action signals allow you to programmatically control the Discovery experience from your website. You can open, close, or trigger Discovery, track custom analytics events, and more.

| Action signal           | What it does                                                             |
| ----------------------- | ------------------------------------------------------------------------ |
| openDiscovery           | Opens the Discovery experience.                                          |
| closeDiscovery          | Closes the Discovery experience.                                         |
| revokeDiscovery         | Removes Discovery from the page entirely.                                |
| triggerDiscovery        | Triggers the Discovery flow (evaluates experiment and entry conditions). |
| bookingBarButtonClicked | Simulates a booking bar button click.                                    |
| setExperimentFlag       | Overrides the experiment flag for the current user.                      |
| trackAnalyticsEvent     | Fires a custom analytics event into Discovery's analytics pipeline.      |

#### Example 1: Open Discovery

The sample code below programmatically opens the Discovery experience on the page.

```
(window.ftSignals = window.ftSignals || []).push({
  type: 'action',
  payload: {
    type: 'openDiscovery'
  }
});
```

#### Example 2: Track a Custom Analytics Event

The sample code below fires a custom analytics event through Discovery's analytics pipeline, which will be forwarded to all connected analytics providers (GTM, Adobe, etc.).

```
(window.ftSignals = window.ftSignals || []).push({
  type: 'action',
  payload: {
    type: 'trackAnalyticsEvent',
    props: {
      category: 'engagement',
      action: 'cta-click',
      label: 'hero-banner',
      value: 1,
      data: { campaign: 'summer-2026' }
    }
  }
});
```

#### Example 3: Override Experiment Flag

The sample code below forces the current user into (or out of) the Discovery experiment.

```
(window.ftSignals = window.ftSignals || []).push({
  type: 'action',
  payload: {
    type: 'setExperimentFlag',
    props: { flag: true }
  }
});
```

***

## Discovery Behaviors

Behavior signals allow you to customize how Discovery handles key interactions such as booking engine transfers and page context resolution. Behaviors are passed as part of a set signal and accept a static value, a promise, or a callback function.

<table><thead><tr><th width="266.59765625">Behavior signal</th><th>What it controls</th></tr></thead><tbody><tr><td>bookingEngineTransfer</td><td>Customizes how Discovery navigates the user to the booking engine.</td></tr><tr><td>discoveryPageContextSetter</td><td>Dynamically provides property and location context for the current page.</td></tr><tr><td>bookingEngineTransfer</td><td><p>Controls the booking engine transfer behavior.<br><br>Accepts an <code>ExternalNavigationConfig</code> object with the following options:<br></p><ul><li><p><code>method</code></p><ul><li>HTTP method for the transfer.</li><li>Supported values: <code>GET</code>, <code>POST</code></li></ul></li><li><p><code>queryParameters</code></p><ul><li>Additional query parameters to append to the booking engine URL</li></ul></li><li><p><code>fragmentParameters</code></p><ul><li>Additional query parameters to append to the booking engine URL.Additional fragment (hash) parameters to append to the booking engine URL.</li></ul></li><li><p><code>target</code></p><ul><li>Window target for navigation.</li><li>Supported values: <code>_self</code>, <code>_blank</code>, <code>_parent</code>, <code>_top</code></li></ul></li><li><p><code>customHandler</code></p><ul><li>A function that receives the full booking engine URL DTO for fully custom navigation handling.</li><li>Can return <code>void</code>, a URL string, or a promise.</li></ul></li></ul></td></tr></tbody></table>

#### Example 1: Add Query Parameters to Booking Engine Transfer

The sample code below appends custom tracking parameters to every booking engine transfer URL.

```
(window.ftSignals = window.ftSignals || []).push({
  type: 'set',
  payload: {
    behaviors: {
      bookingEngineTransfer: {
        queryParameters: {
          utm_source: 'flipto',
          utm_medium: 'discovery'
        }
      }
    }
  }
});
```

#### Example 2: Open Booking Engine in a New Tab

```
(window.ftSignals = window.ftSignals || []).push({
  type: 'set',
  payload: {
    behaviors: {
      bookingEngineTransfer: {
        target: '_blank'
      }
    }
  }
});
```

#### Example 3: Custom Booking Engine Transfer Handler

The sample code below provides a custom handler that intercepts the booking engine transfer entirely, allowing you to construct or redirect to a custom URL.

```
(window.ftSignals = window.ftSignals || []).push({
  type: 'set',
  payload: {
    behaviors: {
      bookingEngineTransfer: {
        customHandler: function(dto) {
          // dto contains the full booking engine URL details
          // Return a URL string to redirect, or handle navigation yourself
          window.location.href = 'https://booking.example.com/reserve?id=' 
          + dto.propertyCode;
        }
      }
    }
  }
});
```

#### Example 4: Dynamic Booking Engine Transfer with a Callback

Behaviors also accept a callback function, which is called at transfer time. This is useful when the configuration depends on runtime state.

```
(window.ftSignals = window.ftSignals || []).push({
  type: 'set',
  payload: {
    behaviors: {
      bookingEngineTransfer: function() {
        return {
          method: 'POST',
          queryParameters: {
            session: getSessionToken()
          },
          target: '_self'
        };
      }
    }
  }
});
```

#### Example 5: Page Context Setter

Allows your website to dynamically provide property and location context to Discovery based on the current page. This is useful when page context cannot be determined from a single static signal — for example, on single-page applications where the URL changes without a full page reload.

The callback receives no arguments and should return an object with `property` and/or `location`.

**Setting Static Page Context:**

```
(window.ftSignals = window.ftSignals || []).push({
  type: 'set',
  payload: {
    behaviors: {
      discoveryPageContextSetter: {
        property: {
          property: 'my-resort',
          product: 'suites'
        },
        location: {
          country: 'us',
          region: 'fl',
          city: 'orlando'
        }
      }
    }
  }
});
```

**Dynamic Page Context with a Callback:**\
The sample code below uses a callback to resolve the current page context at the time Discovery needs it, which is useful for single page applications or pages where the context changes dynamically.

```
(window.ftSignals = window.ftSignals || []).push({
  type: 'set',
  payload: {
    behaviors: {
      discoveryPageContextSetter: function() {
        // Read context from the current page state
        var slug = document.querySelector('[data-property-slug]')?.getAttribute('data-property-slug');
        return {
          property: {
            property: slug
          }
        };
      }
    }
  }
});
```

## Signal Subscriptions

Flip.to allows websites to subscribe and receive signals about user behavior in real time. To subscribe to a particular signal, simply push one of the supported signals into “window\.ftSignals” and define the function to be called when the signal is triggered

#### Example 1: Discovery Open

The sample code below subscribes to the “onDiscoveryOpen” signal, which is triggered as soon as the user clicks one of the booking buttons to open Discovery. You can customize the code under “logDiscoveryOpen()” to log to your Analytics package each time Discovery is being opened on the website.

```javascript
function logDiscoveryOpen(e) {
 //Enter code to log the fact that the current user just opened Discovery   
 //dataLayer.push({event:’Discovery.Open’, …e});
}
(window.ftSignals = window.ftSignals || []).push({
  type: 'subscribe', 
  payload: {
    onDiscoveryOpen: logDiscoveryOpen
}});
```

#### Example 2: Booking Engine Transfer

The sample code below subscribes to the “onDiscoveryTransfer” signal, which is triggered just before Discovery sends a user to the Booking Engine. You can customize the code under “logBookingEngineTransfer()” to log this event into your analytics package.

***

### Discovery Signals

Discovery can also send data for specific events that happen during our traveler conversations. Subscribing to this data may be useful for analytics and to understand planner behaviors.

<table><thead><tr><th width="262">Subscription</th><th>When event fires</th></tr></thead><tbody><tr><td>onDiscoveryLoad</td><td>Upon Discovery script loading on the page.</td></tr><tr><td>onDiscoveryExperimentSet</td><td>Upon experiment (Flip.to or Control) being set for a new user.</td></tr><tr><td>onDiscoveryOpen</td><td>When the user triggers the opening of a Discovery experience (by clicking the booking button for instance).</td></tr><tr><td>onDiscoveryPlanChange</td><td>When user plan information changes (changing dates, etc.).</td></tr><tr><td>onDiscoveryTransfer</td><td>When the user is being sent to the booking engine.</td></tr><tr><td>onDiscoveryBootstrap</td><td>When the Discovery application has fully bootstrapped and is ready to receive signals. This is useful when you need to ensure Discovery is initialized before pushing signals.</td></tr></tbody></table>

#### Event Data

Each subscription notification call will pass the following data to its subscribers:

<table><thead><tr><th width="208.33333333333331">Attribute</th><th>Description</th></tr></thead><tbody><tr><td>source</td><td>The internal Flip.to Discovery ID, as a string (GUID).</td></tr><tr><td>experiment</td><td><p>Indicates which experiment the user falls under:</p><ul><li>Set to <code>'true'</code> for Discovery.</li><li>Set to <code>'false'</code> for the hotel’s own booking widget.</li></ul></td></tr><tr><td>mode</td><td><p><em>Optional</em><br>Context description for the event, which varies by event type.</p><p>Supported values are as follows:<br></p><p>onDiscoveryOpen</p><ul><li><p><code>planner-flow</code></p><ul><li>User opened Discovery through the standard planner flow (e.g. clicking a booking button).</li></ul></li><li><p><code>returning-user</code></p><ul><li>User is a returning visitor who previously interacted with Discovery.</li></ul></li><li><p><code>discovery-router</code></p><ul><li>User opened Discovery through the multi-property router flow.<br></li></ul></li></ul><p>onDiscoveryTransfer</p><ul><li><p><code>unveil</code></p><ul><li>Name and email revealed</li></ul></li><li><p><code>skip</code></p><ul><li>Discovery complete without unveiling</li></ul></li><li><p><code>bypass</code></p><ul><li>Discovery not shown</li></ul></li><li><p><code>continue</code></p><ul><li>Uuser already has a plan)</li></ul></li></ul></td></tr><tr><td>plan</td><td>Object to include all relevant information for the user's intended stay as follows:</td></tr><tr><td>checkinDate</td><td>Check-in date, as a date object.</td></tr><tr><td>checkoutDate</td><td>Check-out date, as a date object.</td></tr><tr><td>adults</td><td>Number of adults, if specified.</td></tr><tr><td>children</td><td>Number of children, if specified.</td></tr><tr><td>promoCode</td><td>The promo code, if any, as a string.</td></tr><tr><td>property</td><td>Object with data of current property. This includes the following attributes:</td></tr><tr><td>displayName</td><td>The property’s name, as a string.</td></tr><tr><td>slug</td><td>The property’s unique slug, as a string.</td></tr><tr><td>code</td><td>The property’s booking engine code, as a string.</td></tr><tr><td>id</td><td>The property’s internal id, as a string (GUID).</td></tr></tbody></table>

#### Example

```
source: "a99a9b5e-b551-41aa-b946-19350ceff89e"
experiment: true
mode: "unveil"
plan:
checkinDate: Wed Dec 15 2021 00:00:00 GMT-0500 (Eastern Standard Time) {}
checkoutDate: Sat Dec 18 2021 00:00:00 GMT-0500 (Eastern Standard Time) {}
adults: 2
children: 0
promoCode: holiday
property: {displayName: "Test Hotel", slug: "test-hotel", id: "5fd181b8-61c7-4194-bb78-566c1ca7de11", code: "10000"}
```

***

### Experience Signals

Discovery can also send data for specific events that happen during our traveler conversations. Subscribing to this data may be useful for analytics and to understand planner behaviors.

<table><thead><tr><th width="292">Subscription</th><th>When event fires</th></tr></thead><tbody><tr><td>OnDiscoveryExperienceOpen</td><td>Upon user clicking to view a particular experience</td></tr></tbody></table>

#### Event Data

Each subscription notification call will pass the following data to its subscribers:

<table><thead><tr><th width="208.33333333333331">Attribute</th><th>Description</th></tr></thead><tbody><tr><td>uuid</td><td>The internal Flip.to experienceID, as a string (GUID).</td></tr><tr><td>languageCode</td><td>The language code the user is currently using to view the event.</td></tr><tr><td>name</td><td>The experience name.</td></tr><tr><td>isRecurring</td><td>Indicates whether experience is recurring.</td></tr><tr><td>recurringStartDate</td><td>The start date of recurring experiences.</td></tr><tr><td>recurringStartDate</td><td>The end date of recurring experiences.</td></tr><tr><td>occurrences</td><td>The occurrences of this experience around the time of booking.<br><br>This will not provide dates that goes beyond more than 1 week before or after the user intended check-in and/or check-out dates</td></tr><tr><td>venue</td><td>The venue name in which experience is taking place.</td></tr><tr><td>tags</td><td>An array of all tags that are associated with the experience.<br><br>Tags are keywords to define the events, and are always defined in English.</td></tr></tbody></table>

#### Example

```
{
    "uuid": "95B7F6E7-50E4-4749-9A5B-2DE28E6BB624",
    "languageCode":"en",
    "name": "Madagascar the Musical",
    "isRecurring": false,
    "recurringStartDate": "2023-04-07T19:00:00",
    "recurringEndDate": "2023-04-07T00:00:00",
    "occurrences": [{ "startDate": "2023-04-07T00:00:00", "endDate": "2023-04-07T00:00:00" }],
    "venue": { "name": "Au-Rene Theater at the Broward Center"},
    "tags": ["performance_show", "theatre", "music", "kid_friendly"]
}
```

***

### Booking Engine Signals

After a website visitor submits their name and email address, Discovery sends them to the booking engine. Flip.to allows booking engines to subscribe and receive signals about each travel planner.

#### Example

The sample code below provides the travel planner's first name and email address to the booking engine, which can be used to populate form fields for example.

```javascript
function OnDiscoveryPlanInfo(planInfo){
    // Enter your code here to use the planner's first name and email 
}
(ftDatalayer = ftDatalayer || []).push({type: 'ft-get-signal', payload: {
key: 'planInfo',
value: OnDiscoveryPlanInfo
}});
```


# Looker Studio

Flip.to is collaborative marketing platform designed to spark better conversations with every traveler to grow a highly targeted, high-quality audience at scale. And all this tracks to increase in direct revenue. Understanding your data is critical to making the most impact. Integrate Flip.to with Looker Studio so you can get clear insights into your data and elevate your marketing.

## Before you begin

* Make sure you have the right permissions to access and add datasets to Looker Studio.
* You'll need your Flip.to API Key for authenticating data access. Just ask our [Customer Success team](/docs/support/customer-success) for one.

## Set up the Flip.to Community Connector

{% stepper %}
{% step %}
**Authenticate with Looker Studio**

Visit <https://datastudio.google.com/datasources/create?connectorId=AKfycbyKCHG9wBlZf2JeYhmfmfw6oVPkSnoct2WJNT7FLvovHigRfC1OfvijOG4asv1ghutT&authuser=0> and authenticate with your Flip.to API key.
{% endstep %}

{% step %}
**Connect to Flip.to data**

Select which instance of Discovery you wish to review and click "Connect". Then select which columns you wish to import (or leave the defaults to select everything).
{% endstep %}

{% step %}
**You're ready to go!**

Start building your reports based on your new data sets!
{% endstep %}
{% endstepper %}

## Troubleshooting

<details>

<summary>If the issue is with empty or incorrect dropdowns...</summary>

Your API key may be incorrect or not have the correct permissions. [Reach out to us](/docs/support/customer-success), we're happy to help.

</details>

<details>

<summary>If the "Connect" button is not proceeding to next steps...</summary>

[Reach out to us](/docs/support/customer-success), we'll help get you connected.

</details>

<details>

<summary>If Looker Studio is giving you errors...</summary>

Check out [Google's troubleshooting documentation](https://support.google.com/datastudio/answer/12182485#zippy=%2Cin-this-article).

</details>

***

Flip.to implements a number of measures to comply with privacy regulations. Find out more at our [Privacy and Security Overview](https://policies.flip.to/platform/privacy-and-security-overview) and our [Privacy Policy](https://policies.flip.to/platform/privacy-policy).

<br>


# Consent management

Flip.to **only** uses first-party cookies that are placed on the site that the user is visiting.

Flip.to is a **data processor** (or **service provider**) and our customers have full ownership of all data collected or processed on their behalf.

Flip.to reads consent signals from your CMP out of the box. Three paths, no extra configuration:

* **Native integrations:** Cookiebot, OneTrust, Osano, CookieYes, Termly, TrustArc, Usercentrics, Didomi, Iubenda, Ketch, Civic Cookie Control, Complianz, Cookie Notice (Hu-manity.co)
* **IAB TCF:** any platform implementing the Transparency & Consent Framework
* **Google Tag Manager:** most everything else. If your CMP writes to GTM, we read it.

{% hint style="info" %}
If you are configuring a consent management platform, you can find more information below on the two types of cookies that are used by Flip.to—**Strictly Necessary** and **Analytics**.

Be sure to include the **asterisk (\*)** when configuring these cookies in your consent management platform. The cookie names are prefixes and the asterisk is a wildcard representing a variety of property-specific suffixes.
{% endhint %}

Flip.to scripts are **essential** and should always run. There are three products, [Spacetime](https://docs.flip.to/integrations/booking-engines/consent-management-for-your-booking-engine#spacetime), [Discovery](https://docs.flip.to/integrations/booking-engines/consent-management-for-your-booking-engine#discovery), and [Advocacy](#advocacy) that require consent management configuration for your website.

***

## **Spacetime**

Spacetime is behavioral analytics for travel and categorized as **Analytics**, and **places one cookie** on a visitor's browser if and when consent is provided for **Analytics**.

<table><thead><tr><th width="207.66666666666666">Cookie</th><th width="213">Description</th><th>Duration</th></tr></thead><tbody><tr><td>sa_ft*</td><td>Analytics identifiers</td><td>400 days</td></tr></tbody></table>

Based on the visitor's consent, Spacetime logs pageviews without any PII, in the following way:

* When **Analytics** consent is **granted**: the pageview would include the analytics user-id.
* When **Analytics** consent is **not granted**: the pageview would include a randomized and anonymized id.

Spacetime is fully compliant with consent management as well as with all privacy regulations, such as GDPR, CCPA and others.

## **Discovery**

Discovery is akin to shopping cart behavior and categorized as **Strictly Necessary** throughout the customer journey as it’s required for the application to function (website + third party booking engines), in compliance with all consent management and privacy regulations.

Discovery **places one local storage and one session storage entry** on the visitor's browser.

<table><thead><tr><th width="208">Local Storage</th><th width="217">Description</th><th>Duration</th></tr></thead><tbody><tr><td>ftDiscoveryState</td><td>Maintains guest plan state.</td><td>N/A</td></tr></tbody></table>

<table><thead><tr><th width="208">Session Storage</th><th width="217">Description</th><th>Duration</th></tr></thead><tbody><tr><td>ftDiscoveryState</td><td>Maintains guest interaction state.</td><td>Session</td></tr></tbody></table>

The Discovery script logs the completion of the transaction. There are no other cookies or local storage entries.

Discovery is fully compliant with consent management as well as with all privacy regulations, such as GDPR, CCPA and others.

## **Advocacy**

Advocacy turns travelers into storytellers and categorized as **Analytics,** and **places two cookies** on the visitor's browser.

<table><thead><tr><th width="208.05859375">Cookie</th><th width="216.671875">Description</th><th>Duration</th></tr></thead><tbody><tr><td>ft-photo-source*</td><td>Indicates user type of guest or friend.</td><td>1 year</td></tr><tr><td>ft-it*</td><td>Maintains Flip.to components' interaction state.</td><td>6 months</td></tr></tbody></table>

Advocacy is fully compliant with consent management as well as with all privacy regulations, such as GDPR, CCPA and others.<br>

***

Flip.to implements a number of measures to comply with privacy regulations. Find out more at our [Privacy and Security Overview](https://policies.flip.to/platform/privacy-and-security-overview) and our [Privacy Policy](https://policies.flip.to/platform/privacy-policy).


# CRMs


# Zapier

Flip.to can easily integrate with your CRM and email platforms through Zapier, allowing you to automatically add Flip.to Advocacy leads & Discovery plans into your own marketing funnels, as well as ensure any opt-outs are respected across your entire system.

{% hint style="warning" %}
**Before you begin:**

* You'll need a Zapier account. Create one at <https://zapier.com/>.
* Next, reach out to our [Customer Success Team](/docs/support/customer-success) for your Zapier API key.
* Then add the [Flip.to Zapier app](https://zapier.com/developer/public-invite/146723/502708/8fa29c2ed105945fb16f0ac18fbb8753/) to your account and finalize your setup.
  {% endhint %}

***

## Data Attributes

### Advocacy Leads

<table><thead><tr><th width="228">Attribute</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td>An internal id identifying a specific warm lead.<br><br>This ensures Zapier will eliminate any duplicates from entering your system, and does not need to be used.</td></tr><tr><td>first</td><td>First name.</td></tr><tr><td>last</td><td>Last name.</td></tr><tr><td>email</td><td>Email address.</td></tr><tr><td>is_incentive_requested</td><td>Indicates whether the Advocacy lead has requested an incentive when they signed up.</td></tr><tr><td>is_privacy_restricted</td><td>Values are either true or false. True indicates that the Advocacy lead falls under privacy regulations (such as GDPR), and should not be used for marketing, unless having first explicitly opted in.</td></tr><tr><td>create_date</td><td>The date and time the warm lead has signed up on the Flip.to platform.<br><br>Time is defined as GMT.</td></tr><tr><td>property_name</td><td>The property’s name on Flip.to.</td></tr><tr><td>property_slug</td><td>A simplified and standardized slug representing the property on the Flip.to platform.<br><br>Slugs are excellent for distinguishing between properties when the value must be sent in a URL, as they don’t contain special characters, spaces or anything that would be encoded.</td></tr></tbody></table>

### Discovery Plans

<table><thead><tr><th width="230">Attribute</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td>An internal id identifying a specific plan.<br><br>This ensures Zapier will eliminate any duplicates from entering your system, and does not need to be used.</td></tr><tr><td>first</td><td>First name.</td></tr><tr><td>email</td><td>Email address.</td></tr><tr><td>adults</td><td>If specified, number of adults included in the plan.</td></tr><tr><td>children</td><td>If specified, number of children included in the plan.</td></tr><tr><td>beds</td><td>If specified, number of beds included in the plan.</td></tr><tr><td>rooms</td><td>If specified, number of rooms included in the plan.</td></tr><tr><td>arrival</td><td>Date the guest intends to arrive.</td></tr><tr><td>departure</td><td>Date the guest intends to depart.</td></tr><tr><td>is_guest</td><td>Indicate whether plan has been booked. Values are either true or false.</td></tr><tr><td>is_privacy_restricted</td><td>Values are either true or false. True indicates that the planner falls under privacy regulations (such as GDPR), and should not be used for marketing, unless having first explicitly opted in.</td></tr><tr><td>create_date</td><td>The date and time the plan was created in Discovery.<br><br>Time is defined as GMT.</td></tr><tr><td>property_name</td><td>The property’s name on Flip.to.</td></tr><tr><td>property_slug</td><td>A simplified and standardized slug representing the property on the Flip.to platform.<br><br>Slugs are excellent for distinguishing between properties when the value must be sent in a URL, as they don’t contain special characters, spaces or anything that would be encoded.</td></tr></tbody></table>

### Email Opt-out

<table><thead><tr><th width="230">Name</th><th>Description</th></tr></thead><tbody><tr><td>id</td><td>An internal id identifying a specific opt-out.<br><br>This ensures Zapier will eliminate any duplicates from entering your system, and does not need to be used.</td></tr><tr><td>email</td><td>Email address that was opted out.</td></tr><tr><td>create_date</td><td>The date and time the user opted out on the Flip.to platform.<br><br>Time is defined as GMT.</td></tr><tr><td>property_name</td><td>The property’s name on Flip.to.</td></tr><tr><td>property_slug</td><td>A simplified and standardized slug representing the property on the Flip.to platform.<br><br>Slugs are excellent for distinguishing between properties when the value must be sent in a URL, as they don’t contain special characters, spaces or anything that would be encoded.</td></tr></tbody></table>


# Using Zapier with Mailchimp

Here is a sample “Zap” (a simple automated process) that takes Flip.to’s Advocacy leads and adds them as subscribers to MailChimp. The same concept can be used to add Discovery Plans & Email Opt-outs into any platform of your choice.

## Step 1: Get started

Login to [Zapier](https://www.zapier.com) and click the “Make a Zap” button.

<figure><img src="https://lh6.googleusercontent.com/E3a-So4CQzy_ss6HX5-wwVZCZ-ujR4h__L9NtmwP0TNl2qMUhIA0GeYyBLbz8n_Ncb7F6lVzVYEEJoCtp4Ev2ndL5kKxD-HFL8_WD6yVVYrk7YAmMGtmK7nuuOGu-Q8Bxx-LAMN9gzVRpyYw9t8IVg" alt=""><figcaption></figcaption></figure>

***

## Step 2: Define a “Trigger”

Name your new zap.

<figure><img src="https://lh5.googleusercontent.com/Wct1xHgK9-E_uuySrBKUlsqI9CoPm5c1A4MbajqGRiAj5eKyV1_SkTV0l1OfV9VdiGEOnQQ41H8NLI8-VNdmccmZyEenYuwkEvlt0KoeRUvPaBu2St1X4wpYVHrkNXdVFyqv-G4rEDfjr9MM60sWVg" alt=""><figcaption></figcaption></figure>

Choose “Flip.to” as your trigger.

<figure><img src="https://lh5.googleusercontent.com/zqVQGn8dvWxTCamkvSDCzlifX9YQphk_AyIFpJWTwnzbUsRUMX-z2LnjVutI4Kdji7DvD8D__u963NGTjTvK0yxRKpNz1OX9GS9axDXf5kxA_xZU2hyeSkFGI8P_EO8hgL9L1E9_-Zq2S_TlQB1Mog" alt=""><figcaption></figcaption></figure>

Choose your trigger type. In our example, we chose “New Advocacy Lead”. Click “Continue” button after making your selection.

<figure><img src="https://lh5.googleusercontent.com/EFS-aj5RqAYrBqJ8JMWn02HaWQfotC2R_l5NqxFrqoKf__UrkkSBDmDwje5VSbijblmqyfAqXgK68J4sdxjNj4bFQSk8a8_3Q2hZkoUn6qsM_7aH2JXPemtqqM-QkeMYXIhddWJHEfsOx4hoJl8VzA" alt=""><figcaption></figcaption></figure>

Choose an already connected account if you have one and you’ll get to skip the next step. Otherwise, click the “Sign in to Flip.to” button.

<figure><img src="https://lh5.googleusercontent.com/5sNeHyXc5d56h269_g8r3pHc4Kkx9hLOT46eBkPyu1y0iYVX9VnK6MURyCoGzSWyDMrvwaRtQ6TTyy4KdNQVEPzMaXlsFymuHcTkBLnYv8ruB02ZFDyo9iptrfSU5-basP57Ebi-qoyf-bB5x1vQVg" alt=""><figcaption></figcaption></figure>

Enter the API Key provided by your Flip.to Customer Success Manager. Click the “Yes, Continue” button on the popup modal, then the “Continue” button on the page.

<figure><img src="https://lh4.googleusercontent.com/Z18dT5xk4bhPWRIzo4059ShY3fZX2Q2L8MQ7BhnDsZevpAMt70KS6976O-EIIF4V8Go3YrUQUKxwYuN8vQTiozWel7HB8qABcFUaFiqVZzC2RCUZ7KpHvmCDXe0TansTCZQTaFVhz1QOe9366JlLVQ" alt=""><figcaption></figcaption></figure>

Next, we need to configure the feed. Please specify:

* The property to monitor for new leads.
* The number of days to wait for a warm lead to be nurtured in Flip.to before pulling it into your own marketing funnel. Our recommendation is 30 days.

{% hint style="warning" %}
We strongly recommend that you **do not** include Flip.to “privacy restricted” leads.\
\
Any email sent to Flip.to “privacy restricted” leads without their explicit permission is in violation of the EU’s General Data Protection Regulation (GDPR).
{% endhint %}

<figure><img src="https://lh6.googleusercontent.com/GgXA0UzY7cdn81_wv9IKLLVsUY41Uu8W2g83NwyIW_xvqnzPPIzj11kItMtTc6OPdAdrgw0UraicEuAAKmtA6u32JZrXhngOPL8qMYRutZPAsX9bH_WSn46_anf1QTR0gdQY9DCmQ0ZX-GWEqN-bYg" alt=""><figcaption></figcaption></figure>

Hit test trigger to attempt to pull sample data from Flip.to’s database.

{% hint style="info" %}
Given the small search window for this test, it is very likely nothing is returned.
{% endhint %}

<figure><img src="https://lh4.googleusercontent.com/UTQTQAaJz2RMmVJrVDt36wC_03P1adqo6XiGDHG07xEAQC4T1c4fEjlwjfu_wNz4_8tmYF6FbyFtXZS1acLl-amcXclcrK8M_MfPWdBKJtsWKs_u9n-lbBjrjEhHUPqZ28Bwz09KmedShXSz-5A9Zg" alt=""><figcaption></figcaption></figure>

When Zapier gives up searching, hit “Skip Test”. The differences between real and our provided example data are inconsequential for setup.

<figure><img src="https://lh5.googleusercontent.com/iM9bBirldezCTTotx9Gg4CrKeQxV_3b2KLoMBGPAr6y7cL3MXSfNmJ-1ce5AdG_Y9Z4xjcDYvzRN7tVBpSVMExMcF52vUQcjArv0lbWpAYoDYZXMbleiFM17sLB-Vjj7O8mFPH-zeh2zcI--NHM41w" alt=""><figcaption></figcaption></figure>

Hit “Continue” to accept the provided example data.

<figure><img src="https://lh6.googleusercontent.com/cLd0n_qmwPFpKeDq7D6BXU5E-E_2fD9hcG-iMUCmE8EH_FJ1GQ861jsr8NdtLR1Q0vnftSMcdyokGV2GRO84I3TnUxrGySLMzLh2ZCl7JGA5sV5xfA6kYRYJ7JnDj95k4Q5dS4SoQ_rGRzPWyR1GZg" alt=""><figcaption></figcaption></figure>

***

## Step 3: Define an “Action”

Find the application that you’d like to receive the Flip.to lead data. In this example, we’ll choose Mailchimp.

<figure><img src="https://lh5.googleusercontent.com/hxRiJ2EzxUKAHm9v6NOZ_1_jSq3juxQeDgOhyvW_D_RAQ8R5MostSkFPw1_ic1diqko6PpLpYZMEmG7_d7Gi6IEOuF4QMRQDbED_eZHqYbVqAvsaX3BEAebMpZGWB_FwuVMl7i-AA1LjTLR1DkZChA" alt=""><figcaption></figcaption></figure>

Choose the action you’d like to perform for each new warm lead. In our example, we’ll add a new subscriber.<br>

<figure><img src="https://lh3.googleusercontent.com/ZWL97FCmdSmXBgFIZbcyv8XnBwZTtPfcj0htpc5bN7c8kLzxtNq_ZHkapLIWL6o4CowemMOC4JDKXyGPGB-xHEqUh6RcH4vLdckAbNtq_hd3LYajNzqvNzNExP57VtdgQU82l1FV6JB0-we8bmYLtA" alt=""><figcaption></figcaption></figure>

Perform the required authorization. For this example, this is an Oauth login popup:\
\
![](https://lh5.googleusercontent.com/O2UuUXxWSG1x_yXYbe1kzs3sO3g5YNT-TKrcZbveUCQwL__ll-yELEV3Z5CTIZEcF9AO2AU2tdXAGKA0YWRRHTUwNjUy8rh6EVPn1EPn7yZwaEhSlvwE7V8R3Tsh_Pmk2EzhePa30Ty8e6HDWZntwA)![](https://lh3.googleusercontent.com/v5SHrytyHv7iPYSzLv4bJKEvRGfg7fpL-P3bmPIZ11tFS690x6hR6lQBhaVguqrQVqi2psuNdNJi_SbSxwyv_-wkl__LdW8GLtRNAjZV85lm5v5F8odpCDhe0iIXH1u-4CsqychUEawjp82lxd3K9Q)

<figure><img src="https://lh5.googleusercontent.com/1CU1H7--QZDhJs42MUgfqJBu5jHMXR0zVkU_jxISg-ZVCQPmvSyzUgLj2XcT7MilW_Rynd5YRwqhAyvSGKOLBq7Iz_59lUgR4K131dPlj88YT1Ym7rCuuZNq5KVQZdT1aDMWorYEvaC27t16hbNLNw" alt=""><figcaption></figcaption></figure>

Now for the magic! The test data you acquired in the trigger can now be used as tokens to fill out fields in the destination system.

In this example, we click the add token button to the right of subscriber email and choose the “Warm Lead Email Address” token as the value. Fill out all applicable fields and hit “Continue”

<figure><img src="https://lh4.googleusercontent.com/W-Wgrv5QLs1NJikIygSlQumd3UyQGfISs-CzWJ9JOtqGWnIYqGZ8jnnz4mQFCS2IAqbWIt7APGrV65Vp4vt8ieBFo3Pfxk0stXu1CmDlMU6IvF90QU_ge-NORvVulsclWnYon94MxPBygneF34xF8g" alt=""><figcaption></figcaption></figure>

Optionally, you can test your integration by sending your sample warm lead to your system, or just “Skip Test”.

<figure><img src="https://lh3.googleusercontent.com/NTVBkyiEQPU103Q3e6mVhm9ojbW3WKjM61bIDAlClkBOwipQtyzoyEv_v8Vsmfsu8YwIPyW2kICtQLz_qW0nGkfbR0YmTOFhhCEBGuNLwjS8YInpweIoYBe2wGY06NPdvcG1fA2Go9bHksKOyvqj6g" alt=""><figcaption></figcaption></figure>

That’s it! You’re done! Just turn it on to start receiving new lead data.

<figure><img src="https://lh3.googleusercontent.com/FBsvX7uJZfknlLXvqwUDTWuykhAMyjkI525bljuwJF_hCi_0349oQQdAeWQphe0jb3QbP4woHgiFt7lGzQl-zyUSlXbTN6KAJgHyk1vq39njE0OcH1z_G-QTcUDBV-cjSrq1IWYKbIHCXy3DAcnxzA" alt=""><figcaption></figcaption></figure>

<br>


# Revinate

Configuring Flip.to and Revinate to share data is simple—below are the instructions on how to do that for [Advocacy](#advocacy) and [Discovery](#discovery).

***

## **Advocacy**

The Flip.to platform can automatically pass Advocacy leads into a Revinate contact list in two steps.

* Create a new contact list in Revinate for Advocacy leads
* Open up your new contact list, click **Upload via API,** and use or create the following custom fields:

<table><thead><tr><th width="144">Field Name</th><th width="100">Type</th><th width="100" data-type="checkbox">Required</th><th>Notes</th></tr></thead><tbody><tr><td>PROPERTY</td><td>Text</td><td>false</td><td>The name of the property.</td></tr><tr><td>CREATED</td><td>Date</td><td>false</td><td>The date that the user signed up.</td></tr></tbody></table>

* Open up your new contact list, click **Upload via API** and send the token that is displayed to your [Customer Success Manager](/docs/support/customer-success).

{% hint style="info" %}
Advocacy data is available 30 days after the user shared their contact information. This window is reserved for the platform to complete the remainder of the user journey.

All data is screened to ensure a clean list—users who unsubscribed, whose emails have bounced or who are covered by privacy regulations (GDPR, CCPA, etc.) will be excluded.
{% endhint %}

***

## **Discovery**

The Flip.to platform can automatically pass Discovery leads into a Revinate contact list with custom fields.

* Create a new contact list in Revinate for Discovery leads
* Open up that new contact list, click **Upload via API,** and use or create the following custom fields:

<table><thead><tr><th width="184">Field Name</th><th width="100">Type</th><th width="100" data-type="checkbox">Required</th><th>Notes</th></tr></thead><tbody><tr><td>PROPERTY</td><td>Text</td><td>false</td><td>The name of the property.</td></tr><tr><td>CREATED</td><td>Date</td><td>false</td><td>The date that the planner started planning.</td></tr><tr><td>ARRIVAL</td><td>Date</td><td>true</td><td>The anticipated check-in date.</td></tr><tr><td>DEPARTURE</td><td>Date</td><td>true</td><td>The anticipated check-out date.</td></tr><tr><td>BOOKING TYPE</td><td>Text</td><td>false</td><td>Defines whether the user plans a stay only, or include a flight option.</td></tr><tr><td>TRAVELER TYPE</td><td>Text</td><td>false</td><td>Defines the type of traveler, such as <code>Single</code>, <code>Family</code>, etc.</td></tr><tr><td>INTERESTS</td><td>Text</td><td>false</td><td>A comma delimited string with all user interests.</td></tr></tbody></table>

* Open up your new contact list, click **Upload via API,** and send the token that is displayed to your [Customer Success Manager](/docs/support/customer-success).

{% hint style="info" %}
Discovery data is available 10 days after the lead shared their contact information. This window is reserved for the platform to complete the remainder of the user journey.

All data is screened to ensure a clean list—users who unsubscribed, whose emails have bounced or who are covered by privacy regulations (GDPR, CCPA, etc.) will be excluded.
{% endhint %}


# Salesforce

Contact data can be added to Salesforce by requesting data through the [Flip.to Platform API](/docs/api/reference/platform-api) as an external data source, and supported with Contact Builder and Automation Studio as needed.

The API will include the Contact Data below in JSON format.

***

## Contact Data

<table><thead><tr><th width="234">Field</th><th>Description</th></tr></thead><tbody><tr><td>Email</td><td>The contact's email address, which will also be used as the contact key.</td></tr><tr><td>First Name</td><td>The contact's first name.</td></tr><tr><td>Property</td><td>The property that the contact is planning a stay.</td></tr><tr><td>Discovery Name</td><td>This is typically the website URL of where Discovery is running for a property.</td></tr><tr><td>Create Date</td><td>The date / time the contact started planning through Discovery.</td></tr><tr><td>Planner ID</td><td>The ID assigned to the contact planning through Discovery.</td></tr><tr><td>Start Date</td><td>The date that the contact intends to check-in.</td></tr><tr><td>End Date</td><td>The date that the contact intends to check-out.</td></tr><tr><td>Language Code</td><td>The language code that the contact has used to interact with Discovery (<code>en</code>, <code>es-Mx</code> etc).</td></tr><tr><td>Is Booked</td><td>Indicates if the contact has booked a stay.</td></tr><tr><td>Is Uninterested</td><td>Indicates if the contact has opted out of email communication.</td></tr><tr><td>Is GDPR</td><td>Indicates if the contact has interacted with Flip.to from the EU.</td></tr></tbody></table>

{% hint style="info" %}
All data is screened to ensure a clean list—users who unsubscribed, whose emails have bounced or who are covered by privacy regulations (GDPR, CCPA, etc.) will be excluded.
{% endhint %}


# SFTP

Flip.to can be configured to export data daily via SFTP, which you can use to import the data to your CRM on an automated schedule.

To get started, reach out to our [Customer Success team](/docs/support/customer-success) and have the following details ready:

* SFTP server address
* Port number
* User credentials
* Preference for target folder, otherwise data will be placed in an "Import" folder

***

## Advocacy Data

Advocacy data will be provided in a CSV file, named using the following format:\
`yyyy-MM-ddTHH:MM:SS__advocacy.csv` for instance, 2024-03-28T10-00-18\_\_advocacy.csv.

<table><thead><tr><th width="218">Field</th><th width="159">Type</th><th>Description</th></tr></thead><tbody><tr><td>property-id</td><td>Guid</td><td>Flip.to property ID</td></tr><tr><td>first</td><td>Text</td><td>The user's first name</td></tr><tr><td>last</td><td>Text</td><td>The user’s last name</td></tr><tr><td>email</td><td>Email address</td><td>The user's email address</td></tr><tr><td>create-date</td><td>DateTime</td><td>The date/time the user has signed up</td></tr><tr><td>language-code</td><td>Text</td><td>The ISO 639-1 Code for the language. For instance, English will be represented by <code>'en'</code>, Spanish will be represented by <code>'es'</code>, etc.</td></tr><tr><td>is-privacy-restricted</td><td>Boolean</td><td>True if the user is part of GDPR, or False otherwise</td></tr><tr><td>category</td><td>Text</td><td>The category (friend or anonymous) of the user</td></tr><tr><td>is-incentive-requested</td><td>Boolean</td><td>True if the user has requested an incentive, or False otherwise</td></tr><tr><td>opt-out</td><td>DateTime</td><td>If the user has opted out, the date &#x26; time they have made that request</td></tr><tr><td>campaign</td><td>Text</td><td>The name of the Flip.to campaign the user was part of</td></tr></tbody></table>

{% hint style="info" %}
Advocacy data is available 30 days after the user shared their contact information. This window is reserved for the platform to complete the remainder of the user journey.

All data is screened to ensure a clean list—users who unsubscribed, whose emails have bounced or who are covered by privacy regulations (GDPR, CCPA, etc.) will be excluded.
{% endhint %}

### Example of Advocacy data

<table data-full-width="true"><thead><tr><th width="239">property-id</th><th>first</th><th>last</th><th width="165">email</th><th width="128">create-date</th><th>language-code</th><th width="187">is-privacy-restricted</th><th width="110">category</th><th width="199">is-incentive-requested</th><th width="87">opt-out</th><th>campaign</th></tr></thead><tbody><tr><td>30c030eb-5b53-435e-9178-4db6d8c852df</td><td>John</td><td>Smith</td><td>john@email.com</td><td>2023-02-26T00:10:01.5143306</td><td>en</td><td>FALSE</td><td>Friend</td><td>TRUE</td><td><br></td><td>Pre-Stay - Default variation</td></tr><tr><td>30c030eb-5b53-435e-9178-4db6d8c852df</td><td>Larry</td><td>Jones</td><td>larry@email.com</td><td>2023-02-26T00:20:55.7643191</td><td>en</td><td>FALSE</td><td>Friend</td><td>TRUE</td><td><br></td><td>Photo Contest</td></tr><tr><td>878bced6-1620-495e-98ce-79b1c1395f90</td><td>Mary</td><td>Jane</td><td>mary@email.com</td><td>2023-02-26T00:24:55.5968445</td><td>en</td><td>FALSE</td><td>Friend</td><td>TRUE</td><td><br></td><td>Homepage</td></tr></tbody></table>

## Discovery Data

The Discovery data will be exported as a CSV, named using the following format:\
`yyyy-MM-ddTHH:MM:SS__discovery.csv`, for instance 2024-03-28T10-00-58\_\_discovery.csv.

| Field                 | Type          | Description                                                                                                                           |
| --------------------- | ------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| property-id           | Guid          | Flip.to property ID                                                                                                                   |
| create-date           | DateTime      | The date/time the user has signed up                                                                                                  |
| first                 | Text          | The user's first name                                                                                                                 |
| email                 | Email address | The user's email address                                                                                                              |
| adults                | Number        | The number of adults, if any, the user has selected in ther plan                                                                      |
| children              | Number        | The number of children, if any, the user has selected in their plan                                                                   |
| arrival               | Date          | The date that the user intends to arrive.                                                                                             |
| departure             | Date          | The date that the user intends to depart.                                                                                             |
| promo-code            | Text          | The promo code, if any, that the user has added                                                                                       |
| language-code         | Text          | The ISO 639-1 Code for the language. For instance, English will be represented by `'en'`, Spanish will be represented by `'es'`, etc. |
| is-guest              | Boolean       | True if the user made a reservation, False otherwise                                                                                  |
| is-privacy-restricted | Boolean       | True if the user is part of GDPR, or False otherwise                                                                                  |
| opt-out               | DateTime      | If the user has opted out, the date & time they have made that request                                                                |
| interests             | Text          | A comma delimited string with list of user interests                                                                                  |

{% hint style="info" %}
Discovery data is available 10 days after the user shared their contact information. This window is reserved for the platform to complete the remainder of the user journey.

All data is screened to ensure a clean list—users who unsubscribed, whose emails have bounced or who are covered by GDPR will be excluded.
{% endhint %}

### Example of Discovery data

<table data-full-width="true"><thead><tr><th width="153">property-id</th><th width="137">create-date</th><th>first</th><th width="168">email</th><th>adults</th><th>children</th><th width="123">arrival</th><th width="135">departure</th><th width="126">promo-code</th><th width="107">language-code</th><th>is-guest</th><th width="189">is-privacy-restricted</th><th width="128">opt-out</th><th>interests</th></tr></thead><tbody><tr><td>dcb6ff4e-8a32-4248-ac7f-328dd320ca8e</td><td>2024-02-09T00:08:05.0250466</td><td>John</td><td>john@email.com</td><td>2</td><td>0</td><td>2024-05-31</td><td>2024-06-02</td><td><br></td><td>en</td><td>FALSE</td><td>FALSE</td><td><br></td><td><br></td></tr><tr><td>dcb6ff4e-8a32-4248-ac7f-328dd320ca8e</td><td>2024-02-09T00:08:16.8457396</td><td>Linda</td><td>linda@email.com</td><td>2</td><td>1</td><td>2024-02-27</td><td>2024-03-02</td><td><br></td><td>en</td><td>FALSE</td><td>FALSE</td><td>2024-02-11T17:07:00</td><td><br></td></tr><tr><td>878bced6-1620-495e-98ce-79b1c1395f90</td><td>2024-02-09T00:21:48.6920241</td><td>Debra</td><td>debra@email.com</td><td>3</td><td>2</td><td>2024-06-28</td><td>2024-07-05</td><td><br></td><td>en</td><td>FALSE</td><td>FALSE</td><td><br></td><td>alcohol|art|happy_hour|local_gem|social</td></tr><tr><td>1a286873-6c57-4cb9-abe2-cf4621622330</td><td>2024-02-09T00:22:24.7366345</td><td>Joe</td><td>joe@email.com</td><td>4</td><td>0</td><td>2024-07-19</td><td>2024-07-22</td><td><br></td><td>en</td><td>FALSE</td><td>FALSE</td><td><br></td><td>costume_cosplay|dont_miss|festival|literature|offbeat</td></tr></tbody></table>


# Email Marketing


# Providers


# Salesforce Marketing Cloud

With our Salesforce Marketing Cloud integration, you'll be able to track audience behavior and contribution value of your email marketing with Spacetime.

This guide walks through the setup in Salesforce Marketing Cloud (SFMC) that enables automated performance tracking and data synchronization with Spacetime.

{% hint style="info" %}
Before you start, make sure the **Parent Business Unit** is selected in the top right of your SFMC dashboard. If another unit is shown, click **View Hierarchy** and select the Parent Business Unit.
{% endhint %}

{% stepper %}
{% step %}
**Create a new Data Extension**

1. Navigate to **Email Studio** or **Contact Builder**.
2. From the menu, click **Subscribers** → **Data Extensions**.
3. Click **Create**.
4. Select **Standard Data Extension** and click **OK**.
5. For **Creation Method**, choose **Create from new**, then click **Next**.
6. Enter the following configuration:
   * **Name:** Flip.to Data Extension
   * **External Key:** `flipto-data-extension`
   * **Description:** Data extension to pass performance and list data to Flip.to.
7. Click **Next**.
8. Set **Data Retention** to **On**. Set **Delete** to **Individual Records** and **Period** to **90 days**.
9. Click **Next**.
10. Add the following required fields:

| Field Name                      | Data Type    | Length | Primary Key | Nullable |
| ------------------------------- | ------------ | ------ | ----------- | -------- |
| JobID                           | Number       | —      | Yes         | No       |
| BatchID                         | Number       | —      | Yes         | No       |
| SubscriberID                    | Number       | —      | Yes         | No       |
| ActionDate                      | Date         | —      | Yes         | No       |
| ActionType                      | Text         | 50     | Yes         | No       |
| EmailAddress                    | EmailAddress | 254    | No          | Yes      |
| EmailID                         | Number       | —      | No          | Yes      |
| TriggererSendDefinitionObjectID | Text         | 50     | No          | Yes      |
| TriggeredSendCustomerKey        | Text         | 50     | No          | Yes      |
| AccountID                       | Number       | —      | No          | No       |
| OYBAccountID                    | Number       | —      | No          | Yes      |

11. Click **Create**.
    {% endstep %}

{% step %}
**Create a SQL Query Activity**

1. Go to **Journey Builder** → **Automation Studio**.
2. Click the **Activities** tab, then **Create Activity**.
3. Select **SQL Query** and click **Next**.
4. Enter the following properties:
   * **Name:** Flip.to Email Performance Data
   * **External Key:** `flipto-email-performance-data`
   * **Description:** Extracts email performance data for Flip.to.
   * **Folder Location:** Create or select the **Flipto** folder.
5. Click **Next**.
6. Paste the following query into the editor:

```sql
SELECT
    JobID = _Sent.JobId,
    BatchID = _Sent.BatchID,
    SubscriberID = _Sent.SubscriberID,
    ActionDate = CAST(_Sent.EventDate AS DATE),
    ActionType = 'send',
    EmailID = _Job.EmailID,
    EmailAddress = _Subscribers.EmailAddress,
    TriggeredSendCustomerKey = _Sent.TriggeredSendCustomerKey,
    TriggererSendDefinitionObjectID = _Sent.TriggererSendDefinitionObjectID,
    AccountID = _Sent.AccountID,
    OYBAccountID = _Sent.OYBAccountID
FROM _Sent
JOIN _Subscribers ON _Sent.SubscriberId = _Subscribers.SubscriberId
LEFT JOIN _Job ON _Sent.JobID = _Job.JobID
CROSS JOIN (
  SELECT
    DATEADD(m,-1,DATEDIFF(d,0,GETDATE())) AS RangeStart,
    DATEADD(d, 0,DATEDIFF(d,0,GETDATE())) AS RangeEnd
) d
WHERE _Sent.EventDate >= d.RangeStart AND _Sent.EventDate < d.RangeEnd
GROUP BY _Sent.JobId, _Sent.BatchID, _Sent.SubscriberID, CAST(_Sent.EventDate AS DATE), _Job.EmailID,
    _Subscribers.EmailAddress, _Sent.TriggeredSendCustomerKey, _Sent.TriggererSendDefinitionObjectID,
    _Sent.AccountID, _Sent.OYBAccountID

UNION ALL

SELECT
    JobID = _Open.JobId,
    BatchID = _Open.BatchID,
    SubscriberID = _Open.SubscriberID,
    ActionDate = CAST(_Open.EventDate AS DATE),
    ActionType = 'open',
    EmailID = _Job.EmailID,
    EmailAddress = _Subscribers.EmailAddress,
    TriggeredSendCustomerKey = _Open.TriggeredSendCustomerKey,
    TriggererSendDefinitionObjectID = _Open.TriggererSendDefinitionObjectID,
    AccountID = _Open.AccountID,
    OYBAccountID = _Open.OYBAccountID
FROM _Open
JOIN _Subscribers ON _Open.SubscriberId = _Subscribers.SubscriberId
LEFT JOIN _Job ON _Open.JobID = _Job.JobID
CROSS JOIN (
  SELECT
    DATEADD(m,-1,DATEDIFF(d,0,GETDATE())) AS RangeStart,
    DATEADD(d, 0,DATEDIFF(d,0,GETDATE())) AS RangeEnd
) d
WHERE _Open.EventDate >= d.RangeStart AND _Open.EventDate < d.RangeEnd
GROUP BY _Open.JobId, _Open.BatchID, _Open.SubscriberID, CAST(_Open.EventDate AS DATE), _Job.EmailID,
    _Subscribers.EmailAddress, _Open.TriggeredSendCustomerKey, _Open.TriggererSendDefinitionObjectID,
    _Open.AccountID, _Open.OYBAccountID

UNION ALL

SELECT
    JobID = _Click.JobId,
    BatchID = _Click.BatchID,
    SubscriberID = _Click.SubscriberID,
    ActionDate = CAST(_Click.EventDate AS DATE),
    ActionType = 'click',
    EmailID = _Job.EmailID,
    EmailAddress = _Subscribers.EmailAddress,
    TriggeredSendCustomerKey = _Click.TriggeredSendCustomerKey,
    TriggererSendDefinitionObjectID = _Click.TriggererSendDefinitionObjectID,
    AccountID = _Click.AccountID,
    OYBAccountID = _Click.OYBAccountID
FROM _Click
JOIN _Subscribers ON _Click.SubscriberId = _Subscribers.SubscriberId
LEFT JOIN _Job ON _Click.JobID = _Job.JobID
CROSS JOIN (
  SELECT
    DATEADD(m,-1,DATEDIFF(d,0,GETDATE())) AS RangeStart,
    DATEADD(d, 0,DATEDIFF(d,0,GETDATE())) AS RangeEnd
) d
WHERE _Click.EventDate >= d.RangeStart AND _Click.EventDate < d.RangeEnd
GROUP BY _Click.JobId, _Click.BatchID, _Click.SubscriberID, CAST(_Click.EventDate AS DATE), _Job.EmailID,
    _Subscribers.EmailAddress, _Click.TriggeredSendCustomerKey, _Click.TriggererSendDefinitionObjectID,
    _Click.AccountID, _Click.OYBAccountID

UNION ALL

SELECT
    JobID = _Bounce.JobId,
    BatchID = _Bounce.BatchID,
    SubscriberID = _Bounce.SubscriberID,
    ActionDate = CAST(_Bounce.EventDate AS DATE),
    ActionType = 'bounce',
    EmailID = _Job.EmailID,
    EmailAddress = _Subscribers.EmailAddress,
    TriggeredSendCustomerKey = _Bounce.TriggeredSendCustomerKey,
    TriggererSendDefinitionObjectID = _Bounce.TriggererSendDefinitionObjectID,
    AccountID = _Bounce.AccountID,
    OYBAccountID = _Bounce.OYBAccountID
FROM _Bounce
JOIN _Subscribers ON _Bounce.SubscriberId = _Subscribers.SubscriberId
LEFT JOIN _Job ON _Bounce.JobID = _Job.JobID
CROSS JOIN (
  SELECT
    DATEADD(m,-1,DATEDIFF(d,0,GETDATE())) AS RangeStart,
    DATEADD(d, 0,DATEDIFF(d,0,GETDATE())) AS RangeEnd
) d
WHERE _Bounce.EventDate >= d.RangeStart AND _Bounce.EventDate < d.RangeEnd
GROUP BY _Bounce.JobId, _Bounce.BatchID, _Bounce.SubscriberID, CAST(_Bounce.EventDate AS DATE), _Job.EmailID,
    _Subscribers.EmailAddress, _Bounce.TriggeredSendCustomerKey, _Bounce.TriggererSendDefinitionObjectID,
    _Bounce.AccountID, _Bounce.OYBAccountID

UNION ALL

SELECT
    JobID = _Unsubscribe.JobId,
    BatchID = _Unsubscribe.BatchID,
    SubscriberID = _Unsubscribe.SubscriberID,
    ActionDate = CAST(_Unsubscribe.EventDate AS DATE),
    ActionType = 'unsubscribe',
    EmailID = _Job.EmailID,
    EmailAddress = _Subscribers.EmailAddress,
    TriggeredSendCustomerKey = null,
    TriggererSendDefinitionObjectID = null,
    AccountID = _Unsubscribe.AccountID,
    OYBAccountID = _Unsubscribe.OYBAccountID
FROM _Unsubscribe
JOIN _Subscribers ON _Unsubscribe.SubscriberId = _Subscribers.SubscriberId
LEFT JOIN _Job ON _Unsubscribe.JobID = _Job.JobID
CROSS JOIN (
  SELECT
    DATEADD(m,-1,DATEDIFF(d,0,GETDATE())) AS RangeStart,
    DATEADD(d, 0,DATEDIFF(d,0,GETDATE())) AS RangeEnd
) d
WHERE _Unsubscribe.EventDate >= d.RangeStart AND _Unsubscribe.EventDate < d.RangeEnd
GROUP BY _Unsubscribe.JobId, _Unsubscribe.BatchID, _Unsubscribe.SubscriberID, CAST(_Unsubscribe.EventDate AS DATE), _Job.EmailID,
    _Subscribers.EmailAddress, _Unsubscribe.AccountID, _Unsubscribe.OYBAccountID
```

7. Click **Validate Syntax** to confirm the query is valid, then click **Next**.
8. Choose the **Flip.to Data Extension** you created in the previous step as the target.
9. Under **Data Action**, select **Update**.
10. Click **Next**, then **Finish**.
    {% endstep %}

{% step %}
**Schedule the query to run daily**

1. Navigate to **Automation Studio** → **Overview**.
2. Click **New Automation**.
3. Drag **Schedule** into the workflow as the starting source.
4. Click **Configure** and set the following:
   * **Start Date:** Tomorrow's date
   * **Start Time:** As early in the morning as possible, ideally before 7am EST
   * **Time Zone:** Your local time zone
   * **Repeat:** Daily, every 1 day
   * **End:** Never
5. Click **Done**.
6. Drag the **SQL Query** activity into the first step of the workflow.
7. Click **Choose** and select the **Flip.to Email Performance Data** query you created in the previous step.
8. Click **Done**.
9. Enter the following details:
   * **Name:** Flipto Daily Email Performance Data Query Schedule
   * **External Key:** `flipto-daily-tracking-data-query-schedule`
   * **Location:** Flipto folder
10. Click **Save**, then **Activate** (this opens a dialog to allow to activate) then **Activate** to begin the daily runs.
    {% endstep %}

{% step %}
**Grant API access**

Flip.to needs API credentials to synchronize your data automatically.

1. Click your name in the top-right corner and select **Setup**.
2. In the left-side navigation, go to **Platform Tools** → **Apps** and select **Installed Packages**.
3. Click **New** and set the package details:
   * **Name:** Flip.to Data Integration
   * **Description:** This is required for passing data to Flip.to.
4. Click **Save**.
5. Click **Add Component**, select **API Integration**, then click **Next**.
6. Select **Server-to-Server** and click **Next**.
7. Enable the following permissions:

| Category     | Collection            | Permission  |
| ------------ | --------------------- | ----------- |
| Channels     | Email                 | Read        |
| Assets       | Documents and Images  | Read        |
| Automation   | Journeys              | Read        |
| Contacts     | Audiences             | Read        |
| Contacts     | Lists and Subscribers | Read        |
| Data         | Data extensions       | Read, Write |
| Data         | Tracking events       | Read        |
| Hub          | Campaigns             | Read        |
| Provisioning | Accounts              | Read        |

8. Click **Save**.
9. Copy the **Client Secret** and store it somewhere safe.

{% hint style="warning" %}
The Client Secret is only shown once. Copy it before you click **Finish**.
{% endhint %}

10. Click **Finish**, then copy the **Client ID**.
11. Open the **Access** tab in the top-left of the Component view.
12. Click **Enable all business units**, then **Enable all**.
13. Note your **Subdomain** — the 28-character string starting with `mc` in your base URIs. For example, in `mc563885gzs27c5t9-63k636ttgm.rest.marketingcloudapis.com`, the subdomain is `mc563885gzs27c5t9-63k636ttgm`.
14. Note your **Parent Business Unit ID (MID)** next to your account name in the top right.
    {% endstep %}

{% step %}
**Activate in Flip.to**

1. Sign into [your Flip.to account](https://manage.flip.to/) and navigate to **Platform → Mission Control** or **Account Settings → Integrations**.
2. Click on **Salesforce Marketing Cloud** in the **Email Marketing** section.
3. Add the **Client ID**, **Client Secret**, and **Subdomain** you copied earlier.
   {% endstep %}
   {% endstepper %}

**Switch on and that's it.** Salesforce Marketing Cloud is now connected and data should start flowing into your Flip.to platform.


# Snippets


# Confirmation email

**Add a banner to your confirmation email to invite guests to share about their stay with friends and family.**

A dynamically generated, linked image can be added to your email template that is unique for each guest and can be easily tweaked from your Flip.to account, including size, messaging and styling.

{% hint style="info" %}
The banner can easily be toggled on or off from your account. If it is turned off, the image will not be displayed and a transparent 1x1 pixel will be served in its place.
{% endhint %}

## Banner code snippet

The basic structure of the snippet to be added is:

```html
<a href=”LinkURL”><img src=”ImageURL” alt=”ImageDescription”/></a>
```

<table data-header-hidden><thead><tr><th width="243"></th><th></th></tr></thead><tbody><tr><td>LinkURL</td><td>Points guests to their share page: <code>https://flip.to/property/confirmation/email/link</code></td></tr><tr><td>ImageURL</td><td>Loads the image asset that invites guests to share about their upcoming trip: <code>https://flip.to/property/confirmation/email/image</code></td></tr><tr><td>ImageDescription</td><td><p>Makes sure your image is screen-reader friendly and compliant with the Americans with Disabilities Act (ADA). Add in the alt attribute directly in the tag.</p><p>We suggest the following alt text for the confirmation email image:</p><p><code>alt=”Share about your upcoming trip with friends and family and they can unlock a special bonus towards a future stay with us.”</code></p></td></tr></tbody></table>

<pre class="language-html" data-title="Sample" data-overflow="wrap"><code class="lang-html">&#x3C;a target="_blank"
<strong>href="https://flip.to/property/confirmation/email/link?companycode=XX&#x26;code=YY&#x26;pmsnumber=12345&#x26;crsnumber=CRS56333&#x26;loyalty=70344&#x26;first=John&#x26;last=Smith&#x26;email=john@flip.to&#x26;startdate=2021-12-14&#x26;enddate=2021-12-16&#x26;type=AB&#x26;ratecode=ABC&#x26;groupCode=Wedding&#x26;promoCode=flipto&#x26;language=en&#x26;currency=USD&#x26;amount=1234.45">
</strong><strong>&#x3C;img src="https://flip.to/property/confirmation/email/image?companycode=XX&#x26;code=YY&#x26;pmsnumber=12345&#x26;crsnumber=CRS56333&#x26;loyalty=70344&#x26;first=John&#x26;last=Smith&#x26;email=john@flip.to&#x26;startdate=2021-12-14&#x26;enddate=2021-12-16&#x26;type=AB&#x26;ratecode=ABC&#x26;groupCode=Wedding&#x26;promoCode=flipto&#x26;language=en&#x26;currency=USD&#x26;amount=1234.45" alt="Share about your upcoming trip with friends and family and they can unlock a special bonus towards a future stay with us."/>
</strong>&#x3C;/a>
</code></pre>

### Parameters

Below are the parameters that should be appended to both the **LinkUrl** and **ImageUrl**. All values should be properly URL encoded.

| Name        | Value                                                                 | Description                                                                                                                                                                                                                                                                                                                   |
| ----------- | --------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| companyCode | <p>Your Flip.to company</p><p>code</p>                                | Please check with your [Customer Success Manager](/docs/support/customer-success) if needed and replace `XX` with your own companyCode.                                                                                                                                                                                       |
| code        | The property code used by your booking engine                         | Replace `YY` with your own property booking engine code.                                                                                                                                                                                                                                                                      |
| crsnumber   | <p>The reservation CRS number,</p><p>if available</p>                 |                                                                                                                                                                                                                                                                                                                               |
| pmsnumber   | The reservation PMS number, if available.                             |                                                                                                                                                                                                                                                                                                                               |
| loyalty     | Guest's loyalty program number, if any                                |                                                                                                                                                                                                                                                                                                                               |
| first       | Guest's first name                                                    |                                                                                                                                                                                                                                                                                                                               |
| last        | Guest's last name                                                     |                                                                                                                                                                                                                                                                                                                               |
| email       | Guest's email address                                                 | In cases that there may be more than one possible email available, this can be populated with a pipe (                                                                                                                                                                                                                        |
| startDate   | Guest’s check-in date                                                 | <p>Dates should be formatted as <strong>yyyy-M-d</strong></p><p>For example: <code>2028-5-15</code> or <code>2028-05-15</code></p>                                                                                                                                                                                            |
| endDate     | Guest’s check-out date                                                | If this is not available please see the nights parameter under advanced configuration below.                                                                                                                                                                                                                                  |
| type        | The guest’s room type, if available                                   | This should include the booking engine internal code, and not the room type description.                                                                                                                                                                                                                                      |
| rateCode    | The guest’s rate code, if available                                   |                                                                                                                                                                                                                                                                                                                               |
| groupCode   | The guest’s group code (or block code), if available                  |                                                                                                                                                                                                                                                                                                                               |
| promoCode   | The guest’s promo code, if available                                  |                                                                                                                                                                                                                                                                                                                               |
| language    | The language ANSI code the guest has used to make the reservation     | <p>For English use <code>en</code>, French <code>fr</code>, etc. Here’s a complete <a href="https://www.loc.gov/standards/iso639-2/php/code_list.php">list of ISO 639-1 language codes</a></p><p>Optionally a culture name can be used as well. For example this can be set to <code>en-US</code> or <code>en\_US</code>.</p> |
| currency    | The 3 character currency code the guest has used to made the purchase | Here's a [complete list of currency codes](https://www.xe.com/currency/). For instance USD for US Dollars.                                                                                                                                                                                                                    |
| amount      | The total amount used for the purchase based on the defined currency  | Amount should be supplied as a valid number including a decimal point if appropriate.                                                                                                                                                                                                                                         |

### Advanced Configuration <a href="#scenarios" id="scenarios"></a>

| Name             | Value                                                                                                                                                       | Description                                                                                                                                                                                                                                                                                        |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| nights           | <p><em>Optional</em></p><p>The number of nights that the guest has stayed at the hotel. This should be set as a number.</p>                                 | If `endDate` is not available, this field can be set to the actual or estimated (i.e. the average night stay) length of guest stay.                                                                                                                                                                |
| dateFormat       | <p><em>Optional</em></p><p>Specifies a different date format for the <code>startDate</code> and <code>endDate</code> parameters.</p>                        | <p>By default dates should be specified as <strong>yyyy-M-d.</strong> However, you can change the default format by entering the appropriate format here.<br></p><p>For example, if dates are entered as <code>12/31/2028</code> the date format to be specified is <strong>M/d/yyyy</strong>.</p> |
| mobile           | <p><em>Optional</em></p><p>Setting to <code>true</code> indicates that the mobile version of the image should be displayed. Default is a desktop image.</p> | This is only supported for the **ImageURL.**                                                                                                                                                                                                                                                       |
| overrideImageUrl | <p><em>Optional</em></p><p>Overrides the default image with a custom image.</p>                                                                             | When using custom images, one should use the https protocol, and might want to create a unique image per language.                                                                                                                                                                                 |


# Pre-arrival email

**Add a banner in your pre-arrival email to introduce guests to the storyteller campaign and view other guests' stories.**

A dynamically generated, linked image can be added to your email template that is unique for each guest and can be easily tweaked from your Flip.to account, including size, messaging and styling.

{% hint style="info" %}
The banner can easily be toggled on or off from your account. If it is turned off, the image will not be displayed and a transparent 1x1 pixel will be served in its place.
{% endhint %}

## Banner code snippet

The basic structure of the snippet to be added is:

```html
<a href=”LinkURL”><img src=”ImageURL” alt=”ImageDescription”/></a>
```

<table data-header-hidden><thead><tr><th width="196"></th><th></th></tr></thead><tbody><tr><td>LinkURL</td><td>Points guests to your story gallery: <code>https://flip.to/property/prestay/email/link</code></td></tr><tr><td>ImageURL</td><td>Loads the image asset that introduces your storyteller campaign: <code>https://flip.to/property/prestay/email/image</code></td></tr><tr><td>ImageDescription</td><td><p>Makes sure your image is screen-reader friendly and compliant with the Americans with Disabilities Act (ADA). Add in the alt attribute directly in the tag.</p><p>We suggest the following alt text for the pre-arrival email image:</p><p><code>alt=”You're invited to our next story contest! Just snap some memorable pics during your stay and we'll email you a few days after checkout with further details on how to submit your entry.”</code></p></td></tr></tbody></table>

{% code title="Sample" overflow="wrap" %}

```html
<a target="_blank" href="https://flip.to/property/prestay/email/link?companycode=XX&code=YY&pmsnumber=12345&crsnumber=CRS56333&loyalty=70344&first=John&last=Smith&email=john@flip.to&startdate=2021-12-14&enddate=2021-12-16&type=AB&ratecode=ABC&groupCode=Wedding&promoCode=flipto&language=en&currency=USD&amount=1234.45">
<img src="https://flip.to/property/prestay/email/image?companycode=XX&code=YY&pmsnumber=12345&crsnumber=CRS56333&loyalty=70344&first=John&last=Smith&email=john@flip.to&startdate=2021-12-14&enddate=2021-12-16&type=AB&ratecode=ABC&groupCode=Wedding&promoCode=flipto&language=en&currency=USD&amount=1234.45" alt="You're invited to our next story contest! Just snap some memorable pics during your stay and we'll email you a few days after checkout with further details on how to submit your entry."/>
</a>
```

{% endcode %}

### Parameters

Below are the parameters that should be appended to both the **LinkUrl** and **ImageUrl**. All values should be properly URL encoded.

| Name        | Value                                                                 | Description                                                                                                                                                                                                                                                                                                                   |
| ----------- | --------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| companyCode | <p>Your Flip.to company</p><p>code</p>                                | Please check with your [Customer Success Manager](/docs/support/customer-success) if needed and replace `XX` with your own companyCode.                                                                                                                                                                                       |
| code        | The property code used by your booking engine                         | Replace `YY` with your own property booking engine code.                                                                                                                                                                                                                                                                      |
| crsnumber   | <p>The reservation CRS number,</p><p>if available</p>                 |                                                                                                                                                                                                                                                                                                                               |
| pmsnumber   | The reservation PMS number, if available.                             |                                                                                                                                                                                                                                                                                                                               |
| loyalty     | Guest's loyalty program number, if any                                |                                                                                                                                                                                                                                                                                                                               |
| first       | Guest's first name                                                    |                                                                                                                                                                                                                                                                                                                               |
| last        | Guest's last name                                                     |                                                                                                                                                                                                                                                                                                                               |
| email       | Guest's email address                                                 | In cases that there may be more than one possible email available, this can be populated with a pipe (                                                                                                                                                                                                                        |
| startDate   | Guest’s check-in date                                                 | <p>Dates should be formatted as <strong>yyyy-M-d</strong><br></p><p>For example <code>2028-5-15</code> or <code>2028-05-15</code></p>                                                                                                                                                                                         |
| endDate     | Guest’s check-out date                                                | If this is not available please see the nights parameter under advanced configuration below.                                                                                                                                                                                                                                  |
| type        | The guest’s room type, if available                                   | This should include the booking engine internal code, and not the room type description.                                                                                                                                                                                                                                      |
| rateCode    | The guest’s rate code, if available                                   |                                                                                                                                                                                                                                                                                                                               |
| groupCode   | The guest’s group code (or block code), if available                  |                                                                                                                                                                                                                                                                                                                               |
| promoCode   | The guest’s promo code, if available                                  |                                                                                                                                                                                                                                                                                                                               |
| language    | The language ANSI code the guest has used to make the reservation     | <p>For English use <code>en</code>, French <code>fr</code>, etc. Here’s a complete <a href="https://www.loc.gov/standards/iso639-2/php/code_list.php">list of ISO 639-1 language codes</a></p><p>Optionally a culture name can be used as well. For example this can be set to <code>en-US</code> or <code>en\_US</code>.</p> |
| currency    | The 3 character currency code the guest has used to made the purchase | Here's a [complete list of currency codes](https://www.xe.com/currency/). For instance USD for US Dollars.                                                                                                                                                                                                                    |
| amount      | The total amount used for the purchase based on the defined currency  | Amount should be supplied as a valid number including a decimal point if appropriate.                                                                                                                                                                                                                                         |

### Advanced Configuration <a href="#scenarios" id="scenarios"></a>

| Name             | Value                                                                                                                                                       | Description                                                                                                                                                                                                                                                                                        |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| nights           | <p><em>Optional</em></p><p>The number of nights that the guest has stayed at the hotel. This should be set as a number.</p>                                 | If `endDate` is not available, this field can be set to the actual or estimated (i.e. the average night stay) length of guest stay.                                                                                                                                                                |
| dateFormat       | <p><em>Optional</em></p><p>Specifies a different date format for the <code>startDate</code> and <code>endDate</code> parameters.</p>                        | <p>By default dates should be specified as <strong>yyyy-M-d.</strong> However, you can change the default format by entering the appropriate format here.<br></p><p>For example, if dates are entered as <code>12/31/2028</code> the date format to be specified is <strong>M/d/yyyy</strong>.</p> |
| mobile           | <p><em>Optional</em></p><p>Setting to <code>true</code> indicates that the mobile version of the image should be displayed. Default is a desktop image.</p> | This is only supported for the **ImageURL.**                                                                                                                                                                                                                                                       |
| overrideImageUrl | <p><em>Optional</em></p><p>Overrides the default image with a custom image.</p>                                                                             | When using custom images, one should use the https protocol, and might want to create a unique image per language.                                                                                                                                                                                 |


# Post-stay email

**Add a banner to your post-stay email to invite guests to share their stories about their stay.**

A dynamically generated, linked image can be added to your email template that is unique for each guest and can be easily tweaked from your Flip.to account, including size, messaging and styling.

{% hint style="info" %}
The banner can easily be toggled on or off from your account. If it is turned off, the image will not be displayed and a transparent 1x1 pixel will be served in its place.
{% endhint %}

## Banner code snippet

The basic structure of the snippet to be added is:

```html
<a href=”LinkURL”><img src=”ImageURL” alt=”ImageDescription”/></a>
```

<table data-header-hidden><thead><tr><th width="196"></th><th></th></tr></thead><tbody><tr><td>LinkURL</td><td>Points guests to their story submission page: <code>https://flip.to/property/poststay/email/link</code></td></tr><tr><td>ImageURL</td><td>Loads the image asset that invites guests to submit their story: <code>https://flip.to/property/poststay/email/image</code></td></tr><tr><td>ImageDescription</td><td><p>Makes sure your image is screen-reader friendly and compliant with the Americans with Disabilities Act (ADA). Add in the alt attribute directly in the tag.</p><p>We suggest the following alt text for the post-stay email image:</p><p><code>alt=”We'd love to hear about a favorite moment from your stay. You can also join fellow guests and enter your story in our story contest!”</code></p></td></tr></tbody></table>

{% code title="Sample" overflow="wrap" %}

```html
<a target="_blank" href="https://flip.to/property/poststay/email/link?companycode=XX&code=YY&pmsnumber=12345&crsnumber=CRS56333&loyalty=70344&first=John&last=Smith&email=john@flip.to&startdate=2021-12-14&enddate=2021-12-16&type=AB&ratecode=ABC&groupCode=Wedding&promoCode=flipto&language=en&currency=USD&amount=1234.45">
<img src="https://flip.to/property/poststay/email/image?companycode=XX&code=YY&pmsnumber=12345&crsnumber=CRS56333&loyalty=70344&first=John&last=Smith&email=john@flip.to&startdate=2021-12-14&enddate=2021-12-16&type=AB&ratecode=ABC&groupCode=Wedding&promoCode=flipto&language=en&currency=USD&amount=1234.45" alt="We'd love to hear about a favorite moment from your stay. You can also join fellow guests and enter your story in our story contest!"/>
</a>
```

{% endcode %}

### Parameters

Below are the parameters that should be appended to both the **LinkUrl** and **ImageUrl**. All values should be properly URL encoded.

| Name        | Value                                                                 | Description                                                                                                                                                                                                                                                                                                                   |
| ----------- | --------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| companyCode | <p>Your Flip.to company</p><p>code</p>                                | Please check with your [Customer Success Manager](/docs/support/customer-success) if needed and replace `XX` with your own companyCode.                                                                                                                                                                                       |
| code        | The property code used by your booking engine                         | Replace `YY` with your own property booking engine code.                                                                                                                                                                                                                                                                      |
| crsnumber   | <p>The reservation CRS number,</p><p>if available</p>                 |                                                                                                                                                                                                                                                                                                                               |
| pmsnumber   | The reservation PMS number, if available.                             |                                                                                                                                                                                                                                                                                                                               |
| loyalty     | Guest's loyalty program number, if any                                |                                                                                                                                                                                                                                                                                                                               |
| first       | Guest's first name                                                    |                                                                                                                                                                                                                                                                                                                               |
| last        | Guest's last name                                                     |                                                                                                                                                                                                                                                                                                                               |
| email       | Guest's email address                                                 | In cases that there may be more than one possible email available, this can be populated with a pipe (                                                                                                                                                                                                                        |
| startDate   | Guest’s check-in date                                                 | <p>Dates should be formatted as <strong>yyyy-M-d</strong><br></p><p>For example: <code>2028-5-15</code> or <code>2028-05-15</code></p>                                                                                                                                                                                        |
| endDate     | Guest’s check-out date                                                | If this is not available please see the nights parameter under advanced configuration below.                                                                                                                                                                                                                                  |
| type        | The guest’s room type, if available                                   | This should include the booking engine internal code, and not the room type description.                                                                                                                                                                                                                                      |
| rateCode    | The guest’s rate code, if available                                   |                                                                                                                                                                                                                                                                                                                               |
| groupCode   | The guest’s group code (or block code), if available                  |                                                                                                                                                                                                                                                                                                                               |
| promoCode   | The guest’s promo code, if available                                  |                                                                                                                                                                                                                                                                                                                               |
| language    | The language ANSI code the guest has used to make the reservation     | <p>For English use <code>en</code>, French <code>fr</code>, etc. Here’s a complete <a href="https://www.loc.gov/standards/iso639-2/php/code_list.php">list of ISO 639-1 language codes</a></p><p>Optionally a culture name can be used as well. For example this can be set to <code>en-US</code> or <code>en\_US</code>.</p> |
| currency    | The 3 character currency code the guest has used to made the purchase | Here's a [complete list of currency codes](https://www.xe.com/currency/). For instance USD for US Dollars.                                                                                                                                                                                                                    |
| amount      | The total amount used for the purchase based on the defined currency  | Amount should be supplied as a valid number including a decimal point if appropriate.                                                                                                                                                                                                                                         |

### Advanced Configuration <a href="#scenarios" id="scenarios"></a>

| Name             | Value                                                                                                                                                       | Description                                                                                                                                                                                                                                                                                        |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| nights           | <p><em>Optional</em></p><p>The number of nights that the guest has stayed at the hotel. This should be set as a number.</p>                                 | If `endDate` is not available, this field can be set to the actual or estimated (i.e. the average night stay) length of guest stay.                                                                                                                                                                |
| dateFormat       | <p><em>Optional</em></p><p>Specifies a different date format for the <code>startDate</code> and <code>endDate</code> parameters.</p>                        | <p>By default dates should be specified as <strong>yyyy-M-d.</strong> However, you can change the default format by entering the appropriate format here.<br></p><p>For example, if dates are entered as <code>12/31/2028</code> the date format to be specified is <strong>M/d/yyyy</strong>.</p> |
| mobile           | <p><em>Optional</em></p><p>Setting to <code>true</code> indicates that the mobile version of the image should be displayed. Default is a desktop image.</p> | This is only supported for the **ImageURL.**                                                                                                                                                                                                                                                       |
| overrideImageUrl | <p><em>Optional</em></p><p>Overrides the default image with a custom image.</p>                                                                             | When using custom images, one should use the https protocol, and might want to create a unique image per language.                                                                                                                                                                                 |


# Cancellation email

**Add a transparent pixel to your cancellation email so your Flip.to platform can detect when any guest cancels their stay.**

A cancellation pixel can be added to your cancellation email template, which allows Flip.to to find the appropriate reservation, flag it as cancelled, and avoid sending any additional emails to the guest beyond that point.

{% hint style="info" %}
When the email is opened by the user, the pixel is loaded and signals your platform to update your records accordingly.
{% endhint %}

## Pixel snippet

The basic structure of the snippet to be added is:

```html
<img src="https://flip.to/property/cancellation/email/image?parameters"/>
```

### Parameters

Below are the URL parameters that should be appended to the image source URL. All values should be properly URL encoded.

| Name        | Value                                                                                                                                | Description                                                                                                                                                                                                                                                                                       |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| companyCode | <p>Your Flip.to company</p><p>code</p>                                                                                               | Please check with your [Customer Success Manager](/docs/support/customer-success) if needed and replace `XX` with your own companyCode.                                                                                                                                                           |
| code        | The property code used by your booking engine                                                                                        | Replace `YY` with your own property booking engine code.                                                                                                                                                                                                                                          |
| crsnumber   | <p>The reservation CRS number,</p><p>if available</p>                                                                                |                                                                                                                                                                                                                                                                                                   |
| pmsnumber   | The reservation PMS number, if available.                                                                                            |                                                                                                                                                                                                                                                                                                   |
| email       | Guest's email address                                                                                                                |                                                                                                                                                                                                                                                                                                   |
| startDate   | Guest’s check-in date                                                                                                                | <p>Dates should be formatted as <strong>yyyy-M-d</strong></p><p>For example: <code>2028-5-15</code> or <code>2028-05-15</code></p>                                                                                                                                                                |
| endDate     | Guest’s check-out date                                                                                                               | <p>Dates should be formatted as <strong>yyyy-M-d</strong></p><p>For example: <code>2028-5-15</code> or <code>2028-05-15</code></p>                                                                                                                                                                |
| dateFormat  | <p><em>Optional</em></p><p>Specifies a different date format for the <code>startDate</code> and <code>endDate</code> parameters.</p> | <p>y default dates should be specified as <strong>yyyy-M-d.</strong> However, you can change the default format by entering the appropriate format here.<br></p><p>For example, if dates are entered as <code>12/31/2028</code> the date format to be specified is <strong>M/d/yyyy</strong>.</p> |

{% code title="Sample" %}

```html
<img src="https://flip.to/property/cancellation/email/image?companycode=XX&code=YY&pmsnumber=12345
&crsnumber=CRS56333&email=john@flip.to&startdate=2014-11-1&enddate=2014-11-2"/>

```

{% endcode %}


# Advertising


# Google Ads

Integrating Google Ads with our platform takes a few clicks right from **Integrations** in your account.

{% hint style="warning" %}
**Before you begin:** you'll need read-only access (at a minimum) to the Google Ads accounts that you'd like to connect.
{% endhint %}

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fjkpi9JUZsAqtdQPgLs0P%2Fadsintegration.png?alt=media&amp;token=4820f7f1-5bab-490d-b8c8-d14321a11c46" alt=""><figcaption></figcaption></figure>

## Connect Google Ads

{% stepper %}
{% step %}
**Head over to Integrations**

Sign into [your Flip.to account](https://manage.flip.to/) and navigate to **Platform → Mission Control** or **Account Settings → Integrations**
{% endstep %}

{% step %}
**Click on Google Ads**

You'll find it in the **Marketing & Ads** section.
{% endstep %}

{% step %}
**Click Connect**

You'll be prompted to sign into your Google account and will then allow access to your Google Ads accounts.
{% endstep %}

{% step %}
**Select your Google Ads accounts**

After you've authorized Flip.to, you'll be prompted to select one or more of the Google Ads accounts that you'd like to connect to our platform.
{% endstep %}
{% endstepper %}

**Click Save and that's it.** Your Google Ads accounts are now connected and data should start flowing into your Flip.to platform in the next 24-48 hours.


# Google DV360

Integrating Google Display & Video 360 with our platform takes a few clicks right from **Integrations** in your account.

{% hint style="warning" %}
**Before you begin:** you'll need read-only access (at a minimum) to the Google DV360 accounts that you'd like to connect.
{% endhint %}

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fjkpi9JUZsAqtdQPgLs0P%2Fadsintegration.png?alt=media&amp;token=4820f7f1-5bab-490d-b8c8-d14321a11c46" alt=""><figcaption></figcaption></figure>

## Connect Google DV360

{% stepper %}
{% step %}
**Head over to Integrations**

Sign into [your Flip.to account](https://manage.flip.to/) and navigate to **Platform → Mission Control** or **Account Settings → Integrations**
{% endstep %}

{% step %}
**Click on DV360**

You'll find it in the **Marketing & Ads** section.
{% endstep %}

{% step %}
**Click Connect**

You'll be prompted to sign into your DV360 account and will then allow access to your DV360 accounts.
{% endstep %}

{% step %}
**Select your DV360 accounts**

After you've authorized Flip.to, you'll be prompted to select one or more of the Google Ads accounts that you'd like to connect to our platform.
{% endstep %}
{% endstepper %}

Click **Save—**&#x6F;ne more thing to do.

## Add tracking parameters to your ads

{% stepper %}
{% step %}
**Head over to your DV360 account**

Sign in to[ your DV360 account](https://displayvideo.google.com/) and go to the **Advertisers** tab.
{% endstep %}

{% step %}
**Download the Structured Data File**

In the upper right corner, click the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAnElEQVR4AeyUMQ6DMAxFQ9rDVL1Kt96kUkEqHeoOsMCEuAMbt0GcBswfWJj8FYnNkSMv337K11diOPk4wDSYtkjq9il1M+NO/6p5mJt3AQ0Iqh1mbrh3zbRHp4oHHNfRc7Qwi5rjFSs4SwjxhU4VDfh9ikG+xUXK/Crle6S2Q0QDoE0qGuApMv31FJkWeYpMizxFpkWpAvqzSwVsAAAA///jWosZAAAABklEQVQDANeGUTEaJ+FTAAAAAElFTkSuQmCC) menu and select **Download SDF**.

If prompted to select the resource types, ensure **Ads** is selected, and then click **Download.**
{% endstep %}

{% step %}
**Edit the file**

Look for a column named something alone the lines of **Landing Page URL Suffix**, and enter `campaignid=${CAMPAIGN_ID}` for all the ads you want to track.
{% endstep %}

{% step %}
**Upload the modified file**

Go to **Advertisers**, click the ![](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAnElEQVR4AeyUMQ6DMAxFQ9rDVL1Kt96kUkEqHeoOsMCEuAMbt0GcBswfWJj8FYnNkSMv337K11diOPk4wDSYtkjq9il1M+NO/6p5mJt3AQ0Iqh1mbrh3zbRHp4oHHNfRc7Qwi5rjFSs4SwjxhU4VDfh9ikG+xUXK/Crle6S2Q0QDoE0qGuApMv31FJkWeYpMizxFpkWpAvqzSwVsAAAA///jWosZAAAABklEQVQDANeGUTEaJ+FTAAAAAElFTkSuQmCC) menu and select **Upload**.
{% endstep %}
{% endstepper %}

**And that's it.** Your DV360 accounts are now connected and data should start flowing into your Flip.to platform in the next 24-48 hours.

<br>


# Microsoft Advertising

Integrating Microsoft Advertising with our platform takes a few clicks right from **Integrations** in your account.

{% hint style="warning" %}
**Before you begin:** you'll need access to the Microsoft Ads accounts that you'd like to connect.

If you have a Microsoft work account, you may also need a Global Admin on your team to grant you these permissions—[here's how](/docs/integrations/advertising/microsoft-advertising/permissions-for-a-microsoft-work-account).
{% endhint %}

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fjkpi9JUZsAqtdQPgLs0P%2Fadsintegration.png?alt=media&amp;token=4820f7f1-5bab-490d-b8c8-d14321a11c46" alt=""><figcaption></figcaption></figure>

## Connect Microsoft Ads

{% stepper %}
{% step %}
**Head over to Integrations**

Sign into [your Flip.to account](https://manage.flip.to/) and navigate to **Platform → Mission Control** or **Account Settings → Integrations**
{% endstep %}

{% step %}
**Click on Microsoft Ads**

You'll find it in the **Marketing & Ads** section.
{% endstep %}

{% step %}
**Click Connect**

You'll be prompted to sign into your Microsoft account and will then allow access to your Microsoft Ads accounts.

* **If you're using a Microsoft work account**, you may be prompted for approval. After you request approval, wait for the approval email and come back to this step. (Make sure you chase after your admin to approve it.)
* **If you don't have permission**, you may also need a Global Admin on your team to grant you these permissions—[here's how](/docs/integrations/advertising/microsoft-advertising/permissions-for-a-microsoft-work-account).
  {% endstep %}

{% step %}
**Select your Microsoft Ads accounts**

After you've authorized Flip.to, you'll be prompted to select one or more of the Microsoft Ads accounts that you'd like to connect to our platform.
{% endstep %}
{% endstepper %}

**Click Save** — one more thing to do.

## Add tracking parameters to your ads

{% stepper %}
{% step %}
**Head over to Microsoft Ads**

Sign into [your Microsoft Ads account](https://ads.microsoft.com/) and from the navigation menu on the left, go to **Campaigns → Settings → Account** **level options.**
{% endstep %}

{% step %}
**Add tracking parameters**

In the **Tracking** **template**, enter **`{lpurl}?adid={AdId}`**

Click **Save** at the bottom of the page.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2F00rksjB60yMGFVb0NJ10%2Fmicrosoft%20ad%20configuration.png?alt=media&amp;token=65e74d96-7887-4ff9-ae85-3bf0f9f322ca" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

**And that's it.** Your Microsoft Ads accounts are now connected and data should start flowing into your Flip.to platform in the next 24-48 hours.


# Permissions for a Microsoft work account

When using a Microsoft work account, you need to have the right permissions to set up the Microsoft Advertising integration with Flip.to.

## Configuring the permissions

If you're a Global Administrator, sign into your company's [Microsoft Entra admin center](https://entra.microsoft.com/). Otherwise send these instructions over to your Global Administrator.

{% stepper %}
{% step %}
**Set up your user consent settings**

Go to **Entra ID** → **Enterprise applications** → **Consent and permissions**

Under the **User consent settings**, select the option: **Let Microsoft manage your consent settings.**
{% endstep %}

{% step %}
**Set up your admin consent settings**

Under the **Admin consent settings**, switch **Users can request admin consent to apps they are unable to consent** **to** to **Yes**.

Define the users, groups, and roles that will be allowed to approve these requests.
{% endstep %}

{% step %}
**Click Save.**
{% endstep %}
{% endstepper %}

Once this is configured, head back to [the instructions for integrating Microsoft Advertising with Flip.to.](/docs/integrations/advertising/microsoft-advertising)


# Microsoft Advertising Account Permissions

When setting up the Microsoft Advertising integration with Flip.to, you must ensure your Microsoft account has the correct identity type and permissions level.

## Troubleshooting Common Errors

### Error: **Microsoft sign-in identity mismatch**

This error occurs when the Microsoft account you are currently signed into does not match the identity type expected by Microsoft Advertising. This is most commonly caused by users who were originally added to the Microsoft Advertising portal using **Google Sign-In**.

To fix this mismatch:

{% hint style="warning" %}
**Admin Action Required:** You will need a Microsoft Advertising account administrator to perform steps 1 and 2.&#x20;
{% endhint %}

1. **Remove Access:** An admin must remove your user/email access from the [Microsoft Advertising admin portal](https://ads.microsoft.com).
2. **Re-invite User:** The admin should invite your email address back with the correct permissions.
3. **Accept Invitation:** Accept the invite and create/sign in to your user as a **Personal account**.
   * **Crucial**: Do not use the "Google Sign-In" option during this setup.
4. **Re-authorize:** Return to the Flip.to dashboard and re-authorize the connection.

{% hint style="info" %}
Still seeing the error? If you did not use Google Sign-In, you may be using the wrong "Identity Type" for your email. If you signed in with a Personal account but the user was added as a Work/School account (or vice versa), try signing in again with the alternative identity type.&#x20;
{% endhint %}

***

## Required Permission Levels

To successfully authorize the integration, your Microsoft Advertising user must have one of the following roles:

* **Super Admin:** Full access to all accounts.
* **Standard User:** Access to manage campaigns and view reports.

Users with "Advertiser Campaign Manager" or "Viewer" roles may experience issues during the authorization process.

## Using a Work or School Account

If your organization uses Microsoft 365 or Azure Active Directory, you likely have a **Work or School account.**

When authorizing:

1. Select **Work or school account** on the Microsoft sign-in screen.
2. If your organization has strict IT policies, an Azure AD administrator may need to grant "Admin Consent" for the Flip.to application to access your advertising data.

***

Once you've troubleshooted, head back to [the instructions for integrating Microsoft Advertising with Flip.to.](/docs/integrations/advertising/microsoft-advertising)


# Meta Ads

Integrating Meta Ads with our platform takes a few steps to get going.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fjkpi9JUZsAqtdQPgLs0P%2Fadsintegration.png?alt=media&amp;token=4820f7f1-5bab-490d-b8c8-d14321a11c46" alt=""><figcaption></figcaption></figure>

## First, create a Meta System User token

{% stepper %}
{% step %}
**Create a Meta App**

Visit [Meta Business Suite](https://business.facebook.com/) and navigate to **Settings** → **Accounts** → **Apps**.

Click **Add**, select **Create a new app ID** and click **Create App**.

Now let's set the app up:

* Set the app name to **Flip.to Integration** and click **Next**.
* Select an app use case: If you see **Measure ad performance data with Marketing API**, choose that. Otherwise, select **Other** and choose **Business** as the app type (you will add the Marketing API as a product in the next step).
* Select your Meta Business Portfolio and click **Next**.

**Verify Marketing API:** Once the app is created, ensure the **Marketing API** is listed under the "Products" section in your app dashboard. If it isn't, click **Add Product** and select **Marketing API**.
{% endstep %}

{% step %}
**Publish your App (Live)**

* Navigate to **Settings** → **Apps.**
* Select the **Flip.to Integration** app
* Click on the **⋯** menu on the left hand side, and select **Open in App Dashboard**
* Navigate to **App Settings** → **Basic**
* Enter the **Privacy policy URL** from your website.
* Navigate to **Publish**, and Click the **Publish** button.
  {% endstep %}

{% step %}
**Create a Meta System User to your App**

Navigate to **Settings** → **Users** → **System Users.**

If you don't have an existing System User, click **Add**, and set the user up:

* Set the user name to **Flipto\_Integration\_User**.
* Set the role to **Employee** and click **Create System User**
  {% endstep %}

{% step %}
**Assign Assets to the Meta System User**

Select the existing or newly created System User from the list.

* Select **Assign assets** from the ⋯ menu (or the **Assign Assets** button on the main pane).
* On Apps, select the newly created App
* On the **Select assets and assign permissions** screen:
  * Select **Apps** from the left-hand menu.
    * Check the **Flip.to Integration** app
    * **Set Permissions:** Under **Full Control**, make sure the Can manage roles, change app settings, test the app, and view analytics toggle is **ON**.
  * Select **Ad account** from the left-hand menu.
    * Choose the specific ad account(s) you want to integrate with Flip.to.
    * **Set Permissions:** Under **Partial access**, make sure the **View Performance** toggle is **ON**.
* Click **Save Changes** or **Assign assets**.
  {% endstep %}

{% step %}
**Create your Meta System User token**

On the System User details page, click **Generate token**.

* Select your **Flip.to Integration** app and click **Next**.
* Set **Token expiration** to **Never** (recommended to prevent integration breaks) and click **Next**.
* **Select Permissions:** Instead of the default, ensure the following two permissions are checked:
  * `ads_read`
* Click **Generate Token**.
* **Copy and Save**: Copy this token immediately. You will need to paste this into your Flip.to account, and Meta will not show it to you again.
  {% endstep %}
  {% endstepper %}

## Next, connect Meta Ads to our platform

{% stepper %}
{% step %}
**Head over to Integrations**

Sign into [your Flip.to account](https://manage.flip.to/) and navigate to **Platform → Mission Control** or **Account Settings → Integrations**.
{% endstep %}

{% step %}
**Click on Meta Ads**

You'll find it in the **Marketing & Ads** section.
{% endstep %}

{% step %}
**Click Add your Meta System User token**

You'll be prompted to add your Meta System User token, which will then allow access to your Meta Ads accounts.
{% endstep %}

{% step %}
**Select your Meta Ads accounts**

After you've authorized Flip.to, you'll be prompted to select one or more of the Meta Ads accounts that you'd like to connect to our platform.
{% endstep %}
{% endstepper %}

## Last up, add tracking parameters to your ads

{% stepper %}
{% step %}
**Head over to Meta Ads**

Sign in to [your Meta Ads account](https://www.facebook.com/business/tools/ads-manager) and go to the **Ads** tab.
{% endstep %}

{% step %}
**Add tracking parameters**

If you have multiple active ads and want to add tracking in one go, be sure to select each of the ads or click the checkbox at the top to select all of the ads at once.\
\
Then click **Edit.**

In **URL Parameters**, add `adid={{ad.id}}` and click **Publish**.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fdh91UlqVPddhZfSp8YUU%2Fmeta%20ad%20configuration.png?alt=media&amp;token=c8b14d2a-2541-486e-9b2f-f98e938bd50f" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

**And that's it.** Your Meta Ads accounts are now connected and data should start flowing into your Flip.to platform in the next 24-48 hours.


# Alternative approach for Meta Ads

Integrating Meta Ads with our platform takes a few clicks to get going.

We recommend [authorizing the integration with a **Meta** **System User**](/docs/integrations/advertising/meta-ads), which requires access to Meta Business Manager.

Below is the **alternative approach** connecting with your Meta profile account, which requires you to reauthorize access every 30 days.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fjkpi9JUZsAqtdQPgLs0P%2Fadsintegration.png?alt=media&amp;token=4820f7f1-5bab-490d-b8c8-d14321a11c46" alt=""><figcaption></figcaption></figure>

## Connect Meta Ads

{% stepper %}
{% step %}
**Head over to Integrations**

Sign into [your Flip.to account](https://manage.flip.to/) and navigate to **Platform → Mission Control** or **Account Settings → Integrations**
{% endstep %}

{% step %}
**Click on Meta Ads**

You'll find it in the **Marketing & Ads** section.
{% endstep %}

{% step %}
**Switch your option to Connect with your Meta profile account**

You'll be prompted to sign into your Meta account and will then allow access to your Meta Ads accounts.
{% endstep %}

{% step %}
**Select your Meta Ads accounts**

After you've authorized Flip.to, you'll be prompted to select one or more of the Meta Ads accounts that you'd like to connect to our platform.
{% endstep %}
{% endstepper %}

**Click Save** — one more thing to do.

## Add tracking parameters to your ads

{% stepper %}
{% step %}
**Head over to Meta Ads**

Sign in to [your Meta Ads account](https://www.facebook.com/business/tools/ads-manager) and go to the **Ads** tab.
{% endstep %}

{% step %}
**Add tracking parameters**

For every ad you're aiming to track , select the ad and click **Edit.**

In **URL Parameters**, add `adid={{ad.id}}` and click **Publish**.

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fdh91UlqVPddhZfSp8YUU%2Fmeta%20ad%20configuration.png?alt=media&amp;token=c8b14d2a-2541-486e-9b2f-f98e938bd50f" alt=""><figcaption></figcaption></figure>
{% endstep %}
{% endstepper %}

**And that's it.** Your Meta Ads accounts are now connected and data should start flowing into your Flip.to platform in the next 24-48 hours.


# TikTok Ads

Integrating TikTok Ads with our platform takes a few clicks right from **Integrations** in your account.

{% hint style="warning" %}
You will need **Admin** or **Operator** permissions for the TikTok Business Center that owns the ad accounts.

**Pro Tip:** Ensure you are already logged into the correct TikTok Business account in your current browser tab before clicking "Connect" to avoid authorization errors.
{% endhint %}

<figure><img src="https://639029760-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F8PYvV9n7ZxZ5iS2rITSl%2Fuploads%2Fjkpi9JUZsAqtdQPgLs0P%2Fadsintegration.png?alt=media&amp;token=4820f7f1-5bab-490d-b8c8-d14321a11c46" alt=""><figcaption></figcaption></figure>

## Connect TikTok Ads

{% stepper %}
{% step %}
**Head over to Integrations**

Sign into [your Flip.to account](https://manage.flip.to/) and navigate to **Platform → Mission Control** or **Account Settings → Integrations**
{% endstep %}

{% step %}
**Click on TikTok Ads**

You'll find it in the **Marketing & Ads** section.
{% endstep %}

{% step %}
**Click Connect**

A TikTok authorization window will appear.

* **Login:** Ensure you log in with your TikTok For Business credentials (not your personal TikTok profile).
* **Authorize:** You will be asked to grant Flip.to permissions to access your ad performance data. Review the list and click **Confirm** or **Authorize**.

{% hint style="info" %}
Flip.to only requires "Read" access to your data to pull performance insights. We will never post to your TikTok account or edit your ads.
{% endhint %}
{% endstep %}

{% step %}
**Select your TikTok Ads accounts**

After you've authorized Flip.to, you'll be prompted to select one or more of the TikTok Ads accounts that you'd like to connect to our platform.

{% hint style="warning" %}
**Don't see your account?** If your ad account is missing from the list, it is usually because your TikTok user profile has "Member" access instead of "Admin/Operator" access. Verify your permissions in the TikTok Business Center.
{% endhint %}
{% endstep %}
{% endstepper %}

**Click Save** — one more thing to do.

## Add tracking parameters to your ads

{% stepper %}
{% step %}
**Head over to TikTok Ads**

Sign in to [your TikTok Ads Manager portal](https://ads.tiktok.com/business/en-US/solutions/ads-manager) and go to the **Campaign** tab. Drill down to the **Ad** level.

Below is the breakdown of how TikTok data is mapped to your analytics:

<table><thead><tr><th width="174.05078125">Parameter</th><th width="208.6796875">TikTok Macro</th><th>Purpose</th></tr></thead><tbody><tr><td><code>utm_campaign</code></td><td><code>__CAMPAIGN_NAME__</code></td><td>The human-readable name of your campaign (e.g., "Spring_Launch_2026").</td></tr><tr><td><code>utm_id</code></td><td><code>__CAMPAIGN_ID__</code></td><td>The unique Campaign ID for backend attribution.</td></tr><tr><td><code>utm_content</code></td><td><code>__CID_NAME__</code></td><td>The name of your ad creative (e.g., "User_Testimonial_V2").</td></tr><tr><td><code>tt_adgroup</code></td><td><code>__AID__</code></td><td>The Ad Group ID, used for grouping ads by targeting strategy.</td></tr><tr><td><code>tt_adid</code></td><td><code>__CID__</code></td><td>The unique Creative ID for granular ad-level tracking.</td></tr><tr><td><code>tt_adid_smart</code></td><td><code>__ADID_V2__</code></td><td>The Ad ID used in Smart+ campaigns (empty for standard campaigns).</td></tr><tr><td><code>tt_placement</code></td><td><code>__PLACEMENT__</code></td><td>Tracks if traffic came from TikTok Feed, Search, or Pangle.</td></tr></tbody></table>

{% hint style="info" %}
**Smart+ Campaigns:** The `tt_adid_smart` parameter captures the Ad-level ID unique to TikTok's upgraded Smart+ campaign structure. For standard campaigns, this parameter will be empty.
{% endhint %}
{% endstep %}

{% step %}
**Configure URL parameters**

**Step 1: Ad Level Configuration**

Tracking parameters must be applied at the **Ad Level** in TikTok Ads Manager.

1. Scroll to the bottom of the ad creation page to the **Destination page** section.
2. Locate the **URL** text box.
3. Delete all existing URL parameters.
   1. To do this, delete everything starting from and including the question mark (`?`) to the very end of the link.
   2. *Example:* If your URL is `https://overlookhotel.com?utm_source=tiktok&utm_medium=paid`, delete the `?utm_source=tiktok&utm_medium=paid` portion. Your URL should now look exactly like this: `https://overlookhotel.com`
4. Paste the exact string provided below directly onto the end of your clean destination URL

```
?utm_source=tiktok&utm_medium=paid&utm_campaign=__CAMPAIGN_NAME__&utm_id=__CAMPAIGN_ID__&utm_content=__CID_NAME__&tt_adgroup=__AID__&tt_adid=__CID__&tt_adid_smart=__ADID_V2__&tt_placement=__PLACEMENT__
```

{% hint style="warning" %}
Do not include a `?` at the beginning if you are using the dedicated "URL Parameters" box; TikTok appends it automatically.

**Case Sensitivity**: Macros must be in ALL CAPS. `__cid__` will fail; it must be `__CID__`.

**Double Underscores**: Ensure there are exactly two underscores before and after each macro name.
{% endhint %}

{% hint style="info" %}
**Existing ads:** To apply these parameters to ads that are already running, navigate to the **Ad** tab, click **Edit** on the ad, and paste the same string into the Tracking module. Note that editing a running ad will trigger TikTok's re-review process and restart the learning phase.
{% endhint %}

**Step 2: Disable Auto-UTMs**

TikTok offers a "URL Auto-attach" feature that automatically appends generic UTM values (e.g., `utm_source=tiktok`, `utm_medium=paid`). For Flip.to integrations, it is highly recommended to **toggle this OFF**.

{% hint style="info" %}
TikTok's documentation recommends enabling Auto-attach for general use. We recommend disabling it specifically because Flip.to's integration uses custom macro-based parameters that provide more granular tracking than the auto-generated defaults.
{% endhint %}

**Step 3: Verify the Macro**

After pasting your URL, click the **Preview** button in TikTok Ads Manager.

You should see the macro names (e.g., `__CID__`) in the URL.

{% hint style="info" %}
The preview will not show your real Ad ID yet; it will only show the placeholder to confirm the code is recognized.
{% endhint %}
{% endstep %}
{% endstepper %}

**And that's it.** Once connected and tracking parameters are in place, TikTok campaign performance data will begin flowing into Spacetime in the next 24-48 hours.


# Reddit Ads

This is a working draft for this integration.

Integrating Reddit Ads with our platform takes a few clicks to get going.

You'll need access to [Reddit Ads Manager](https://ads.reddit.com/) and a **Conversion Access Token**, which you'll generate in your Reddit account.

{% hint style="info" %}
Reddit allows only **one Pixel per ad account**. If you manage multiple brands, you may need separate Reddit ad accounts for each.
{% endhint %}

## First, generate a Reddit Ads Conversion Access Token

{% stepper %}
{% step %}
**Find your Pixel ID**

Visit [Reddit Ads Manager](https://ads.reddit.com/) and navigate to **Events Manager** in the left-hand menu.

Your **Pixel ID** is displayed at the top of the page. Copy this down — you'll need it when connecting to Flip.to.
{% endstep %}

{% step %}
**Generate a Conversion Access Token**

In the Events Manager, click on the **Conversions API** tab.

Click **Generate Access Token**, give it a name (e.g., `Flip.to Integration`), and click **Generate**.

Copy this token immediately — you'll need to paste it into your Flip.to account.

(This token does not expire, so you only need to go through this process once.)
{% endstep %}
{% endstepper %}

## Next, connect Reddit Ads to our platform

{% stepper %}
{% step %}
**Head over to Integrations**

Sign into [your Flip.to account](https://manage.flip.to/) and navigate to **Platform → Mission Control** or **Account Settings → Integrations**.
{% endstep %}

{% step %}
**Click on Reddit Ads**

You'll find it in the **Marketing & Ads** section.
{% endstep %}

{% step %}
**Add your Reddit Ads credentials**

You'll be prompted to add your **Pixel ID** and **Conversion Access Token**, which will then allow access to your Reddit Ads account.
{% endstep %}

{% step %}
**Select your Reddit Ads account**

After you've authorized Flip.to, you'll be prompted to confirm the Reddit Ads account that you'd like to connect to our platform.
{% endstep %}
{% endstepper %}

{% hint style="info" %}
**Event deduplication:** If you're using both the Reddit Pixel (browser-side) and the Conversions API (server-side), Reddit will double-count conversions unless a unique `conversion_id` is sent with each event from both sources. Our platform handles this automatically — just make sure you haven't disabled deduplication in your Reddit Events Manager settings.
{% endhint %}

## Last up, add tracking parameters to your ads

To tie behavioral data back to your campaigns, you must add dynamic macros to your Reddit Ads.

{% stepper %}
{% step %}
**Head over to Reddit Ads**

Sign in to [your Reddit Ads account](https://ads.reddit.com/) and go to the **Ads** tab.
{% endstep %}

{% step %}
**Add tracking parameters**

For every ad you're aiming to track, select the ad and click **Edit**.

In the **URL Parameters** field, add:

```
rdt_cid={rdt_cid}&ad_id={{AD_ID}}&campaign_id={{CAMPAIGN_ID}}
```

Click **Save**.
{% endstep %}
{% endstepper %}

{% hint style="danger" %}
**Before you publish:** Reddit does not allow you to edit URL parameters after an ad goes live. Double-check your parameters before hitting **Publish**. If you need to make a correction, you'll have to create a new ad (or duplicate the existing one and fix the parameters on the copy).\
\
**Important:** Note the difference in macro syntax — `{rdt_cid}` uses single curly braces, while `{{AD_ID}}` and `{{CAMPAIGN_ID}}` use double curly braces. Mixing these up is the most common cause of tracking failure on Reddit.
{% endhint %}

{% hint style="info" %}
**Tip:** Reddit doesn't offer an account-level or campaign-level setting to apply custom URL parameters globally — they're set per ad. However, when you **duplicate an ad**, your tracking parameters carry over automatically. Set your parameters once on your first ad, then duplicate it for any variations.\
\
**Using Automated Ad Creation (AAC)?** If you're using Reddit's AAC feature to generate ad variations, your URL and tracking parameters are inherited from the ad group level — so any ads Reddit creates automatically will already include your tracking. Just make sure you've set the correct parameters on the ad group before enabling AAC.
{% endhint %}

**And that's it.** Your Reddit Ads account is now connected and data should start flowing into your Flip.to platform.

### Verify your setup

To confirm everything is working, use Reddit's **Event Testing** tool:

1. In Reddit Ads Manager, navigate to **Events Manager → Test Events**.
2. Click through one of your live ad links (or use the preview URL).
3. Verify that your `rdt_cid`, `ad_id`, and `campaign_id` parameters appear in the incoming event data.

If events aren't showing up, double-check that your URL parameters are formatted correctly and that your Conversion Access Token is active.


# MNTN (Connected TV)

This is a working draft for this integration.

Integrating MNTN with Spacetime allows you to track Connected TV (CTV) performance alongside your other marketing channels. Since CTV ads are viewed on a television and aren't clickable, MNTN relies on **Verified Visits** — a view-through attribution model that matches TV ad exposure to subsequent website activity using IP-based signals.

***

### How It Works

MNTN attribution differs from search and social ad platforms in a few important ways:

* **No click-through tracking.** TV ads can't be clicked, so MNTN uses server-side webhooks (VISTA Tags) to notify Spacetime when a verified visit occurs after ad exposure.
* **IP-based matching.** MNTN identifies visitors by correlating the IP address from the TV impression with the IP address of the subsequent website visit. This is effective for most residential traffic, though match rates may be lower in environments with shared IPs (e.g., corporate networks or hotel lobbies) or VPN usage.
* **Clickable display ads.** MNTN also supports "Multi-Touch" display and interactive ad formats that do support click tracking via URL macros.

***

### Prerequisites

* An active MNTN account with API access enabled
* Admin access to your Spacetime property
* Access to the **Creative Tracking** settings in your MNTN account

***

### 1. Connect Your Reporting API Key

MNTN uses a static Reporting API Key for authentication — no OAuth flow or token refresh is required.

1. Sign in to your [MNTN account](https://mountain.com/).
2. From the account dropdown in the top-right corner, select **My Account**.
3. In the left navigation pane, select the **API** tab.
4. Copy your **Reporting API Key**.
5. In your Flip.to platform, go to **Platform → Mission Control → Integrations → MNTN** and paste the key into the **API Key** field.
6. Click **Save**.

{% hint style="info" %}
Your API key does not expire. Spacetime uses it to perform automated daily syncs of your campaign spend and performance metrics.

**API Version:** MNTN has transitioned to API 3.0. Spacetime connects to `api3.mountain.com` for improved performance and data granularity. If you encounter issues with legacy API endpoints (`api.mountain.com`), confirm your account has been migrated to API 3.0 in your MNTN account settings.
{% endhint %}

***

### 2. Set Up VISTA (Verified Visit) Tracking

VISTA Tags are the primary attribution mechanism for CTV. When MNTN detects that a user visited your site after being exposed to a TV ad, it fires a server-side webhook to Spacetime with the visitor's IP and campaign metadata.

1. In your Flip.to platform, go to **Platform → Mission Control → Integrations → MNTN** and copy your unique **Webhook Listener URL**.
2. In the MNTN platform, navigate to **My Account → Creative Tracking**.
3. Locate the **Default Macro-Enabled Visit Tracking** section.
4. Paste your Spacetime Webhook URL and append the required macros:

```
https://spacetime.flip.to/webhook?mntn_campaign_id=${cagid}&mntn_ad_id=${crid}&ip_address=${ip}
```

5. Click **Save Changes**.

#### Data Freshness & Attribution Delay

VISTA webhooks are fired in near real-time as verified visits are detected. However, MNTN's Cross-Device matching — which correlates a TV impression on one device with a website visit on another (e.g., TV ad → mobile visit) — typically takes **2–5 minutes** to complete. During initial testing, this is normal and does not indicate a configuration problem.

Daily reporting data synced via the API typically reflects the prior day's finalized activity.

***

### 3. Add URL Macros for Clickable Ads

For Multi-Touch display or interactive ads that support clicks, add tracking parameters to your destination URL so Spacetime can attribute the visit to the correct campaign.

1. Go to the **Tracking Parameters** section of your MNTN ad.
2. In the **Visit URL** field, append your parameters using the `${macro}` syntax:

```
utm_source=mntn&mntn_campaign_id=${cagid}&mntn_ad_id=${crid}
```

{% hint style="info" %}
**Syntax Note:** MNTN macros use a dollar sign and curly braces `${macro}`. The double-brace format `{{macro}}` used by other platforms will not work.\
\
**Don't include a leading `?`** — MNTN's Visit Tracking field automatically appends a `?` to the destination URL before your parameters. Starting your string with `?` will result in a malformed URL (`??utm_source=...`). Enter your parameters starting directly with the first key (e.g., `utm_source=mntn...`).
{% endhint %}

#### Available Macros

| Data Point        | Macro      | Description                                  |
| ----------------- | ---------- | -------------------------------------------- |
| **Campaign ID**   | `${cagid}` | Unique ID for the MNTN campaign              |
| **Creative ID**   | `${crid}`  | Unique ID for the specific ad creative       |
| **Advertiser ID** | `${aid}`   | Unique ID for your MNTN account              |
| **IP Address**    | `${ip}`    | Visitor IP (required for CTV visit matching) |

***

### 4. Enable Conversion Matching <mark style="color:$info;">(Optional)</mark>

{% hint style="info" %}
This step is optional but recommended for properties that want to tie CTV exposure directly to booking revenue.
{% endhint %}

For properties that track direct bookings, MNTN can match specific transactions back to TV ad impressions using an `order_id` field. This enables revenue attribution in both Spacetime and MNTN reporting.

1. Ensure your MNTN conversion pixel includes the `order_id` parameter, populated with your booking confirmation or transaction ID.
2. Spacetime will reconcile these `order_id` values against on-site conversion events to provide accurate revenue attribution for your CTV campaigns.

***

### API Rate Limits

The MNTN Reporting API does not publish strict rate limits, but Spacetime's daily sync cadence is well within normal usage thresholds. If you manage a large number of properties under a single MNTN account, Spacetime batches requests to avoid excessive API calls.

***

### Troubleshooting

#### Low verified visit match rates

IP-based matching works best with residential internet connections. If your property sees high traffic from corporate networks, hotel WiFi, or VPN users, expect lower match rates. This is a known limitation of CTV attribution and not specific to the Spacetime integration.

#### Webhook data not appearing

* Verify that the Webhook Listener URL in MNTN exactly matches the URL shown in **Platform → Mission Control → Integrations → MNTN**.
* Confirm that all three required macros (`${cagid}`, `${crid}`, `${ip}`) are present in the URL.
* Check that the VISTA tag is saved under **Default Macro-Enabled Visit Tracking**, not a campaign-specific override.
* **Allow 2–5 minutes during testing.** Cross-Device matching introduces a short attribution delay before verified visits appear. If data still hasn't arrived after 10 minutes, check the URL configuration above.

#### Reporting data delayed

Daily reporting syncs pull the prior day's finalized data. If you recently connected your API key, the first sync will occur within 24 hours.


# Introduction

The Flip.to API is organized around REST. It is a standards-based API that has predictable resource-oriented URLs, accepts form-encoded request bodies, returns JSON-encoded responses, and uses standard HTTP response codes, authentication, and verbs.

## API Authorization

All requests must be authorized with an API Key that is available in your Flip.to account. It should be sent using basic authentication as the “username” with no password. For example, if the key were “nevergoingtogiveyouup:”, the requests would need a header like this in base64:

```
Authorization: Basic bmV2ZXJnb2luZ3RvZ2l2ZXlvdXVwOg==
```


# Reference


# Platform API

## Discovery

### Discovery planners

Provides data for planners who started planning within a specified date range.

<mark style="color:green;">`POST`</mark> `https://api.flip.to/v1/company/data/discovery/planners`

#### Query Parameters

| Name                                        | Type   | Description                                                                                                                                                                |
| ------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| startdate<mark style="color:red;">\*</mark> | String | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2022-09-18)                                                                                                 |
| enddate<mark style="color:red;">\*</mark>   | String | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2022-10-18)                                                                                                 |
| page                                        | String | The page number of the data to consume. If a page isn't specified, page should be set to 1.                                                                                |
| pagesize                                    | String | <p>The total number of records to send for each page</p><p>Page size cannot exceed 500 records at a time, and if not specified, the default value would be set to 100.</p> |

#### Request Body

| Name                  | Type    | Description                                                                                                                             |
| --------------------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| discoveries\[]        | String  | An array of discovery IDs to limit results to. If no discoveries are specified, all discoveries the key has access to will be returned. |
| isIncludeReservations | Boolean | Indicates whether to include the plan's associated reservations.                                                                        |
| isIncludeRestricted   | Boolean | Indicates whether to include restricted (GDPR) data.                                                                                    |
| isIncludeGuests       | Boolean | Indicate whethers to include guests planners.                                                                                           |
| isIncludeOptout       | Boolean | Indicate whether to include planners who have chosen to opt-out.                                                                        |

#### Example

{% tabs %}
{% tab title="Response" %}

```json
{
  "total": 1669,
  "page": 1,
  "planners": [
    {
      "discoveryName": "www.overlookhotel.com",
      "plannerId": "1D5892B3-48A9-3102-BED1-32BC97AAF577",
      "createDate": "2022-01-01T17:36:58.4478437",
      "email": "james@gmail.com",
      "first": "James",
      "languageCode": "en",
      "isBooked": true,
      "isUninterested": false,
      "isPrivacyRestricted": false,
      "isOptout": false,
      "activePlan": {
        "propertyId": "1234DF43-C41C-442F-804C-1234A7952738",
        "propertySlug": "overlook-hotel",
        "adults": 2,
        "children": 0,
        "beds": null,
        "rooms": 1,
        "arrival": "2022-01-01",
        "departure": "2022-01-02",
        "promo": null
      },
      "reservations": [
        {
          "propertyId": "1234DF43-C41C-442F-804C-1234A7952738",
          "propertySlug": "overlook-hotel",
          "createDate": "2022-01-02T04:14:00",
          "pmsNumber": "161000",
          "crsNumber": "10622SC40",
          "email": "james@flip.to",
          "first": "James",
          "last": "Smith",
          "phone": "1234567890",
          "phoneConsentMode": "Checkbox"
          "arrival": "2022-01-01",
          "departure": "2022-01-02",
          "currency": "USD",
          "amount": 365.11
        }
      ]
    }
  ]
}
```

{% endtab %}
{% endtabs %}

### Discovery planners who opted-out

Provides data for planners who opted out within a specified date range.

<mark style="color:green;">`POST`</mark> `https://api.flip.to/v1/company/data/discovery/optouts`

#### Query Parameters

| Name                                        | Type   | Description                                                                                                                                                                |
| ------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| startdate<mark style="color:red;">\*</mark> | String | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2022-09-18)                                                                                                 |
| enddate<mark style="color:red;">\*</mark>   | String | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2022-10-18)                                                                                                 |
| page                                        | String | The page number of the data to consume. If a page isn't specified, page should be set to 1.                                                                                |
| pagesize                                    | String | <p>The total number of records to send for each page</p><p>Page size cannot exceed 500 records at a time, and if not specified, the default value would be set to 100.</p> |

#### Request Body

| Name           | Type   | Description                                                                                                                             |
| -------------- | ------ | --------------------------------------------------------------------------------------------------------------------------------------- |
| discoveries\[] | String | An array of discovery IDs to limit results to. If no discoveries are specified, all discoveries the key has access to will be returned. |

#### Example

{% tabs %}
{% tab title="Response" %}

```json
{
  "total": 150,
  "page": 1,
  "optouts": [
    {
      "discoveryName": "www.overlookhotel.com",
      "email": "james@gmail.com",
      "optoutDate": "2022-05-04T18:21:58.1272137"
    }
  ]
}

```

{% endtab %}
{% endtabs %}

## Advocacy

### Advocacy leads

Provides data for leads who signed up within a specified date range.

<mark style="color:green;">`POST`</mark> `https://api.flip.to/v1/company/data/advocacy/signups`

#### Query Parameters

| Name                                        | Type   | Description                                                                                                                                                                |
| ------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| startdate<mark style="color:red;">\*</mark> | String | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2022-09-18)                                                                                                 |
| enddate<mark style="color:red;">\*</mark>   | String | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2022-10-18)                                                                                                 |
| page                                        | String | The page number of the data to consume. If a page isn't specified, page should be set to 1.                                                                                |
| pagesize                                    | String | <p>The total number of records to send for each page</p><p>Page size cannot exceed 500 records at a time, and if not specified, the default value would be set to 100.</p> |

#### Request Body

| Name                | Type    | Description                                                                                                                          |
| ------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| properties\[]       | String  | An array of property IDs to limit results to. If no properties are specified, all properties the key has access to will be returned. |
| isIncludeRestricted | Boolean | Indicates whether to include restricted (GDPR) data.                                                                                 |
| isIncludeOptout     | Boolean | Indicate whether to include leads who have chosen to opt-out.                                                                        |

#### Example

{% tabs %}
{% tab title="Response" %}

```json
{
  "total": 19388,
  "page": 1,
  "signups": [
    {
      "id": "C123600-2B05-47E3-8FBE-3EAB9E8A5Q11",
      "createDate": "2021-12-01T00:01:00",
      "propertyId": "1234DF43-C41C-442F-804C-1234A7952738",
      "propertySlug": "overlook-hotel",
      "email": "james@flip.to",
      "first": "James",
      "last": "Smith",
      "phone": "1234567890",
      "phoneConsentMode": "Checkbox",
      "languageCode": "en",
      "isOptout": false,
      "isPrivacyRestricted": false,
      "layerType": "photo contest",
      "category": "friend",
      "country": "United States", 
      "region": "FL", 
      "city": "Orlando"
    }
  ]
}

```

{% endtab %}
{% endtabs %}

### Advocacy stories

Provides data for Advocacy stories that were submitted within a specified date range. Results limited to stories that include a photo submission.

<mark style="color:green;">`POST`</mark> `https://api.flip.to/v1/company/data/advocacy/stories`

#### Query Parameters

| Name                                        | Type   | Description                                                                                                                                                                |
| ------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| startdate<mark style="color:red;">\*</mark> | String | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2022-09-18)                                                                                                 |
| enddate<mark style="color:red;">\*</mark>   | String | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2022-10-18)                                                                                                 |
| page                                        | String | The page number of the data to consume. If a page isn't specified, page should be set to 1.                                                                                |
| pagesize                                    | String | <p>The total number of records to send for each page</p><p>Page size cannot exceed 500 records at a time, and if not specified, the default value would be set to 100.</p> |

#### Request Body

| Name                | Type    | Description                                                                                                                          |
| ------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| properties\[]       | String  | An array of property IDs to limit results to. If no properties are specified, all properties the key has access to will be returned. |
| isIncludeRestricted | Boolean | Indicates whether to include restricted (GDPR) data.                                                                                 |
| isIncludeOptout     | Boolean | Indicate whether to include leads who have chosen to opt-out.                                                                        |

#### Example

{% tabs %}
{% tab title="Response" %}

```json
{
  "total": 5679,
  "page": 1,
  "stories": [
    {
     "propertyId": 1234DF43-C41C-442F-804C-1234A7952738",
      "propertySlug": "overlook-hotel",
      "email": "james@flip.to",
      "first": "James",
      "last": "Smith",
      "phone": "1234567890",
      "phoneConsentMode": "Checkbox",
      "category": "guest",
      "startDate": "2021-12-25",
      "endDate": "2021-12-29",
      "languageCode": "en",
      "isOptout": false,
      "isPrivacyRestricted": false,
      "submissionDate": "2022-01-02T06:32:00", 
      "photo": {
        "id": "C123600-2B05-47E3-8FBE-3EAB9E8A5Q11",
        "contestName": "Myrtle Beach Vacation Memories Giveaway!",
        "finalistDate": "2022-01-06T19:25:00",
        "internalRating": "2022-01-06T19:25:00",
        "score": 13,
        "caption": "I awoke this particular morning to look at the sunrise and was surprised to see the moon still out as well! The view was breathtaking along with the beautiful waves gently hitting the shore!",
        "captionInternalRating": 3,
        "url": "https:\/\/cdn.flip.to\/public\/c123600-2b05-47e3-8fbe-3eab9e8a5q11.jpg"
      },
      "review": {
        "rating": 5,
        "quote": "Waking up to the beautiful sun rises in the morning was very relaxing so much so part of the family did not want to leave.",
        "internalRating": 2
      }
    }
  ]
}
```

{% endtab %}
{% endtabs %}

### Advocacy leads who opted out

Provides data for leads who opted out within a specified date range.

<mark style="color:green;">`POST`</mark> `https://api.flip.to/v1/company/data/advocacy/optouts`

#### Query Parameters

| Name                                        | Type   | Description                                                                                                                                                                |
| ------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| startdate<mark style="color:red;">\*</mark> | String | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2022-09-18)                                                                                                 |
| enddate<mark style="color:red;">\*</mark>   | String | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2022-10-18)                                                                                                 |
| page                                        | String | The page number of the data to consume. If a page isn't specified, page should be set to 1.                                                                                |
| pagesize                                    | String | <p>The total number of records to send for each page</p><p>Page size cannot exceed 500 records at a time, and if not specified, the default value would be set to 100.</p> |

#### Request Body

| Name          | Type   | Description                                                                                                                          |
| ------------- | ------ | ------------------------------------------------------------------------------------------------------------------------------------ |
| properties\[] | String | An array of property IDs to limit results to. If no properties are specified, all properties the key has access to will be returned. |

#### Example

{% tabs %}
{% tab title="Response" %}

```json
{
  "total": 19388,
  "page": 1,
  "optouts": [
    {
      "propertyId": "1234DF43-C41C-442F-804C-1234A7952738",
      "propertySlug": "overlook-hotel",
      "optoutDate": "2022-05-04T18:21:58.1272137",
      "email": "james@gmail.com"
    }
  ]
}
```

{% endtab %}
{% endtabs %}


# Collaborative API

### Look Ahead data

Provides collaborative members' occupancy, ADR, and revenue data for a specified date range. Best intended for getting clarity on future stay dates.

<mark style="color:green;">`POST`</mark> `https://api.flip.to/v1/collaborative/report/lodging/lookahead`

#### Query Parameters

| Name                                        | Type   | Description                                                                                                                                                                                                                                                    |
| ------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| startdate<mark style="color:red;">\*</mark> | Date   | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2023-09-18)                                                                                                                                                                                     |
| enddate<mark style="color:red;">\*</mark>   | Date   | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2023-09-18)                                                                                                                                                                                     |
| type                                        | String | <p>Accommodation property type, valid values are:</p><p><code>FullServiceHotel</code>, <code>SelectServiceHotel</code>, <code>Condotel</code>, <code>VacationRental</code>, <code>RVResort</code></p>                                                          |
| grouping                                    | String | <p>Defines how data is grouped and <code>Week</code> is default.</p><p>Valid values are: <code>Month</code>, <code>Week</code>, <code>Day</code></p>                                                                                                           |
| startWeekDay                                | String | <p>Defines the start day of the week and <code>Sunday</code> is default, valid values are:</p><p><code>Monday</code>, <code>Tuesday</code>, <code>Wednesday</code>, <code>Thursday</code>, <code>Friday</code>, <code>Saturday</code>, <code>Sunday</code></p> |

#### Example

{% tabs %}
{% tab title="Response" %}

```json
{
    "totalProperties": 32,
    "totalRooms": 9660,
    "data": [
        {
            "startDate": "2021-01-01",
            "endDate": "2021-01-31",
            "occupancy": {
                "availableBookNights": 289800,
                "bookedNights": 4008
            },
            "dailyRate": {
                "minDailyRate": 25.81,
                "maxDailyRate": 521.54,
                "avgDailyRate": 47.57
            },
            "stayLength": {
                "minStayNights": 1,
                "maxStayNights": 74,
                "avgStayNights": 2
            },
            "revenue": {
                "totalTransactions": 1719,
                "totalTransactionNights": 4585,
                "minTransactionRevenue": 48,
                "maxTransactionRevenue": 3132.03,
                "totalTransactionRevenue": 459003.23,
                "avgTransactionRevenue": 267.02
            }
        },
        …
    ]
}

```

{% endtab %}
{% endtabs %}

### Transactions data

Provides transactions and revenue data from all collaborative members for a specified date range.

<mark style="color:green;">`POST`</mark> `https://api.flip.to/v1/collaborative/report/lodging/bookings`

#### Query Parameters

| Name                                        | Type   | Description                                                                                                                                                                                                                                                    |
| ------------------------------------------- | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| startdate<mark style="color:red;">\*</mark> | Date   | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2023-09-18)                                                                                                                                                                                     |
| enddate<mark style="color:red;">\*</mark>   | Date   | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2023-09-18)                                                                                                                                                                                     |
| type                                        | String | <p>Accommodation property type, valid values are:</p><p><code>FullServiceHotel</code>, <code>SelectServiceHotel</code>, <code>Condotel</code>, <code>VacationRental</code>, <code>RVResort</code></p>                                                          |
| grouping                                    | String | <p>Defines how data is grouped and <code>Week</code> is default.</p><p>Valid values are: <code>Month</code>, <code>Week</code>, <code>Day</code></p>                                                                                                           |
| startWeekDay                                | String | <p>Defines the start day of the week and <code>Sunday</code> is default, valid values are:</p><p><code>Monday</code>, <code>Tuesday</code>, <code>Wednesday</code>, <code>Thursday</code>, <code>Friday</code>, <code>Saturday</code>, <code>Sunday</code></p> |

#### Example

{% tabs %}
{% tab title="Response" %}

```json
{
    "totalProperties": 32,
    "totalRooms": 9660,
    "data": [
        {
            "startDate": "2020-12-27T00:00:00",
            "endDate": "2021-01-02T00:00:00",
            "revenue": {
                "totalTransactions": 934,
                "totalTransactionNights": 3290,
                "minTransactionRevenue": 49,
                "maxTransactionRevenue": 11828.92,
                "totalTransactionRevenue": 714171.46,
                "avgTransactionRevenue": 764.64
            },
            "stayLength": {
                "minStayNights": 1,
                "maxStayNights": 34,
                "avgStayNights": 3
            }
        },
        …
    ]
}
```

{% endtab %}
{% endtabs %}

### Sponsor referrals data

Provides transactions and revenue data attributed to the Sponsor's referral efforts for a specified date range.

<mark style="color:green;">`POST`</mark> `https://api.flip.to/v1/collaborative/report/sponsor/referrals/impact`

#### Query Parameters

| Name                                        | Type    | Description                                                                                                                                           |
| ------------------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| startdate<mark style="color:red;">\*</mark> | Date    | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2023-09-18)                                                                            |
| enddate<mark style="color:red;">\*</mark>   | Date    | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2023-09-18)                                                                            |
| delay                                       | Integer | The number of days to look back to attribute transaction to source data. Default is `15` days.                                                        |
| grouping                                    | String  | <p>Defines how data is grouped and <code>Month</code> is default.</p><p>Valid values are: <code>Month</code>, <code>Week</code>, <code>Day</code></p> |

#### Example

{% tabs %}
{% tab title="Response" %}

```
[
    {
        "year": 2023,
        "timeGrouping": 1,
        "referralTransactions": 3,
        "referralRevenue": 1500,
        "influencedTransactions": 2,
        "influencedRevenue": 1000
    },
    {
        "year": 2023,
        "timeGrouping": 2,
        "referralTransactions": 5,
        "referralRevenue": 2500,
        "influencedTransactions": 4,
        "influencedRevenue": 2000
    }
]
```

{% endtab %}
{% endtabs %}

### Sponsor referrals data by channel

Provides transactions and revenue data attributed to the Sponsor's referral efforts for a specified channel and date range.

<mark style="color:green;">`POST`</mark> `https://api.flip.to/v1/collaborative/report/sponsor/referrals/channels/impact`

#### Query Parameters

| Name                                        | Type    | Description                                                                                                                                           |
| ------------------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| startdate<mark style="color:red;">\*</mark> | Date    | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2023-09-18)                                                                            |
| enddate<mark style="color:red;">\*</mark>   | Date    | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2023-09-18)                                                                            |
| delay                                       | Integer | The number of days to look back to attribute transaction to source data. Default is `15` days.                                                        |
| grouping                                    | String  | <p>Defines how data is grouped and <code>Month</code> is default.</p><p>Valid values are: <code>Month</code>, <code>Week</code>, <code>Day</code></p> |

#### Example

{% tabs %}
{% tab title="Response" %}
{% code fullWidth="true" %}

```json
[
    {
        "year": 2023,
        "timeGrouping": 1,
        "source": "google",
        "medium": "search",
        "term": null,
        "referralTransactions": 3,
        "referralRevenue": 1500,
        "influencedTransactions": 2,
        "influencedRevenue": 1000
    },
    {
        "year": 2023,
        "timeGrouping": 2,
        "source": "google",
        "medium": "search",
        "term": null,
        "referralTransactions": 5,
        "referralRevenue": 2500,
        "influencedTransactions": 4,
        "influencedRevenue": 2000
    }
]
```

{% endcode %}
{% endtab %}
{% endtabs %}

### Sponsor referrals data by geolocation

Provides transactions and revenue data attributed to the Sponsor's referral efforts for a specified geolocation and date range.

<mark style="color:green;">`POST`</mark> `https://api.flip.to/v1/collaborative/report/sponsor/referrals/geo/impact`

#### Query Parameters

| Name                                        | Type    | Description                                                                                                                                           |
| ------------------------------------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| startdate<mark style="color:red;">\*</mark> | Date    | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2023-09-18)                                                                            |
| enddate<mark style="color:red;">\*</mark>   | Date    | The inclusive date range in ISO 8601 format `yyyy-MM-dd` (e.g. 2023-09-18)                                                                            |
| delay                                       | Integer | The number of days to look back to attribute transaction to source data. Default is `15` days.                                                        |
| grouping                                    | String  | <p>Defines how data is grouped and <code>Month</code> is default.</p><p>Valid values are: <code>Month</code>, <code>Week</code>, <code>Day</code></p> |

#### Example

{% tabs %}
{% tab title="Response" %}

```json
[
    {
        "year": 2023,
        "timeGrouping": 1,
        "country": "US",
        "region": "NY",
        "city": "New York",
        "referralTransactions": 3,
        "referralRevenue": 1500,
        "influencedTransactions": 2,
        "influencedRevenue": 1000
    },
    {
        "year": 2023,
        "timeGrouping": 2,
        "country": "US",
        "region": "NY",
        "city": "New York",
        "referralTransactions": 5,
        "referralRevenue": 2500,
        "influencedTransactions": 4,
        "influencedRevenue": 2000
    }
]
```

{% endtab %}
{% endtabs %}


# Updating a website or booking engine

To ensure your Flip.to platform continues to drive impact, follow the best practices below. We'll take it from there to get you to a successful launch! 🚀

{% hint style="warning" %}
Before you begin: site or booking engine updates may affect platform features like **Discovery**, **Story River,** **HPC**, or **Quotes List**. Stay in touch with your Customer Success Manager, and we’ll help lead the charge.
{% endhint %}

## For first-time Discovery implementations

### <mark style="color:$info;">Coincide with your new website or booking engine</mark>

{% stepper %}
{% step %} <mark style="color:$primary;">First, launch your new website or booking engine.</mark>

Take 1-2 days to sanity check and dial in the website and booking engine prior to launching your platform.
{% endstep %}

{% step %} <mark style="color:$primary;">After, deploy Discovery following this post-launch window.</mark>
{% endstep %}
{% endstepper %}

## For existing Discovery implementations

### <mark style="color:$info;">Minor enhancements</mark>

{% hint style="info" %}
Examples include changing colors, moving locations of booking buttons or booking bars, reorganizing site sections, or changing class names. For expansive design support, talk to Customer Success.
{% endhint %}

{% stepper %}
{% step %} <mark style="color:$primary;">Let your Customer Success Manager know about upcoming changes.</mark>

Aim to give [at least 7 days notice](#user-content-fn-1)[^1] prior to your scheduled launch date.
{% endstep %}

{% step %} <mark style="color:$primary;">Your Customer Success Manager audits and updates Discovery.</mark>

We’ll make any design and platform adjustments as needed, and test.
{% endstep %}

{% step %} <mark style="color:$primary;">Deploy your enhancements, and our team coordinates to switch on any platform updates at the same time.</mark>
{% endstep %}
{% endstepper %}

### <mark style="color:$info;">Major enhancements or a total relaunch</mark>

{% hint style="info" %}
Examples include migrating to a new booking engine, making significant structural changes to your website, or changing booking URLs. For expansive design support, talk to Customer Success.
{% endhint %}

{% stepper %}
{% step %} <mark style="color:$primary;">Let your Customer Success Manager know about upcoming changes.</mark>

Aim to give [at least 7 days notice](#user-content-fn-2)[^2] prior to your scheduled launch date.
{% endstep %}

{% step %} <mark style="color:$primary;">Flip.to pauses your platform during your launch window.</mark>

Two days prior to launch, and up to two days following, Flip.to will pause the platform. In that time, sanity check and dial in the website and booking engine prior to relaunching your platform.

{% hint style="info" %}
While paused, Discovery will continue to engage existing planners who return to your website, but will not engage new planners.
{% endhint %}
{% endstep %}

{% step %} <mark style="color:$primary;">After the sanity check, your Customer Success Manager redeploys your platform. 🎉</mark>
{% endstep %}
{% endstepper %}

## For staging sites

### <mark style="color:$info;">In some cases, a staging site can be used to bring your platform back on board even faster.</mark>

{% hint style="warning" %}
Before you begin: The staging site should represent the final version, or ready-to-launch state.

* Booking URLs and variations are final
* Booking buttons and booking bars, including class names or IDs are final
* Pages and page locations are complete

Should last minute changes to the staging site take place, let your Customer Success Manager know as soon as possible.<br>
{% endhint %}

{% stepper %}
{% step %} <mark style="color:$primary;">Share the link and any credentials to your Customer Success Manager.</mark>

We’ll access and review the staging site, confirming it contains our scripts.
{% endstep %}

{% step %} <mark style="color:$primary;">Our team does the lift to get your platform back on board.</mark>

Our Customer Success team configures every aspect of Discovery to get you started.\
\
You'll receive preview links to review and approve, and at any point you can tweak the configuration in your account.
{% endstep %}
{% endstepper %}

Have a great launch! 🚀

[^1]: And the more the better! :smile:

[^2]: Especially for major relaunches, more time is even better! :smile:




---

[Next Page](https://docs.flip.to/llms-full.txt/1)

