New: identify your users & unlimited tags on ProGet started →
Beta feedback, in your app

Hear from your beta testers.

Put a feedback button right in your beta and collect bugs and ideas while testers are in the flow. Call identify() and every note carries who sent it — no chasing required.

Know who said it · live in 60 seconds

beta.yourproduct.com

Inbox

AllIdeasIssues
BugOnboarding2m

Got stuck on the connect-account step.

IdeaEditor2m

Keyboard shortcuts would be amazing.

NotePraise2m

Way faster than the tool we use now.

Live widget

This one’s really live.

Give it a tap — leave beta feedback and watch it send.

“Beta feedback, finally organized.”★★★★★“We know who said what.”say.so“In-app beats email.”identify() built in“Every round, one inbox.”1 script · 0 deps“Beta feedback, finally organized.”★★★★★“We know who said what.”say.so“In-app beats email.”identify() built in“Every round, one inbox.”1 script · 0 deps
Built for testing rounds

In-app feedback. Identified testers.

Stop herding feedback across email, Slack, and forms. Collect it where testing happens, attached to the person who sent it.

Feedback in the flow

Testers report without leaving your app — one tap, the moment they hit something, so nothing's forgotten by the time they'd have emailed you.

Know who said it

Call SaySo.identify() and each submission carries the tester's id and email. Follow up, thank them, close the loop.

Triage each round

Tag by build or feature and work down a clean list. See what every cohort keeps flagging.

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
  • Email notifications
Get started free
Most popular

Pro

For when one project isn’t enough.

$100 /year

$8/mo billed yearly · save 58%

  • Unlimited projects
  • Unlimited submissions
  • Unlimited tags
  • Identify your users
  • 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 I tell which tester left feedback?

Yes. Call SaySo.identify({ id, email }) for signed-in testers and every submission carries that context automatically.

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.

How is this different from the startups page?

Same widget, different focus: this is about running a beta — collecting and attributing feedback per testing round. The startups page is about your overall product loop.

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.

Run a tighter beta.
Hear every tester.

Collect identified, in-app feedback from your testers in one script.