PepoSmart
IntegrationsPricingBlog
LoginSign up free
  1. Home
  2. /Blog
  3. /How to Embed a Booking Calendar on Your Website: WordPress, Webflow, Squarespace, Wix, Framer, Notion, Carrd and Shopify
Scheduling

How to Embed a Booking Calendar on Your Website: WordPress, Webflow, Squarespace, Wix, Framer, Notion, Carrd and Shopify

Written by

Yash Havalimane

Reviewed by

Zakir Shaikh
September 3, 2026
9 min read
Share:
Desktop monitor on a tidy desk showing website and mobile app design mockups

A booking link in an email is fine. A booking calendar on your own website is better: the visitor is already interested, already on your page, and one click away from a slot. The mechanics are simple, an iframe or a small script, but the details decide whether it looks like part of your site or like a box someone forgot to style. This guide covers the three embed styles, exact steps for the site builders people actually use, the settings that make the embed look native, and the handful of mistakes that produce a blank frame.

Quick answer: Copy the embed code from your scheduling tool and paste it into an HTML or embed block on your page. Use an inline embed where the calendar is the main content and a popup button where it is secondary. Give the frame 700 to 900 pixels of height on desktop, pass your brand colours as URL parameters, and make sure your site's Content Security Policy allows framing the booking page. PepoSmart booking pages are framable on any domain and the app generates inline, popup-widget and popup-text snippets with your colours applied.

Key takeaways

  • Every mainstream site builder has an HTML or embed element. The iframe goes there, never in a rich-text block.
  • Inline for conversion pages, popup for everything else.
  • Height is the setting people get wrong. Give it room.
  • Match colours through URL parameters, and use the booking page's own builder for the theme.
  • If the frame is blank, it is almost always CSP or a stripped tag, not the scheduling tool.

The three ways to put a calendar on a page

StyleWhat the visitor seesBest for
Inline embedThe full calendar rendered in the pageContact, demo, book-a-call and service pages
Popup widgetA floating button; the calendar opens in a modal on clickBlog posts, pricing pages, any page with another job
Popup text linkA normal text link that opens the calendar in a modalNavigation menus, CTAs inside paragraphs

All three load the same booking page. In PepoSmart, open an event, choose Add to website, and pick inline, popup widget or popup text; the dialog gives you the HTML with your colours already applied, as described in the embedding documentation. If you would rather hand-write it, the inline version is just an iframe pointing at the booking URL:

<iframe
  src="https://app.peposmart.com/book/your-username/your-event-id"
  width="100%"
  height="800"
  style="border:0; border-radius:16px;"
  loading="lazy"
  title="Book a meeting"
></iframe>

The title attribute is for screen readers, and loading="lazy" stops the frame from competing with your page's own content while it loads.

Step-by-step for each site builder

The pattern is the same everywhere: find the block that accepts raw HTML, paste the snippet, publish. What differs is the block's name.

WordPress

In the block editor, add a Custom HTML block where you want the calendar and paste the iframe. Preview, then publish. If your theme constrains content width, set the block to wide or full alignment so the calendar gets the space it needs. WordPress documents its blocks, including Custom HTML, in the block editor documentation. On WordPress.com, note that some plans restrict custom HTML; a self-hosted site has no such limit.

Squarespace

Add a Code block to the section and paste the iframe. Squarespace renders code blocks as-is, so the frame appears immediately in the editor. The Squarespace code block article covers the block; the popup button works well in a Squarespace footer or announcement bar.

Webflow

Drag an Embed element onto the page and paste the code. Webflow shows a placeholder in the designer and renders the frame on the published site. Set the element's width to 100% and give its parent enough min-height. The Webflow custom code embed lesson explains the element and its limits on free plans.

Wix

Use Embed a widget (also called Embed HTML) from the Add panel, choose Code, and paste the iframe. Wix places embeds in their own frame, so set the widget's height to at least 800 pixels or the calendar will scroll inside a small box. Wix documents the element in its embedding a site or widget article.

Framer

Add an Embed component, switch it to HTML mode, and paste the iframe. Set the component's height explicitly, since Framer will not size to the frame's content. For a popup button, paste the widget snippet into the page's custom code area instead.

Notion

Notion pages accept embeds of arbitrary URLs. Type /embed, paste the booking page URL (not the iframe tag), and resize the block. Because PepoSmart booking pages set no frame restrictions, they render inside Notion's embed block. Notion's embed help page covers the block. This is a neat way to put a booking calendar in a public Notion page or a client-facing wiki.

Carrd

Add an Embed element, choose Code, and paste the iframe. Carrd is built for one-page sites, so the inline embed in a "Book a call" section is the natural fit. See the Carrd documentation for the element.

Shopify

In the theme editor, add a Custom Liquid or custom HTML section to the page and paste the iframe. For a booking button in the header, the popup snippet goes into the theme's layout file through the code editor.

Google Sites, HubSpot CMS and everything else

Look for the element named Embed, HTML, Code or Custom code. Every builder that allows custom markup has one, and the iframe works unchanged.

Hand pointing at a laptop screen while wearing a smartwatch
Every builder has an HTML or embed element; the iframe goes there, never in a rich-text block

Making the embed look native

An embed that looks bolted on undermines the page around it. Four settings fix most of that.

Match the colours

PepoSmart booking URLs accept query parameters that restyle the page inside the frame. Colours are hex values without the leading hash.

ParameterExampleEffect
bgffffffPage background colour
text0f172aBody text colour
primary0189a8Buttons, selected time slot, accents
hide_details1Hides the event summary panel when your page already describes the meeting

So an embed matching a white page with teal accents points at .../book/you/event?bg=ffffff&text=0f172a&primary=0189a8. The Add to website dialog writes these for you.

Use the booking page's own builder for the theme

Colour parameters adjust the embed; the booking page's builder decides its structure. Every PepoSmart booking page has a page builder with themes, palettes, backgrounds and widgets such as text, video, testimonials, FAQ and a map, placed beside the booking card. Publish a look that matches your site and the embed inherits it, so the frame and the page read as one design. The builder is described on the booking pages feature.

Give it height

Below roughly 700 pixels the calendar, time list and form scroll inside the frame, which feels cramped on desktop. 700 to 900 pixels is the comfortable range. On mobile, set the width to 100% and let the page scroll; do not try to fit the whole booking flow into a phone-height frame.

Hide what the page already says

If your page has a heading, a description and a photo of the person the visitor will meet, the booking page's own summary panel repeats it. Set hide_details=1 to remove the panel and leave only the calendar and the form.

Inline or popup: choosing well

The decision is about what the page is for.

Inline when the page's job is the booking: a "Book a demo" page, a contact page, a consultant's services page. The calendar is the content, and hiding it behind a click costs conversions.

Popup when the page's job is something else: a blog post that mentions a consultation, a pricing page, a case study. The floating button keeps the page focused and the calendar arrives on demand. The popup variants use the same booking URL, so every colour parameter applies unchanged.

A useful pattern for service businesses: inline on the dedicated booking page, popup button site-wide, and plain links in emails and social profiles. Each event also gets a shareable link and a QR code for print and slides, so the same booking page works on a business card.

Team pages and multiple event types

If several people or several services should be bookable from one embed, embed the overall booking page rather than a single event. The overall page lists every public event type, so a visitor picks the service and then the time. For teams, a round-robin event gives one embed that assigns the meeting to whoever is free, and a choose-a-professional event lets the visitor pick a person first, which the multi-practitioner booking guide explains.

Embedding in a client portal

Portals that already know who the user is have two options, set out in the embedding documentation. The iframe embed is fastest to ship and handles the calendar, time zones and confirmations for you. The REST API, on the Business plan and above, lets you build your own picker and create the booking server-to-server, which is the route to take when the booked identity must be trustworthy, because anything in an iframe URL can be edited by the person in the browser.

One current limitation worth knowing before you design: the PepoSmart booking page does not yet read the visitor's name or email from the URL. The documentation describes the planned prefill parameters and asks teams to get in touch before building against them. Until then, embedded visitors type their own details, or your backend uses the API, which accepts the attendee today.

Two people pointing at a laptop screen together
Test the embed on a phone and a desktop, then book a real slot from it before you tell anyone the page is live

Why the frame is blank, and how to fix it

Nine times out of ten the scheduling tool is fine and one of these is the problem.

Your site's Content Security Policy blocks framing. A strict frame-src or child-src directive on your site prevents the iframe from loading third-party pages. Open the browser console; a CSP error names the directive. Add https://app.peposmart.com to it. MDN's CSP documentation explains the directives. Note that PepoSmart's booking pages themselves set no X-Frame-Options or frame-ancestors restriction, so the block is always on your side.

The builder stripped the tag. Pasting an iframe into a paragraph or rich-text block usually deletes it or shows the code as text. Use the HTML, Code or Embed element.

The event is private, deleted or has no availability. A private event still loads by direct link, so that is rarely it. A deleted event shows a notice that it is no longer accepting bookings. An event whose host has no open hours in the booking window shows a calendar with nothing to pick; check the host's availability rules.

A browser extension or privacy setting blocks third-party frames. Test in a private window before you chase anything else.

The height is too small. Not blank, but it looks broken: a thin strip with an internal scrollbar. Raise the height.

Tracking bookings from the embed

Bookings made through an embed behave exactly like any other booking: confirmation and reminder emails, calendar invites with the video link, and AI meeting notes all work normally. To see which page produced which booking, use separate event types per page where that matters, or attach a booking.created webhook on the Professional plan and above and record the source in your own analytics. Clicks on link widgets inside a published booking page are counted in PepoSmart's analytics, which is useful if the page carries links to your case studies or social profiles.

Checklist before you announce the page

  1. The embed is in an HTML or embed element, not a text block.
  2. The frame has at least 700 pixels of height on desktop and 100% width.
  3. Colour parameters match the page, or the booking page's published look does.
  4. hide_details=1 is set if the page already describes the meeting.
  5. The event is public if it should appear on the overall booking page, and its availability has open hours in the booking window.
  6. You booked a real slot from the embed on a phone and a desktop, received the confirmation, and cancelled it from the email.

Summary

Embedding a booking calendar is one HTML block away on every major site builder. Choose inline for pages whose job is the booking and a popup for pages with another job, give the frame room, match your colours with URL parameters and the booking page's own builder, and check your site's CSP if the frame is blank. PepoSmart booking pages embed on any domain with inline, popup-widget and popup-text snippets generated for you, on every plan including Free. The website embeds page lists the limitations, and you can create a free account to get a booking page to embed in the next ten minutes.

Frequently asked questions

What is the easiest way to add a booking calendar to a website?
Paste an inline iframe embed into an HTML block on the page where you want the calendar. Every major site builder has such a block: Custom HTML in WordPress, Code block in Squarespace, Embed in Webflow, Wix, Framer and Carrd. The iframe loads the booking page inside your site, and the scheduling tool handles time zones, availability and confirmations.
Should I use an inline embed or a popup button?
Use inline when the page exists to get a booking, such as a contact or demo page, so the calendar is the main content. Use a popup button when the calendar is secondary, such as on a blog post or pricing page, so the page stays focused and the calendar opens over it on click. Both load the same booking page, so styling and behaviour are identical.
How tall should the embedded booking calendar be?
Between 700 and 900 pixels on desktop. Below roughly 700 pixels the calendar, time list and form scroll inside the frame, which feels cramped. On mobile let the iframe fill the viewport width and keep the height generous; a visitor scrolling the page will scroll the frame naturally.
Can I match the embedded calendar to my brand colours?
Yes. PepoSmart booking URLs accept bg, text and primary query parameters as hex colours without the leading hash, plus hide_details=1 to remove the event summary panel when your page already describes the meeting. The booking page's own page builder controls the theme and widgets; the parameters adjust the embed on top of that.
Why does my embedded calendar show a blank box?
Almost always a Content Security Policy on your own site that blocks framing app.peposmart.com, or a builder that stripped the iframe because you pasted it into a text block rather than an HTML block. Check the browser console for a frame-ancestors or CSP error, then paste the code into the builder's HTML or embed element.
Can the embed prefill the visitor's name and email?
Not yet in PepoSmart. The booking page does not currently read name or email from the URL; the documentation describes the planned behaviour and asks teams to get in touch before building against it. Portals that need a trusted attendee identity today use the REST API, which accepts the attendee server-to-server.

Written by

Yash Havalimane

Reviewed by

Zakir Shaikh

Every PepoSmart article is written by a member of our team and checked by a second reviewer before it is published. Product facts are verified against the published product-facts page.

Related Articles

An empty modern conference room with a long table and chairs beside a floor-to-ceiling window
Scheduling

How to Reduce No-Shows for Appointments and Sales Meetings: 15 Tactics That Actually Work

Read More
Smiling woman with glasses checking her phone while sitting at a laptop in a home office
Scheduling

Is It Rude to Send a Scheduling Link? The Etiquette Rules and 12 Copy-Paste Scripts That Make It Welcome

Read More

Ready to Transform Your Scheduling?

Booking pages, availability rules and an AI notetaker in one place. Free to start, no card required.

PepoSmart

The AI-powered meeting intelligence platform — from scheduling to CRM sync, coaching, and deal intelligence.

Support: +1 (713) 782-7183
Scheduling
  • Unlimited Booking Pages
  • Availability Rules
  • Team Events
  • Reminder Emails
  • Payments at Booking
  • Website Embeds
AI Intelligence
  • AI Meeting Notes
  • Coaching Scorecards
  • Relationship Intelligence
  • Chat With Meetings
  • Follow-up Emails
  • AI Call Prep
Bulk Emailing
  • Broadcasts
  • Email Sequences
  • Mailing Lists
  • Email Templates
  • SMTP Settings
  • Open Tracking
Integrations
  • Google Calendar & Meet
  • Outlook & Microsoft Teams
  • Zoom
  • Slack
  • CRM integrations
  • Stripe & PayPal
Compare
  • Calendly Alternative
  • Cal.com Alternative
  • SavvyCal Alternative
  • Acuity Alternative
  • Chili Piper Alternative
  • All Alternatives
Company
  • Product facts
  • All Features
  • Solutions
  • About
  • Pricing
  • Blog
  • Use Cases
  • Contact
  • Privacy Policy
  • Terms of Service
© 2026 PepoSmart. All rights reserved.
Operated by Peposmart Inc · 18510 Green Land Way, Ste C, Houston, TX 77084, US
Terms of ServicePrivacy Policy