ChatGPT Ads hotel feeds: how the property feed beta works

How ChatGPT Ads hotel property feeds work: who can use the limited beta, the file format, required fields, images, ratings, prices and upload checks.

8 min read

Illustration: a hotel feed with one row describing each property

ChatGPT Ads hotel property feeds let hotels and travel advertisers send their properties to Ads Manager. Each row describes one property. OpenAI calls it a limited beta, open only to approved pilot advertisers. The feed has its own format, separate from the product feed used by stores. This guide covers who can use it, how the file works and the checks that stop rows being rejected.

Every platform fact links to OpenAI’s documentation. Where we give our own view, we say so.

What a ChatGPT Ads hotel feed is

A hotel feed describes properties, not rooms, offers or dated stays. Each row is one hotel, with its name, description, landing page, images and location. Optional columns add a brand, a static starting price, a star rating, a category and guest ratings.

Hotel feedProduct feed
One row per propertyOne row per product or variant
The hotel_property_v1 formatOpenAI’s product feed specification
Full snapshots onlyFull uploads, plus the Delta API for quick changes
Limited beta, approved pilot advertisers onlyAvailable to advertisers with a feed

Don’t use the product feed schema for a hotel feed. OpenAI says the two formats are separate, and the field definitions may change during the beta.

Who can use it

OpenAI says hotel property feeds are available only to approved pilot advertisers, and that this isn’t an open beta. You need an ad account approved for the beta and permission to manage its feeds. Setting up SFTP also needs permission to manage feed credentials.

If the Hotels option doesn’t appear in your account, OpenAI says to contact your OpenAI account team. Our view: travel brands should prepare the file anyway. A clean property list with good images and pages is useful for every channel, and you’ll be ready if access opens.

How to create a hotel feed in Ads Manager

OpenAI lists five steps.

  1. Open Ads Manager and select the approved ad account.
  2. Open Feeds, select Create Feed and choose Hotels as the inventory type.
  3. Name the feed and choose how to send the file: Upload CSV or TXT, Hosted URL or SFTP connection.
  4. Create the feed and finish the setup for the method you chose.
  5. Check Upload History for processing status and row diagnostics, then fix rejected rows and upload a corrected full snapshot.

Keep one feed and refresh it with new snapshots. Don’t create a new feed for every update, and keep each hotel_id the same between uploads.

Through the Ads API, you create the feed with the hotel inventory type and schema profile, then set up SFTP. Hosted URLs and browser uploads are Ads Manager workflows only.

The file format

Send a full snapshot as a UTF-8 CSV or tab-delimited TXT file. Most values are ordinary columns, but some must be JSON inside a cell, and some use flattened column names.

ValueHow it’s written
Scalar fieldsOrdinary columns, such as hotel_id, name or base_price
ImagesA JSON array in the images cell
LocationFlattened columns, such as location.address.city
NeighborhoodsA JSON array in the location.neighborhoods cell
Guest ratingsNumbered, flattened columns: guest_rating[0].score and so on
Ads metadataA JSON object in the ads_metadata cell

Don’t add top-level columns called location or guest_ratings. In CSV, wrap any cell containing commas, quotation marks or line breaks in double quotes, and double any quotes inside it.

Required fields

Every row needs these fields, with valid values, even rows marked as archived.

ColumnRules
hotel_idA stable, case-sensitive ID, up to 100 characters
nameThe display name, up to 150 characters
descriptionA static description, up to 5,000 characters
urlThe property’s landing page, as a full web address
images1 to 20 images, as a JSON array. The first valid image is the main one
location.address.cityThe city, up to 100 characters
location.address.country_codeTwo-letter country code, such as US
location.coordinates.latitudeA number from -90 to 90
location.coordinates.longitudeA number from -180 to 180

The country code describes where the property is, not where you want to show ads. Ad locations are set on the campaign. Landing pages and images must be publicly accessible.

Optional fields worth adding

ColumnWhat it addsRules
brandThe hotel or chain brandUp to 70 characters, separate from your advertiser name
base_priceA static starting priceAn amount and currency code, such as 149.00 USD
star_ratingThe hotel’s star rating1.0 to 5.0 in half steps
categoryOne hotel categoryUp to 200 characters
location.neighborhoodsUp to 20 neighborhood namesA JSON array
guest_rating[n].*Up to 20 rating groupsEach needs system, score, maximum score and reviewer count
ads_metadataYour own labelsUp to 50 entries, as a JSON object
is_ads_eligibleWhether to process the property for adstrue or false

The base price isn’t a quote. OpenAI says it’s a static starting price, not a price for particular dates or a statement of availability. We’d set it to a price you offer today, because the ad policy bans unfounded pricing claims.

Set is_ads_eligible to true for every property you want to advertise. OpenAI notes that eligibility doesn’t guarantee delivery: properties must still pass review and serving requirements.

Images

The images cell holds a JSON array of up to 20 image objects. Each needs a url and can carry up to 20 tags. Invalid objects are dropped if at least one valid image remains, and a row with no valid image is rejected. Duplicate image addresses are removed.

We’d put your strongest exterior or room photo first, since the first valid image is the main one. OpenAI’s general creative guidance asks for simple, relevant images that match the message.

Guest ratings

Guest ratings are optional, and you can include up to 20 groups. Each group uses four numbered columns, starting at zero: rating_system, score, max_score and number_of_reviewers. Every field in a group must be filled, and a fully blank group is ignored.

The maximum score can be up to 100. A score of 8.8 out of 10 from 425 reviewers is written as four columns in the guest_rating[0] group.

Preparing the data

This is how we’d prepare a group with many properties. Most of the data already exists in a booking engine, a property management system or a channel manager. The work is mapping it to OpenAI’s columns.

Feed columnUsual source
hotel_idYour internal property code, which should never change
name, description, brandYour website or content system
urlThe property’s page on your own site, not a third-party listing
imagesYour photo library, on public addresses
location fieldsYour property records, with coordinates checked on a map
guest ratingsThe review systems you already display

Check the coordinates before upload. A pin in the wrong city sends the right ad to the wrong conversation.

What’s not supported in the beta

OpenAI lists what the beta leaves out. Columns outside the format aren’t read at all.

Illustration: a hotel feed carries a starting price, not dates or rooms
Not supportedWhat to know
Rooms, offers and dated staysOne row describes one property
Dynamic rates and date availabilitybase_price is static
Partial updates and the Delta APISend a full snapshot every time
XML filesCSV or tab-delimited TXT only
Columns such as room_id, checkin_date, sale_price, tax or phoneThey aren’t ingested
Top-level custom_label columnsPut labels inside ads_metadata instead

Checking the upload

Check Upload History after every snapshot. A completed transfer doesn’t mean every property was accepted. File transfer and processing are separate. Check Upload History in Ads Manager for processing results and row diagnostics, then fix rejected rows before the next full snapshot.

For SFTP, put the file directly in the root folder, not a subfolder. Changing SFTP credentials replaces the old method, so update any automated uploads when you do.

An upload checklist

  • Every required field filled on every row, including all four required location columns.
  • images, location.neighborhoods and ads_metadata written as valid JSON.
  • Guest ratings as complete numbered groups, not a single JSON cell.
  • Public landing pages and images, with the sample addresses replaced by your own.
  • is_ads_eligible set to true for properties you want to advertise.
  • base_price treated as a static starting price.
  • hotel_id values unchanged since the last upload.

Where hotel feeds fit in a travel campaign

Hotel feeds suit groups with many properties; single hotels can use standard ads. That’s our view, and here’s why. Travel and experiences are among the consumer categories OpenAI says ads focus on in the early period. Hotel feeds suit groups and chains with many properties, where writing an ad for each one doesn’t scale.

Single properties can run standard ads now, with context hints that describe the stay. Our context hints guide explains how to write them. Our ad examples include a city break, and our context hint examples include a boutique hotel. Retail catalogs use the product feed instead. Once a feed is live, our reporting guide covers how to read product-level results.

Questions

Can any hotel use ChatGPT Ads hotel feeds?

Not yet. OpenAI says hotel property feeds are available only to approved pilot advertisers in a limited beta. If the Hotels option doesn’t appear when you create a feed, contact your OpenAI account team. Other hotels can still run standard ChatGPT Ads.

Can I use my product feed for hotels?

No. OpenAI says hotel feeds use their own hotel_property_v1 format, and you shouldn’t use the product feed schema for them. Each row is a property, not a product, with different required fields such as coordinates. Keep the two feeds separate, each in its own format.

Does the feed show live room prices?

No. The beta doesn’t support dynamic rates, room types or availability for particular dates. The optional base_price is a static starting price. Set it to a price you offer, and keep it current. The landing page can then show live rates.

How do I update the hotel feed?

Upload a new full snapshot to the same feed. The beta doesn’t support partial updates or the Delta API. Keep each hotel_id stable between uploads, and check Upload History after each one. Don’t create a new feed for each update.

Which file formats are accepted?

UTF-8 CSV or tab-delimited TXT. You can upload the file in Ads Manager, give it a hosted address or send it over SFTP. Through the API, hotel feeds use SFTP. XML isn’t supported, so convert any XML export from your booking system first.

Will every property in the feed get ads?

No. Eligibility doesn’t guarantee delivery. Each property still has to pass review and serving requirements, and campaign settings decide where ads can appear. Check Upload History for rejected rows first.

About the author

Editorial team

Guides and trackers from the ChatGPT Ads Agency team. Every platform fact links to OpenAI's own documentation.

Want a straight answer on ChatGPT Ads?

Tell us your category, markets and budget, and we’ll tell you:

  • whether the channel fits your business
  • what a fair first test would cost
  • what we’d do first

Free 30-minute call, and we reply within 24 hours. Minimum ad spend US$3,000 a month.