Turn happy customers into proof everywhere.
Collect testimonials with one link, show them on your site with one snippet of code, and make them readable by Google and AI assistants.
Free for your first 15 testimonials. No card.
Collect testimonials, approve them, show them
Three steps, and the second one is yours alone. Nothing goes on your site until you approve it.
Step 1: Collect
Send one link, or print the QR code for your counter. Customers write a testimonial in under a minute, on their phone, without an account.
Step 2: Approve
Every testimonial waits in your inbox. Fix a typo, keep the original, highlight the best line, approve 20 at once.
Step 3: Show
Paste one snippet of code. Wall, carousel, single quote or rating badge, styled to your site.
Import the testimonials you already have
Paste a post from X or LinkedIn, a Product Hunt comment or a G2 review. Upload a CSV, including exports from Senja and Testimonial.to.
Paste a link
- X
- Product Hunt
- G2
Upload a CSV
- Any spreadsheet
- Senja export
- Testimonial.to export
Moving from another tool? Compare HappySaid with Senja, Testimonial.to, Famewall or Testivo.
Testimonial widgets that look like your site, not ours
Wall. Your wall of love: every approved testimonial in a masonry grid. Example with fictional testimonials. Carousel. A row that slides, for tight spaces. Example with fictional testimonials. Single quote. One strong testimonial next to your call to action. Example with fictional testimonials. Rating badge. Your average rating and count in a small badge. Example with fictional testimonials.
- Shadow DOM, so your CSS can't break it.
- Under 15 KB and loads after your page.
- Works on HTML, Webflow, Framer, WordPress, Next.js and Dorik.
Want a single quote as an image for social posts? Make one with the free testimonial card generator.
Testimonials that search engines and AI assistants can actually read
Many testimonial walls are built in the browser, so crawlers that don't run JavaScript see an empty page. HappySaid's proof page is rendered on the server, with review schema in the HTML and a plain-text version for AI assistants.
What a crawler sees
No testimonial text in the HTML
<body>
<div id="root"></div>
<script src="/wall.bundle.js"></script>
</body>Text, names and schema in the HTML
Juniper Bookkeeping: what clients say
“Mira found expenses I'd never claimed. I finally understand my own numbers.”
Tom Adeyemi, joiner
“Quarter-end used to eat a whole weekend. Now it's a 20-minute call.”
Lucía Ferraro, ceramicist
<script type="application/ld+json">
{ "@type": "AggregateRating",
"ratingValue": 4.9, "ratingCount": 26 }
</script>Simplified example.
We don't promise review stars in Google. We give you valid structured data and a page AI can read.
Need review schema for a page you built yourself? Try the free review schema generator.
Pricing you can predict
- Unlimited text testimonials on every paid plan.
- No view limits. Your widgets never go dark because of traffic.
- If you downgrade, your widgets keep showing what you've approved.
- Cancel in two clicks, in the billing portal.
- Export everything, any time, as JSON, CSV and files.
Questions people ask first
Do my customers need an account?
No. They open your link, write, and tick a consent box.
Will it slow down my site?
The widget is under 15 KB, loads after your page and runs in a Shadow DOM.
What is a wall of love?
A section of your site that shows what customers say about you, in their own words. In HappySaid it's the Wall widget, or a hosted proof page you can link to.
Can I bring testimonials I already have?
Yes. Paste a post from X or LinkedIn, a Product Hunt comment or a G2 review, or upload a CSV.
Do you get me stars in Google?
No one can promise that. We add valid review schema for testimonials you collected yourself and keep it visible on the page, which is what Google's rules require.
Can I leave?
Yes. Export everything first, then cancel in two clicks.
Your first wall takes about 10 minutes.
Free for your first 15 testimonials.