A frame around your checkout breaks the only numbers that matter
If the booking happens inside somebody else's frame, your own site cannot see it happen. Every campaign you run is then measured on the step before the sale.
Rendered on your domain, not embedded from ours
The widget renders inside your page as part of it. It inherits nothing it should not and it does not sit behind a boundary your own scripts are locked out of.
That is the whole difference. Your styling reaches it, your consent banner governs it, and your site knows when a booking completed because it happened on your site.
The source lands on the booking, not only in a dashboard
Analytics, pixels and conversion tracking are first-party and fire on your own domain, so a completed booking is a conversion your advertising can actually count.
The source is also written onto the booking record itself. Not a separate events dashboard you cross reference by timestamp: the campaign, the referrer and the landing path sit on the row, so you can report revenue by source using the same figures your accounts use, months later, without stitching two systems together.
Under a second, and our name is optional
Load target is under a second on a normal mobile connection. Availability is the first thing on screen, because a customer who waits for a spinner is a customer deciding to ring somebody else.
Attribution to us is a flag you can switch off. Not a paid upgrade, not a plan tier. Your customers are booking with you, and whether our name appears at the bottom of your checkout is your call.