Docs
← cabintale.com EN · CZ Email support
Customize your site · Tutorial

Embeddable booking widget

Get a snippet, paste it on your website, take direct bookings.

By the end of this guide, you'll have your booking widget live on your own website — guests pick dates, fill in a form, and you receive the booking. No portal redirects.

Before you start

What you'll need

  • A property under Your setup → Places (or a service under Services)
  • Edit access to your website (or a developer who has it)
  • ~5 minutes
What you'll achieve
  • A working widget visible on your site
  • Guests can pick dates and submit a booking
  • The choice between two embed types (script or iframe), with the right one for your setup

Step 1: Open the widget detail page

The first widget is created automatically during guided setup. To open it:

Sidebar → click your property under PlacesWidgets → click the widget in the list.

You'll see sections for Name & language, Type & styling, a Preview, the Embed code, and the Booking dialog fields.

The Embed code section only appears after the widget has been saved at least once. If you can't see it, click Save widget at the top.

Step 2: Pick an embed type

Cabintale offers two embed variants. Both are equivalent functionally — pick whichever fits your website best.

Script-based (recommended for most sites)

<cabintale-root data-place="[place-token]" data-token="[widget-token]"></cabintale-root>
<script src="https://admin.cabintale.com/widget-embed.js" async></script>

What it does:

  • Uses a custom HTML element (<cabintale-root>) plus a small JS loader.
  • Auto-resizes to fit the calendar — no fixed height.
  • Opens the booking dialog as a fullscreen overlay on the parent page (looks great on mobile).

Use it on: WordPress, plain HTML sites, Squarespace, Webflow, custom CMSs — anywhere you can paste two lines of HTML.

Iframe (simpler, more conservative)

<iframe
  src="https://admin.cabintale.com/widget/[widget-token]"
  width="100%"
  height="450"
  frameborder="0"
  style="border: none;"
  scrolling="no">
</iframe>

What it does:

  • Renders the entire widget inside a fixed-size iframe.
  • Doesn't depend on the parent site allowing custom scripts.
  • Booking dialog opens inside the iframe (so it's bounded by the iframe's height).

Use it on: site builders that block external scripts, intranets with strict CSP, or anywhere "just an iframe" is the path of least resistance.

The iframe heights are fixed by default (450px for places, 550px for services). You can adjust the height attribute if your design needs it.

Step 3: Copy the code

Toggle to your chosen variant, click Copy Script Code (or Copy Iframe Code) — the button briefly confirms it copied.

Step 4: Paste it on your website

Where to paste:

PlatformWhere
WordPressEdit a page → add a Custom HTML block → paste
SquarespaceAdd a Code block → paste
WixEmbed → HTML iframe (use iframe variant)
WebflowAdd an Embed component → paste
Plain HTMLAnywhere inside <body>

Save and publish the page. Visit it — the widget should render where you pasted the code.

Step 5: Test a booking

Click your widget like a guest would. Pick a date, fill in the form, submit. Check that:

  • The booking shows up in Bookings in the admin.
  • You receive the host email (if email notifications are turned on).

If you set the property to Request bookings mode, the booking will be pending until you confirm it (see Instant vs. Request booking).

What guests see

  • Calendar with 1, 2, or 3 months visible (configurable in look & feel).
  • Available dates are clickable; booked or zero-priced dates are blocked.
  • After picking dates, a booking dialog opens with a configurable form (see Custom booking form).
  • On submit, the guest sees a confirmation message — different wording for instant vs. request mode.

The widget URL is public-but-unguessable (a UUID token). It works standalone too — paste it into a browser and you get the same widget. Useful for sending a direct booking link by email.

Troubleshooting

SymptomCauseFix
Widget doesn't render at allProperty or widget is set to InactiveOpen the property and the widget; both must be Active
Embed code section is emptyThe widget isn't saved yetClick Save widget at the top of the detail page
Iframe is too short — booking dialog gets clippedThe default 450/550px height isn't enough for your form lengthIncrease the iframe height attribute, or switch to the script embed (it auto-sizes)
Copy button doesn't seem to workSome browsers block clipboard access on insecure pagesUse HTTPS, or select the code text and copy with Ctrl+C / Cmd+C
Widget shows the wrong languageWidget language is set to something elseOpen the widget detail and change Widget language (see Languages and currencies)
The script embed throws a CSP error in the browser consoleYour site has a strict Content Security PolicyAllowlist https://admin.cabintale.com for script-src and connect-src, or switch to the iframe embed

Related guides

Still stuck?

We reply to every email within one business day.

Email support →