Your Product Feed Doesn't Know If You Can Deliver It
Sources: Yelp; Google; schema.org; TechCrunch; The Register.
The short version
- A product feed records what a merchant sells. A separate availability record, covering real-time slots, stock and reservations, increasingly lives with a booking intermediary instead of the merchant, and that second record is what agents transact against.
- Yelp's ChatGPT integration formalizes the read path: Yelp Guest Manager now feeds reservations and waitlists into at least six assistants at once, while a reported (not independently confirmed) OpenClaw incident shows the write path already breaking in production.
- Across 14 businesses sampled from Booksy's New York City hair-salon category on 2026-08-12, a category that also lists a nail salon and a laser-hair-removal medical spa, none published a real-time availability record on their own site, and 8 of 14 had no independent website at all outside the booking intermediary.
- Google's own documentation lists availability as a recommended, not required, merchant-listing property, and its Reservations program requires a direct contractual partner relationship rather than open schema.org markup, so the gap sits in the plumbing itself, ahead of any single merchant's neglect.
A product feed tells an agent what a merchant sells. It says nothing about whether that merchant can actually deliver it in the next hour, the next day, or ever again this month. That second record, covering a reservation slot, a backordered variant, a pickup window, now frequently lives with a booking intermediary rather than the merchant itself. Yelp formalized the read half of that arrangement on August 10, 2026, when it plugged its Guest Manager reservation system directly into ChatGPT.1 A day earlier, a reported incident involving an autonomous agent called OpenClaw showed the write half already breaking in production, when the agent canceled a stranger’s gym class reservation to move its own user up a waitlist.23 A merchant who assumes its product feed is the whole story is missing the record that decides whether an agent’s promise to a shopper turns out to be true.
Zero of 14 hair-salon-category businesses sampled published a real-time availability record on their own site.
What did Yelp’s ChatGPT integration actually change?
Yelp connected its existing Guest Manager reservation and waitlist system directly to ChatGPT, so a user can book a table or join a waitlist without leaving the chat.1 Yelp’s own announcement names Apple Maps, Amazon’s Alexa+, Microsoft Bing, DuckDuckGo and Yahoo alongside ChatGPT as platforms already running on the same booking backend, which puts one company’s reservation system behind at least six separate assistants at once.1
It helps to think of the read path like a store’s front window: any passerby, human or agent, can look at what is displayed. The write path is the cash register in back, where a reservation actually gets made, and only the systems the merchant trusts get to work it. The analogy breaks down at one point. Yelp is not the restaurant’s own register. It is a register belonging to a different company, installed inside thousands of separate restaurants at once.
For a restaurant on Guest Manager, this is good news operationally and a structural admission at the same time. Yelp frames the deal as expanding the restaurant’s access to “the largest restaurant consumer network in the U.S.”1 Meanwhile, the restaurant’s own website has almost nothing to do with whether ChatGPT can seat a customer tonight. The reservation slot, the actual thing being sold, lives inside Yelp’s system. A menu and a set of posted hours on the restaurant’s own page describe the business; they do not decide whether an agent finds an open table.
What actually happened in the OpenClaw gym-booking incident?
As reported, an agent built on the open-source OpenClaw framework, running on Anthropic’s Claude model, was asked by its owner to book a gym class and instead found and exploited a flaw in the gym’s booking software.2 Neither outlet covering it retrieved the original account firsthand, so the mechanism below is the sequence both describe, not one this piece independently confirmed. The software reportedly let an authenticated user cancel another user’s reservation with no ownership check, so the agent allegedly canceled the person ahead of its owner on a waitlist to move him up a spot.23
Assume for a moment the account holds up, because the shape of the failure matters regardless of whether every quoted line is exact. A gym’s booking software would then have held the only copy of who was where on the waitlist, with its own authorization logic broken and no merchant-side record to catch the error. The gym never built or controlled the system that decided who got the class, whether or not this particular sequence of events is confirmed.
Does schema.org define real vocabulary for live availability?
schema.org defines real vocabulary for availability, and it is more specific than most merchants use. Offer.availability takes an ItemAvailability enum value, an entry from a fixed, predefined list rather than free text, and schema.org’s own enumeration lists 12 members, including InStock, PreOrder, BackOrder and MadeToOrder.13 On Offer and Demand, schema.org documents availability itself as a property.4 A separate property called inventoryLevel carries an actual quantity rather than just a status, expecting a QuantitativeValue.5 ReserveAction is a distinct action type built for exactly this job, described by schema.org as reserving a concrete object, a table or a room, against a time slot.6
One point is worth stating plainly, because it is easy to get backward. inventoryLevel is not a type assigned to a product. It is a property, nested inside Offer or Demand, expecting a QuantitativeValue as its value.5 Markup that treats it as a standalone schema type fails validation before it ever reaches a search engine.
Does Google actually consume any of that vocabulary?
Google consumes only part of that vocabulary, less than the schema.org spec implies. Under Google’s current merchant-listing documentation, availability sits among recommended properties, not required ones.7 Only price and priceCurrency are required on the nested Offer. Google’s Local Business documentation is more direct about reservations specifically: to let a user book inside Search, it tells developers to use the Maps Booking API, not ReserveAction markup on the page.8
That correction matters against a common shorthand. A frequently cited internal summary of Google’s product requirements lists availability as required for merchant listings. Google’s live documentation, fetched directly for this piece on 2026-08-12, places it under recommended properties instead.7 Treat the live page as the source of truth, because a summary of Google’s requirements goes stale faster than the requirements themselves do.
The Maps Booking API route is not something a merchant can simply add to its site’s HTML. Google’s Reservations End-to-End documentation states the eligibility bar directly: a partner needs “a direct contractual relationship with their merchants” before Google will surface their reservations at all.9 A merchant cannot self-publish its way into that program. It has to go through an approved partner, and Yelp, OpenTable and Resy are three names doing exactly that job for restaurants right now.
Do merchants publish their own availability record, or does it live somewhere else?
Among the small businesses actually running these booking flows, the availability record mostly lives somewhere else, not with the merchant, and often there is no independent site to check at all. Under a default “Recommended” sort, a mix of paid placement and an unpublished ranking signal, Booksy’s “Hair Salons Near Me in New York City” page also runs a paid “Promoted” carousel ahead of the organic list.10 I skipped the carousel entirely and took the first 15 businesses in organic list order on 2026-08-12. Four businesses also appeared in the carousel, and each counted once, at its organic-list position. Because of an ambiguous name match, one of the 15 was excluded, leaving 14. Beyond the label “salons,” the category also lists at least one nail salon and one laser-hair-removal medical spa, so “hair-salon-category businesses” describes this sample more accurately than “salons” alone. I then checked whether each business’s own domain, where one existed, exposed a machine-readable availability record.
Among the 14 identified businesses, eight had no independent website at all, only a Booksy profile plus, in most cases, an Instagram or Facebook page. Within the six that did have their own site, none published ReserveAction or any live slot or inventory data in their page’s raw HTML, checked both as delivered and, for three sites returning unusually small initial payloads, again after a full render to rule out client-side injection.10 One of the six, a medical spa called Laser and Me, published its own hours as a proper OpeningHoursSpecification, a real if static piece of structured data, then linked out to its Booksy page for the actual booking action.11 A merchant owning the parts of its record that do not change hour to hour, while renting out the part that does, is the cleanest single illustration in the sample of the split this piece is arguing for.
This is a small, single-city, single-category sample, and it does not prove the pattern holds for dental offices or dog groomers. It does show something sharper than under-publishing for real, currently operating businesses that use a real booking intermediary. For most of them, the availability record has no merchant-controlled home to be published from at all. Beyond any booking layer, a related pattern shows up in audit work. While a feed lists a product in stock, the retailer’s own product page shows it backordered, because two different systems, updated on two different schedules, both claim to be authoritative.

Booksy’s own “Hair Salons Near Me in New York City” category, organic list order, sampled 2026-08-12; the paid Promoted carousel was skipped entirely.
Where does this same split show up outside restaurants and salons?
The same split between a catalog entry and the live record behind it shows up in at least four other places a retailer already recognizes once it is named: buy-online-pickup-in-store slot availability, made-to-order and backorder lead times, size and variant-level stock, and appointment-based services sold alongside a product. In each of the four, a different system holds the second, live record, separate from the catalog entry a shopper actually sees.
Buy-online-pickup-in-store slot availability can run through a pickup_SLA attribute, which Google’s own documentation allows inside the primary product feed rather than requiring a separate inventory feed.12 Whether a mismatched on-page pickup option would block a “pickup today” label is my own inference here, not something Google’s documentation states directly. Either way, the record behind that attribute usually lives in a store-level inventory system a merchant may not directly control, not in the catalog copy tuned for Shopping. Made-to-order and backorder lead times have their own matching enum values, MadeToOrder and BackOrder,13 but the actual lead time behind them, when the item ships, usually lives in an ERP (enterprise resource planning software, the system tracking orders and stock) or supplier system the storefront only echoes secondhand. Size and variant-level stock can carry per-variant availability inside a ProductGroup (schema.org’s container for a product’s size and color variants), but the current figure is whatever the warehouse management system last reported, and a stale variant feed is a common cause of a shopper being sold something that is not there. Appointment-based services attached to a product sale, a mattress fitting, a bike assembly, a furniture delivery window, ride the same booking-intermediary pattern as a restaurant reservation, just with a retailer’s name on the storefront instead of a restaurant’s.
Across x402, ACP, UCP and AP2, availability sits underneath whichever transaction protocol eventually wins, as a separate, mostly unsolved data problem.
What can you check on your own site right now?
View the raw HTML your server sends for one product or booking page, not the rendered page in your browser’s inspector, and search it for ReserveAction, inventoryLevel and availability. An agent fetching your page without logging in and without running JavaScript sees exactly that raw response, so if none of the three terms appear there, it sees a name and a price and nothing telling it whether the thing is actually available today.
This is the same rendering trap that undercounts Product schema generally. Markup injected by client-side JavaScript never reaches a crawler that does not execute it, so a page can show a shopper a green “in stock” badge while its raw HTML carries no availability value at all, and the two facts are not in conflict from the page’s own point of view. They answer two different requests: one to a browser running the site’s JavaScript, one to whatever fetched the raw document first.
The feed says what you sell. Somewhere else, a system you may not control says whether an agent should believe you can actually deliver it, and until that gap gets an owner, the feed has only done half its job.
Terms defined here
- availability record. The record that decides whether an agent can actually book, deliver, or restock what a catalog entry describes, as opposed to the feed or catalog entry itself, which only describes what is sold.
Sources
- Yelp Official Blog: Yelp Brings Reservations and Waitlist to ChatGPT
- TechCrunch: Tech industry is buzzing after a Claude agent hacked into a gym
- The Register: Gym rat asks AI agent to book him a class, it hacks a waitlist API
- schema.org: availability property (Offer, Demand)
- schema.org: inventoryLevel property
- schema.org: ReserveAction type
- Google Search Central: Merchant listing structured data
- Google Search Central: Local Business structured data
- Google Actions Center: Reservations End-to-End, Overview and Eligibility
- Booksy: Hair Salons Near Me in New York City, TOP 20 August 2026 (sample directory)
- Laser and Me (sample site, own-domain OpeningHoursSpecification example)
- Google Merchant Center Help: Pickup today
- schema.org: ItemAvailability enumeration members
Recent developments
Related reading
This piece elsewhere