Skip to content
Docs · Feedback in · 4 min

Surveys

Five survey formats for collecting feedback on your site. Pick the one that fits the context — all of them are on every plan.

01Pick a format

FormatBest for
BubblePersistent button that opens a feedback overlay. Most responses.
EmbedSits in your page layout. Works well in docs and help pages.
BannerThin bar that slides in after a delay. High visibility for announcements.
ThumbsMinimal thumbs up/down. Per-feature tracking with data-context.
TriggerZero footprint. Attach to any existing link or button.

Before you start: go to Settings → Integrations → Surveys to set the appearance and copy your API key.

02Bubble

A floating button fixed to the bottom corner of every page. Clicking it opens an overlay with a sentiment row first, optional text field second. Lowest setup cost and the highest response volume, so it's the right default for general collection.

<script async src="https://app.annsa.ai/survey.js"
  data-api-key="YOUR_API_KEY"
  data-survey="float">
</script>

Paste it before </body> on every page where you want the button.

Float-only attributeValuesDefaultDescription
data-positionbottom-right or bottom-leftbottom-rightCorner the button anchors to
data-button-textany stringFeedbackLabel on the button
data-headlesstrue or falsefalseHides the button entirely; trigger with window.AnnsaSurvey.open()

03Embed

A "was this helpful?" widget rendered in the document flow, with no floating element. Good for help articles and feature announcements — responses are naturally scoped to whatever the reader just read.

Place the element where you want it, then load the script:

<div data-circuit-inline
  data-api-key="YOUR_API_KEY"
  data-context="help-article:api-docs"
  data-prompt="Was this helpful?">
</div>
<script async src="https://app.annsa.ai/survey.js"
  data-api-key="YOUR_API_KEY"
  data-survey="inline">
</script>
Inline-only attribute (on the element)ExampleDescription
data-contexthelp-article:api-docsTags feedback for per-page filtering. Use a consistent type:name pattern.
data-promptWas this helpful?The question above the emoji row.

It renders in the light DOM, so your page CSS applies. Use data-primary-color on the script tag to match your brand.

05Thumbs

Two buttons that submit immediately with no modal, plus an optional one-line follow-up. The lowest-friction format — put one next to a new feature, a dashboard widget or a specific setting.

<span data-circuit-thumbs
  data-api-key="YOUR_API_KEY"
  data-context="feature:dark-mode">
</span>
<script async src="https://app.annsa.ai/survey.js"
  data-api-key="YOUR_API_KEY"
  data-survey="thumbs">
</script>
Thumbs-only attribute (on the element)ExampleDescription
data-contextfeature:dark-modeTags the submission. Use feature:name to track sentiment per feature over time.

You can place several [data-circuit-thumbs] elements on one page with different data-context values — one script tag covers all of them. Renders in the light DOM.

06Trigger

No floating UI at all. Attach it to an existing link, button or CTA and clicking opens the full modal. Right for settings pages, forms and onboarding, where a floating button would feel out of place.

<a href="#" data-circuit-page data-api-key="YOUR_API_KEY">Give Feedback</a>
<script async src="https://app.annsa.ai/survey.js"
  data-api-key="YOUR_API_KEY"
  data-survey="page">
</script>

The element's own text becomes the CTA label. Works on <a>, <button> or anything clickable, and uses Shadow DOM for the modal. There are no format-specific attributes — everything comes from the shared options and the element's text.

07Shared options

These go on the <script> tag and apply to every format.

AttributeValuesDefaultDescription
data-api-keystringRequired. From Settings → Integrations → Surveys.
data-surveyfloat, inline, bar, thumbs, pagefloatWhich format to render.
data-primary-colorhex#1C1A18Button and accent colour.
data-text-colorhex#FFFFFFButton text colour.
data-themeauto, light, darkautoFollows OS preference on auto.
data-border-radiuse.g. 6px6pxApplied to buttons and the modal.
data-font-familysystem, inter, roboto, opensans, poppinssystemFont inside the survey.
data-show-brandingtrue or falsetrueShows "Powered by Annsa" in the footer.
data-headlesstrue or falsefalseSuppresses the button (Float only).
data-csp-noncestringPass your nonce if you use Content-Security-Policy headers.
data-widget-idstringReference a specific saved configuration.

08Driving it from code

Once the script loads, window.AnnsaSurvey is available:

window.AnnsaSurvey.open();    // Open the feedback modal
window.AnnsaSurvey.close();   // Close the modal

// Attach user identity to submissions
window.AnnsaSurvey.identify({
  email: 'jane@acme.com',
  name: 'Jane Doe',
  plan: 'pro'
});

window.AnnsaSurvey.reset();   // Clear identity
window.AnnsaSurvey.destroy(); // Remove the survey and clean up

If your user data is ready before the script runs, queue the call and Annsa processes it once the survey initialises:

window.AnnsaSurvey = window.AnnsaSurvey || { _q: [] };
window.AnnsaSurvey._q.push(['identify', { email: 'jane@acme.com', plan: 'pro' }]);

09Where the responses go

Into the same pool as every other source, and each survey gets its own dashboard — see Survey Analytics for metrics, filtering and export.

When you mark a spec Shipped, the people who submitted through a survey are the ones Annsa can notify. Working with Specs covers the send flow.

annsa

Start building from signal.

Solo-founded in Sydney in 2025. Launched February 2026.