Embeds
Embeddable scheduling widget for your website
One script tag. Inline calendar, popup from any button, or a floating "Book a meeting" button. If a visitor's browser blocks the script, they get a plain link to your booking page instead. And flat-rate pricing: no per-seat fees, ever.
Start free trial15-day free trial · no credit card required
The whole install
Two lines of HTML. The link inside the div is the fallback if the script is blocked.
<script src="https://synqslot.com/embed.js" async></script>
<div data-synqslot="yourname/30min">
<a href="https://synqslot.com/yourname/30min">Book a time</a>
</div>How do you add a scheduling widget to a website?
Paste one <script> tag anywhere on the page, then a <div> with your booking link where the calendar should appear. The script turns that div into an auto-resizing iframe of your booking page; the plain link you leave inside the div is what visitors see if the script is blocked. It works on platforms that let you paste a script and HTML (WordPress, Webflow, Squarespace, Shopify, Framer, plain HTML, React), subject to each builder's plan rules; Wix runs pasted HTML inside its own frame and Notion takes only a URL. There is no per-seat fee and nothing extra to install.
- 1Create a booking link in SynqSlot (Dashboard → Booking links).
- 2Open Settings → Embed on your site and copy the snippet — it already has your link filled in.
- 3Paste it into your site builder's HTML/embed block and publish. Book a test meeting from the live page to confirm.
Live demo
This is the real widget, not a mockup.
It's installed on this page with the same two lines you'll paste on yours. This demo uses sample times: click through the whole flow, nothing is booked and no email is sent.
Source on this page: <div data-synqslot="demo/30min">
Install
Add it in 60 seconds
Paste the script once, then a div wherever the calendar should appear. Your own snippet, with your booking link filled in, is in Settings → Embed.
1. The script — once per page, anywhere
<script src="https://synqslot.com/embed.js" async></script>2. The div — where the calendar goes (replace yourname/30min with your booking link)
<div data-synqslot="yourname/30min">
<a href="https://synqslot.com/yourname/30min">Book a time</a>
</div>Instructions for your platform
The same snippet everywhere — only where you paste it changes.
Add the scheduling widget to WordPress
- 1Open the page or post in the block editor and click the + button where you want the calendar.
- 2Search for the Custom HTML block and add it.
- 3Paste both lines below into the block.
- 4Click Update (or Publish) and check the published page, not only the editor.
<script src="https://synqslot.com/embed.js" async></script>
<div data-synqslot="yourname/30min">
<a href="https://synqslot.com/yourname/30min">Book a time</a>
</div>Self-hosted WordPress keeps the script only for users allowed to post unfiltered HTML (typically Administrators). WordPress.com strips scripts from the Custom HTML block unless the site is on a paid plan with plugins/hosting features enabled. Using Elementor or another page builder? Use its HTML widget. Adding the widget to many pages? Put the script line in a header-and-footer plugin and just the div on each page.
Add the scheduling widget to Webflow
- 1In Site settings → Custom code, paste the script line into Footer code and save.
- 2Open the page in the Designer and add a Code Embed element where the calendar should go.
- 3Paste the div into the Code Embed element and save.
- 4Publish the site. Scripts show as a placeholder on the Designer canvas; check Preview mode or the published site.
<script src="https://synqslot.com/embed.js" async></script>
<div data-synqslot="yourname/30min">
<a href="https://synqslot.com/yourname/30min">Book a time</a>
</div>Custom code needs a paid Webflow Site plan or a Core, Growth, Agency or Freelancer Workspace. Skipping Footer code? Paste both lines into the single Code Embed element instead — it works the same on one page.
Add the scheduling widget to Squarespace
- 1Edit the page and add a Code block where the calendar should appear.
- 2Paste both lines below into the Code block (leave the type set to HTML).
- 3Save and view the live page.
<script src="https://synqslot.com/embed.js" async></script>
<div data-synqslot="yourname/30min">
<a href="https://synqslot.com/yourname/30min">Book a time</a>
</div>Code blocks that run JavaScript, and Code Injection, need a Squarespace Core, Plus or Advanced plan. Squarespace may hide custom code while you're logged in, so check the page logged out or in Safe Mode preview. For a site-wide install, put the script line in Code Injection → Footer.
Add the scheduling widget to Wix
- 1In the editor, click Add Elements → Embed Code → Embed HTML.
- 2Choose Code, paste both lines below, and click Update.
- 3Resize the element so the calendar has room — about 750px tall on desktop.
- 4Publish the site.
<script src="https://synqslot.com/embed.js" async></script>
<div data-synqslot="yourname/30min">
<a href="https://synqslot.com/yourname/30min">Book a time</a>
</div>Wix runs custom HTML inside its own fixed-size frame, so the widget can't grow the Wix element automatically — give it enough height. Alternatively use Embed a Site with the direct widget URL synqslot.com/embed/yourname/30min.
Add the scheduling widget to Framer
- 1Press Insert and add an Embed component to the page.
- 2Set the Embed type to HTML and paste both lines below.
- 3Set the component's width to fill and give it a starting height (around 750px).
- 4Publish.
<script src="https://synqslot.com/embed.js" async></script>
<div data-synqslot="yourname/30min">
<a href="https://synqslot.com/yourname/30min">Book a time</a>
</div>If the calendar appears clipped on the published site, increase the Embed component's height — some builders render custom HTML in a fixed-size frame.
Add the scheduling widget to Shopify
- 1Go to Online Store → Pages and open the page (or create one, e.g. "Book a call").
- 2In the content editor, click the <> (Show HTML) button.
- 3Paste both lines below where the calendar should go and click Save.
<script src="https://synqslot.com/embed.js" async></script>
<div data-synqslot="yourname/30min">
<a href="https://synqslot.com/yourname/30min">Book a time</a>
</div>Prefer the theme editor? Add a Custom Liquid section and paste the same two lines.
Add the scheduling widget to Carrd
- 1Add an Embed element to the page.
- 2Set Type to Code and Style to Inline.
- 3Paste both lines below and save. Publish the site.
<script src="https://synqslot.com/embed.js" async></script>
<div data-synqslot="yourname/30min">
<a href="https://synqslot.com/yourname/30min">Book a time</a>
</div>Embed elements (Code or iframe) need Carrd Pro Standard or higher, and they only render on the published site, not in the builder.
Add the scheduling widget to Notion
- 1Notion pages can't run scripts, so use the widget's direct URL instead.
- 2Type /embed on the page and choose Embed.
- 3Paste the URL below and press Enter.
- 4Drag the frame's bottom edge to make it tall enough — Notion won't auto-resize it.
https://synqslot.com/embed/yourname/30minThis is a plain iframe embed: there's no script, so no auto-resize and no popup or floating button.
Add the scheduling widget to Plain HTML
- 1Paste the script line once, anywhere on the page (just before </body> is conventional).
- 2Paste the div where the calendar should appear. Add more divs for more booking links — the one script handles all of them.
- 3Deploy. The link inside the div shows if the script is blocked, so nothing on the page breaks.
<script src="https://synqslot.com/embed.js" async></script>
<div data-synqslot="yourname/30min">
<a href="https://synqslot.com/yourname/30min">Book a time</a>
</div>Add the scheduling widget to React / Next.js
- 1Create a client component that renders the div.
- 2Load the script in useEffect after the div is in the DOM — the snippet appends a fresh script on every mount so it also works after client-side navigation.
- 3Render <BookingWidget /> wherever the calendar should appear.
"use client";
import { useEffect } from "react";
export function BookingWidget() {
useEffect(() => {
// Append a fresh <script> on every mount so the widget also initialises
// after client-side navigation (a cached script tag won't re-run).
const s = document.createElement("script");
s.src = "https://synqslot.com/embed.js";
s.async = true;
document.body.appendChild(s);
return () => {
s.remove();
};
}, []);
return (
<div data-synqslot="yourname/30min">
<a href="https://synqslot.com/yourname/30min">Book a time</a>
</div>
);
}next/script also works for a single page load, but it won't re-run embed.js when the user navigates back to the page client-side — the useEffect version does.
Three ways to embed
Inline calendar, popup, floating button — or a routing form
Inline puts the calendar in the page. Popup opens it from any button or link. The floating button sits in the corner of every page, like a chat widget. Routing forms embed inline or as a popup — see smart routing for how forms send each visitor to the right calendar. Try two of them live:
Inline booking widget
The calendar renders in the page, in a container you control. Best for contact, demo and service pages where the visitor has already decided to talk.
<div data-synqslot="yourname/30min">
<a href="https://synqslot.com/yourname/30min">Book a time</a>
</div>Popup booking widget
Put the attribute on any button or link — a hero CTA, a navbar item, a pricing-page button — and the calendar opens in an overlay when clicked. Escape or a click outside closes it.
<a href="https://synqslot.com/yourname/30min" data-synqslot="yourname/30min" data-mode="popup">
Book a time
</a>Floating "Book a meeting" button
One script tag, nothing else. A persistent button sits in the bottom corner of every page it is on (like a chat widget) and opens the calendar. data-text, data-color and data-position="left" set the label, colour and side.
<script src="https://synqslot.com/embed.js" async
data-synqslot-float="yourname/30min"
data-text="Book a meeting"
data-color="#4F46E5"></script>Inline routing form
A routing form in the page instead of a single calendar: it asks a couple of questions and sends each visitor to the right person or booking link.
<div data-synqslot-form="discovery-call">
<a href="https://synqslot.com/r/discovery-call">Book a call</a>
</div>Popup routing form
Put the attribute on a button or link and the form opens in an overlay when clicked — Escape or a click outside closes it. Ideal for pricing pages and navigation bars.
<a href="https://synqslot.com/r/discovery-call" data-synqslot-form="discovery-call" data-mode="popup">
Book a call
</a>Screenshots
What you'll see in the product
Unedited captures from a SynqSlot account — the embed settings page and the widget running on a page.


Limitations
What the widget doesn't do (yet)
Read this before you commit to a layout. These are current limits, not fine print.
- The floating button is one per page: a second data-synqslot-float declaration is ignored. Put it on the script tag (or one element), not in a repeated template partial.
- It is an iframe, not native markup. Your site's CSS can't restyle the inside of the calendar; branding is the booking link's accent colour and the optional "Powered by" mark.
- Widgets are initialised once, when the page loads. If your app adds the div later (single-page apps, tabs that mount on click), append a fresh embed.js script after the div exists — the React snippet below shows how.
- The frame starts at 700 px tall and shrinks or grows once the booking page reports its height, so there is a brief layout shift on first paint.
- Prefill comes from your page's query string (?name=&email=&company=), not from attributes on the div.
- Booking inside the widget needs third-party iframes to be allowed. A browser set to block all third-party frames shows the fallback link instead of the calendar.
- If your site sends a Content-Security-Policy header, you must allow script-src and frame-src https://synqslot.com or the widget will be blocked.
Compared
Why teams choose it over Calendly's embed
The widget is the same product as the hosted booking page — every feature the page has, the embed has.
| Feature | SynqSlot | Calendly embed |
|---|---|---|
| Pricing | Flat rate — $6/mo solo, $27/mo for up to 5 people, $35/mo for up to 10 | Per seat — every host who takes bookings is a paid seat |
| If the script is blocked | The plain booking link you put inside the div shows instead, and opens the hosted booking page | Not compared here — see Calendly's embed docs |
| Auto-resizing iframe | Yes — grows to fit each step (it does not shrink back, and on narrow screens the time list scrolls in its own box) | Yes |
| Prefill from the page URL | Yes — ?name=&email=&company= on your page are forwarded automatically | Yes — via URL parameters or embed options |
| Remove the vendor's branding | Every plan | Paid plans only |
| Custom intake questions | Every plan, inside the widget | Yes |
| Works on any CMS | Yes — anywhere you can paste HTML | Yes |
Calendly details reflect its public plans and embed documentation at the time of writing; check calendly.com for current terms.
FAQ
Embedding questions, answered
Does the scheduling widget work without JavaScript?
Partly, and it depends on how it's installed. With the standard install, embed.js has to run to create the calendar: if a visitor's browser blocks it or has JavaScript off, they see the plain booking link you put inside the div, which opens your hosted booking page. The booking page itself (hosted, or inside the frame) is rendered on the server and built so a visitor can pick a day and time and submit the form without JavaScript; we haven't re-run that full no-JavaScript booking end to end since October 2026, so treat it as a fallback rather than a guarantee.
Will the embed slow down my website?
embed.js is small and loaded with async, so it doesn't block your page from rendering, but the calendar is a full booking page loaded in an iframe, which does add requests. Measure on your own page before and after (Lighthouse or your browser's network panel). The script sets no cookies on your domain and the widget loads no analytics tags; check with your own adviser whether your cookie notice needs to mention an embedded third-party frame.
Can I match my brand colours?
Yes. Each booking link has its own accent colour (any hex value) that the widget uses, and you can remove the "Powered by SynqSlot" mark on every plan — there is no enterprise tier gating it.
Can I prefill the visitor's name or email?
Yes. embed.js forwards your page's query string into the widget, which reads name, email, company and jobTitle, so a link like yoursite.com/book?name=Jane&company=Acme arrives with those fields filled in. Other parameters (such as UTM tags) are passed along but not stored on the booking. Avoid putting personal data in public campaign links: anything in a URL can end up in browser history and analytics logs.
Does it work on WordPress, Webflow, Squarespace, Wix and Shopify?
Yes, with each builder's own limits. The two-line snippet works where you can paste a script plus HTML: WordPress (Custom HTML block; WordPress.com needs a plan with plugins enabled), Webflow (Code Embed; paid site or workspace plan), Squarespace (Code block; Core plan or above), Shopify (page HTML or Custom Liquid), Framer, Carrd (Pro Standard or above), plain HTML and React. Wix runs pasted HTML inside its own frame, so set the element's height yourself. Notion can't run scripts, so there you embed the widget's direct URL.
Is there a per-seat fee for embedding?
No. SynqSlot is flat-rate: Solo is $6/month, Team plans are $27/month for up to 5 people or $35/month for up to 10, and the embed is included on every plan with unlimited bookings.
What embed formats are available?
Three for a booking link and two for a routing form. Inline: the calendar renders in the page where you put the div. Popup: any button or link with data-mode="popup" opens the calendar in an overlay; the × button or a click outside closes it, and Escape works until the visitor clicks into the calendar. Floating button: one script tag with data-synqslot-float adds a persistent "Book a meeting" button in the corner of every page it is on, in the colour you choose. Routing forms can be inline or popup.
Can I embed a routing form instead of a single calendar?
Yes. Use data-synqslot-form="your-form-slug" on a div for an inline form, or on a link with data-mode="popup" to open the form in an overlay when it's clicked. The form asks its questions and sends each visitor to the right calendar.
Can I put more than one booking widget on a page?
Yes. Add the script once and as many divs as you like — one per booking link. embed.js initialises every data-synqslot and data-synqslot-form element it finds, and each one resizes independently.
Want the long version? Read the step-by-step embedding guide. Platform guides: Webflow, Framer, Squarespace, WordPress, Notion. Comparing tools? The best embeddable scheduling widgets in 2026.
Ready to try it?
Start your 15-day free trial — full access, no credit card required.