Free · numbers computed server-side
A small badge in the corner: “14 orders today”, “7 appointments this week”, “★ 4.8”. Our server counts them from your own orders, bookings, appointments and reviews — you cannot type in an invented number or your own wording, because there is no such field. For sites where the numbers really exist.
No card · a minute to sign up, another for the tag · settings reach your site in 5 minutes
They start looking at your offer. The badge doesn’t jump out at once: you set the delay before the first one, and by default the widget lets people settle in.
They see “14 orders today” or “★ 4.8 — 37 ratings”: a short note about what other guests chose — with no names and no details of anyone’s purchase.
The badge leaves by itself, and the next one appears no sooner than the pause you set — 45 seconds by default, counted from the moment the previous one left, so nothing flickers.
The cross switches the badges off for the rest of the visit. If they just move to another tab, impressions wait for them instead of being spent.
A free Cenaly.com account and your site domain in the "My website" section.
One line before </body> — in your theme, in a Tilda or Wix HTML block, in Shopify's theme.liquid. It serves every widget.
Each widget is a toggle and a settings form. Changes reach your site without touching code; CDN cache is five minutes.
The tag
<script src="https://cdn.cenaly.com/site/v1.js" data-domain="your-site.com" async></script> One tag for all widgets. `data-domain` is your site; everything else lives in the admin.
Four fact types: orders today or this week, table bookings, service appointments and the average rating over 90 days. Only a real event moves the counter — there is no manual entry of “purchases” at all. Best where the demand exists but visitors can’t see it.
There is no “badge text” field in the settings: the wording is assembled by the system from the fact type and the number, plural forms included. The public projection contains no free-text field other than dates and the time zone — there is physically nowhere to put a guest’s name, and a build test guards that. Best for anyone who needs the numbers to be trusted.
Anything older than 36 hours is not displayed in any form, and “today” is checked against the venue’s own calendar: once the day turns over, yesterday’s orders stop counting as today’s. Best for venues with days off and uneven flow.
A number below the threshold isn’t shown at all — 3 by default. The average rating has a floor of its own: it only appears from 5 ratings over 90 days, and that floor cannot be lowered. Best for new locations and seasonal businesses with sparse data.
Up to 4 badges per visit by default, the pause counted from the moment the previous one left, a hidden tab spends no impressions, the cross switches the badges off for the session, and the animation respects the system “reduce motion” setting. Best for sites with long sessions.
Any of the four corners, your own accent colour, page masks, device and a schedule. If one of our floating buttons already sits at the bottom, the badge rises above it instead of landing on top. Best for sites running several widgets.
“14 orders today” on the menu page shows the visitor that people have already ordered through the site today.
“7 appointments this week” on a service page shows real demand without a single invented review.
“The table was booked 5 times today” belongs exactly where a guest is choosing between you and the place next door.
“★ 4.8 — 37 ratings” comes from your own reviews over 90 days and appears only from 5 ratings.
Masks keep the badges on the landing pages you choose, and away from the blog and the legal sections.
While the numbers are small the widget stays silent: the decency threshold won’t advertise an empty room, and the badges appear by themselves once the flow starts.
Colour, position and labels adapt to your site. The widget lives in a Shadow DOM — your styles don't break it, and it doesn't break yours.
Exact menu names and plan requirements, taken from each platform’s own help center.
Sites built with our website builder ship with the widgets already wired — nothing to paste.
Step-by-step guides per platform — in the help center →Free
Widgets are the door into the Cenaly.com platform: requests, chats and orders from your site land in the same admin as everything else, and some owners later buy extensions. We earn from plans and from four paid add-ons rather than from the widgets — which is why we charge nothing per visitor, impression, request or domain.
| Without the widget | With the widget | |
|---|---|---|
| Where the number comes from | ✕ The badge arrives by webhook, and its content is down to whoever sent it | ✓ Our server counts the number as the order, booking, appointment or review lands |
| Badge text | ✕ The text is written by the site owner, and a visitor cannot check it | ✓ There is no “badge text” field: the system builds the wording from type and number |
| Stale data | ✕ Yesterday’s numbers keep showing up as if they were today’s | ✓ Anything older than 36 hours is hidden, and “today” follows the venue’s calendar |
| Personal data | ✕ The notification carries one person’s name, city and purchase | ✓ The public schema has no fields for a name, a city or one person’s purchase |
| Cost | ✕ A separate notification service means its own subscription and its own event source | ✓ The widget is free and works on your site and on the storefront at once |
Social proof on a website is a short note that other people have already made a choice: how many orders today, how many bookings this week, what the average rating is. It works on a simple basis — people feel safer where others have been before them.
The trouble is that the genre damaged itself. More often than not the badge is arbitrary text that arrived from outside, and in places the events are typed in by hand. Visitors sense it, and a line like “someone from the next town just bought this” produces distrust rather than trust — and it rubs off on your offer.
This widget is built differently at the schema level: our server counts the number as an order, booking, appointment or review lands, and the public file has no free-text field at all — there is physically nowhere to put a name or an invented purchase, and a build test checks it. Stale data retires itself: anything older than 36 hours is hidden, “today” is checked against the venue’s calendar, and the average rating is only published from 5 ratings over 90 days. The owner chooses WHAT to show and from which threshold — not what it will say.
Social proof is the wrong widget for a young site with no orders and no ratings yet: the thresholds are built so that with empty data the badge simply never appears, which is better than invented activity. And it is not a popup — proof can say nothing beyond a counted number. If you need to carry an offer, a discount or capture a contact, that is the job of smart popups.
There will be no orders badge until the number reaches the decency threshold — 3 by default. Other enabled fact types can still show if they pass their own conditions. If nothing qualifies, the widget stays silent, and that is deliberate: advertising an empty room does more harm than showing nothing.
No. Only aggregates go out — the number of orders, bookings and appointments, the average rating and the number of ratings. Names, cities and products are absent from the public projection by schema, not by promise.
No, and that is the widget’s defining feature. The system builds the wording from the fact type and the number, plural forms included: you cannot add a marketing line or an invented purchase. Any free-text field would turn the badges into a place to make things up.
From your own events: an order reaching the “placed” status, a table booking or a service appointment being created, a review being applied. The recalculation happens as the event lands, not on a schedule.
Up to 4 per visit by default, each staying for a few seconds, with the pause counted from the moment the previous one left (45 seconds by default). The cross switches the badges off for the session, and a hidden tab spends no impressions.
The average and the number of ratings over 90 days from your own reviews — three numbers and nothing more. It is published from 5 ratings; review texts, names and dates are not in the public file.
Yes. One toggle switches the widget on for both your website and your Cenaly.com storefront: the same selection rules, the same timings, the same text. There is deliberately no surface switch — you cannot enable the badges on only one of them.
It is free: the widget is deliberately absent from the add-on catalogue. Paste the shared “My website” tag and flip the toggle — WordPress, Tilda, Shopify, Webflow, Wix and custom-built sites all work.
Social proof is the lightest of our page widgets: about 15 KB gzipped, with the async attribute and after the page has loaded. It doesn't compute anything in the browser — our server refreshes a ready public file the moment an order, booking or review happens, and the widget reads it once. No database calls, no work on the visitor's device. The badge lives in a Shadow DOM.
One loader — about 26 KB gzipped, with the async attribute: it reads which widgets you switched on and pulls only those, as separate files. A widget you left off is never downloaded, and the weight of each one you did switch on is stated on its own page.
No. Widgets render inside a Shadow DOM: your site's CSS doesn't affect them and theirs doesn't leak out.
It reads your page's `<html lang>` or a `data-lang` attribute on the tag. Built-in labels are translated into 45 languages — the guest chat covers the same list; your own texts you write in the admin in the languages you need.
In the cloud your account lives in: cenaly.com — AWS, cenaly.ru — Yandex Cloud in Russia. Requests, conversations and bookings stay within the brand's contour.
More — installation per platform, settings and troubleshooting — in the help center. Installation guide →
Modals, slide-ins, bars, embedded forms, coupons and quizzes with display rules and A/B testing
$9/mo
A “Book a table” button → one form → a request in your Tables section
$9/mo
A storefront over your site or “add to cart” buttons next to your own products — commission-free
Free
Free, with the shared tag and a toggle. The server does the counting — you never have to invent the numbers or refresh them by hand.
Start for freeNo card required · no “badge text” field · no qualifying facts, no badges