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.
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.
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
Starter
$19
per month
- 500 reports a month
- 90 day retention
- 3 projects
- Unlimited teammates
- Slack, GitHub, Linear and webhooks
Team
$49
per month
- 2,500 reports a month
- 1 year retention
- 25 projects
- Unlimited teammates
- Hide the Powered by BugShot badge
Business
$149
per month
- 10,000 reports a month
- Unlimited retention
- 200 projects
- Unlimited teammates
- Hide the Powered by BugShot badge
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