To promote your flight inventory on Facebook, you have to share information about your flights with Facebook. You do this by creating a flight catalog and then filling it with flight routes. There are three ways to fill your catalog and keep it up to date.
You can create and manage your flight catalogs in your Commerce Manager:
A flight feed is a file with your flight inventory. Every line or item in the file represents a single route. You can use one or more flight feeds, as long as all feeds together contain your full flight inventory.
CSV sample | TSV sample (flattened)
"
double quotes"
. image
can be represented using JSON-encoded values or by a set of "flattened" plain-text columns labeled using JSON-path syntax, such as image[0].url
, image[0].tag[0]
, image[0].tag[1]
. Both conventions can be used interchangeably in the same file.<listings>
XML node encloses a set of <listing>
nodes, each of which represents a flight.<?xml
declaration tag.The feed parser automatically detects UTF8
, UTF16
, or UTF32
text encodings, and defaults to LATIN1
if it encounters an unexpected byte sequences. You can provide text in field values in any language; however, field names must be given exactly as below, in English.
The following supported fields are designed for items you add to your product catalog.
For localized catalogs, see supported fields for flight ads.
Field and Type | Description |
---|---|
type: string | Required. The IATA code for the origin. Supports airport and city IATA code. Use IATA Code Search to validate your IATA codes. Tip: To improve performance, avoid using a space for this unique identifier field. Example: |
type: string | Required. The IATA code for the destination. Supports airport and city IATA code. Use IATA Code Search to validate your IATA codes. Tip: To improve performance, avoid using a space for this unique identifier field. Example: |
type: object | Required. Max items: 20 Image data for this flight. You can provide up to 20 images for the flight. Each image contains two fields: |
type: string | Required. Max size: 5000 A short paragraph describing the route. |
type: string | Required only if you do not specify a deep link on ad level. You can use the Link to the external site where you can view the flight. If a deep link is specified on ad level, that will take precedence. |
type: string | The name of the origin city. Example: |
type: string | The name of the destination city. Example: |
type: string | Price of the flight. You must specify the value with currency. Example: |
type: element | Deep link straight to the flight details page in your mobile app using App Links. You can specify deep links (in order of precedence, highest to lowest):
|
type: string | One-way price of the flight. You must specify the value with currency. Example: |
type: integer | Priority of the flight. Value from 0(lowest priority) to 5(highest priority). Flight without this value will have priority=0. Example: |
Type: string | Controls whether an item is active or archived in your catalog. Only active items can be seen by people in your ads, shops or any other channels. Supported values: Example: Note: Some partner platforms such as Shopify may sync items to your catalog with a status called staging, which behaves the same as This field was previously called |
Type: string | Add internal labels to help filter items when you create product sets. For example, you could add a “summer” label to all items that are part of a summer promotion and then filter those items into a set. Labels are only visible to you Enclose each label in single quotes (') and separate multiple labels with commas (,). Don’t include white spaces at the beginning or end of a label. Character limit: Up to 5,000 labels per product and 110 characters per label. Example (TSV, XLSX, Google Sheets): ['summer','trending'] Example (CSV): “['summer','trending']” Note: If you’re currently using custom labels ( This field was previously called |
Field Name and Type | Description |
---|---|
type: string | Required. URL of the flight image. Follow these image specifications:
|
type: string | A string that represents what's in the image. There can be multiple tags associated with an image. Examples:
Optional. |
If you have separate apps for iPhone and iPad, specify iPhone and iPad specific information. Otherwise specify only iOS information.
Field Name and Type | Description |
---|---|
type: string | A custom scheme for the iOS app. Example: |
type: string | The app ID for the App Store. Example: 1234 |
type: string | The name of the app (suitable for display). Example: |
type: string | A custom scheme for the iPhone app. Example: |
type: string | The app ID for the App Store. Example: |
type:string | The name of the app (suitable for display). Example: |
type: string | A custom scheme for the iPhone app. Example: |
type: string | The app ID for the App Store. Example: |
type: string | The name of the app (suitable for display). Example: |
type: string | A custom scheme for the Android app. Example: |
type: string | A fully-qualified package name for intent generation. Exammple: |
type: string | The name of the app (suitable for display). Example: |
Provide deep links in feed following the App Links specification. Deep link information in feed takes precedence over any information Facebook collects with App Links metadata with our web crawler.
If you already have deep link information from App Links, you don't need to specify this data. Facebook uses information from App Links to display the correct deep link. To display deep links in your ads, see Advantage+ Catalog Ads, Ad Template.
Facebook can automatically add routes to your catalog based on pixel and app event activity. Every time an event is received with a route that does not yet exist in the catalog, it can be added automatically. This allows to you use flight ads for all your flights without having to deal with flight feeds.
To enable this, make a POST
request to your flight catalog and set generate_items_from_events
to true
.
curl \ -F 'flight_catalog_settings={generate_items_from_events:1}' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/<VERSION>/<CATALOG_ID>
Routes that are added automatically don't have an image (to display in the ad). Therefore, you need to provide a generic image to use for all autogenerated routes.
curl \ -F 'fallback_image_url=http://example.com/some.image_1.jpg' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/<VERSION>/<CATALOG_ID>
As soon as your catalog is associated to a pixel and/or app, and receiving flight ads events, your catalog populates. You can verify this by querying the catalog.
curl \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/<VERSION>/<CATALOG_ID>/flights
You can combine uploading a flight feed with autogenerated routes. Combining these options allows you to leverage flight ads for all your flights, while providing custom images for your most important routes using a flight feed.
To do so, just combine the steps uploading a flight feed with automatically filling your catalog.
The following sections are only relevant if you want to manage your catalogs using this API.
A flight catalog is a container for your flight inventory. To use the catalog API, make sure you have the appropriate Marketing API Access Level and that you have accepted the Terms of Service by creating your first catalog through Business Manager.
To create a flight catalog for flight ads, set vertical
to flights
:
curl -X POST \ -F 'name="Test Flight Catalog"' \ -F 'vertical="flights"' \ -F 'access_token=<ACCESS_TOKEN>' \ https://graph.facebook.com/v10.0/{business-id}/owned_product_catalogs
Once you've created the catalog, you need to upload your flight feed(s) to Facebook. Use the API to create a feed object for every feed you want to upload. We support scheduled and direct uploads.
A flight set is a subset of your catalog. To set up flight ads, you need to create, at least, one flight set.
Flight sets are defined by filters that are applied to the flight catalog. For example, you can create a flight set with all routes that depart from London. Do note you can also create a flight set without any filters. In that case, the flight set will contain all flights in your catalog.
use FacebookAds\Object\ProductSet;
use FacebookAds\Object\Fields\ProductSetFields;
$flight_set = new ProductSet(null, <PRODUCT_CATALOG_ID>);
$flight_set->setData(array(
ProductSetFields::NAME => 'Test Flight Set',
ProductSetFields::FILTER => array(
'origin_airport' => array(
'eq' => 'LHR',
),
),
));
$flight_set->create();
from facebookads.adobjects.productset import ProductSet
flight_set = ProductSet(None, <PRODUCT_CATALOG_ID>)
flight_set[ProductSet.Field.name] = 'Test Flights Set'
flight_set[ProductSet.Field.filter] = {
'origin_airport': {
'eq': 'SFO',
},
}
flight_set.remote_create()
curl \
-F 'name=Test Flight Set' \
-F 'filter={"origin_airport":{"eq":"LHR"}}' \
-F 'access_token=<ACCESS_TOKEN>' \
https://graph.facebook.com/v2.11/<PRODUCT_CATALOG_ID>/product_sets
The filter
parameter is made up of the following operators and data:
Operators | Filter Type |
---|---|
| Contains substring. Operator is case-insensitive. |
| Does not contain substring. Operator is case-insensitive. |
| Contains substring. Operator is case-insensitive. |
| Does not contain substring. Operator is case-insensitive. |
| Equal to. Operator is case-insensitive. |
| Not equal to. Operator is case-insensitive. |
| Less than. For numeric fields only. |
| Less than or equal to. For numeric fields only. |
| Greater than. For numeric fields only. |
| Greater than or equal to. For numeric fields only. |
Data | The data being filtered |
---|---|
| The IATA code for the origin. |
| The IATA code for the destination. |
| Price of the flight. The price is in cents. |
| A short paragraph describing the route. |