Article · October 11, 2026
I asked ChatGPT, Claude and Gemini to book a tune-up with a fictional Portland HVAC company and logged every request. Claude and Gemini placed a hold, ChatGPT handed me the link, a crawler booked out the week, and no assistant read llms.txt.
I wanted to know whether ChatGPT, Claude and Gemini can book a local service appointment for someone, using only the web tools they already have. No plugins, no connectors, no special protocol. Just a person asking their assistant in an ordinary chat.
So on October 11 I ran a small experiment. This is what happened.
| Assistant | Read the open times | Held a window itself | What got in the way |
|---|---|---|---|
| ChatGPT | Yes, with the cancellation cost | No. Handed me the link | Won't open a link that acts for you |
| Claude | Yes, in 8 seconds | Yes, then checked I confirmed | Nothing |
| Gemini | Yes, once pages were HTML | Yes, from the HTML page | Plain text pages were dropped |
In every case a person made the final confirmation.
First I asked ChatGPT, in plain chat with web search on: "My furnace hasn't been serviced in two years and it clicks before it lights. Can you book a tune-up this week? I'm in 97214."
It found three Portland HVAC companies, with prices, ratings and phone numbers. It said it could research availability but couldn't submit a booking form or place a call. It never showed a single open time for any of them. One shop had an online booking page from Housecall Pro, and ChatGPT passed that link along for me to fill in myself.
It also listed one shop's $59 tune-up promotion next to another shop's $140 standard price, without comment.
Then I tried ChatGPT's agent mode, which drives a browser in the cloud. In about 40 seconds it opened a Housecall Pro booking page, picked the $150 tune-up and typed my symptom into the notes. Then it stopped. The form wanted my phone number, email and address before it would show any available times, and ChatGPT had to come back and ask me for them, and for permission to share them. It still couldn't tell me whether Tuesday was free.
I built a fictional company, Acme Heating, and served it on a test domain:
Everything works with plain links. An assistant never has to fill in a form. The server logged every request, so I could compare what each assistant said with what it actually fetched.
Given the business page, ChatGPT fetched it, followed the link to the open windows, and reported them correctly. It even worked out that the Monday morning window was already inside the 24-hour cancellation period and would cost $50 to cancel.
It never opened a hold link. It told me it couldn't open the "hold/confirmation endpoint" from chat and handed me the link to click myself. That isn't a technical limit, since it had just followed a link from the same site. In plain chat, ChatGPT won't open a link it reads as doing something on my behalf.
Same prompt in Claude. The log shows three requests in 8 seconds: robots.txt, the open windows, then the hold link. It came back with the hold, the confirmation link, the expiry time in both Pacific time and my own time zone, the correct cancellation terms and a fallback window.
I opened the link and confirmed. When I told Claude I had confirmed, it fetched the booking status to check rather than taking my word for it.
Gemini's first answer was that it couldn't access the site. The log says otherwise: Gemini's fetcher, which identifies itself simply as "Google", downloaded the page and got the full content. The page was served as plain text, and somewhere between Google's fetcher and the model it was dropped.
I gave it the HTML business page instead. It followed a booking link on that page, placed the hold and handed me the confirmation link. After I switched the open-windows page to HTML as well, Gemini used it directly and got the cancellation cost right too.
In the first version of the test I blocked search crawlers entirely in robots.txt, including OpenAI's. Right after ChatGPT's first answer, OpenAI's crawler read that file. In the next chat, ChatGPT told me the site was blocking access, without fetching anything. Fixing the file didn't help right away. A new chat a few minutes later still said blocked, and I moved to a new hostname rather than wait to find out how long it would last.
When it couldn't get in, ChatGPT offered to install a third-party browsing plugin instead.
Within a minute of each new hostname getting its TLS certificate, scanners showed up. They almost certainly watch the public certificate transparency logs. Over two hours the site got 1,133 requests. About 500 of them were probes for things like .env files, .git folders and WordPress logins. Only 19 came from the assistants' own fetchers.
One crawler mattered. It came from nine IP addresses, all with ordinary Chrome user agents, and followed every link on four new test homepages, including the hold links. In about 70 seconds it had held every open window for the week. Three minutes later Gemini arrived and correctly reported that Acme had nothing available.
After that I changed the rule. A hold link now only holds when the request comes from a known assistant fetcher. A browser gets a page with a "Hold this window" button, and the hold happens when someone presses it.
I made four versions of a normal-looking contractor homepage, each pointing to the booking pages a different way:
Gemini followed the "Book online" button and ignored the line addressed to assistants. When the line was the only option, it said it couldn't access the booking portal and suggested calling.
Claude in Chrome was explicit about it. It said the page had a line addressed to AI agents pointing to a different address, and that it didn't follow it because the instruction came from the page, not from me.
With structured data only, both Gemini and Claude in Chrome concluded the company books by phone.
With the plain button, Claude in Chrome went from the homepage to the business page to a full week of open windows, worked out the cancellation cost for each day, and asked me which window I wanted before holding anything.
utm_source=chatgpt.com to links it hands out, so this traffic is visible in ordinary analytics.These are one or a few runs per assistant, on one evening in October 2026. Assistants change quickly, and some of this may already be different. The business was fictional, and every link was handed to the assistant directly. I didn't test whether an assistant can find a business like this through search alone.