New: identify your users — now free on every planGet started →
Website bug reporting, simplified

Report a bug in one click.

Drop one script on your site and let anyone flag what's broken — optionally highlighting the problem right on a screenshot, no ten-question forms. Every report arrives with the page URL, ready to triage.

One-tap screenshots, no logins · live in 60 seconds

app.yoursite.com

Inbox

AllIdeasIssues
BugCheckout2m

Pay button does nothing on iOS Safari.

BugAuth2m

Reset-password email never arrives.

NoteMobile2m

Menu overlaps the logo on small screens.

Live widget

This one’s really live.

Give it a tap — report a (pretend) bug and watch it send.

“Bug reports without the friction.”★★★★★“One click, fully reproduced.”say.so“Marked up in one tap.”page URL attached“Triage in minutes.”1 script · 0 deps“Bug reports without the friction.”★★★★★“One click, fully reproduced.”say.so“Marked up in one tap.”page URL attached“Triage in minutes.”1 script · 0 deps
Built for fast triage

The report, plus the picture.

The heavy bug tools make people fill forms and wrestle with uploads. Say So gets the report in one tap — and lets people highlight what's broken right on a screenshot when a picture says it faster.

One-click reports

Visitors tap, type what broke, and send. No account, no install, no friction — so they actually report it.

Context attached

Every bug carries the page URL, the browser, and any screenshot they marked up — so you can reproduce it without playing twenty questions.

Triage in a calm inbox

Tag by area, mark resolved, and work down a ranked list. No new Jira project to stand up.

Three steps, that’s it

From copy-paste to clarity.

Need a hand installing? Ask the team
01

Embed

Create a project, copy the snippet, drop it before </body>. You're live in under a minute.

02

Collect

Visitors tap the launcher, pick a type, and say their piece. It's that low-friction — so they actually do.

03

Triage

Read, tag, and resolve from your dashboard. Turn scattered comments into a ranked to-do list.

// drop this before </body>
<script src="https://trysay.so/w.js" data-sayso="PROJECT_ID" defer></script>

Launch it your way

One snippet, three ways to open it. Use whichever fits — or mix them.

Default

Floating button

A tidy launcher sits in the bottom-right corner. Works out of the box — nothing to wire up.

<script src=".../w.js" data-sayso="PROJECT_ID" defer></script>
Anchored

Your own button

Add data-sayso to any link or button and the panel opens right next to it.

<button data-sayso>Feedback</button>
Headless

No floating button

Hide the default launcher and open only from your own triggers.

<script … data-sayso-launcher="false">
Honest pricing

Start free. Upgrade when it clicks.

No seats, no metered surprises. One flat plan when you outgrow free.

Free

For your first project.

$0

  • 1 project
  • 50 lifetime submissions
  • 3 color tags
  • Identify your users
  • Email notifications
  • Slack notifications
Get started free
Most popular

Pro

For when one project isn’t enough.

$120 /year

$10/mo billed yearly · save 50%

  • Unlimited projects
  • Unlimited submissions
  • Unlimited tags
  • Linear + webhook integrations
  • Email notifications
Start with Pro

Enterprise

Custom

For teams that need more than the basics.

WhitelabelingService-level agreementsLive chat support
Talk to us
Good questions

Things people ask.

Can people add a screenshot?

Yes — optionally. They can capture the page and highlight the problem area right in the widget, without an account or leaving your site. It stays optional, so a quick text report is still just one tap. (Console logs aren't captured — we keep it lightweight.)

How do I add it?

One line of HTML. Create a project, copy the <script> tag, and paste it before your closing body tag. The widget renders in a Shadow DOM so it never collides with your styles.

Where do bug reports go?

Into a calm inbox in your dashboard. Filter by type, tag by area, and resolve with a click. You also get an email the moment one lands.

Will it slow my site down?

No. w.js is a tiny vanilla script with zero dependencies, served with long cache headers. It loads after your page is interactive and stays out of the way.

Make reporting a bug
a one-tap thing.

Drop in one script and let your users tell you what's broken.