How to embed.
Two snippets. One fallback. Zero framework taxes. The widget loads async, renders inside a Shadow DOM, and emits schema.org JSON-LD to your page's <head> for rich-result eligibility.
1. Standard script embed
Paste this anywhere on your site. The data-plauditly-widget value is either a widget public ID (wgt_…) or a project slug. Find both in your dashboard.
<div data-plauditly-widget="wgt_YOUR_ID"></div>
<script async src="https://plauditly.app/embed/v1/embed.js"></script>2. iframe fallback
For site builders that block custom scripts (some Framer / Webflow setups), use an iframe instead. Same widget, no JavaScript on the host page.
<iframe src="https://plauditly.app/embed/iframe/wgt_YOUR_ID"
width="100%" height="600" frameborder="0" style="border:0"></iframe>3. What's in the response
The widget fetches a single JSON document. Anyone can call the API directly to integrate further:
GET https://plauditly.app/api/widgets/wgt_YOUR_ID
{
"project": { "name": "...", "slug": "...", "brand_color": "#..." },
"widget": { "public_id": "wgt_...", "type": "wall", "config": {...}, "showBadge": true },
"testimonials": [
{ "id": "...", "author_name": "...", "author_role": "...",
"author_company": "...", "rating": 5, "body": "...", "pinned": false,
"created_at": "..." }
]
}Privacy invariant: author_email is collected on the form but is structurally absent from this response. It's stored in a separate column the public API never reads.
4. Style isolation
The widget renders inside a Shadow DOM. Your site's CSS can't reach inside it, and the widget's CSS can't leak out. You can paste it next to a brutalist landing page or a Material-Design app — it renders the same.
5. Caching
The JSON endpoint sits behind a 5-minute edge cache with stale-while-revalidate. Cache busts the instant you approve, edit, or hide a testimonial. No manual invalidation needed.
Questions?
Email hello@plauditly.app. Replies usually land same day.