You can embed Zoom Scheduler directly on your website to let visitors book meetings without leaving your site. This helps maintain brand continuity by keeping your fonts, colors, and style consistent, while also streamlining the booking process for your users.
<iframe> snippet.<div style="max-width: 900px; margin: 0 auto;">
<iframe
src="https://scheduler.zoom.us/<your-handle>/<your-page>?embed=true"
style="width:100%; min-height:560px; border:0;"
frameborder="0"
</iframe>
</div>
?embed=truein the URL to ensure the page displays correctly.min-height(for example, 560–900px) to fit your layout.width:100%.https://scheduler.zoom.us in your site’s Content Security Policy (CSP) for frame-src or child-src. Ensure your page is served over HTTPS.You can pass data into your embedded Zoom Scheduler through URL parameters and receive a confirmation callback using postMessage. This allows you to prefill booking forms, track campaign data, and integrate bookings with analytics or CRM workflows.
utm_campaign, utm_content, utm_medium, utm_source, utm_termfirstname, lastnamemonth=YYYY-MM (for example, 2025-10)<iframe
src="https://scheduler.zoom.us/<your-handle>/<your-page>?embed=true
&utm_source=website&utm_medium=hero&utm_campaign=q3
&utm_term=embed
&firstname=Alex&lastname=Lee
&month=2025-10"
style="width:100%; min-height:560px; border:0;"
frameborder="0"
title="Book time with Alex Lee">
</iframe>
&; URL-encode values (for example, + or %20 for spaces).<script>
const iframe = document.querySelector('#zs-embed');
const base = "https://scheduler.zoom.us/<handle>/<page>?embed=true";
const params = new URLSearchParams({
utm_source: 'website',
utm_medium: 'pricing',
utm_campaign: 'fall',
firstname: window.userFirstName || '',
lastname: window.userLastName || ''
});
iframe.src = `${base}&${params.toString()}`;
</script>
export default function SchedulerEmbed({ utm, user, month }) {
const base = "https://scheduler.zoom.us/<handle>/<page>?embed=true";
const q = new URLSearchParams({
utm_source: utm.source,
utm_medium: utm.medium,
utm_campaign: utm.campaign,
utm_term: utm.term,
firstname: user?.firstName,
lastname: user?.lastName,
month
}).toString();
return (
<iframe
title="Book time"
style={{ width: "100%", minHeight: 560, border: 0 }}
src={`${base}&${q}`}
/>
);
}
postMessage)Providing an Origin allows the embedded Scheduler to send form-filled booking information to your page after a successful booking. This can be used for:
https://app.example.com.<script>
window.addEventListener('message', (event) => {
// Always verify sender
if (event.origin !== 'https://scheduler.zoom.us') return;
// The confirmation payload with booking + form details
const data = event.data;
console.log('Zoom Scheduler booking confirmed:', data);
// Example: analytics event or CRM call
// analytics.track('Booking Confirmed', data);
});
</script>
src URL as ?embed=true, URL-encode values, and verify fields exist on the booking form.https://scheduler.zoom.us. The Origin parameter does not affect CSP; it only enables the postMessage callback.postMessage listener runs on the embedding page and validate event.origin.