bugpot

Documentation

Everything you need to ship the widget

One script tag to install, a small config object to shape it, and a JavaScript API when you want full control. This page is the whole reference, no rabbit holes.

Quick start

Create a project in the dashboard, copy its key, and paste this before your closing </body> tag. The loader is async, renders inside a Shadow DOM so it can never clash with your CSS, and stays under 150 KB gzipped.

index.html
<script
async
src="https://app.bugpot.io/embed/loader.js?p=your_project_key">
</script>

Reload your site → the Feedback button appears bottom-right → send yourself a test report.

Configuration

The widget ships configured from your project settings in the dashboard: position, label, branding, forms and issue types all live there. To override per page, define window.BugpotConfig before the loader tag.

index.html
<script>
window.BugpotConfig = {
buttonPosition: 'bottom-left',
buttonLabel: 'Report a bug',
brandColor: '#28d48a',
metadata: { build: '2026.07.1', tenant: 'acme' },
};
</script>
<script async src="https://app.bugpot.io/embed/loader.js?p=your_project_key"></script>
OptionTypeDefaultWhat it does
buttonPosition'bottom-right' | 'bottom-left' | 'bottom-center' | 'hidden''bottom-right'Where the launcher sits. Use hidden to drive the widget from your own button via the JavaScript API.
buttonLabelstring'Feedback'Text on the launcher button.
buttonIconOnlybooleanfalseShow just the pin icon, no label. Handy on small screens.
brandColorstring | nullnullHex colour like "#28d48a" for the launcher and accents. Defaults to your workspace branding.
maskingSelectorsstring[][]CSS selectors blurred in the browser before the screenshot is captured.
showFooterbooleantrueHide the “Powered by” footer in the widget (available on the Agency plan).
metadataRecord<string, unknown>{}Key-value data attached to every report: build number, tenant, feature flags.

JavaScript API

Once loaded, the widget exposes window.Bugpot. Hide the built-in launcher and open the widget from any element of your own:

custom-launcher.html
<script>
window.BugpotConfig = { buttonPosition: 'hidden' };
</script>
<script async src="https://app.bugpot.io/embed/loader.js?p=your_project_key"></script>
<button onclick="window.Bugpot?.open()">Give feedback</button>
  • Bugpot.open()Open the widget; screenshot capture starts immediately.
  • Bugpot.close()Close the widget and restore the launcher (unless hidden).
  • Bugpot.destroy()Remove the widget from the page entirely.
  • Bugpot.versionThe running widget version string.
  • Bugpot.metadataMutable metadata bag, read at submission time (see below).

Custom metadata

Anything you put in the metadata bag rides along with every report and shows up in the triage inbox. Seed it in the config, or mutate it at runtime as your app state changes. It’s read at the moment a report is submitted.

app.js
// Seeded before load
window.BugpotConfig = {
metadata: { build: '2026.07.1', plan: 'studio' },
};
// …and updated whenever you like after load
window.Bugpot.metadata.userId = 'u_4821';
window.Bugpot.metadata.cartId = 'c_812';

Values from custom form fields (severity pickers, dropdowns, checkboxes you add in the form builder) arrive as custom metadata on the report too.

Data masking

Anything matching your masking selectors is blurred in the browser, before the screenshot is created. Account numbers and customer data never reach Bugpot’s servers in the first place.

index.html
window.BugpotConfig = {
maskingSelectors: ['.account-number', '[data-private]', '#billing-email'],
};

More on the pipeline in Product → Data masking.

What gets captured

Alongside the annotated screenshot, every report carries the context your developer would otherwise have to ask for:

  • Page URL and title
  • Browser and OS (user agent)
  • Screen and viewport size
  • Device pixel ratio
  • Console output (log → error)
  • Failed network requests
  • Reporter name and email
  • Your custom metadata

Console and network capture are toggled per project in the dashboard.

Integrations & webhooks

From 1 October 2026you’ll connect Jira, GitHub, GitLab, Linear and eleven more trackers from workspace settings; each integration page has its own step-by-step setup. Prefer to build your own pipeline? Webhooks are live today: they deliver every event as JSON, signed with HMAC so you can verify the sender, with a replayable delivery log when your endpoint was down. See Security for the details.

Support

Stuck on anything? Write to hello@bugpot.io. A human answers. Live service health is on the status page.

Put a feedback button on your site today

Paste the script tag, send yourself a test report, and see the full context arrive in your inbox.