This article covers Pixel and catalog requirements for Travel Ads (previously known ad Dynamic Ads for Travel or DAT for short), covering Hotel, Destination, and Flight ads.
Changes required to Meta Pixel and app SDK
Dynamic Ads for Travel work with the following standard events sent from your Meta Pixel:
Pixel event | App SDK event | Description |
---|---|---|
Search |
fb_mobile_search |
when someone has made a travel-related search |
ViewContent |
fb_mobile_content_view |
when someone has viewed details of a specific travel entity, such as a hotel |
InitiateCheckout |
fb_mobile_initiated_checkout |
when someone has begun the booking process |
Purchase |
fb_mobile_purchase |
when someone has completed their travel booking |
Depending on the type of entity (hotel, flight, or destination), the events will be accompanied by a set of parameters providing more information about the user’s travel intents. The up-to-date list of required and recommended parameters for hotels and journeys can be found from Facebook’s documentation. The more parameters are provided, the better Facebook’s recommendations in ads will be.
ℹ️ Note: Some tag managers such as Tealium and Segment have built-in support for Travel Ads events.
Migration from Products to Travel Ads
If you’re currently running Dynamic Ads with a product catalog and wish to migrate to Travel Ads, it’s recommended to modify your existing Pixel to include both product and Travel Ads parameters. This allows you to run Dynamic Ads for Products and Travel Ads simultaneously.
Product and Travel Ads events have an overlapping parameter, content_type
where
- Dynamic Ads for Products uses
product
orproduct_group
- Travel Ads uses
hotel
,flight
ordestination
Instead of passing in only one value, an array of both, such as content_type= ["product", "hotel"]
should be used.
FAQ
What if there are no dates to be passed in the Pixel events?
In some cases, when the Pixel events are fired, the user might not have specified any travel dates yet. In that case, some default dates, such as check in 14 days from now and check out 21 days from now, should be used. Facebook is exploring the option of not providing dates in the events.
returning_departure_date
is a required parameter for flight events. What should be used here with one-way-flights?
Leave the returning_departure_date
parameter out.
Is the destination
parameter really necessary? Can I just use the city in it?
The destination parameter is especially important as Facebook attempts to parse and interpret the text to pinpoint a latitude/longitude. You should provide the best possible description to represent a hotel/search location, for example Upper East Side, Manhattan, New York, USA
.
What is the difference between value
and purchase_value
?
Large checkout purchases don't necessarily translate to large profits. That's why there're two parameters for value:
purchase_value
is the total amount a customer pays to complete the transaction (such as booking cost or ticket cost).value
quantifies the value of the event for you (for example profit)
What is the difference between hotel and destination catalogs?
Where a hotel catalog is used to show a potential customer ads about individual hotels and hotel rooms, a destination catalog can be used to advertise destination-specific information and landing pages. A destination catalog could include, for example, all hotels in New York, a landing page with several beach holiday destinations, and so on.
What if the user does a search with city IATA codes (e.g. PAR-LON) instead of airport IATA (e.g. CDG-LHR) codes?
You can send the city IATA codes in origin_airport
and destination_airport
parameters. However, you'll need to add city-city and city-airport combinations in the feed. Whatever is sent through the Pixel needs to match what's provided in the feed.
Event source groups
In Travel Ads, Facebook uses event source groups to capture the travel intent signal and to create dynamic audiences. Event source groups are created in Smartly.io Catalogs > Events. You need to connect one or more Pixels and/or mobile apps to an event source group to start capturing the travel signals.
You need to be a Business Manager Admin to view or create event source groups in Smartly.io. If you have created event source groups or used Dynamic Ads for Travel before starting with Smartly.io, you can use your existing groups and have your dynamic audiences ready. You need to also select which ad accounts can use a given group.
Catalog requirements
Hotel catalog
There are two types of hotel information:
- A static hotel feed contains information that doesn’t change frequently, such as hotel name and location.
- Room and pricing configuration is used for frequently changing information such as pricing and available rooms.
Static hotel feed
Smartly.io’s feed format support is wider than Facebook’s. You can use various different XML, CSV, TSV and JSON feeds. If you have an existing feed, it’s likely that Smartly.io can automatically convert it to the format required by Facebook.
The up-to-date list of required and recommended fields for hotel feed can be found from Facebook’s documentation. You can ignore the feed format and the field names – the only thing that matters is that your feed has all the information required by Facebook.
Room and pricing configuration
Using room and pricing configuration is optional. It can be used to provide Facebook with hotel room type and pricing configurations based on different check-in and check-out dates. If no room and pricing information is provided, the hotel’s base_price
will be used.
The implementation of room and pricing configuration varies from advertiser to advertiser. Grab one of your developers and ask your account manager to help to get the implementation process started.
For Smartly.io it's preferable to have hotels and rooms in one feed file. In this case, hotel rooms should be nested within hotel data (only supported in XML or JSON). An example could look like this:
[
{
"hotel_id": "123456",
"name": "Smartly.io San Francisco",
"addr1": "580 Market Street",
"city": "San Francisco",
"country": "United States",
"postal_code": "94105",
"latitude": 37.7895645,
"longitude": 122.4036569,
"phone": "123-456-789",
"image": "https://cdn2.hubspot.net/hub/1570479/hubfs/Smartly.io ogoWeb.png",
"description": "A nice place to visit.",
"brand": "Smartly.io",
"region": "California",
"neighborhood" : "Financial District",
"url": "http://smartly.io",
"base_price": "500 EUR",
"rooms": [
{
"id": "100",
"name": "Twin Room",
"description": "A comfortable room",
"base_price": "500 EUR",
"url": "http://smartly.io"
},
{
"id": "200",
"name": "Luxurious Room",
"description": "A really great room",
"base_price": "1000 EUR",
"url": "http://smartly.io"
}
]
}
]
For hotels without rooms, a CSV data feed also works.
Google hints API is supported for price changes. This is currently only tested for room prices.
Hotel Catalog FAQ
What languages are supported?
Travel Ads supports the language in your hotel catalog. For now, you’ll have to create a catalog for each localization (language and currency) you’re going to use in advertising. Facebook is exploring the possibility to support catalog translation but there’s no timeline for that yet.
What should I use in the brand
parameter?
Use the brand of the hotel. Facebook will, later on, take brand preference into account in its ad recommendations. If you don’t have brand information, just use your own brand.
What if I don’t have neighborhood information?
Leave it out.
What if some of the hotels don’t have a postal code (for example, they are in a country that doesn’t use postal code system)?
Use 0 as the zip code. At the moment, leaving it empty will make Facebook invalidate the hotel.
How does audience backfill work in Travel Ads?
Since hotel_set is optional in a Travel Ads audience, if the audience isn't tied to a hotel_set, it will always backfill. If the audience is tied to a hotel_set, it will backfill the events in which the associated hotel_set already existed during the time of firing. Otherwise, it'll start building the audience from 0.
Destination catalog
Smartly.io’s feed format support is wider than Facebook’s. You can use various different XML, CSV, TSV and JSON feeds. If you have an existing feed, it’s likely that Smartly.io can automatically convert it to the format required by Facebook.
The up-to-date list of required and recommended fields for destination feeds can be found from Facebook’s documentation. You can ignore the feed format and the field names – the only thing that matters is that your feed has all the information required by Facebook.
Destination retargeting
In order to use destination catalogs for hotel/destination retargeting, you first need to implement the Travel Ads hotel Pixel events (see section 1 of this article). In addition to the hotel Pixel parameters, the “destination_ids” parameter should be added to the events being passed by the hotel Pixel. This will allow a specific hotel Pixel event to be associated with one or more destinations in your destination catalog. For instance, a particular hotel may be linked to a nearby museum and a nearby beach, both of which are destinations in the destination catalog.
Destination Catalog FAQ
Does this implementation support date-specific pricing?
No. Date-specific pricing is supported only in hotel catalogs at the moment.
Flight catalog
Facebook provides two options to create a flight catalog: with a flight feed, and without a feed.
With flight feed
The flight feed has very few requirements:
Travel Ads Flight Catalog requirements in Facebook documentation
- Origin airport (IATA code)
- Destination airport (IATA code)
- Image URL
Optional fields:
- Price - starting from price for the route
- Description
- Destination link URL
- Origin city
- Destination city
- App link
ℹ️ Note: you don't need to provide flight ID in the same way as with hotel, destination or product feeds. Facebook uses IATA codes to match user's travel intent with your flight catalog.
If don't provide origin and destination city names in the catalog, Facebook will provide defaults you can use in creative template tags. For example, for a CDG-LHR flight, {{flight.origin_city}}
will yield "Paris" and {{flight.destination_city}}
will yield "London". (Available in English only, not available for Dynamic Image Templates.)
You can use Smartly.io's dynamic image templates to create overlays on top of the image you provide in the feed.
Feedless option
If you are not able to provide a feed containing your flight routes and images for each route you can let Facebook create the catalog for you based on Flight Pixel events. In this option, you only need to setup your Flight Pixel and upload one image that will be shown with each ad. You can see more information how to setup Pixel for Flights events here: Flight Ads - Events
Note: you are not able to use dynamic image templates with this option.
Displaying price information
There are three ways to display price information in Flight Ads:
- Feed - starting from price for the route (requires a feed)
- Pixel - Facebook caches price from Flight Ads Pixel events (requires whitelisting from Facebook)
- GDS (Amadeus integration)
Price from Pixel: The Pixel price will reflect the latest fired price for the itinerary (Oiring-Destination pair/date/travel class). This fire can come through any of the events (search, view, initiate checkout, or purchase). It is NOT user-specific, and rather will be the last fired price for any user.
Price from Amadeus' Global Distribution System: Facebook is working with Amadeus, one of the leading global distribution systems, to access dynamic price data for flights. At the time of ad serve, for a given airline, Facebook will pull the minimum price of the flights matching the origin, destination, dates and travel class. To use this option, the first step is for Amadeus and the advertiser to sign an agreement that allows Amadeus to provide their pricing data to Facebook. Once Facebook has the agreement they need advertiser’s Amadeus API key to start pulling the price information.