Skip to main content
The Feedal embed script lets you add a form to any website with a single <script> tag. Choose from ten display modes — floating button, popup, drawer, fullscreen, and more — and configure how and when it appears. Go to Share → Embed to configure and copy the code. Embedding requires the Pro plan.

Quick start

Paste this into your HTML <head> or before </body>, replacing the config values with your own:
<script>
  (function() {
    const config = {
      "formId": "your-form-id",
      "mode": "button",
      "trigger": "auto"
    };
    const script = document.createElement('script');
    script.async = true;
    script.src = 'https://feedal.com/embed/v1/feedal.js';
    script.onload = function() { window.Feedal.init(config); };
    document.head.appendChild(script);
  })();
</script>
The embed configurator in the dashboard generates this snippet for you — just copy and paste.

Display modes

ModeDescriptionBest for
buttonFloating action button that opens the formAlways-available feedback
popupModal dialog with overlayQuick feedback prompts
modalEnhanced dialog with more layout optionsImportant surveys
embeddedSeamlessly placed inside a page sectionContent feedback
inlineDirect embedding within article contentArticle feedback
fullscreenFull viewport takeoverOnboarding, deep surveys
drawerSlides in from a screen edgeMobile-friendly panels
sidebarFull-height side panelNavigation, detailed forms
slide-overProfessional side panel overlayEnterprise applications
toastLightweight notification-style widgetQuick ratings, alerts

Trigger types

The trigger controls when the widget appears.
TriggerOpens when
manualYou call window.Feedal.open() from your own code
autoPage loads (with optional delay in seconds)
timeVisitor has been on the page for N seconds
scrollVisitor has scrolled N% down the page
exit-intentVisitor moves cursor toward the browser chrome (desktop)
element-visibleA specific CSS selector comes into the viewport
session-durationVisitor has been on the site (across pages) for N seconds
idleVisitor has been inactive for N seconds

Configuration reference

All configuration keys that differ from their defaults are included in the generated snippet. The full list:
KeyDefaultDescription
formIdRequired. Your form’s ID
modeRequired. Display mode (see above)
triggerRequired. Trigger type (see above)
themelightlight or dark
animationfadefade · slide · scale · bounce · flip · elastic · none
positioncenterWidget position on screen (e.g. bottom-right, center)
width400pxWidget width
height600pxWidget height
overlayfalseShow a dimmed overlay behind the widget
showCloseButtontrueShow an × close button
closeOnOverlayClickfalseClose when clicking outside the widget
responsivetrueAdapt layout for small screens
triggerDelay1Seconds to wait before auto/time trigger fires
triggerThreshold50Scroll percentage or visibility percentage for scroll/element-visible triggers
triggerElementCSS selector for element-visible trigger
triggerCooldown5Minutes before the widget can appear again (after close)
draggablefalseAllow respondents to drag the widget
blurBackgroundfalseBlur the page behind the overlay
autoClosetrueAuto-close the widget 3 seconds after submission
ariaLabelFeedback FormARIA label for accessibility
focusTraptrueTrap keyboard focus inside the widget when open

React / Next.js

Use the embed script inside a useEffect in a client component:
"use client";
import { useEffect } from "react";

export default function FeedbackWidget() {
  useEffect(() => {
    const config = {
      formId: "your-form-id",
      mode: "button",
      trigger: "auto",
    };
    const script = document.createElement("script");
    script.src = "https://feedal.com/embed/v1/feedal.js";
    script.async = true;
    script.onload = () => window.Feedal.init(config);
    document.head.appendChild(script);

    return () => {
      if (window.Feedal?.destroy) window.Feedal.destroy();
    };
  }, []);

  return null;
}

Programmatic control

Once the script has loaded you can control the widget from your own JavaScript:
window.Feedal.open();    // Open the widget
window.Feedal.close();   // Close the widget
window.Feedal.destroy(); // Remove the widget from the page

Next steps

Email embed

Get a ready-to-use email template for your campaigns.

Public link

Share the direct URL instead of an embed.