SaySift

Embed a Feedback Widget with Plain JavaScript (No Framework Needed)

July 27, 2026

If your site isn't running React, Next.js, or any other framework, you don't need a different widget — you need the same one, dropped into plain HTML. This is the entire integration.

The script tag

Paste this before the closing </body> tag on any page:

<script
  src="https://saysift.com/widget/feedback-widget.js"
  data-project-key="YOUR_PUBLIC_KEY"
  data-locale="auto"
></script>

That's it — no bundler, no npm install, no build step. The script renders a compact feedback tab fixed to the edge of the screen and works identically whether the rest of the page is static HTML, a server-rendered template, or a jQuery-era site you're maintaining out of necessity.

Using your own button instead of the edge tab

Add data-launcher="inline" and any element with data-saysift-open will open the widget on click:

<script
  src="https://saysift.com/widget/feedback-widget.js"
  data-project-key="YOUR_PUBLIC_KEY"
  data-launcher="inline"
></script>

<button type="button" data-saysift-open>Send feedback</button>

No JavaScript to write yourself — the attribute does the wiring.

Configuration without a framework

Everything is a data-* attribute on the script tag: data-position (which screen edge), data-saysift-theme (light/dark/auto), data-branding (hide the "Powered by SaySift" mark), and more. There's no separate config file or API call needed for basic setup — the attributes are the whole configuration surface.

Listening for submissions

If you want to fire your own analytics event when someone submits feedback, listen for the saysift:submitted event on document:

<script>
  document.addEventListener("saysift:submitted", (event) => {
    console.log(event.detail); // { instanceId, projectKey, id }
  });
</script>

Full configuration reference and the JavaScript API are documented at the widget docs.

For the same integration in a React app, see React Feedback Widget.

Start for free — no credit card required.

Confirm action

This action cannot be undone.