Testimonial widget for React

Add testimonial widgets to a React app with the embed script, an iframe, or the REST API.

R

Short answer

In a React app, render the widget's <div data-vt-widget …> in a component and load https://videotestimonials.video/embed.js after that div has mounted — for example by appending the script in a useEffect. The script scans the page once when it runs, so it must run after the div exists. For full control over markup, fetch approved testimonials from the REST API on your server.

Steps checked against React's documentation on 8 October 2026.

Testimonials on a React site

How to add testimonials to React

  1. 1In VideoTestimonials, open Studio → Widgets, open (or create) a widget, and copy the code from its Code tab (HTML / Script)
  2. 2Render the <div data-vt-widget …> from the code inside your component — data-* attributes pass through JSX unchanged
  3. 3Load embed.js after the div mounts, for example by appending the script tag in a useEffect
The code you paste into React looks like this
<div data-vt-widget="carousel" data-vt-space-id="YOUR_SPACE_ID"></div>
<script src="https://videotestimonials.video/embed.js" async></script>

Where to put testimonials on React

The widget in a React component

Single-page apps built with Vite, Create React App or similar, where routes render in the browser.

  1. In VideoTestimonials, open Studio → Widgets, open (or create) a widget, and copy the code from its Code tab (HTML / Script) — the code is a <div> with data-vt-* attributes and one <script> tag.
  2. Create a component that renders the <div> with the same data-vt-* attributes.
  3. In a useEffect, create a script element pointing at https://videotestimonials.video/embed.js and append it to the page, so it runs after the div has mounted.
  4. Remove the script element in the effect's cleanup function.
  5. Render the component wherever the testimonials should appear.
Testimonials.jsx
import { useEffect } from "react";

export function Testimonials() {
  useEffect(() => {
    const script = document.createElement("script");
    script.src = "https://videotestimonials.video/embed.js";
    script.async = true;
    document.body.appendChild(script);
    return () => script.remove();
  }, []);

  // Copy these attributes from your widget's Code tab.
  return <div data-vt-widget="carousel" data-vt-space-id="YOUR_SPACE_ID" />;
}

embed.js finds widget divs once, when it runs. Loading it once in index.html only works if the div is already in the page at that moment.

Source: React docs: useEffect (connecting to an external system)

An iframe, with no script

You'd rather not load a third-party script, or the widget lives on a route that mounts later.

  1. In VideoTestimonials, open Studio → Widgets, open your widget, and copy the link from its Code tab (URL / iFrame).
  2. Render an <iframe> with that URL as its src and a title for accessibility.
  3. Give it a fixed height that fits your layout — the iframe doesn't resize itself to its content.
TestimonialsFrame.jsx
export function TestimonialsFrame() {
  return (
    <iframe
      src="https://videotestimonials.video/embed/YOUR_SPACE_ID?widget=carousel"
      title="Customer testimonials"
      style={{ width: "100%", height: 520, border: 0 }}
    />
  );
}

Your own markup, from the REST API

You want testimonials rendered by your own components, in your own design system.

  1. Create an API key in the VideoTestimonials dashboard under Settings → API Keys. It is shown once — store it as a server-side secret.
  2. From your server or API route (never from browser code, which would expose the key), call GET https://app.videotestimonials.video/api/v1/testimonials?status=approved&space_id=YOUR_SPACE_ID with the header Authorization: Bearer YOUR_KEY.
  3. Render the returned data array — submitter_name, text_content, video_url, rating and more — with your own components.

API access is part of the Pro plan.

Good to know before you start

  • The widget renders in the browser, so its testimonials are not in your app's initial HTML. Use the REST API from a server if you need them there.
  • embed.js initialises the widget divs present when it runs; load it after the div mounts.
  • API keys are secrets — call the API from a server, not from client-side React code.

How VideoTestimonials compares with other testimonial tools

Prices read from each vendor's own pricing page; oldest check 2026-11-01. VideoTestimonials prices from our pricing page.
ToolTypeFree planEntry paid planUnlimited video fromBest for
VideoTestimonialsTestimonial collection20 text testimonials + 10 video testimonials, no time limitStarter: $24/monthStarter, $24/monthVideo and text testimonials collected by link and embedded on any site
SenjaTestimonial collection15 testimonials in total, video and text combinedStarter: $29/monthStarter, $29/monthPolished widgets and rewards for one brand
Testimonial.toTestimonial collection2 video and 10 text testimonials in totalStarter: $30/monthUltimate, $60/month per space ($50 billed yearly)Text testimonials and importing posts from X and LinkedIn
FamewallTestimonial collection10 testimonials, 1 video, 1 wallStandard: $15/monthProfessional, $29/month ($25 billed yearly)Cheap walls of mostly written testimonials

React testimonials: frequently asked questions

Do I need an npm package to use the widget in React?

No. The widget is one div plus one script tag, which a small component can render, as in the example on this page.

Why doesn't the widget appear after I navigate to another route?

embed.js initialises the widget divs present when it runs. If the div mounts later — after a client-side route change — load the script from that component's useEffect, or use the iframe version.

Can I build my own testimonial UI in React?

Yes. Fetch approved testimonials from the REST API on your server and render them with your own components. API access is part of the Pro plan.

Is there a free plan for using VideoTestimonials on React?

Yes. The Free plan includes 20 text testimonials and 10 video testimonials and a Wall of Love you can embed on React, with no time limit and no credit card. Starter, at $24/month, adds unlimited testimonials and every widget type.

Why Add Testimonials to React?

No npm dependency — one div and one script tag

An iframe option when you'd rather not load a third-party script

A REST API for rendering testimonials with your own components

Start building trust today

Add testimonials to React.
Video and text.

Collect video and text testimonials with a link, embed them on React, and style them to match your brand. Free plan, no credit card, nothing expires.

Free forever plan
No credit card required
Cancel anytime