SwingOps

Embeddable booking widget

One script tag. Customers book directly on your site. Your brand stays the destination; SwingOps stays the engine.

Install

Drop this anywhere you'd like a booking flow to appear — your homepage, a programs page, a per-coach bio page. Replace your-slug with your facility's slug.

<script
  src="https://app.swingops.ai/widget.js"
  data-org="your-slug"
  defer
></script>
<div id="swingops-book"></div>

Pin to a coach or lesson type

Add these attributes to scope the widget — ideal when it lives on a per-coach bio page or a specific program page. Put them on the <script> tag (they apply to every widget on the page) or on an individual data-swingops-widget container (which wins over the script-level default).

<script
  src="https://app.swingops.ai/widget.js"
  data-org="your-slug"
  data-staff="<staff-id>"
  data-lesson-type="<lesson-type-id>"
  defer
></script>
<div id="swingops-book"></div>
  • data-staff — a staff member's id; pins the widget to that coach and pre-selects them. Grab the id from the end of the coach's admin page URL.
  • data-lesson-type — a lesson type's id; shows only that lesson type.
  • data-location — reserved for multi-location facilities; v1 books into your first location.
  • data-promo — surfaces a promo code on the booking page for the customer to enter when they pay.

An unknown id is ignored — the widget falls back to your full menu rather than showing an empty picker.

Styling

The widget loads inside an isolated iframe so your site's CSS never collides with ours. The iframe's color tokens follow your facility's theme (set in /settings/branding). The host page only needs the container div; sizing adjusts to the content.

Attribution

If you arrive at the widget via a SwingOps tracking link (e.g. /{slug}/r/spring-camp-ig), the bookings made from the widget back-fill the originating link automatically. The campaign attribution revenue report joins them so you can see which promotions actually paid out.