Use Case

Collecting Customer Testimonials with Forms

January 2026 ยท 9 min read

"Do you have any reviews?" Every potential customer wonders this. Testimonials are social proof - they tell prospects that real people have used your service and were happy enough to say so publicly. The challenge is actually collecting them.

Most businesses rely on hoping customers will leave Google reviews. Some send follow-up emails that get ignored. A dedicated testimonial form - sent at the right moment - makes it easy for happy customers to share their experience in a format you can actually use.

The Star Rating

Start with a rating. It's quick, it's familiar, and it immediately tells you whether this is a testimonial you can use or feedback you need to address.

form.addRow(row => {
  row.addStarRating('rating', {
    label: 'How would you rate your experience?',
    maxStars: 5,
    size: 'lg',
    showConfettiOnMax: true,
    isRequired: true
  });
});

The showConfettiOnMax adds a small celebration when someone gives you 5 stars. It's a nice touch that acknowledges their positive rating and sets the tone for writing a testimonial.

Pro tip

Use size: 'lg' for testimonial forms. Larger stars feel more significant and are easier to tap on mobile. This isn't a quick survey - you want the rating to feel important.

The Written Testimonial

The rating gets attention, but the written testimonial is what you'll actually use on your website. Give them enough space to write something meaningful.

form.addRow(row => {
  row.addTextarea('testimonial', {
    label: 'Tell us about your experience',
    placeholder: 'What did you like most? How did we help you?',
    rows: 4,
    maxLength: 500,
    isRequired: true
  });
});

The placeholder text matters. "What did you like most?" prompts specific, usable feedback. "Leave a comment" gets generic responses. Guide them toward the kind of testimonial that will help future customers.

Conditional Follow-Up

Not every response is a testimonial. A 2-star rating is feedback, not something you'll put on your homepage. Adapt the questions based on the rating they give.

// Show different follow-up based on rating
form.addRow(row => {
  row.addTextarea('feedback', {
    label: () => {
      const rating = form.starRating('rating')?.value() || 0;
      if (rating >= 4) return 'What did you love most about working with us?';
      if (rating >= 3) return 'What could we have done better?';
      return 'We\'re sorry to hear that. What went wrong?';
    },
    placeholder: 'Your feedback helps us improve...',
    rows: 3,
    isVisible: () => form.starRating('rating')?.value() !== null
  });
});

High ratings get prompts that encourage specific praise. Low ratings get questions that help you understand and fix problems. The form serves two purposes: collecting testimonials and gathering feedback.

Permission to Publish

You can't use someone's testimonial without permission. Make this explicit with a checkbox - it protects you legally and makes customers feel respected.

form.addRow(row => {
  row.addCheckbox('canPublish', {
    label: 'You may use my testimonial on your website and marketing materials',
    defaultValue: false
  });
});

form.addRow(row => {
  row.addCheckbox('canUseFullName', {
    label: 'You may display my full name with my testimonial',
    defaultValue: false,
    isVisible: () => form.checkbox('canPublish')?.value() === true
  });
});

Two levels of permission work well: permission to publish, then permission to use their full name. Some people are happy to share their experience but prefer "John D." to "John Davidson from Austin."

Customer Information

If they agree to publish, you need their details. But only ask if they've agreed - no point collecting information you can't use.

const infoSection = form.addSubform('customerInfo', {
  title: 'About You',
  isVisible: () => form.checkbox('canPublish')?.value() === true
});

infoSection.addRow(row => {
  row.addTextbox('name', {
    label: 'Your Name',
    placeholder: 'As you\'d like it displayed',
    isRequired: () => form.checkbox('canPublish')?.value() === true
  });
});

infoSection.addRow(row => {
  row.addTextbox('company', {
    label: 'Company/Title (optional)',
    placeholder: 'e.g., CEO at Acme Corp'
  });
});

infoSection.addRow(row => {
  row.addTextbox('location', {
    label: 'Location (optional)',
    placeholder: 'e.g., Austin, TX'
  });
});

Name is required for publication. Company and location are optional but add credibility. "Sarah M., CEO at TechStart, San Francisco" is more compelling than just "Sarah M."

See feedback forms in our template gallery.

Alternative: Emoji Ratings

Stars are standard, but emoji ratings can feel friendlier for certain brands. They work especially well for casual, B2C businesses.

// Alternative: emoji-based rating for friendlier feel
form.addRow(row => {
  row.addEmojiRating('satisfaction', {
    label: 'How was your experience?',
    preset: 'satisfaction',
    size: 'lg',
    showLabels: true,
    isRequired: true
  });
});

The satisfaction preset shows faces from unhappy to delighted. It's more expressive than stars and can feel less formal - good for businesses with a playful brand voice.

Service-Specific Feedback

If you offer multiple services, knowing which one they're reviewing helps you use the testimonial effectively. A cleaning company might feature different testimonials on different service pages.

form.addRow(row => {
  row.addDropdown('service', {
    label: 'Which service did you use?',
    options: [
      { id: 'cleaning', name: 'House Cleaning' },
      { id: 'deep-clean', name: 'Deep Cleaning' },
      { id: 'move-out', name: 'Move-Out Cleaning' },
      { id: 'commercial', name: 'Commercial Cleaning' }
    ],
    isRequired: true
  });
});

form.addRow(row => {
  row.addCheckboxList('highlights', {
    label: 'What stood out? (select all that apply)',
    options: [
      { id: 'quality', name: 'Quality of work' },
      { id: 'punctuality', name: 'Punctuality' },
      { id: 'communication', name: 'Communication' },
      { id: 'value', name: 'Value for money' },
      { id: 'professionalism', name: 'Professionalism' }
    ],
    orientation: 'horizontal'
  });
});

The "highlights" checkboxes serve two purposes: they make writing the testimonial easier (the customer sees what topics to cover) and they give you structured data about what customers value most.

Thank You Message

Acknowledge their submission with a message that matches their rating and choices. Make them feel heard.

form.addRow(row => {
  row.addTextPanel('thankYou', {
    computedValue: () => {
      const rating = form.starRating('rating')?.value() || 0;
      const canPublish = form.checkbox('canPublish')?.value();

      if (rating >= 4 && canPublish) {
        return '๐Ÿ™ Thank you! We\'re thrilled you had a great experience. ' +
               'Your testimonial will help others discover our services.';
      }
      if (rating >= 4) {
        return '๐Ÿ™ Thank you for the kind words! We\'re glad you had a great experience.';
      }
      return '๐Ÿ™ Thank you for your honest feedback. We\'ll use it to improve.';
    },
    isVisible: () => form.starRating('rating')?.value() !== null
  });
});

The message adapts: enthusiastic thanks for high ratings with publishing permission, grateful acknowledgment for high ratings without permission, and sincere appreciation for critical feedback. Every response matters.

Complete Example

Here's a working testimonial collection form:

export function testimonialForm(form: FormTs) {
  form.setTitle(() => 'Share Your Experience');

  // Star rating
  form.addRow(row => {
    row.addStarRating('rating', {
      label: 'How would you rate us?',
      maxStars: 5,
      size: 'lg',
      showConfettiOnMax: true,
      isRequired: true
    });
  });

  // Written testimonial
  form.addRow(row => {
    row.addTextarea('testimonial', {
      label: () => {
        const rating = form.starRating('rating')?.value() || 0;
        if (rating >= 4) return 'What did you love about working with us?';
        return 'Tell us about your experience';
      },
      placeholder: 'Your story helps others...',
      rows: 4,
      isRequired: true
    });
  });

  // Permission to publish
  form.addRow(row => {
    row.addCheckbox('canPublish', {
      label: 'You may feature my testimonial on your website'
    });
  });

  // Name (only if publishing)
  form.addRow(row => {
    row.addTextbox('name', {
      label: 'Your Name',
      isVisible: () => form.checkbox('canPublish')?.value() === true,
      isRequired: () => form.checkbox('canPublish')?.value() === true
    });
  });

  form.addRow(row => {
    row.addTextbox('title', {
      label: 'Title/Company (optional)',
      placeholder: 'e.g., Marketing Director at Acme',
      isVisible: () => form.checkbox('canPublish')?.value() === true
    });
  });

  form.configureSubmitButton({ label: 'Submit Testimonial' });
}

When to Send Testimonial Requests

Timing matters more than the form itself. Send too early and they haven't experienced enough. Send too late and they've forgotten the details.

  • Service businesses - 1-2 days after completion
  • Products - 7-14 days after delivery (time to use it)
  • Software - After a success milestone (first project completed, etc.)
  • Events - Within 24 hours while it's fresh

Getting More Responses

Keep It Short

Star rating + one text field + permission checkbox. That's the minimum viable testimonial form. Every additional field reduces completion rate.

Explain the Why

"Your testimonial helps other [homeowners/businesses/people] find us." People are more likely to help when they understand the impact.

Make It Personal

"Hi Sarah, thanks for choosing us for your kitchen remodel!" beats "Dear Customer." Use their name and reference their specific service.

Follow Up Once

If they don't respond, one reminder is fine. More than that feels pushy. Some people just don't want to write testimonials - accept it.

Common Questions

Should I offer incentives for testimonials?

Small thank-you gifts are fine (discount on next service, small gift card). Paying for positive reviews is unethical and often illegal. If you offer incentives, require disclosure in the testimonial. Most people will write testimonials without incentives if you simply ask at the right time.

Can I edit testimonials before publishing?

Minor edits for grammar and clarity are generally acceptable. Changing the meaning or adding claims they didn't make is not. Best practice: if you need significant edits, send the revised version back to the customer for approval before publishing.

What if someone gives a low rating?

Don't publish it as a testimonial - but do respond to it. Low ratings are valuable feedback. Reach out personally, understand the issue, and try to resolve it. A recovered unhappy customer sometimes becomes your biggest advocate.

How many testimonials do I need?

Quality over quantity. 5-10 strong, specific testimonials are better than 50 generic ones. Aim for variety: different services, different customer types, different benefits highlighted. Rotate them periodically to keep content fresh.

Should I ask for video testimonials?

Video testimonials are powerful but much harder to collect. Most customers won't record themselves. Start with written testimonials - they're easier for customers and still highly effective. Reserve video requests for your most enthusiastic customers.

Ready to Collect Testimonials?

Build a testimonial form and start gathering social proof.