ReactionSaaS
Documentation

GoHighLevel

Deploy ReactionSDK overlays (tap, poll, rating, slider, and CTA on reaction-video) and/or ReactifySDK (recorded video reactions via reactify-video and threads) on GHL sites and funnels. This guide covers where to paste code, funnel placement, and verifying first render and overlay interactions.

Prerequisites

  • ReactionSaaS account with API key and allowed origins including your GHL domain(s).
  • Admin or agency access to Site settings → Custom Code and/or funnel step editors that expose Custom JavaScript or HTML.
  • Template or thread IDs from the marketplace or Reactify dashboard.

Where to paste code

  1. Site-wide (recommended baseline) — In site settings, add the SDK script to the footer or tracking-code area so every published page can initialize the loader once. Restrict heavy UI to pages where you place embeds.
  2. Funnel step only — If you prefer isolation, paste the script + init block in the custom code section of a specific funnel step (often available on landing, sales, or custom steps). Repeat only if the builder strips global scripts on that step type.
  3. HTML / embed sections — Use reaction-video with overlays for ReactionSDK. Use reactify-video / thread embeds for ReactifySDK recorded reactions. Avoid duplicating the SDK loader on the same document.

Setup guide

  1. Load the SDK — Reference sdk.js or reactify.js from your approved CDN with defer where possible.
  2. Initialize — On DOMContentLoaded, call reactionSDK.init or Reactify.init (same bundle) with apiKey, accountId, baseUrl, mode, and allowedOrigins including your live GHL hostname.
  3. Attach to funnel pages — For opt-in steps, put the embed above or beside the native form. For VSL or offer steps, use a fullscreen-friendly preset or bottom overlay so the native checkout / CTA remains usable.
  4. Booking pages — If the calendar widget occupies the hero, use an inline reaction strip or sidebar block; do not cover the booking iframe.
  5. Publish — Publish the site or funnel, then test in a private window (not only the internal preview) so tracking code matches production.

Example snippet

<script src="https://reactify-cdn.s3.us-east-2.amazonaws.com/sdk.js" defer></script>
<script>
  window.addEventListener('DOMContentLoaded', function () {
    if (!window.Reactify) return;
    Reactify.init({
      apiKey: 'YOUR_API_KEY',
      accountId: 'YOUR_ACCOUNT_ID',
      baseUrl: 'https://api.reactionsaas.com',
      mode: 'production',
      allowedOrigins: [window.location.origin]
    });
  });
</script>
<reactify-video
  thread-id="YOUR_THREAD_ID"
  template="YOUR_TEMPLATE_SLUG"
></reactify-video>

Verification

  1. First render — Open the live funnel URL; in devtools Network, confirm the SDK loads without CSP or mixed-content errors.
  2. First interaction — Tap an overlay or submit a poll; confirm the event appears in ReactionSaaS analytics or your connected pipeline.
  3. Lead-adjacent signal — When a visitor reacts then submits the GHL form, correlate timestamps in your CRM; the reaction event is independent of the native form webhook but should precede or align with the lead create event.
  4. Use the SDK playground with GoHighLevel context to mirror overlay settings before pasting into GHL.

Template platform_config

Marketplace templates can declare a GoHighLevel block inside platform_config (stored on the template document):

{
  "gohighlevel": {
    "embed_type": "funnel_custom_script",
    "placements": [
      "landing_page",
      "funnel_step",
      "opt_in_page",
      "booking_page"
    ],
    "script_surface": "site_wide_or_funnel_step"
  }
}

UI presets (reference)

  • Fullscreen / CTA takeoverLoads after DOM ready; respects reduced motion; CTA unlocks after tap or minimum watch time. Events: install_completed, first_render, first_interaction, template_used, platform_used, verification_heartbeat.
  • Inline lead-capture reactionLazy-load on scroll; reactions sync to thread; optional CTA mirrors form headline. Events: first_render, first_interaction, install_handoff_started, install_handoff_completed.
  • Funnel conversion overlayDismissible; re-engages on return visit if configured in dashboard. Events: first_render, first_interaction, template_used, verification_heartbeat.

Troubleshooting

  • Script not running — Some steps strip inline scripts; move initialization to site-wide custom code or a step type that explicitly allows JavaScript.
  • Duplicate inits — Loading the SDK in both site footer and step custom code can double events. Keep a single init per page.
  • Blank player — Confirm HTTPS video URLs, CORS for MP4s, and that the embed is not inside an iframe that blocks custom elements.
  • 403 on API — Add the exact published origin (including www vs apex) to allowed domains in the ReactionSaaS dashboard.
  • Page builder quirks — If a section re-renders on scroll, the embed may remount; prefer a stable HTML section or site-wide script with idempotent init guards.

FAQ

Does ReactionSaaS replace GHL forms? No. Reactions complement native opt-ins and booking widgets; you still capture leads through GHL.

OAuth into GHL? Not required for the script embed path. Future account-linking would be additive and would not replace custom code installs.

Can I scope to one funnel only? Yes—load the SDK only on steps where you paste init, or use URL-based logic in your init snippet if your plan allows custom JS.

← Platform overview · Templates