Embed Widget
The Proximity embed widget lets you add a scheduling experience directly to your website without building a custom integration. Visitors can book meetings without ever leaving your page.
Availability
Embed widgets are available on Standard and Teams plans.
Embed Modes
Proximity supports three embed modes, each suited to different use cases:
| Mode | Description | Best For |
|---|---|---|
| Inline | Full scheduling UI embedded directly in your page | Dedicated booking pages, pricing pages |
| Popup | Click-to-open overlay with the scheduling UI | CTAs, buttons, navigation links |
| Widget | Floating button that opens the scheduling overlay | Always-available booking on any page |
How It Works
All embed modes work by loading a small JavaScript snippet on your page that renders an iframe with the Proximity scheduling UI. The iframe communicates with the host page via postMessage.
- Add the embed script to your page
- Configure the embed via
data-proximity-*attributes on a DOM element - The script renders the appropriate UI (inline iframe, popup trigger, or floating button)
- The visitor completes the booking inside the embedded UI
- Optional: listen for
messageevents to react when a booking is completed
Embed Script
All modes use the same script tag:
<script src="https://app.proximity.io/embed/v1/proximity-embed.js" async></script>The script is lightweight (~5 KB gzipped), loads asynchronously, and does not block page rendering.
Configuration Attributes
All embed modes share these configuration attributes:
| Attribute | Required | Description |
|---|---|---|
data-proximity-user | Yes | The host’s user slug |
data-proximity-event | No | Specific event type slug (omit to show all event types) |
data-proximity-mode | Yes | Embed mode: inline, popup, or widget |
data-proximity-color | No | Primary color override (hex, e.g., #4F46E5) |
data-proximity-locale | No | UI language (en, de, es, fr, it) |
data-proximity-hide-branding | No | Set to true to hide Proximity branding |
Listening for Events
The embed widget posts messages to the parent window when key events occur:
window.addEventListener('message', (event) => {
if (event.origin !== 'https://app.proximity.io') return;
const { type, data } = event.data;
switch (type) {
case 'proximity:booking-created':
console.log('Booking created:', data.bookingId);
// Track conversion, show thank-you, etc.
break;
case 'proximity:slot-selected':
console.log('Slot selected:', data.startTime);
break;
case 'proximity:popup-opened':
console.log('Popup opened');
break;
case 'proximity:popup-closed':
console.log('Popup closed');
break;
}
});Event Types
| Event | Data | Description |
|---|---|---|
proximity:booking-created | { bookingId, startTime, endTime, inviteeEmail } | Booking was successfully created |
proximity:slot-selected | { startTime, endTime } | Visitor selected a time slot |
proximity:popup-opened | — | Popup or widget overlay was opened |
proximity:popup-closed | — | Popup or widget overlay was closed |