Skip to content
Hazelsong is still being built.Skip to content
Hazelsong

Changelog

What was shipped, and when

Newest first. Each entry describes the feature as it works today and links to its page, which ends with what it will not do. Hazelsong is still being built, in public.

    • A phrase of satisfaction as the writer's name always waits for you

      Automatic moderation now also holds a testimonial whose name is a phrase such as "Very Happy With The Service" or "Cliente Satisfecho", in any of its five languages, rather than a person's name. It is a check, not an AI reading, so it costs no reading, and the testimonial waits in Pending with its reason; nothing is rejected.

      Automatic moderation
    • The reading on arrival no longer flags a relative with no name

      In internal testing on made-up testimonials, the risk reading on arrival flagged plain ones that mentioned the writer's aunt or nephew with no name as naming another person, which kept them from automatic moderation. Its question now says, with examples in English, Spanish, Portuguese, French and German, that a relative or friend with no name, a pet, and your staff by role or by a first name alone are not another person, while a private person who could be identified, your staff named in full, another company, a phone number and an unnamed relative's diagnosis are still flagged. A first name given beside the person's role or desk is still often flagged in the same testing, so those testimonials wait for you.

      Read for risk
    • A short video of yours with every request

      Record one message once, from your camera in the dashboard, and every request for a testimonial and its one reminder now carry a link to a page that plays it under your business's name, with the person's own link to your form beside it. The request stays the same plain-text email, the page opens only with the key the link carries and shows nothing about the person, and each play is drawn from your month of video and pictures shown, like a video on your wall. The owner or an administrator records, replaces or removes it, and nothing is sent by saving it.

      Asking
    • Embed just this one testimonial

      A published testimonial's card has "Copy the code for just this one": two lines that draw it alone, large, with its rating and photo. With only= on a widget's tag, up to ten chosen by hand are drawn in the order you wrote them, and only ones the widget may already show.

      Widgets
    • Your review page on your own address

      The page with your review sites and your form now also answers at /reviews on your own subdomain or domain, and Your forms hands you that address when your plan carries one. It is the same page as before, the same for every visitor.

      Collection forms
    • Show only the testimonials that mention a word

      A widget (q= on the tag) and a named wall can now show only the testimonials whose published words mention a word of yours, at the start of a word, so "plumb" finds plumbing and plumber. It is matched as written, with no AI, and works with the other filters and the limit.

      Widgets
    • One page with your review sites, for everybody

      The review sites you add to your project's own page now also have a page of their own, /r/<your project>/reviews, with a link to your form beside them, to print or send to anybody. Every visitor sees the same page, nothing is asked before they choose, and nothing is counted.

      Collection forms
    • A link of yours after sending

      A form, or your project's own page, can now offer one link of yours on the thank-you screen, with your own words, after the private link to withdraw permission and any reward. It is the same for everybody who writes, opens in a new tab, and nothing is counted when it is pressed.

      Collection forms
    • A "Write a testimonial" link inside the widget

      Add write=1 to the widget's tag, or check it on Walls and widgets, and the widget draws one link under the testimonials to your own collection page, in the reader's language when the tag asks for one. It is the same page for every reader, and nothing about the reader is counted or put in the link.

      Widgets
    • Narrow the list to the language they wrote in

      Once a project holds testimonials in more than one language, the dashboard's list has a select for which language to show, with how many of each and "Not sure" for the short ones. The language is guessed from common words, not read by AI, and it only narrows the list in front of you.

      Approving
    • Starter is $39 and Pro $79, with more in every paid plan

      Starter is now $39 a month or $390 a year, and Pro $79 a month or $790 a year. Starter holds 10,000 testimonials, sends 500 emails to your customers a month, stores 3 GB and carries 15 AI readings and five collection forms; Pro holds 25,000, sends 1,000 emails a month, stores 5 GB and carries 40 AI readings. A pack of 50 AI readings, 1,000 emails or 40,000 counted events is $29 a month.

    • A sentence or a link as the writer's name always waits for you

      Automatic moderation now holds a testimonial whose name reads as a sentence, a review, a link or a business rather than a person's name, such as "Five Stars From Me" in any of its five languages, a web address, an email address, a name with digits, more than five words or a company form like "Ltd" or "GmbH". It is a check, not an AI reading, so it costs no reading, and the testimonial waits in Pending with its reason; nothing is rejected.

      Automatic moderation
    • The widget's own words in Spanish, Portuguese, French, German or Italian

      Add lang= to the widget's tag, or choose it on Walls and widgets, and the widget writes its own words in that language: its buttons and labels, the average, the business's reply label, and the lines that disclose a reward, what customers can generally expect and who chose the testimonials. The testimonials themselves are drawn exactly as written, and without lang= nothing changes.

      Widgets
    • A widget or a named wall can show cards with a video, a voice or a picture first

      A widget's and a named wall's order can now be "With a video, a voice or a picture first": the cards that carry a recording or an attached picture come first, then the rest, each group newest first. It is decided by what a card carries, never by its rating, its score or its words, and nothing is left out.

      Widgets
    • A draft of a reply, for you to read and send

      The private and the public reply box now have "Draft one for me", which asks a model for a first draft from what the person wrote, their rating and an optional note of yours, and puts it in the box for you to change. A draft that offers anything, asks for a review or a rating to change, carries a link, states a figure you did not give or repeats their words is thrown away in code, and nothing is sent or published until you press the button. Each draft uses one of the month's AI readings.

      Approving
    • The plans open on yearly, with monthly one press away

      The pricing page, the home page and the payment page now open on paying by the year, and each yearly price says what it includes: one payment a year with two months included, the difference against twelve monthly payments, and the monthly figure only as billed yearly. Monthly is the other choice on the same switch, at its own price, and the switch can be moved with the arrow keys as well as pressed.

    • Automatic moderation no longer holds a relative with no name

      In internal testing on made-up testimonials, automatic moderation's reading held plain ones that mentioned the writer's father or grandmother with no name, or your own worker by role, as naming another person, and one about a pet's routine operation as a health claim. The question it is asked now says, with examples in English, Spanish, Portuguese, French and German, that a relative or friend with no name, a pet, your staff by role or by a first name alone, and a visit or repair told as the writer's own are not reasons by themselves. A private person who could be identified, your staff named in full, another company, and a cure or other health, legal or financial outcome stated as fact still wait for you.

      Automatic moderation
    • Star links in the request email

      A request for a testimonial, and its one reminder, can now carry five more links under the usual one, from 1 star to 5 stars, each opening the same page with that star already chosen. The person can choose another star or leave the rating out, every star leads to the same questions, permission and promise, and nothing is saved until they send. It is off unless the owner or an administrator switches it on for the project.

      Asking
    • Reply publicly under a published testimonial

      The owner or an administrator can now write one public reply of up to 600 characters under a published testimonial, shown on your hosted walls, in every widget layout, on its record page and in the API, always under "Reply from" and your business's name and never joined to what the writer wrote. It can be changed or taken off at any time, each change is in the testimonial's history, and it is shown nowhere while the testimonial is not published.

      Approving
    • A placeholder as the writer's name always waits for you

      Automatic moderation now holds a testimonial whose name is a form's template words, such as "Your name", "Name Surname", "John Doe" or "Test", in English, Spanish, Portuguese, French or German, or one letter, digits or one repeated character. It is a check, not an AI reading, so it costs no reading, and the testimonial waits in Pending with its reason; nothing is rejected.

      Automatic moderation
    • Plans are for businesses, and an EU VAT number is checked in VIES

      Before a payment page opens, the person paying now gives the business's country and name and confirms they buy for their business, not for personal use; that confirmation, its wording, the time and the country are kept with the subscription. In the European Union a VAT number is required and checked in the EU's VIES service on our server, and a number VIES does not confirm, or a VIES that does not answer, opens no payment; in the United Kingdom it is optional. Where the buyer accounts for the VAT, the invoice shows the VAT number and "Reverse charge".

    • A review policy, how each wall was collected, and two holds

      Hazelsong now publishes a review policy at /review-policy, and every hosted wall says how its testimonials were collected, counted from their own records, and that you chose them. A testimonial sent from your own domain is not published until you confirm the writer is a customer and not on your team, and one the risk reading found states a result is not published until you add what results customers can generally expect, shown with it everywhere as your words.

      Walls of Love
    • Keyboard and screen-reader fixes across the site, forms and dashboard

      Every page now starts with a Skip to content link, and every control a keyboard reaches shows a ring, including checkboxes, the Add a photo button and the wall preview. After sending a testimonial, an answer or a video, focus moves to the thank-you, and after approving one it moves to the sentence saying what happened, instead of being dropped. The page a customer opens to add a video version, which could fail to load, opens again.

      Collection forms
    • Automatic moderation's question says what alone is not a reason to hold

      In internal testing on made-up testimonials, automatic moderation's reading held plain ones that mentioned the writer's son or sister, or the business's tutor by role, as naming another person, and held clear Portuguese ones as unclear. The question it is asked now says what is not a reason by itself: clear words in any language, family or friends unnamed (parents and children included), your staff by role, the writer's own company, a minor reservation inside praise rated 4 or 5. It also became stricter in three places: a person outside your business named, or your staff named in full; money, weight, grades, exams or rankings gained; and a placeholder, a slogan, a business's name or an instruction as the name all wait for you.

      Automatic moderation
    • Six smaller security fixes

      Webhooks, feeds and notice channels are now sent only to addresses whose name resolves to the open internet. Your dashboard sends its link to the server in a header instead of in each address, and dashboard and payment pages allow scripts only from Hazelsong and the payment provider. The website typed at sign-up is checked, video reels include only testimonials whose writer allowed social media, and stored files are accepted only from Hazelsong's own storage.

    • Downloads and counting paced so nobody can run up a project's costs

      Downloads of your own files through your dashboard link or an API key are still free and never charged, and are now paced per link at 240 requests a minute and 3 GB an hour, past which the answer asks to try again in a few minutes. A visitor's preview of a recording they are uploading can be opened a few times within its hour. One address can now send at most 60 counted events a minute to a project, and pictures on your walls are looked up one testimonial at a time.

    • Automatic moderation's answer is a fixed form, so plain ones can be approved

      In internal testing on made-up testimonials, the model often wrapped its written answer in formatting, which automatic moderation, reading strictly, treated as no answer, so plain testimonials waited in Pending. The model now answers by filling in a fixed form of a decision and reasons that the AI provider holds it to, and the same strict reading applies: anything written out in words is still no answer. The reading on arrival is unchanged.

      Automatic moderation
    • Recordings go only to a speech service with a processing addendum

      A recording is now sent for a transcript only to a speech service whose data processing addendum is in place: Deepgram and OpenAI only once theirs is signed and recorded, which it is not today, so transcripts are written by Google's Gemini where it is configured. The Privacy Policy now also says what anyone in the United States may ask of us and how to appeal, names the person in charge of personal information that Quebec's privacy act asks for, and describes the record we keep of every security incident for at least 24 months.

      Data Processing Addendum
    • A fingerprint of each permission, what shows who sent it, and its history

      Every testimonial that arrives now keeps a SHA-256 fingerprint of the exact version agreed, the words as sent, the permission sentence, the places, the reward disclosure and your release's version, and its public record prints it with how to compute it again. The record also says what shows who sent it, from what was stored: imported by you, sent on your form with nothing checked, or sent from a request link Hazelsong emailed, after an order where one made the request, and that identity is not checked. The owner can download a permission history as a CSV, one row for every permission and every withdrawal.

      The record
    • The widget's fault note and the ask's reminder wait for consent too

      The two other entries Hazelsong's scripts keep in a visitor's browser now wait for the same answer from your site as the lift test: the widget's note of what it already reported when it could not draw, and the embedded ask's reminder of when it last asked. Without that answer the widget reports no fault and the ask's code does not open the window by itself, unless it passes force: true, and nothing is stored; your own button that asks to write always opens the form, and a refusal removes both entries.

      Widgets
    • Pending puts low ratings and complaints first, with deadlines

      Pending now lists everything waiting as a queue, with low ratings, complaints, replies owed, regulated claims and anything flagged first and the longest-waiting first within each, a deadline for each priority that the owner can change within bounds, and how long they have been waiting by rating, language and reason. One past its deadline is marked, listed on your report and named in an email at most once a week, and a selection is reviewed with each one's words and permission in front of you before you decide. A testimonial can be given to somebody on the team, recorded in its history, and the owner can hold automatic moderation's approvals while a low-rated or complaint testimonial is overdue.

      Approving
    • One order is counted once in the lift test, whoever reports it

      When your page and your server or store both report the same order, the lift test now counts it once, with the amount your server or store sent, instead of adding its money twice; give the page the order's id with purchased(49, { orderId: "ch_123" }) and a different order of the same reader is told apart. A purchase that reaches us a few milliseconds before its browser's own count now brings that count with it instead of being lost, and the page states when a purchase counts. Beside the verdict, the report counts what was changed in Hazelsong on your widget while the test ran, and the currency of the figures can no longer change while a test runs; a store order in another currency is counted with its amount left out.

      Lift test
    • A reading that did not come back is tried again

      When the AI provider is busy or slow as a testimonial arrives, the testimonial is no longer left "not read" for good: it is marked "Reading queued" and read again automatically, up to 5 attempts within 6 hours, testimonials from your forms first and imports, feeds and the API after them. Its history shows "not read" on arrival and then the reading, and automatic moderation, where you switched it on, checks it once the reading comes back; one whose reading never comes back says so and waits for you. At most as many as your month's AI readings are queued this way in a month.

      Read for risk
    • Webhooks try again, and say when a writer withdraws

      testimonial.approved is now tried again when your endpoint does not answer, times out, or answers 408, 425, 429 or 5xx, up to 4 attempts about 1 minute, 10 minutes and 1 hour apart with the same X-Hazelsong-Delivery id and signed body; it is charged to your account's month of API calls first, and when the month cannot hold it the API page says so. A new event, testimonial.withdrawn, tells the one endpoint of a project that asks for it when a writer withdraws their permission, once, with the id and the time and never the words, and it is never charged and is sent even when the month is used up. Pro's testimonials arriving through collection pages are now 150 a month, and testimonial.created and testimonial.rejected are sent once, as before.

      API and webhooks
    • Replacing your link and deleting a project work after any settings change

      On some projects, including any project handed over from another owner, a change to its settings could leave Replace my link failing and stop a deletion part-way. Every change to a project or a testimonial now keeps its lists exactly as they were, and a project already affected is read correctly, so both work again with nothing for you to do.

      Ending a project
    • How long automatic moderation took, in your report

      Your report now counts what automatic moderation decided on the testimonials that arrived in the last 30 days, the exact median time from arrival to its decision, and how many wait for a person now and for how long. The figures come from your own project's records, and say so.

      Automatic moderation
    • Security updates to the framework

      Hazelsong now runs on the latest patched release of the web framework it is built on, and of the image libraries under it, which fix issues their makers published in September and October 2026. Nothing changes in how anything works.

    • A payment always reaches the account it was made for

      A payment is now matched to a project only through a reference our server makes for the person who pays for it, and a second payment can never replace the subscription an account already pays with. Before any notice that a project will be deleted after a plan ends, and again on the day, Hazelsong asks the payment provider about every subscription of every billing account the person has paid with, and does nothing while any is live or cannot be read.

      Ending a project
    • No reviewer overwrites another, and every rejection has a reason

      A change made on a testimonial that somebody else, or its writer, changed first is no longer applied: the dashboard says so and shows it as it is now, in a batch too, and the API answers 409 changed unless it sends the rev it read. Rejecting one, taking one off your pages or returning one to Pending asks why, from a fixed list on which being negative or low-rated is not a reason; the reason is in its history and your export, and rejected ones stay in a Rejected tab where the decision can be corrected. A writer can ask you once, from their withdrawal link, to reconsider a rejection, in one email counted in your month of emails about your projects.

      Approving
    • A removal never reverses what they said

      Removing a part, by hand or from the AI's proposal, is now refused when it would take a word that negates or limits, such as not, never, only, except or but, or the same word in Portuguese, Spanish, French or German, out of a sentence that stays. The refusal says to remove the whole sentence instead, so "It did not work" can never be published as "It did work".

      Removing a detail
    • CSV and Takeout imports work on the free plan

      On the free plan, which carries no AI readings, a CSV file or a Google Takeout archive used to stop before its first row. Every row is now stored unread, within what a free project holds, and its card says it was not read for risk and waits in Pending for you; the import's closing line says how many. A pasted page still needs an AI reading to be separated, and the free plan now says so in words and points to the CSV file.

      Import
    • What is read, way by way, and on every card

      A new page lists every way a testimonial comes in, from the collection form to a feed, and for each kind of thing it can carry says whether the AI reads it for risk, never reads it, or leaves it for a person, with the limits and what happens when the reading cannot run. Each card in your dashboard now has "What was checked", and the CSV export a column with the same lines: the permission recorded, whether the typed words were read, the address check, the same-words check, and which recordings or pictures no AI read.

      What is read
    • The lift test's range holds at every size, and says what a plan can find

      The range around the lift test's difference is now a confidence sequence by betting, which holds at any number of readers, from the first few hundred on, and may still be read every day. Before a test starts, the panel works out from the same range the smallest difference your plan's size could give a verdict on at the purchase rate you type, and whether your month of counted events can carry it. Rows by origin, page and product are now corrected for every row a test can have, so across all of them the chance of a false verdict stays at 5% or below.

      Lift test
    • A lift-test purchase counts only for a counted reader, once

      Each browser in a lift test now draws a random number for that test alone, sent with its count and its purchase. A purchase is counted only for a browser the test counted, in its own group, and each reader is a buyer once whether the purchase comes from your page, your server or your store; a later order of the same reader adds its money and no purchase. The reference for your checkout now carries the number, and the older one is still accepted.

      Lift test
    • The lift test waits for your visitor's consent

      The lift test now stores, reads and sends nothing in a visitor's browser until your site says they agreed: one call from your consent banner, consent=granted on the tag, or Google Consent Mode, which the widget reads on its own, and a refusal also removes what an earlier yes stored. Until then the visitor sees your wall like everybody else and is not in the test, so the figures are about visitors who agreed and nobody else is counted.

      Lift test
    • Referral links set no cookie until the visitor allows it

      Following a referral link now sets no cookie: the page it opens asks first, and only a yes keeps one, holding a random id for that click. Without it nothing is stored in the visitor's browser, and a sign-up from that page still credits whoever shared the link.

      Referrals and affiliates
    • Imports state what their permission rests on

      An import from a public platform now states that its writer published it there first; anything that reached you privately, a message, an email, a file from another tool, something said in person, states that you hold the writer's written permission for these exact words. The API asks the same with its permission field, an import without the right sentence is refused, and each testimonial's public record now says which one the business stated.

      Import
    • Automatic moderation tries again when the AI is busy

      Automatic moderation now keeps a record of every testimonial it has to check from the moment it is stored, so a busy or unreachable AI provider, or a server that stops part-way, no longer leaves a testimonial unchecked: it tries again later, up to 5 attempts within 6 hours, and an attempt that got no answer gives its reading back. Nothing is published while it waits, and one that every attempt failed on says so and can be checked again once from the Automatic moderation panel, which also lists what is waiting. To make room for this inside Pro's margin, Pro now takes 220 testimonials a month through its collection pages instead of 225.

      Automatic moderation
    • Automatic moderation no longer waits for your webhooks

      When a testimonial arrives, automatic moderation, the arrival notice and the thank-you now run even if sending the testimonial.created webhook fails, and none of them waits for your endpoint to answer. Every AI request now has its own time limit of at most 90 seconds instead of ten minutes; one that runs past it counts as a model that did not answer, so the testimonial waits in Pending and the reading is given back.

      Automatic moderation
    • The lift test says what it measures

      The verdict now says it estimates the effect of offering your testimonials to the browsers assigned to see them, whether or not each reader looked at them, and the group is called "Assigned to see testimonials". An inconclusive result is called inconclusive, with the size of difference the test can detect at the readers counted so far, on the report, share links, the result picture and the email at a planned end.

      Lift test
    • Every widget says who chose the testimonials

      Under every layout, by default, one line says the testimonials were selected and published by your business, are not necessarily every review it received, and are not an independent review service. The rating line drawn with review markup, the badge, the rating line and the hosted wall's average now say they count published testimonials.

      Widgets
    • What is read and what is checked, said plainly

      Pages that claimed a reading of everything that arrives now say the true scope: typed words, on arrival, on Starter and Pro while the month's AI readings last; recordings, pictures and transcripts are never read by AI, and anything not read waits for you. The terms and the help center say what Hazelsong checks before anything is public, and what it does not verify.

      Read for risk
    • A Data Processing Addendum, and the legal basis for each use

      The Terms of Service now include a Data Processing Addendum at /dpa: what Hazelsong does as your processor point by point, every company that receives your customers' data and what its own terms say, the EU and UK transfer clauses, breach notice within 48 hours, and deletion at the end. The Privacy Policy now says what Hazelsong decides about itself and what the business decides, the legal basis for each use, transfers, how long account records are kept, and where to complain. Every recording sent to Deepgram for a transcript now opts out of Deepgram's use of it to train its models.

      Data Processing Addendum
    • Room is set aside before each upload

      When a recording, a photograph or a picture starts uploading, its size is now taken from your plan's storage before the upload begins, across all your projects, so several uploads at once can never together pass your storage. The file's real size is what counts once it lands, and room set aside for an upload that never arrived comes back once storage confirms there is no such file.

      Video testimonials
    • After a paid plan ends: 30 days, three emails, then deletion

      When a paid plan ends, its projects now keep everything for 30 days, with the CSV export and every original file available on the free plan throughout, and the account is emailed when it ends, 14 days before the day and 7 days before it. If no plan has been started again by then, the projects it paid for are deleted completely, only after all three emails and after the payment provider confirms the subscription ended. To make room for those 30 days inside every plan's margin, Starter now holds 5,000 testimonials, and Pro 10,000 and 2.5 GB of storage.

      Ending a project
    • Referral credit stays inside each bill's margin

      Referral credit is now applied to each business's own bills only as far as each bill, at its plan's full use, keeps the margin every plan is held to. What one bill cannot take carries to the following bills for 12 months, then expires.

      Referrals and affiliates
    • Automatic moderation, if you want it

      On Starter and Pro, the owner can switch on automatic moderation in the dashboard. It approves a testimonial on arrival only when it came through your collection form with permission for a public place, was read for risk with nothing flagged, is typed words only with no reward, and a second AI reading answers that it may be published as written; anything else waits in Pending with the reason. Under approval by two people it proposes and a person signs, and a panel lists every decision and why.

      Automatic moderation
    • Sending a testimonial twice arrives once

      If a writer presses Send again because the connection dropped, the testimonial that already arrived is recognized and they get the same answer, with the same withdrawal link, instead of a second copy. Nothing is read, counted, emailed or announced twice, and a second press while the first is still sending is asked to wait a few seconds.

      Collection forms
    • Deleting a project closes it first and always finishes

      When you delete a project it closes at once: no testimonial can arrive while its records and files are removed. Its own record is now deleted last, so a deletion that stops part-way keeps the project closed and is finished automatically within a day.

      Ending a project
    • What the free plan keeps is covered by the paying customers

      A free account now stores new testimonials and files only within a ceiling that the paying customers cover: two free accounts for each live paid subscription. When it is full, a free project keeps everything it already holds and nothing is deleted; the collection page tells the person writing that it is not taking new testimonials for now, and imports, the API and file uploads say so in words.

      Collection forms
    • Monthly allowances start again on your billing day

      On Starter and Pro, the month's AI readings, emails, counted events, arrivals, video shown and API calls now start again on the day your billing month starts, not on the 1st, so each payment carries exactly one month of them; the free plan still starts again on the 1st. Starter and Pro can be paid by the month again, and Pro's extra projects and seats are back. Free accounts are now held to a ceiling that the paying customers cover, so when it is full a free project keeps working without its emails, pictures shown and counting until the next month.

    • Plan figures lowered so every plan stays profitable at its fullest use

      Every allowance on the pricing page, and the size of each pack, was lowered so that a customer using all of it still leaves the business a sustainable margin after every fee and tax; prices are unchanged. Starter and Pro are now sold by the year only, and packs and extra projects or seats are not sold for now, because at their prices they could not leave that margin. Emails to you about your projects now count toward one month for the account, and the free plan no longer includes AI readings, so what arrives there is kept unread and marked so.

    • Billing ready for Stripe

      Once Stripe is switched on, a plan is bought on Stripe's own checkout page and Manage billing opens Stripe's billing page, where you change the card, download invoices or cancel. Every plan, extra and pack counts only after it is read back from Stripe, and a refunded or disputed pack stops counting when Stripe reports it. Until then, billing stays exactly as it is.

      Your team
    • Compare Hazelsong with Trustpilot, G2 and Vocal Video

      Three new comparison pages put Hazelsong beside Trustpilot, G2 and Vocal Video, each with figures read off the other company's own pricing page on a printed date and a list of trade-offs where they are ahead. Each page ends with how to bring testimonials across and links the import guide that fits.

    • Refer a business, or join the affiliate program

      A paying customer can make a referral link that gives both businesses service credit, and creators and agencies can join an affiliate program with a dashboard of clicks, sign-ups and payments. Rewards are earned only on plan payments, held for 60 days and canceled by a refund or dispute, and both programs open only when a plan has room for a reward inside its margin.

      Referrals and affiliates
    • A first-run list, and imports that name their own source

      A new dashboard shows four steps from your collection link to testimonials on your site, with the next one's button beside it. A Senja or Testimonial.to CSV whose name or links say where it came from, and a Google Takeout archive, now set their own source and say why, and the embed card copies a prompt for your coding agent.

      Getting started
    • Form arrivals and file imports confirmed again

      A testimonial sent through your collection form now ends on its thank-you instead of a message saying it might not have arrived. A CSV or Takeout file of new testimonials is no longer stopped at the preview by a duplicate check that reported itself unavailable.

      Import
    • Read report next steps through the API

      Use /api/v1/report?view=next_steps to get bounded suggestions and the counted fields behind them. It uses the same cached figures and allowances as your report, and keeps the default report response unchanged.

      API and webhooks
    • Ask your assistant for report next steps

      The report_next_steps tool suggests checks from your counted report and cites the fields behind each suggestion. It highlights assignment problems, incomplete test samples and collection-step differences. It uses your existing report permission and API allowance; it makes no model call or automatic change.

      Your assistant reads them
    • Keep AI readings consistent when usage is incomplete

      When an AI service answers without reliable usage figures, the readings reserved for that request are kept. Invalid figures cannot erase earlier measurements, and requests with no answer or measured use keep the existing credit rule.

    • Pause new subscriptions and add-ons during review

      New subscriptions and additional purchases through Hazelsong are temporarily unavailable. Existing billing access, cancellations and add-on removals remain available.

    • Keep experiment figures when their sources cannot be read

      Failed card, renewal or channel reads no longer appear as an empty experiment report. The panel keeps the last reading while you retry; successfully read counters with no events still show zero.

    • Keep reliable experiment readings when a response is incomplete

      The experiment panel now checks report structure and the consistency of its conclusions before replacing displayed figures. Invalid readings retain the previous figures and reading time, while a first failure offers recovery without inventing an empty test. Start and stop responses must match the requested operation, and a fresh valid reading clears earlier uncertainty.

    • Start experiments without overwriting a concurrent test

      The Start button now identifies the previous experiment displayed on the screen. Starting compares its saved state and project ownership, then commits the new test, its schedule and cleanup of the prior counters atomically. Stale requests and collisions with existing counters are refused before changes.

    • Keep late stops from replacing newer experiments

      Stopping an experiment now compares its reviewed configuration and project ownership against current storage before making changes. The stop and schedule removal happen atomically, so a conflicting request cannot remove a replacement experiment’s schedule or overwrite its state. Existing counters and unrelated project settings are preserved.

    • Recover interrupted scheduled experiment stops

      After a confirmed claim, failed scheduled stops now try to restore the current running plan for a later check. Recovery reads the current project inside storage, leaves stopped and deleted experiments closed, and respects replacement plans. Completion notices require a fresh matching stopped record and use its current owner.

    • Confirm experiment starts and stops before reporting success

      Experiment actions now check the saved configuration and a matching fresh project reading. An unconfirmed configuration write preserves the previous counters and does not announce a chart note or change the schedule. Uncertain responses ask the owner to read the current figures before retrying.

    • Confirm experiment currency without replacing the figures

      Changing the currency label now waits for the exact saved code and preserves the figures already displayed. Requests in the panel cannot overlap, and Read test figures provides recovery when a response cannot be confirmed. Amounts are never converted.

    • Order channels by engagement per showing

      Channel and campaign tables can now be ordered by plays or original-source clicks per showing, with the same order in their CSV exports. Rows without showings remain unavailable and sort last; the existing search and minimum-volume filters still apply.

    • Export complete-period comparisons

      The report can now export its selected 7-day or 14-day comparison as CSV, including both UTC intervals and the snapshot time. The file contains aggregate event counts, change directions and magnitudes; it leaves percentages blank for a zero baseline and refuses incomplete readings.

    • Keep old post results out of a replacement channel

      A channel replacement now starts its own configuration and history atomically. Late post results cannot overwrite that replacement or recreate removed history, and simultaneous failures update the current counter together.

    • Confirm channel operations before changing the report

      Channel saves, tests and removals now validate request acknowledgments and preserve the last confirmed view after uncertain responses. Read channel status provides a manual read-only recovery, while overlapping actions are blocked and newer address drafts are kept.

    • Confirm saved summaries and alert preferences

      A failed preference write no longer returns the attempted settings as a successful save. The report confirms the submitted settings before announcing success, blocks duplicate save requests and preserves newer edits to recipients and options.

    • Read report metrics before drawing them

      The report validates the received snapshot before displaying its figures and sections. Incomplete responses offer a fresh read, with duplicate requests blocked while it is loading; retrying does not repeat edits or request an AI reading.

    • Keep signature drafts when a reply is uncertain

      Prepared by now validates the saved signature before announcing success and preserves edits made during a save. Removal requires a separate confirmation, while failed reads offer a manual retry and uploads keep newer mark choices.

    • Confirm chart notes without losing a newer draft

      Chart notes reuse the same request when an uncertain save is retried on the page, and only clear the submitted draft after an exact confirmation. Deletion asks for confirmation and removes only the acknowledged note, keeping other notes in place.

    • Keep unavailable collection usage separate from zero

      The report now reads held testimonials and collection-page arrivals through one strict account scope, without falling back to a project counter when the account read fails. Failed or malformed counters show an unavailable state, and a partial held total is never shown as the account total. Real zeros and confirmed full or spent counts remain distinct; pricing and allowance enforcement are unchanged.

    • Keep unavailable report alerts distinct from an empty result

      A failed alert check now reaches the report as unavailable instead of producing an all-clear. Check alerts again validates a fresh alert snapshot, preserves previous alerts through failed or malformed responses and leaves other report figures unchanged. The report labels the check time and explains that an empty list from best-effort checks is not a complete installation audit.

    • Respect selected removals in AI report readings

      Themes and case-study requests now use the selected version with removals, with no fallback to hidden originals or original interviews when that version is unavailable. The report discloses the bounded sample and interpretation limits, gates its reading control by moderation permission and prevents duplicate pending requests. Lost or malformed replies preserve earlier drafts and explain that the AI allowance may already have been used.

    • Confirm note sharing and the exact link revoked

      Note-sharing changes now require acknowledgment of the requested setting, and revocation checks the selected reference and its absence from a valid returned list. Lost or incomplete replies remain unconfirmed, with results kept through refresh failures. Shared action guards prevent overlapping changes, each revocation consumes its confirmation, and confirmed revocation removes its displayed one-time address.

    • Confirm client links without losing an earlier address

      Client-link creation now blocks duplicate submissions and checks the returned address and requested protection settings before confirming success. Newer edits survive a delayed reply, and a failed later attempt keeps the previous one-time address visible. Refresh link list reads again without repeating creation and keeps earlier rows when a response is unavailable or malformed.

    • Keep readable next steps when refreshing fails

      The next-steps panel now validates a complete response before replacing its figures, preserving the earlier snapshot when a reply is malformed or unavailable. A refresh started before a note was saved cannot replace that saved note. Checking again remains an explicit read and never repeats a note save.

    • Retry report notes without adding duplicates

      Note saves prevent overlapping submissions and reuse the same request identity for a manual retry of unchanged text and day while the page remains open. Confirmation checks the exact saved owner note before clearing its draft, preserving newer edits. Private responses are not cached, and no save is retried automatically.

    • Export the channel rows currently shown

      Site and campaign explorers can now export the current search, minimum-showing filter and displayed order as CSV, including the report month and snapshot time. The file preserves event counts, repeated-event percentages and blank zero denominators while protecting spreadsheet cells. It uses only the visible report snapshot, including on shared reports, and creates no visits or server requests.

    • Reuse exact campaign labels from the report

      The campaign-link builder now offers compatible labels from the current report snapshot, reducing accidental spelling variations. Choosing one fills source and campaign, keeps the destination and clears the previous preview; building and copying remain explicit. Aggregate or incompatible labels are excluded, and existing totals are not presented as new activity.

    • Keep label drafts and suggestions until saving is confirmed

      Individual label changes now verify the returned record and complete label list, keeping persistent results for conflicts and uncertain responses. Typed drafts and suggested labels stay available until confirmation, and newer typing is preserved. Same-record edits coordinate with status changes and deletion; nothing retries automatically.

    • Confirm deletion responses without repeating requests

      Deleting a testimonial now keeps a response message that checks an explicit acknowledgment for the same record. Lost or incomplete responses remain unconfirmed through refresh recovery, and each attempt consumes its permanent-deletion confirmation. Deletions share the current tab’s record reservation with individual and batch status actions.

    • Review the exact rows behind uncertain batch responses

      A private, paginated list now identifies the latest batch rows returned as unconfirmed, not applied or refused. Each available row opens its exact current record for review, and the list survives a failed refresh and read recovery. It sends no retries and is kept only in the current dashboard tab.

    • Coordinate individual and batch status changes

      In one dashboard tab, a batch does not start if any selected record has an individual status change in progress. A running batch reserves all its selected records through the response and refresh, preventing overlapping individual changes even for rows still queued. Unrelated records remain usable; this does not lock other tabs or teammates.

    • Return selected approved testimonials to Pending

      Approved records can now be selected in Compact and returned to Pending together without deleting their records or files. Only selected rows currently shown are included, and the response summary distinguishes confirmed returns, refusals and uncertain changes. Each approved compact row also offers Stop publishing; recorded permissions stay unchanged.

    • Recover a failed dashboard read without repeating edits

      The dashboard error screen now offers Refresh dashboard, preserving filters and moderation response messages while reading the collection again. Concurrent refreshes share one request, and incomplete or mismatched snapshots are refused before replacing the current data. A valid response restores the panel without resending earlier edits.

    • Confirm individual publication changes from returned records

      Individual approval, rejection and return-to-Pending actions now verify the server response and keep a persistent result message. Lost responses remain unconfirmed, and repeated status clicks for the same record are blocked through its refresh. Proposals stay distinct from approval, and a response is never described as proof of a live page.

    • Keep an honest summary of each moderation batch

      Batch moderation now checks returned record IDs and states and keeps a visible summary of confirmed, refused, not-applied and unconfirmed results. Lost responses and server errors no longer disappear from the outcome, and a failed list refresh keeps the summary available. Approval responses do not certify a live publication, and retries remain manual.

    • Keep selected-row actions inside the shown list

      Checked records hidden by filters no longer enter selected-row approval, signing or rejection. The list discloses visible and hidden checks, prevents duplicate pending batches, and asks for a new confirmation when the set with nothing flagged changes. Existing server approval and permission checks still govern every write.

    • Review the collected words behind your first publication

      When website-permitted testimonials are waiting and none are approved, Next steps now links directly to their permission review instead of the general list. Counts include pending and proposed records; the existing approval and second-review controls remain the only way to publish. Missing readings stay unknown, and collection guidance remains when no matching record exists.

    • Review recorded permissions for each publication channel

      The testimonial list now separates website and hosted-page permission filters alongside social permission. Missing or invalid scope lists appear in the corresponding no-permission queue, with counts across both tabs and navigation to available matches. Filters stay available however few records a project holds; they never grant permission or claim a record is live.

    • Find the unlabeled evidence behind your next step

      The organization recommendation now counts only records reachable in Pending or Approved, excluding rejected records. Its Not labeled yet list opens the tab with matching records and shows counts for both tabs before other filters. Later refreshes respect your chosen tab, and reviewed batches use the rows actually shown.

    • Add one label to a reviewed batch

      Review up to twenty shown testimonials and explicitly add one label while preserving existing labels. The dashboard reports skipped, changed and unconfirmed rows, then refreshes; concurrent label changes are protected from stale replacements. Only moderators can save, and labels on approved testimonials can affect tag-filtered widgets and walls.

    • Export the rows currently shown in your testimonial list

      A private review CSV now follows the current tab, search, exact label, filters and ordering. It prefers an existing redacted text and includes status, recorded scopes, labels and incentive details while omitting email fields, private replies, risk readings and media links. The browser builds the file locally on request; the complete archive remains available separately.

    • Filter the testimonial list by an exact label

      The dashboard can now match an exact label independently of text search, with counts across Pending and Approved. Suggestions are bounded and counted once per record; other exact labels remain searchable. The filter survives a return from evidence review, and active controls stay available however short the list is.

    • Open the exact relationship-review queue from Next steps

      Reply and detail recommendations now open separate queues for records without a private reply or earlier follow-up request. The dashboard selects a tab with matches on arrival, shows counts across Pending and Approved, and keeps active filters accessible however short the list is. Rejected records do not enter these recommendations; contact eligibility and explicit sending controls are unchanged.

    • Next steps checks collection measurement before suggesting form changes

      Form recommendations now use the same step-count review as the report. Invalid or non-nested counts trigger a measurement check instead of a completion suggestion for that form. Both recommendations open the collection-steps section directly and are available to report readers without changing a form.

    • Review collection-step differences without inventing abandonments

      Form and labeled-link tables now explain the count differences between opening, starting and sending, with an area to inspect next. Counts that do not form a nested funnel get a measurement check instead of a step-loss estimate. Sends per opening no longer hides event ratios above 100%, and shared and assistant reports include the same review.

    • Unreadable channels stay unavailable instead of becoming zero activity

      A failed or malformed channel read no longer turns into an empty campaign list. Owner and shared reports say when this breakdown is unavailable, assistant reports preserve that state, and Next steps does not suggest adding campaign tags on the strength of a failed reading. CSV downloads refuse incomplete surface or channel readings.

    • Explore the channels already listed in your report

      Reports and shared reports can search listed sites and campaigns, order them by showings, plays or original-source clicks, and filter by a minimum showing count. Controls use the existing capped snapshot without another request. The report explains the cap, zero denominators, repeated events and why engagement does not establish a sales winner.

    • Compare complete periods from the same snapshot

      Reports and shared reports compare 7 or 14 complete UTC days with the preceding equal period, excluding today. Assistant reports include the seven-day comparison. Failed daily reads leave the comparison unavailable and stop CSV creation instead of turning missing readings into zero activity.

    • From a found passage to the full record and a widget preview

      Ask your testimonials can now select the full current record for review, with a way back to your previous list filters. Existing labels link to a widget preview for people allowed to manage walls. This navigation changes no words, publication, labels or installed embed, and repeated pending AI submissions are held to one request.

    • Check a widget selection and reuse it for a named page

      The widget editor can now check how many publishable testimonials pass each current filter and remain after the limit. Copy those content filters into a named-page draft, then name and publish it explicitly. Old checks are marked stale after filter changes, and unsupported shuffled order is explained instead of silently replaced.

    • A broken test split cannot become a winning result

      When a test fails its group-split check, the dashboard and shared report now withhold effect conclusions, segment winners and layout adoption advice. Result images are blocked, and API, assistant reports and the scheduled completion summary explain the problem. Counts remain available for diagnosis.

    • Build campaign links beside their counted results

      Your report can now build a link with source and campaign tags, preview its exact report label, and show any existing campaign row. It refuses existing query strings, fragments, credentials and common private account routes, and has a manual copy fallback. Creating a link adds no visit and no new customer or payment tracking.

    • Choose evidence for a page and record what you tried

      The widget editor lists your labels with counts from the current public collection, and applies a chosen label to the preview and embed code. Next steps lets owners and administrators save dated report notes, with the current share setting explained before saving. API and assistant test reports now explicitly flag when the sample or group split prevents interpretation.

    • Next steps from your own records

      A new dashboard page brings collection, publication, widget showings, order receipt and test counts together. Suggestions explain their evidence and open the existing screen; nothing is sent or changed automatically, and unreadable sources stay unknown.

    • Find evidence beyond the most recent testimonials

      Ask your testimonials searches terms across the approved, website-authorized collection before choosing passages for the AI. It can find older testimonials and later passages while keeping the same input budget, and tells you when it fell back to recent passages. Quotes still have to match the published words.

    • A reading that did not happen is given back

      When the AI service does not answer, a testimonial still arrives and is marked as not read, and the reading it would have used now goes back to your month. The same holds for every button that asks the AI.

      Read for risk
    • Find the recordings the AI did not read

      The risk reading reads typed words only, so a new filter, Has a recording the AI did not read, lists every video, voice recording and recorded interview answer. Each of those cards also says so above the player, so it is watched or heard before it is approved.

      Read for risk
    • Remove a part of a testimonial yourself

      On any card, Remove a part yourself lets you select the words to take out, and each becomes [removed] with every other character left as it was typed. It uses no AI reading, so it still works once the month's readings are spent. On a version that already has parts removed it can only take out more, so a published testimonial never shows a word it hid.

      Removing a detail
    • A page for updating your card after a failed payment

      When a payment for your plan does not go through, the message from Hazelsong about it now links to /billing/update, where a secure window from Paddle opens to update the card with no need to log in. Paddle is our merchant of record, so Hazelsong never sees the card number, and that page and the checkout are the only pages of this site that load Paddle's script.

      Your team
    • The Zapier app carries the whole testimonial

      The Hazelsong app in Zapier now hands over the voice recording, an interview's answers under their questions, the answer to a later question with its own permission, and the link to the public record. The later answer arrives as its own fields and is never joined to the testimonial's text.

      API and webhooks
    • Notes on a day-by-day chart

      Your report now draws last month and this one a bar a day, for showings, plays, clicks or testimonials arrived, with a table of the same figures and every day in the CSV. You can put a note on a day, send one through POST /api/v1/notes, and Hazelsong writes its own when a pasted list is sent, a lift test starts or stops, asking after a purchase is switched on, a store connection is made or a wall gets a button. A note says what happened and never why a figure moved, and client share links show notes only if you check Show notes on shared links.

      Analytics
    • Told when views drop sharply

      Each day, every widget and hosted wall with at least 100 views in the week before last is compared with last week, and a fall of more than 60% is listed under Is anything broken with both counts and where to look. Switch on Tell me when views drop sharply under Summaries and alerts and it is emailed as well, sharing one week with the alert about the wall not being shown. It is a ratio of counts, so it says what fell and by how much, never why.

      Analytics
    • An interview for a case study, answered by typing or talking

      A form can now be an interview: three to eight of your questions, each answered by typing or by a recording of up to 60 seconds, the voice alone or a video. It arrives as one testimonial with one permission, its typed answers read for risk in one reading, and it is published on your walls, in your widget and through the API as answers under your questions, labeled as yours. Draft a case study on an interview builds the draft only from excerpts checked word for word against the answer they came from, with nothing written by a model.

      Collection forms
    • Where a form loses people, question by question

      Your report now lists, for each form, how many visits reached each of its questions, the recorder and the permission box, and how many of those visits went on to send. A question counts as reached the first time its field is touched, once a visit, and the steps of one visit are sent together as counted events. Nothing typed or chosen is recorded, and the form editor links straight to its list.

      Analytics
    • Review markup from the widget, where Google accepts it

      On a page about a product, a course, an app or an event, markup= and name= on the script tag add one block of review markup for that item, with the rating of the testimonials written on your own collection page and up to ten of the reviews the widget draws, and the same figure is drawn in words under the wall. Imports, the API, feeds and testimonials written for a reward are left out, and there is no option for your business itself, because Google does not show stars for reviews a business collected about itself. Google decides whether stars appear; the widget never promises them.

      Widgets
    • The widget from your own domain

      A project that answers at a domain of its own can now load the widget from it, and the widget then asks that address for its testimonials, pictures, videos and counts; the ask dialog works the same way. That domain serves its own project only, so another project's widget asked for there is not found. Walls and widgets writes the two lines with your domain when you choose it, and every builder's guide lists the Content-Security-Policy with your domain in place of ours.

      Your own address
    • Your own name on a client's figures

      On Pro, an agency can set “Prepared by” for a project: a name, a mark, a color and an address a client may write to. Checked on a client share link, it is drawn above the figures once the password, if there is one, has been given, with the color moved only as far as it must to be read. Checked on a summary email, the name and the address are its first lines, as text, and the mark is never put in an email.

      Analytics
    • A help assistant that asks before it reads

      A Help button on every page of the dashboard answers questions from this site's own feature pages, help center, import guides and plans, with links to them, and changes nothing. A question about your own project first asks to read its health check and allowances, and nothing of the project is read until you press Allow. Send this to a person emails the conversation to our support address without your dashboard link, and replies come by email.

    • A figure behind everything every plan carries

      Every plan now holds a number of testimonials (15 a project on Free; on Starter and Pro the figure on the pricing page, shared by your projects), a number of forms and named walls per project, a month of testimonials arriving through your collection pages, and a month of counted events that covers your walls' views, plays and clicks and your forms' steps together with the lift test. Widgets and hosted walls are drawn from a copy of your published testimonials that is rebuilt the moment you change anything, so a busy page costs nothing to show and a change reaches every reader within a minute. When a month is spent nothing is deleted or hidden: counting or collecting waits for the first of the next month, your report says so, and the person paying is emailed at 80%.

      Widgets
    • Hand a project to somebody else

      The owner can now hand a project to another account: the new owner is emailed a link that works once for 72 hours, sees the project's seats, webhook endpoints, store connections and channel before choosing, and the owner can cancel it or send it again until then. When they accept, the project goes onto their plan with everything in it, the old dashboard link stops opening it, its API keys, connected assistants and client share links stop, and each of the two gets one email without a dashboard link. The subscription never moves: it stays with the person who pays for it.

      Your team
    • All projects on one page, and one summary for several

      A new All projects page shows the owner each project's Pending count, this month's arrivals and wall showings and how many things its health check lists, with the account's allowances once at the top. Each figure is read from what the project already counts and kept for five minutes. Two or more projects can now share one weekly or monthly summary email, with a section for each, in place of one email each.

      Analytics
    • Labeled links, with a QR code each

      On Your forms you can give a link a label for where you hand it out, such as a receipt or an email signature, and choose the page it opens. Your report then counts opened, started, media added, sent and a review site opened under each label, this month and last, as steps and never as people. Each label has a QR code of its own address, drawn in your browser and downloaded as an SVG or a PNG, with no redirect of ours in between.

      Collection forms
    • Kiosk mode for a stand or a front desk

      Adding ?kiosk=1 to a collection page turns one tablet into a stand: after each thank-you it counts down and opens an empty form for the next person, with a Start now button. Nothing of one person is kept on the device or shown to the next, the permission is asked every time, and a half-written form left alone for three minutes starts over after a warning. Your forms makes the link and says how to lock an iPad or an Android tablet to it.

      Collection forms
    • A testimonial in the writer's own voice

      Next to the camera, the collection form now offers Record your voice instead, which records the microphone alone for up to two minutes and lets the writer listen back before sending. The recording is stored and counted like a video, plays on your wall and in your widget as a sound player, and can be written down, after which readers can open what was said under the player. It is never cut into a reel, and the API sends it as audio rather than as video.

      Video testimonials
    • A pasted list on a date, and at a pace

      A list of people to ask can now wait for a day up to sixty days ahead and go out at most 10, 25, 50, 100 or 200 a day, each person still getting one request of their own. On its day each request is checked again against "Not now", addresses that bounced and your rule on asking the same person, and it counts toward that rule only when it is sent. Your list shows how many are waiting and when the next one goes, with Cancel the rest.

      Asking
    • Your own domain, watched once it works

      Once your own domain has answered, the daily run asks the host whether it still points here and can still be confirmed as yours. If not, your report says so with the exact DNS record to add, and when it fails twice in a row you get one email, at most once a week while it lasts. The line goes away the first time it answers again.

      Your own address
    • Your report's figures for your assistant and the API

      The MCP server has three more tools, wall_report, lift_status and form_funnel, and GET /api/v1/report answers the same: showings by widget, wall and where readers came from, the lift test's counts and verdict, and how far people got through your forms. They read only the counted figures a client share link shows, with no words, names or addresses, and project nothing. A connection needs "Read your report's figures", which starts unchecked.

      Your assistant reads them
    • Approval by two people, and each testimonial's history

      On Pro, the owner can require that nothing is published until two people approve it: the first Approve, the owner's included, is a proposal, and an administrator or the owner who did not propose it presses Sign and publish. Every testimonial now keeps its history, with how it arrived and who proposed, signed, approved, took it down or removed a part, and when, shown in the dashboard and written to the CSV export. The public record of a testimonial a second person signed says it was reviewed by a second person before publication, and names nobody.

      Approving
    • The same words twice, pointed out

      A testimonial that arrives with the same words as one already in the project, ignoring case, punctuation and spacing, is marked on its card with when and how the earlier one arrived, and it is not read for risk again, which saves one of the month's AI readings. Texts under forty characters are never compared, and nothing is deleted or hidden for repeating another. The CSV import's preview says how many rows are already in your project.

      Approving
    • A month of API calls, shown before it runs out

      Calls from your API keys and from assistants connected to the MCP server now count against a month shared by your account's projects, and the API page and your report show how many are used. A few calls whose own work is heavier count as two or three, and the person paying gets one email at 80%. Past the month a call is answered with a sentence saying it starts again on the 1st, nothing is billed as an overage, and removing a webhook endpoint is never counted.

      API and webhooks
    • Needs a reply, and one private reply

      The risk reading now also says whether somebody reported a problem, a loss or damage, or that they may leave or cancel, as a kind and never a quote, with a filter, a badge on the card and "Needs a reply" as a condition for being told when one arrives. On a testimonial written through your form, "Reply privately" sends its writer one plain-text email in your business's name, with your address to reply to, once. Nothing about the testimonial changes because of it, and the box says before you type that nothing may be offered for changing or removing what they wrote.

      Approving
    • One more question for a general testimonial

      The same reading says whether a testimonial carries a detail of the writer's own experience, and a general one written through your form can be followed by one question, typed or taken from your forms, with no praise word and no figure. The answer comes back once, with its own permission for the same places as the words, and waits for you. Added, it is shown under "Asked afterward:" and the question on your wall, your widget, the API and the record page, and never joined to what they wrote.

      Approving
    • A review site of yours, offered after sending

      A form, or your project's own page, can now list up to three review sites: Google, Trustpilot, G2 or Capterra, each on that site's own address. After sending, every writer is asked whether they would also post it there, with a button that copies exactly what they wrote, whatever stars or score they gave, and never where a reward was offered. Opening a link is counted as a step of the form, never which site or who.

      Collection forms
    • Your own release, beside the permission

      On Starter and Pro a form can carry a paragraph you wrote, such as an authorization or an image release, which the writer must check as well as the permission before anything is sent. Its words, version and time are kept with the testimonial, shown on its card, put in the export and printed on its record, and changing it makes a new version without touching what was already agreed. It adds to the permission and never replaces it, and Hazelsong does not write it or review it.

      Permission
    • A lift test ends when you said

      When you start a lift test you now choose how long it runs: to the end of a day 7 to 90 days ahead, until each group has a number of readers, or until you stop it. The report shows the days left or the readers so far, and when the plan is reached the test stops the way your own Stop does and you get one email with the verdict. It never stops early because one group is ahead.

    • The lift test by where readers came from, by page and by product

      The report now gives every origin, every entry page and every product a row of its own, each with the same verdict, thresholds and 95% range as the whole test, and a row says not enough yet until it has enough readers. Origins and pages count only purchases your own page reported, because the reference a server or a store sends back is not extended with where the reader came from. The reader's browser keeps the referring site's name and the entry page's path, with numbers and addresses replaced, in the one entry it already had, and an event counted in the rows uses one more of the month's lift test events, like a card a buyer read.

      Lift test
    • A lift test's range you may read every day

      The range beside a lift test's verdict is now an always-valid confidence sequence, built so that checking it every day does not make a false "helps" more likely. The ordinary 95% interval it replaces gave a false verdict in about a quarter of simulated tests where the wall did nothing, when read daily for a month. The thresholds and the verdict's words are unchanged; the range is wider than before.

    • Renewals, product labels and your own currency in the lift test

      A later payment of a subscription bought during the test can now be sent as a renewal from your server, Stripe or Lemon Squeezy, adding money to its group without counting a purchase, and the report shows money per reader with and without renewals. A purchase can carry a product label of your own, for a row of its own. Choose the currency your figures are printed in; it is a label and converts nothing.

      Lift test
    • The widget's events in your own analytics

      Add forward=1 to the widget's script tag, or check the box on Walls and widgets, and each view, video play and click to where a testimonial was first written that Hazelsong counts is also sent to the Google Analytics 4, Tag Manager, Plausible, Fathom or Umami your page already loads, and dispatched as a hazelsong: event on the wall's element. Only the layout and the testimonial's public id go with it, never anything about the reader, and nothing is sent from an automated browser or your own marked one. The ask script takes forward=1 too, for a form opened and a testimonial sent.

      Widgets
    • A button on a Wall of Love, and how often it was pressed

      A named wall can now carry a button with your own words and your own https link, drawn under the heading and again after the testimonials in your brand color. The report lists each wall's showings, presses and press rate, and the CSV and client share links carry the presses too. The link goes where you typed it, with nothing added to it.

      Walls of Love
    • Ask somebody who wrote for a video version

      A written testimonial's card now has "Ask for a video version", which sends its writer one email with a link that opens the form with only a recorder, works once for 30 days and carries a "Not now" link. The video comes back only with a new permission, for the places the writer already allowed for their words, and waits on the card until you add it; the written words are never changed. It is never sent on its own, never twice, never to an imported writer and never to anybody who said not now.

      Video testimonials
    • The collection form keeps what was typed

      What somebody types into a collection form is kept in their own browser for seven days from their last change, so a closed tab no longer loses it, and the form says so with a button to clear it. Their email address, photos, video and permission are never kept this way, nothing is sent until they press Send, and the draft is deleted once they do.

      Collection forms
    • Undelivered and marked as spam

      When your mail provider reports that a request bounced for good, or that the person marked it as spam, the invitation now says "Undelivered" or "Marked as spam", and that address is not written to again by any route. Only delivery is read: there is still no pixel and no tracking link. You can take an undeliverable address off the list once it is fixed, and a complaint of spam stays.

      Asking
    • The same person, at most once every 90 days

      Every request now counts toward one rule, whether it came from the dashboard, a pasted list, the API, an assistant or a purchase, and somebody asked inside the gap is left out with the date they were last asked. Choose 30, 60, 90 or 180 days, or turn it off. Gmail addresses typed with dots, a plus sign or googlemail.com count as one person, while mail still goes to the address as given.

      Asking
    • The sites your widget may appear on

      Under Walls and widgets you can now list your own sites, as acme.com or *.acme.com, up to twenty. On any other page, such as a staging copy or a page somebody copied the tag onto, the widget counts nothing, enters no lift test, sends no picture or video and draws one line naming your first site instead of your testimonials, while localhost always draws for testing and is never counted. It reads the address the browser says it is on, so it is not a lock, and an empty list changes nothing.

      Widgets
    • Why the widget drew nothing, and where

      Add ?hazelsong=debug to the address of a page with the widget and the browser's console says why it drew or counted nothing, without sending anything. When the widget cannot draw on one of your pages, it reports that page's host and path (with ids and email addresses cut out) and what went wrong, nothing about the reader, and the report's list of what is broken names the page with the fix. Each builder's guide now lists the Content-Security-Policy directives the widget needs.

      Widgets
    • Orders straight from Stripe, Shopify, WooCommerce and Lemon Squeezy

      Under "Ask after a purchase", the dashboard now makes a receiving address for your store and says where it goes and which events to check, so each paid order arrives from the store's own webhook with no server and no Zap. Every message is checked against the store's own signing secret, and the order then follows the same rules, the same "not now" list and the same lift test as one sent through the API. Hazelsong never asks for your store's API key and never calls your store.

      Automatic collection
    • Told when a testimonial arrives

      Under Summaries and alerts on the report page, choose which new testimonials you hear about: any, a low rating, a low score, one the risk reading flagged, or one with a video. The first is sent at once and any more in the next hour go together in one message, at most eight a day. Each says who wrote, the stars, the score, what was flagged and whether there is a video, never the words.

      Analytics
    • Summaries, alerts and new testimonials in Slack, Discord or Teams

      Paste one channel's incoming-webhook address and the same notices are posted there as well as emailed, in each platform's own format. A test button and the last ten posts are beside it, and twenty failed posts in a row switch it off with one email to you. The address is kept as a secret and shown only by its host and last four characters.

      Analytics
    • Manage billing from the dashboard

      Once you have paid, the People and projects page has a Manage billing button that opens Paddle's billing page for your account, already signed in, where you can change the card you pay with, download receipts and invoices, or cancel. Only the person paying sees it, and each press asks Paddle for a new page whose address is not kept.

      Your team
    • The refund policy, stated per charge

      Your first payment for a plan is refunded in full within 14 days, with no questions asked. Later charges, renewals and upgrades, are refunded where the law requires it or where a fault on our side kept Hazelsong from working. Canceling stops renewals and keeps your plan on until the end of the period already paid for.

    • Monthly packs for AI readings, emails and counted events

      On Starter and Pro, when the month's AI readings, emails to customers or counted events run out, a pack adds more as one more line on the subscription you already have: AI readings, emails or counted events, $29 a month each, each count printed on the pricing page. A pack is charged in full when added, its count belongs to the billing period it was paid for, and it can be removed from the People and projects page at any time. A pack none of which has been used is refunded in full within 14 days of its charge.

      Your team
    • Remove an extra project or seat from the dashboard

      The People and projects page now takes an extra project or seat off your subscription as well as adding one, with one more press to confirm. Paddle credits the unused part of the billing period to your account. Until now the page sent you to your receipt, where only the whole subscription could be canceled.

      Your team
    • A prompt for your coding agent, and llms.txt

      Each embed guide for a builder that runs a script, and the Walls and widgets page of your dashboard, now has a prompt to paste into Cursor, Claude Code, Lovable, Bolt or a similar agent. It says where the two lines go on that builder, tells the agent to change nothing else and to show you the diff, and can add the lift test's purchase line. The site also publishes /llms.txt, a plain-text description of every feature, what it will not do, and the plans.

      Widgets
    • The collection form, opened inside your own site

      One script tag adds window.hazelsong.ask(), which opens your collection form in a dialog on your own page at the moment your code chooses. It never opens by itself, and it keeps one entry in the visitor's browser so the same person is not asked over and over. The permission checkbox and the promise are the same words as on the form's own page.

      Collection forms
    • The lift test can compare two layouts

      Half your readers see your embed's own layout and half see a second layout you pick, and the page says which one sold more. Hazelsong does not switch your layout for you; it shows the embed code for the other one beside the result. Every test now also checks that readers split at the share you set, and says when the figures cannot be trusted.

      Lift test
    • Ask your testimonials a question

      Ask a question of your published testimonials and get back excerpts in their exact words, each linked to its record. An excerpt that differs from what was written is thrown away, and the answer says how many were.

      What they keep saying
    • A flag for who could have written it

      A testimonial written from a disposable email address, or from your own business's domain, is flagged in your dashboard beside the risk reading. The check is a rule, not a model, so it costs nothing, and the flag never leaves your dashboard. Flagged ones are left out of "Approve the N with nothing flagged".

      Read for risk
    • Labels suggested from your own list

      Ask for labels on up to twenty testimonials and get suggestions taken only from labels you already use, in your spelling. Nothing is saved until you click one.

      Approving
    • Questions drafted from your goal

      Write one sentence about what you want to learn and get three draft questions in the form editor. A check in code drops any draft that asks for praise or for a number, whatever the model wrote. Nothing is on the form until you save it.

      Collection forms
    • The Zapier app is called Hazelsong

      The app in Zapier carries the new name and calls hazelsong.com directly. Until Zapier lists it in its public directory, it is added from the invitation on your dashboard's API page.

      API and webhooks
    • Where your readers came from, and AI crawlers

      The report counts views, plays and clicks by the site readers came from and by campaign, with readers from AI assistants as a line of their own, and says how many times named AI crawlers read your hosted walls. It shows rates and this month against last, and downloads as a CSV. Only the referring site's name leaves the reader's browser.

      Analytics
    • A report that says what has stopped

      The report opens with a list of what has stopped and how to fix it, such as a wall no longer shown or testimonials waiting too long. A summary every Monday or on the first of the month, three alerts and a warning at 80% of any monthly allowance can go by email. A webhook endpoint that fails twenty times in a row is switched off, with one email to you.

      Analytics
    • Asking after a purchase, and "Not now"

      Your server, store or Zap can send an order through the API, and the buyer is asked later by rules you set: a delay, a minimum amount, a gap between requests and a monthly goal. Every request and reminder carries a "Not now" link, and every way of asking checks it. The report also shows where people stop on your forms.

      Asking
    • Lift test: purchases from your server, actions, and robots left out

      A purchase can be reported from your server, and a refund takes it back out. A test can count an action, such as a form sent, instead of a purchase. Browsers that say they are automated are never counted, and ?hazelsong=ignore leaves your own visits out.

      Lift test
    • Which testimonials your buyers read

      The lift test notes which cards a reader had on screen and ranks each testimonial by the purchase rate of the readers who read it, once enough have. The page says this shows association, not cause.

      Lift test
    • The lift test

      A share of your website's readers is shown no testimonials, and purchases are counted in both groups, so the difference estimates the effect of offering your testimonials to the readers assigned to see them, on your own customers. No verdict is printed until both groups are large enough, and nothing is projected.

      Lift test
    • Allowances belong to the account

      Delivery, AI readings and emails are monthly allowances, and storage a cap, each shared by all of an account's projects and printed on the pricing page. Pictures and stills on public pages are counted with video. Your own files, through the dashboard and the export, are never counted or refused.

    • Every page says Hazelsong is still being built

      A line across the top of every public page says so, and links to the list of what is built. It cannot be dismissed.

    • Starting a project needs a person's browser

      Starting a project and asking for a login link now check, through the host, that a browser is asking rather than a script. A refusal says so in words and reveals nothing about any account.

    • The score question

      A form can open with a 0-to-10 question, and the number changes only the question above the box. Everybody who answers gets the same place to write and the same permission checkbox; low scores are not sent away from public reviews.

      The score question
    • A record for every published testimonial

      Each published testimonial links to a page that says how it arrived, who gave the permission, whether it was read before publication, whether anything was removed and whether a reward was attached. It is on every plan and cannot be switched off.

      The record
    • An MCP server

      Assistants that speak the Model Context Protocol can read your testimonials while they write, with the same key as the API. Only testimonials whose writer allowed a website are reachable, and every answer says to quote them exactly.

      Your assistant reads them
    • Video on public pages plays through an allowance

      A recorded video's address is no longer written into public pages; it is handed over when somebody presses play, and counted against the month's delivery. Past the allowance, video pauses on public pages until the next month, and nothing is ever served at a lower quality.

      Video testimonials
    • Word of mouth

      Once a testimonial written through your form is published, you can ask its writer, once, whether they would like to share it. Nothing is offered in return, nothing is tracked, and their words are not quoted into the suggested post.

      Word of mouth
    • Kudobox is now Hazelsong

      The product is Hazelsong, at hazelsong.com, with support at support@hazelsong.com. Links to getkudobox.com still lead to the same page here.

    • American English, and a full audit

      Every page and every product string was proofread and written in American English. A full audit of the product fixed 78 defects.

    • Log in with a one-time link

      There is still no password: Log in sends a one-time link to the address on the account, which works once, for fifteen minutes. The owner can replace their dashboard link, which logs every other device out.

    • The widget, inside other people's sites

      Every layout was tested in both themes inside a page with its own styles. A brand color is lifted only as far as it needs to be readable on a dark widget, and the dots that move a carousel are 24-pixel targets.

      Widgets
    • Every Google review at once, from Takeout

      The archive Google gives a Business Profile's owner is read in your own browser, and every review in it comes across as an import into Pending. Anonymous reviews, and stars with no words, are skipped.

      Import
    • Approving many at once

      The list can be drawn compact, and in Pending you can select rows and approve or reject them together. "Approve the N with nothing flagged" leaves every flagged one for you to read.

      Approving
    • Save a review from any page

      A bookmark saves the words you selected on any page into your dashboard, with the page they came from. It works in every browser and on every plan, and the words cannot be changed on the way.

      Save from any page
    • A seat the plan no longer carries is paused

      When a plan stops carrying a seat, the seats it still carries keep working in the order they were made, and the rest are paused and told why. They work again as soon as the owner removes one or moves to a plan that carries them.

      Your team
    • Moving across from Senja or Testimonial.to

      A CSV from either tool is read by its column names, and you see which column was read as what before anything is saved. A long file is read to its last row, and each review keeps the date it was written.

      Import
    • The API: webhooks, search and asking by key

      With an API key you can subscribe and remove webhooks, search testimonials by name, email or words, and ask one person for a testimonial. A key stops working when its plan no longer carries the API, except to switch a webhook off.

      API and webhooks
    • Reels saved as MP4

      A reel is saved as MP4 wherever the browser can record one. Where it cannot, as in Firefox, it is saved as WebM, and the page says which.

      Reels
    • One reel from several testimonials

      Join several video testimonials into one reel, in the order you choose, with an opening card in your own words. It is drawn and recorded in your browser, so there is no queue and no per-clip limit.

      Reels
    • Thank-you videos

      Record a short video for somebody who wrote you a testimonial, and it goes out with the thank-you as a link. The page it opens shows the recording, never the testimonial.

      Thank-you videos
    • Asking in bulk, and one reminder

      Paste up to two hundred customers and each gets their own message and their own link. Three days later, whoever has not answered can be reminded once, and never somebody who already wrote.

      Asking
    • Thank-yous, with something attached

      Thank whoever wrote you a testimonial, in a sentence or with a gift. A gift marks the testimonial as rewarded, for good, so the disclosure goes wherever it is published.

      Thank-yous
    • A project can be ended completely

      The owner can destroy a project: every record and every file, named one by one. You type the project's name to confirm, because nothing can be recovered afterward.

      Ending a project
    • Video, recorded in the browser

      A customer can record a video on the collection page, with no app and no account. One copy is stored, the original, and it comes back at full quality on every plan.

      Video testimonials
    • The API and signed webhooks

      Keys are made and revoked from the dashboard, and the API serves only testimonials whose writer allowed a website. Webhooks are signed, so your end can check where they came from.

      API and webhooks
    • Your own mark, and your own address

      Your logo, color, corner and words on the form, the walls and the widgets, with no Hazelsong credit. The form and the walls can answer at a name on hazelsong.com or on a domain you own.

      Your own mark
    • Hosted walls and the layout picker

      Each project has a wall at its own address, readable without a script and with review markup. The dashboard shows the real widget beside the layout you are choosing.

      Walls of Love
    • Seats, forms and feeds

      A seat gets its own link, and what it may do comes from one table of roles. A project can have several forms, each with its own questions, and feeds a platform publishes for machines are read once a day into Pending.

      Your team
    • Incentives, disclosed

      A reward for writing is said on the form before a word is written, and on every copy of the testimonial that is published. The disclosure is not a setting.

      Incentives
    • Transcription, translation and case studies

      A recording can be transcribed and a testimonial translated, with the original always kept, and one testimonial can be drafted into a case study that quotes it verbatim. None of them can change the words.

      Transcription
    • Bringing in what already exists

      Paste a review from somewhere else with its source attached, or paste a whole page and have it separated into reviews. Each separated review must appear word for word in what was pasted, or it is dropped.

      Import
    • Testimonial images

      A testimonial is drawn as a picture for social media, with your color and your mark. It is made only where the writer allowed social media, and it says exactly what they wrote.

      Testimonial images
    • Permission, asked and enforced

      The form asks where the words may appear: website, social media, advertising. The widget and the walls obey the answer on every request, and the sentence the writer agreed to is written by the server and stored with the words.

      Permission
    • Read for risk on arrival

      Typed testimonials are read as they arrive, within the plan's monthly readings, for what a business cannot safely publish, and flagged with the reason. It never blocks one and never writes one.

      Read for risk
    • Removing a detail

      Replace a span with [removed] and publish the rest, and the reader is told something was taken out. A proposal that changes any other word is discarded.

      Removing a detail
    • Everything out, as a CSV

      Every testimonial, with its permission record, comes out as a spreadsheet. It is free on every plan, because it is your own data leaving.

      Getting it all out

Try what is already here

Every capability has a page of its own, naming the files it lives in and what it will not do.