BugShot

Bug reporting for web apps

Bug reports that come with the answer.

BugShot is a screenshot bug reporter for web apps. Your users snap the problem and scribble on it. You get the picture plus the console errors, failed requests and clicks that led there, grouped so each bug shows up once.

Start free

One script tag. Free for 100 reports a month. No card needed.

How it works

Three steps, and only the first one is yours.

Paste one line

Add the script tag before the closing body tag. No build step, no SDK to wire up, any framework.

Your users snap it

They tap the ladybug, draw a box around the problem and say what happened. Anything typed into your page is blurred for them.

You get the whole story

Screenshot, console, network, clicks and device land in your inbox, and in Slack, GitHub or Linear if you like.

Peek inside your inbox

Each bug shows up once, with a counter. Screenshots people upload themselves stay blurred until you open the issue.

Then hand it to your agent. It reads the report, finds the cause and leaves a note you can read on the issue. How agents connect

Every report arrives ready to fix

The screenshot shows what it looked like. The rest shows why. Recording starts when the page loads, so the error from thirty seconds ago is already there.

A screenshot they can mark up

Captured in the browser the moment they click. Box, arrow and a Hide tool that pixelates for good.

Console errors

The last 30 errors and warnings, including crashes and rejected promises from before they clicked.

Failed requests

Method, path, status and timing for anything that came back 4xx, 5xx or never came back. Never bodies.

The click trail

The last 40 clicks, focuses and page changes. Fields are named by label, never by what was typed.

Browser and device

Browser, OS, viewport, pixel ratio, timezone, language, connection and colour scheme.

Your own context

Call identify() and setContext() to attach the user id, plan or feature flags to every report.

Hand it to your AI agent

Connect Claude Code, Cursor or any MCP client with one command. It reads the screenshot, console and clicks, investigates, leaves a note and can mark the bug resolved. See how it connects

Fifty people, one issue

Reports are grouped by what actually broke, not by the words people typed. When a crash hits fifty users you get one issue with a counter. Resolve it and it stays resolved until the bug comes back, then it reopens itself.

Private by default

  • Every input, textarea and select is blurred in the screenshot
  • Password fields are always blurred, whatever the settings say
  • Query strings are stripped from every recorded address
  • Request and response bodies and headers are never recorded
  • Hide pixelates for good: the original pixels are destroyed before sending
  • The widget sets no cookies and loads nothing from third parties

Built for the apps you already run

One account, a project per app. Each project has its own key, its own list of allowed domains and its own destinations.

Slack GitHub Issues Linear Any webhook React Next.js Vue Plain HTML

Priced on reports, never on seats

Invite the whole team on every plan. See what each plan includes.

Free

$0

forever

  • 100 reports a month
  • 7 day retention
  • 1 project
  • Unlimited teammates
  • Slack, GitHub, Linear and webhooks
Start free
Most picked

Starter

$19

per month

  • 500 reports a month
  • 90 day retention
  • 3 projects
  • Unlimited teammates
  • Slack, GitHub, Linear and webhooks
Start with Starter

Team

$49

per month

  • 2,500 reports a month
  • 1 year retention
  • 25 projects
  • Unlimited teammates
  • Hide the Powered by BugShot badge
Start with Team

Business

$149

per month

  • 10,000 reports a month
  • Unlimited retention
  • 200 projects
  • Unlimited teammates
  • Hide the Powered by BugShot badge
Start with Business

Questions

What does BugShot collect?

The annotated screenshot, what the person typed into the report, the page address and title, browser and device details, recent console errors, failed request addresses and the click trail. It never records request bodies, headers, cookies or what anyone typed into your page.

Will it slow my site down?

No. The script is about 23 KB gzipped, loads with defer, makes no network request until someone opens the reporter, and never downloads fonts or third party code into your page.

Does it work with React, Vue, Next.js or my stack?

Yes. It is one script tag that works on any page with a body element. There is also an npm package with init(), identify() and setContext() if you prefer to start it from your own code.

Does it work on phones?

Yes. On small screens the reporter opens as a bottom sheet, and people can attach a screenshot they took themselves with Upload.

Where do reports go?

Every report lands in your BugShot inbox, grouped with identical reports. Each project can also forward to Slack, GitHub Issues, Linear or any webhook you run.

Can my AI agent fix these bugs?

Yes. Connect Claude Code, Cursor or any MCP client and your agent can read each issue with its screenshot, console errors and clicks, find the cause and fix it in your repo, then leave a note and mark the bug resolved. You pick read only or read and write when you connect it, so you decide how much it can touch. See how to connect an agent

What happens if I go over my plan?

Paid plans never drop a report when you pass the included volume. On Free, reports past 300 in a month are turned away until the next month starts.

What if someone spams my report button?

Each address can send 10 reports a minute, and one that sends a project 30 in an hour is blocked automatically. Mark anything else as spam and it is deleted, the sender is blocked, and it stops counting toward your monthly reports.

Can I use it on all my apps?

Yes. Create a project per site or app. Each gets its own key, its own list of allowed domains and its own destinations, and they all share one inbox.

Catch your next bug with the evidence attached.

Free for 100 reports a month. Set up in about two minutes.

Start free