Vouch — User Guide
A practical walkthrough of the Vouch reputation platform, from platform setup to running your first AI-assisted review campaign. Written for marketing and operations users — no engineering background required.
Heads up: This guide describes the admin web app at
https://vouch-admin-web.<your-environment>.azurecontainerapps.io. Sign in with your Azure AD / corporate credentials, or with the email + password your platform admin set up for you.
Table of Contents
- What Vouch Does
- Roles & Who Does What
- Day-One Setup (Platform Admin)
- Inside a Tenant: Brand Setup
- Adding Locations
- Importing Contacts
- Compliance & Sending Policy
- Templates: What Your Recipients Will See
- Token Reference
- Campaigns: How Sends Are Organised
- Sending a Review Request
- Reading the History Tab
- Inbox: Replies, Reviews, & Triage
- The AI Assistant
- Approvals, Automation, Recommendations, Experiments
- Settings Reference
- Common Questions & Troubleshooting
What Vouch Does
Vouch helps multi-location businesses (restaurants, healthcare practices, home services, retail, etc.) collect more reviews on Google / Yelp / Facebook — and respond to them faster — without violating review-platform terms or anti-spam laws.
The big-picture flow:
- You add your locations and customer contacts.
- You build (or AI-generate) a friendly review-request template.
- You launch a campaign. Vouch sends the request via email, SMS, or WhatsApp at the right time, in the right channel, with the right personal greeting.
- Customers click through to leave a review on Google or Yelp.
- Vouch pulls those reviews back in, scores your reputation, and surfaces the AI Inbox so you can respond from one place.
- The AI Assistant suggests next steps — draft responses, flag negative feedback, recommend follow-ups, run experiments.
The platform handles the parts that are easy to get wrong: quiet-hours, frequency caps, opt-out compliance, contact suppression, template token rendering, link tracking, and audit logging.
Roles & Who Does What
| Role | Typical user | What they can do |
|---|---|---|
| Platform Admin | Vouch staff or the customer's IT | Create tenants, add the first user, view all tenants, set platform-wide email/SMS provider config. |
| Tenant Admin | Marketing director / regional manager | Manage the tenant: brand, locations, users, compliance settings, campaigns, templates, integrations. |
| Tenant User | Marketing coordinator / location manager | Run campaigns, edit templates, work the inbox, respond to reviews. Can't change tenant-wide settings or invite users. |
| Approver (optional) | Compliance / legal reviewer | Approves templates before they can be used in live campaigns. Useful in regulated industries. |
Throughout this guide, anything marked 🔒 Platform Admin is only visible to platform-admin accounts. Everything else is available to tenant admins (and most things to tenant users too).
Day-One Setup (Platform Admin)
🔒 Platform Admin
Create the tenant
- Sign in and click Tenants in the left sidebar (under the Admin group).
- Click + New Tenant.
- Fill out:
- Name — what you'll call the customer (e.g. "Acme Restaurants").
- Slug — a short URL-safe handle (lowercase, hyphens). Used in internal URLs and exports — cannot be changed later.
- Plan — starter, growth, or enterprise. Drives some feature gating but not enforcement at the API level.
- Initial brand — every tenant needs at least one brand. Provide a brand name and slug. You can add more brands later.
- First admin (optional) — email address of the person who'll run the tenant day-to-day. We'll resolve their account in your directory and grant them tenant-admin.
- Click Create. You'll be taken to the tenant detail page.
Tenant detail page tour
The tenant page (/admin/tenants/<id>) is the operational dashboard
for one customer. It has, top to bottom:
- Header — name + slug + plan + status (Active / Paused).
- Stats cards — Users, Contacts, Solicitations, Integrations totals. Updated live.
- Tenant Details — editable name, plan dropdown, status with Pause/Resume buttons. Pausing prompts for a reason and stops all outbound sends until you resume.
- Brands — one editor card per brand. See Inside a Tenant: Brand Setup.
- Locations — list with add / bulk upload / edit / AI enrich. See Adding Locations.
- Email Configuration — From address, sender domain, DKIM/DMARC status. Configure under Settings → Email & DKIM in the tenant view.
- Team Members — invite users + manage role + remove.
Pause vs Delete
There is intentionally no "Delete tenant" button. To stop a customer's activity, Pause them. The tenant stays in the database (for audit + GDPR retention), all sends stop immediately, and users get a friendly "tenant suspended" notice on next login. Resume just flips the status back.
Hard deletion is reserved for compliance contexts and runs as a separate operator script.
Inside a Tenant: Brand Setup
Each tenant has at least one brand. Most customers have one. Multi- brand customers (e.g. a hospitality group with 3 distinct restaurant concepts) can spin up several. Brand-level fields are inherited by locations that don't override them.
What lives at the brand level
- Identity: name, website, corporate address.
- Voice & Tone:
- Brand voice — professional / friendly / casual / luxury…
- Brand tone — warm / formal / empathetic / playful…
- Brand description — 1–3 sentences the AI agents read when drafting templates and responses.
- Default review profiles:
- Google My Business URL + Place ID
- Yelp URL + Business ID
- Facebook page URL + Page ID
These act as fallbacks for locations. If a particular location doesn't set its own Google URL, the brand's URL is used.
How to edit
- Open the tenant detail page → scroll to Brands.
- Each brand has an editor card. Update the fields you want and click Save Brand.
- The card stays expanded so you can keep tweaking without losing context.
Tip: A clear, specific Brand description dramatically improves the quality of AI-generated templates and responses. "Family-owned bakery in Brooklyn, known for sourdough and warm-but-direct service" beats "a bakery" every time.
Adding Locations
Locations are the units customers think about when leaving a review: "the Austin outpost", "the Cherry Creek clinic". Every campaign sends from a location, every review attaches to a location, every score breaks down by location.
You'll find the Locations section inside the tenant detail page.
Four ways to add a location
1. Auto-Find Locations (AI Discovery)
The fastest way to get started. Click Auto-Find Locations in the Brand section (tenant detail page for platform admins, or Settings → Brand Profile for tenant users).
What it does:
- Uses AI to discover all your business locations based on your brand name, website URL, and corporate address.
- For chains/franchises, focuses on headquarters and major flagship locations (use bulk import for comprehensive coverage).
- Returns complete address details, contact information, timezones, and attempts to find Google Place IDs and review platform URLs.
- Creates recommendations for each discovered location — review them in the Recommendations section, then approve to create the actual locations.
Best for:
- Getting started quickly with a new tenant
- Businesses with 1–10 locations
- Finding headquarters and flagship stores for chains
How it works:
- Fill in your brand name, website URL, and corporate address in the Brand section.
- Click Auto-Find Locations.
- Wait 10–30 seconds while the AI searches the web.
- Navigate to Recommendations to review discovered locations.
- Approve the ones that look right; reject or edit any that need correction.
- Approved locations are created automatically.
Tip: The AI cross-checks addresses against your brand info to avoid returning the wrong "Joe's Pizza" in a different city. If discovery returns fewer locations than expected, try adding a more complete corporate address or use bulk upload for full coverage.
2. One at a time
Click Add Location. Fill in:
- Name (required)
- Address line 1 / city / state / postal / country
- Phone, email, website
Tick Auto-fill missing details after create (default on) and Vouch's AI agent will research your business on the web — Google profile, Yelp, Facebook, place ID — and fill in anything you left blank. Existing values are never overwritten.
3. Bulk CSV upload
Click Bulk Upload CSV. Drop in a spreadsheet with one location per row.
Required column: name.
Optional columns (mix and match — header style doesn't matter,
case- and separator-insensitive):
| Header (any of these works) | What it means |
|---|---|
name, Name, LOCATION NAME |
Display name |
addressLine1, address, Address Line 1 |
Street address |
city, state, postalCode / postal_code / zip |
Address parts |
phone, email, websiteUrl / website |
Contact info |
googlePlaceId, googleMyBusinessUrl |
Google profile |
yelpUrl, facebookUrl |
Other review profiles |
brandId |
Override brand (defaults to tenant's primary) |
Limits: 1000 rows / 5 MB per upload. If you need more, split into batches.
Tick Auto-fill missing details after upload and the AI agent researches every newly-created location in the background. The upload returns immediately with a "X enrichments queued" message; refresh the table after a minute to see filled fields.
4. Per-row enrich on existing locations
Click Enrich on any row in the locations table. The AI agent runs 3–6 web searches, cross-checks the address against snippets, and fills in blank fields. A toast appears with what was filled (and what was preserved).
Why we cross-check the address: "Acme Bakery" exists in Austin, Brooklyn, and Portland. Without verification the model could happily return the wrong shop's URL. The agent rejects matches that don't line up on city / address / phone.
Editing a location
Click the location's name (in blue) or the Edit button. The modal groups fields into sections:
- Identity — name
- Address — address lines, city, state, postal, country
- Contact — phone, email, website
- Review profiles — Google URL + Place ID, Yelp URL + business ID,
Facebook URL + page ID. Inline note explains the
{{review.link}}resolution order.
How {{review.link}} is resolved
When you use {{review.link}} in a template, Vouch picks the first
non-empty URL from this chain:
- Per-send override (rarely used)
- Location's Google My Business URL
- Location's Yelp URL
- Location's Facebook URL
- Brand's Google URL
- Brand's Yelp URL
- Brand's Facebook URL
- Location's website
- Vouch's feedback landing page (last resort)
Set the URL once at the brand level for shared profiles, then override per-location only where it differs.
Importing Contacts
Contacts are the recipients of your campaigns. Each contact belongs to one tenant and can have an email, phone, both, or neither. Without at least one of email or phone they can't receive anything.
Manual entry
Contacts → + New Contact → fill in. Useful for adding individuals mid-campaign.
CSV import
Contacts → Import CSV. Same tolerant-header rules as the locations upload:
| Column (any header style works) | Notes |
|---|---|
email (or emailAddress) |
Required if no phone |
phone (or phoneNumber / mobile) |
Required if no email |
firstName, lastName |
Optional but strongly recommended |
locale, timezone |
Optional — used for quiet hours and language picks |
Limit: 5000 rows per import. Larger lists? Split, or contact support — we can run a one-off bulk import server-side.
Why first/last name matters
Without firstName, your {{contact.firstName}} token renders as
empty:
Dear , thanks for visiting...
Three ways to avoid this:
- Include
firstName/lastNamecolumns in your import. - Use a default in your template:
{{contact.firstName | "there"}}→ Dear there, - Let Vouch derive a name from the email. If a contact has no
firstName but has e.g.
sathya.krishnamurthy@gmail.com, Vouch auto-greets "Dear Sathya,". Generic mailboxes (info@,noreply@) are skipped. Override by setting an explicit firstName.
Suppression and consent
- Suppressed contacts are flagged via
isSuppressed = true. A customer who marks your previous email as spam, or who clicks Unsubscribe, is auto-suppressed. Suppressed contacts will never receive sends; the policy engine returns "Contact is on the suppression list". - Consent records track per-channel opt-in (
granted,revoked,pending). Drives the "no email-consent on file" vs "recipient unsubscribed" distinction in your History tab.
Compliance & Sending Policy
Even a perfect template will get blocked if you ignore the policy. The defaults are conservative — you can dial them in Settings → Compliance → Sending Policy.
What's enforced on every send
| Rule | Default | Where to change |
|---|---|---|
| Contact must not be suppressed | Always on | n/a |
| Email channel: valid email format | Always on | n/a |
| Email channel: consent on file | On (require email consent) | Sending Policy → toggle off |
| SMS channel: valid phone (E.164) | Always on | n/a |
| SMS channel: opt-in on file | On | Sending Policy → toggle off |
| Quiet hours | 21:00–08:00 (recipient's local time) | Sending Policy → time pickers |
| Daily frequency cap | 3 messages per recipient / 24h | Sending Policy → daily cap |
| Weekly frequency cap | 5 messages per recipient / 7 days | Sending Policy → weekly cap |
Times are interpreted in the recipient's timezone (or the location's, if the contact has none).
Healthcare Safe Mode
Toggle in Settings → Compliance → Healthcare. When on:
- Strips PII from outbound messages (no names in subject lines).
- Enforces HIPAA-safe template patterns.
- Blocks tokens that could leak protected health info into headers.
Use this if any tenant operates in a healthcare context. It can be set per-tenant, so a multi-brand customer can mix.
GDPR / CCPA
- Data Export — generate a full PII report for a contact in one click. Goes to a downloadable JSON file.
- Data Deletion — permanently erase a contact's data. Audit-logged. Requires typing "DELETE" to confirm.
Both are toggled on by default. Disable if your jurisdiction doesn't require them and you'd rather not expose the buttons.
Templates: What Your Recipients Will See
Templates live in the Templates section. Each template has:
- Name — internal label
- Channel — email, sms, or whatsapp (chosen at creation, immutable after)
- Locale — defaults to en-US
- Subject (email only)
- Plain-text body
- HTML body (email only)
The editor
The HTML body uses a rich-text editor with:
- Visual tab — type and format like a doc.
- HTML tab — for paste-from-Mailchimp / hand-tuned designs.
- Preview tab — renders the email in a sandboxed iframe.
The chip palette at the bottom inserts common tokens with one click.
Live token validation
As you type, the editor scans for unrecognised tokens. If you typo
{{contat.firstName}} you'll see an orange warning above the Save
button:
⚠ 1 unrecognised token — these will be sent literally in the email.
{{contat.firstName}}Tip: provide a fallback for empty values —{{contact.firstName | "there"}}renders there when the contact has no first name.
Preview with sample data
After saving, click Preview with sample data. Vouch renders the template against a sample context (Jane Smith / Downtown Location / Acme Business). What you see in the preview is exactly what a recipient sees — minus the personalization swap. Catches missing tokens, broken HTML, and empty fields.
Versions & approval (optional)
- Save creates or updates the current draft.
- For regulated industries: enable Require Approver Sign-off in Settings → Compliance. Templates then start in draft and need an Approver role to flip them to approved before they can be bound to a campaign.
Template translations (multi-language support)
If you serve customers in multiple languages, you can create translation variants of any template. Vouch groups these together so you can manage all locales in one place.
How it works:
- Create your primary template (e.g. in English, locale en-US).
- Click Add translation below the template name (in the list view or detail view).
- Choose your target language from the dropdown — es-MX (Spanish - Mexico), fr-CA (French - Canada), zh-CN (Chinese - Simplified), etc.
- Click Translate. Vouch's AI translates the subject, body text,
and HTML content while preserving all tokens (
{{firstName}}stays exactly as-is). - The new template appears as a translation sibling. You'll see locale badges (e.g. 🇺🇸 en-US, 🇲🇽 es-MX) linking all variants together.
- Click any badge to navigate to that locale variant.
- Edit the translation if you need to refine the AI's output — adjust tone, fix regional phrasing, etc.
Where translation happens:
- Campaign sends: when a contact has a
localefield set (e.g. es-MX), Vouch auto-resolves to that template variant if it exists. Falls back to the default locale if no match. - Template bindings: you can bind specific locales to campaigns, or let Vouch pick based on the recipient's locale.
Benefits:
- One-click AI translation — no copy-pasting into Google Translate.
- Token preservation — personalization fields stay intact.
- Grouped management — all translations linked together, easy to find and update.
- Automatic locale routing — send the right language to the right recipient without manual branching.
Common pattern:
- Import contacts with a
localecolumn (en-US, es-MX, fr-CA). - Create your template in English.
- Add Spanish and French translations.
- Bind all three to a campaign.
- Send — Vouch picks the right locale per recipient automatically.
Tip: The AI translator respects your brand voice and tone settings. If your brand is set to casual and playful, the Spanish translation will match that style. Update your brand description for best results.
Token Reference
Tokens are placeholders that get filled in per-recipient at send time. Vouch is generous about how you spell them — case, whitespace, and common variants all work.
Contact
| Token | What it inserts | Empty-state default |
|---|---|---|
{{contact.firstName}}, {{firstName}}, {{first_name}} |
First name | Derived from email if possible |
{{contact.lastName}}, {{lastName}}, {{last_name}} |
Last name | Empty |
{{contact.name}}, {{name}} |
First + Last (whichever is set) | Empty |
{{contact.email}}, {{email}} |
Email address | Empty |
{{contact.phone}}, {{phone}} |
Phone | Empty |
Location & Brand
| Token | What it inserts |
|---|---|
{{location.name}}, {{locationName}}, {{location}} |
Location's display name |
{{location.city}}, {{city}} |
City |
{{location.state}}, {{state}} |
State |
{{business.name}}, {{businessName}}, {{brand.name}}, {{brand}} |
Brand name |
{{location.custom.<KEY>}} |
Per-location custom variable (set under Locations → details → Variables) |
Links
| Token | What it inserts |
|---|---|
{{review.link}}, {{reviewLink}}, {{review.url}} |
The chosen review URL (Google / Yelp / Facebook chain — see Adding Locations) |
{{feedback.link}}, {{feedbackLink}} |
Vouch's hosted feedback page (when you want to capture private feedback before public reviews) |
{{unsubscribe.link}}, {{unsubscribe.url}}, {{unsubscribe}} |
One-click unsubscribe URL — always include this in email templates |
Other
| Token | What it inserts |
|---|---|
{{employee.name}}, {{employeeName}} |
The staff member tied to the visit (when set on the solicitation) |
{{appointment.date}}, {{appointmentDate}} |
Appointment date (when passed by an integration) |
{{product}} |
Product / service tag |
Defaults — the pipe syntax
Any token can take a fallback for when the underlying field is empty:
Hi {{contact.firstName | "there"}},
Renders as Hi Jane, if firstName = "Jane", else Hi there,.
Quoted ("there"), single-quoted ('there'), and bare-word
({{firstName | friend}}) defaults all work.
Campaigns: How Sends Are Organised
A campaign is a named, reportable container for a sequence of review-request sends. You almost always want one per use case ("Post-visit review request — June 2026") so the History and metrics group cleanly.
Campaign types
| Type | Purpose |
|---|---|
| One-time | Single blast — most ad-hoc sends |
| Event-triggered | Fired by an integration (e.g. POS sale → review request 2 hours later) |
| Scheduled batch | Runs at a specific time/date |
| Drip | Multi-step sequence over days/weeks |
| Continuous | Always-on for inbound triggers |
Sequences
Most campaigns send a single request. Drip and continuous campaigns can have a sequence: step 1 sends day 0, step 2 sends day 3, step 3 sends day 7, etc. Each step has its own channel + template.
Configure under the campaign's Sequence tab.
Template bindings
A campaign needs at least one template bound to it. Bind under Campaign → Templates section → + Bind Template. Choose:
- The template
- The channel
- (Optional) Locale, variant key, priority, active window
When you hit Send without picking a template explicitly, Vouch picks
the active binding for the chosen channel. If multiple bindings exist
(A/B testing), it picks the one marked isControl first, then by
descending priority.
Strict template policy: Vouch refuses to send without a resolvable template. You'll see one of:
NO_TEMPLATE— no binding for this channelTEMPLATE_NOT_FOUND— binding points to a deleted templateTEMPLATE_CHANNEL_MISMATCH— bound template is for SMS but you're sending emailTEMPLATE_EMPTY— template's subject + body fields are all blankNo solicitations are created when validation fails — the operator sees a clear 400 in the Send tab.
Sending a Review Request
Open your campaign → Send tab. There are two paths.
Path A — to existing contacts in your database
Use this when you've already imported / built a contact list in Vouch.
- Pick a Location (drives address tokens, review-link resolution, timezone for quiet hours).
- Pick a Channel — email, sms, or whatsapp.
- Optionally pick a Template. If left blank, Vouch auto-resolves from the campaign's binding.
- Click Send now.
The result panel shows:
- X messages queued, Y blocked by policy, Z failed out of N.
- The template that was used (with a "(auto-resolved from binding)" hint when applicable).
- Per-recipient errors if any.
Path B — Upload & send CSV
Use this for one-off campaigns where contacts aren't already in Vouch or the list is small enough to live in a spreadsheet.
- Click Upload & send CSV above the form.
- Drop in your file. Same tolerant-header matching as the contacts
import. Required:
email(for email channel) orphone(for SMS / WhatsApp)firstName(recommended)
- Tick Auto-fill missing details if you want AI to fill blanks (rarely needed for sends — mainly useful when uploading new locations, not contacts).
- Click Send.
Each row goes through:
- Contact upsert (if email/phone matches an existing contact, that record is reused; otherwise a new one is created)
- Policy check (suppression, consent, frequency caps, quiet hours)
- Template resolution
- Provider dispatch
What blocks a send
The most common policy refusals you'll see:
| Reason on the History tab | What it means | How to unblock |
|---|---|---|
Contact is on the suppression list |
Auto-suppressed (spam complaint, unsubscribe) | Don't — re-engagement requires fresh consent |
No email-consent record on file |
Imported contact never opted in | Either record consent or turn off Require Email Consent in Sending Policy |
Recipient previously unsubscribed from email |
Explicit revocation | Don't — re-contact is illegal in most jurisdictions |
Send attempted during quiet hours |
Recipient's local time falls in the configured window | Wait, or widen the window |
Frequency cap exceeded |
Too many sends in 24h or 7d | Wait, or raise the cap |
Email address is missing or invalid |
Bad data | Fix the contact record |
These all show up under the BLOCKED row in History with a one-line explanation pointing at the right setting.
Reading the History Tab
Open your campaign → History tab. You'll see:
- Status counts at the top: X SENT, Y FAILED, Z PENDING, W BLOCKED.
- One row per recipient, newest first, with:
- Channel icon (📧 email / 💬 sms / 💬 whatsapp)
- Recipient (firstName lastName, or email if name is empty)
- Status badge
- Sent timestamp
- For BLOCKED rows: the policy reason inline below
- For FAILED rows: the provider error inline below
- Refresh button — pulls the latest 200 rows.
Status meanings
| Status | What it means |
|---|---|
| PENDING | Solicitation created, dispatch not yet attempted. Should clear within seconds. If you see PENDING for more than a minute, contact support. |
| SENT | Provider accepted the message (Azure Communication Services / SMS gateway). Doesn't guarantee inbox delivery — that's a DELIVERED later transition when the provider webhooks back. |
| DELIVERED | Provider confirmed delivery (received delivery receipt). |
| FAILED | Provider rejected (bounce, invalid recipient, throttling). The reason is captured in providerStatus. |
| BLOCKED | Policy engine refused to send. Reason is shown inline. |
| CLICKED | Recipient clicked the review/feedback link. |
| CONVERTED | Recipient completed a review (auto-detected via review sync). |
Filtering & exporting
History is capped at the latest 200 rows in the UI. For full history
or filtered exports use the API: GET /v1/campaigns/<id>/solicitations?limit=500.
Inbox: Replies, Reviews, & Triage
The Inbox is where reviews and customer replies land. It's the single pane of glass for "someone said something — what do I do?"
What flows in
- Reviews — synced from Google / Yelp / Facebook by Vouch's review-sync job (runs hourly).
- Replies to your outbound emails / SMS — when configured, replies hit a webhook back to Vouch and become inbox items.
- Feedback submissions — when a customer fills out the hosted feedback page (typically used to catch negative feedback privately before it becomes a public 1-star review).
Triage views
- All — chronological feed
- Negative — sentiment-flagged (≤3-star or NLP-tagged negative)
- Unanswered — anything that hasn't received a response
- By location — filter to one outpost
Drafting responses
Click into any item. The right-side panel offers:
- AI-drafted response — Claude reads the review + your brand voice
- tone settings + similar past responses, then proposes a reply. You can edit, regenerate with different tone, or send as-is.
- Manual response — write your own; AI offers spell-check & brand-voice consistency suggestions.
- Internal notes — private comments visible only to your team.
SLA tracking
Under Settings → SLA Rules you can define response-time targets ("all reviews answered within 24 hours, negatives within 4"). The inbox shows a clock badge next to items approaching their SLA, and escalates via webhook (or email) when one breaches.
The AI Assistant
Top-left of every screen. Click the AI Assistant chip (or press
/) to open a sidebar where you can ask questions or kick off
multi-step actions. Everything visible to your role is in scope.
What it can do
The Assistant is a coordinator that delegates to specialist agents:
- Reputation Insight — "Why is the Austin location's score dropping this month?". Pulls trend data, summarizes themes from recent reviews.
- Campaign Strategist — "Suggest 3 review-request campaigns for Q3 based on our slowest 5 locations". Returns ready-to-launch drafts.
- Template Generator — "Write a friendly, casual review request for Acme Bakery's loyal customers". Honors the brand's voice/tone.
- Experiment Designer — "Set up an A/B test between two subject lines on the Summer Review campaign". Configures bindings, splits, goals.
- Compliance Critic — "Will this template pass for Healthcare Safe Mode?" Reads templates and flags PHI risks before you save.
- Operator Copilot — operational shortcuts, e.g. "Pause all sends for the Cherry Creek location for the next 48h".
- Optimization — "What's our best-performing template by response rate? Should we promote it to control?".
How it picks responses
The Assistant uses Claude (Sonnet 4.6) with a tool palette that includes the Vouch API. Every action goes through the same authorization checks as the UI — the agent can't do anything you can't do as your role.
Web search
The agent has web search built in. Useful for:
- "Find Acme Bakery Brooklyn's Yelp URL" (also exposed as the per-location Enrich button)
- "What are competitors saying about long wait times?" — pulls competitor reviews from public sources.
Disclaimers
- The Assistant drafts — it doesn't auto-send. Your click is required for any state change.
- AI-drafted responses are clearly marked as such in the Inbox until you edit or accept them.
- Audit log captures every Assistant-initiated action with the reasoning the model gave.
Approvals, Automation, Recommendations, Experiments
Four adjacent surfaces in the sidebar.
Approvals
When Require Approver Sign-off is on, every new template and campaign change goes here. Approvers see a queue with diffs and can approve / request changes. Once approved, the template/campaign goes live.
Automation
Settings → Automation Rules lets you build "when X happens, do Y":
- Trigger — incoming review (filtered by rating / keyword), new contact, scheduled time, integration event…
- Conditions — channel, location, sentiment, etc.
- Action — send a campaign, escalate to inbox, post to Slack, run an AI agent, push to a webhook.
Common rules:
- Auto-respond to 5-star reviews with a thank-you
- Notify #reviews-channel for any 1- or 2-star review
- Trigger the post-visit campaign 2 hours after a POS sale event
Recommendations
The Recommendations view is the AI's running queue of "things you should consider". Each item has an accept / reject button. Driven by the Optimization agent — pattern-mines your data nightly and surfaces opportunities ("Templates with emoji subject lines have 23% higher click-through — promote 'Summer Review' to control?").
Experiments
A/B testing surface. Bind multiple templates to a campaign with
different variantKey values, define a primary metric (open rate,
click rate, review-conversion rate), and Vouch:
- Splits traffic by variant
- Tracks results
- Calls statistical significance
- Surfaces a recommendation when one variant wins
The Experiment Designer agent can scaffold this from a one-line description.
Settings Reference
Every setting lives under Settings in the sidebar.
| Setting | What it controls |
|---|---|
| Team Members | Invite users, assign roles, remove access |
| Brand | Brand voice/tone/description, default review profiles |
| Email & DKIM | Sender domain, From address, From name, DKIM/DMARC verification |
| SMS | SMS sender ID, provider config |
| WABA registration, channel ID | |
| SSO / SAML | Enterprise SSO setup (entry point, certificate, callback) |
| SLA Rules | Response-time targets per channel + sentiment |
| Webhooks | Outbound event subscriptions (review.created, solicitation.failed, etc.) |
| Compliance | Healthcare mode, retention, data export/deletion, Sending Policy |
| Automation | Trigger → action rules (see Automation) |
| Integrations | CRM, POS, scheduling tools |
Email & DKIM — the one most people get wrong
For high deliverability you need DKIM and DMARC verified on your sender domain.
- Settings → Email & DKIM.
- Pick a sender domain (e.g.
mail.acme.com— a subdomain you control, notacme.com). - Vouch shows you 3 DNS records to add at your domain registrar.
- Wait 10–60 minutes; click Verify.
- The status badges next to DKIM and DMARC turn green.
Until both are green, your emails will work but may land in spam more often. Don't skip this.
Common Questions & Troubleshooting
"I sent 22 messages and 0 went out — what happened?"
Check the History tab. The status counts will tell you whether they were FAILED, BLOCKED, or never created.
- 0 created (no rows in History) → your contact list was empty, or all rows in your CSV were missing email/phone. Re-check the result panel from Send.
- All BLOCKED → policy rule. Click into a row to see which one. Most common: quiet hours (resend later) or missing email consent (turn off the requirement, or import consent).
- All FAILED → provider issue. Click a row for the error. Common causes: DKIM not verified yet, sender domain mismatch, ACS throttling.
"My template renders {{firstName}} literally"
The token name is wrong. Most likely you typed {{first.name}} or
{{first name}} — Vouch is generous about case and whitespace
({{ firstName }} works) but the token has to be one of the
recognised aliases. Open the template editor; the orange warning at
the top will list the unrecognised tokens.
"My greeting renders as Dear ,"
The contact has no firstName. Three fixes (in order of preference):
- Re-import contacts with a
firstNamecolumn. Header style doesn't matter (First Name/firstName/first_nameall work). - Use a default in the template:
Dear {{contact.firstName | "there"}}, - Rely on the email-name derivation (Vouch turns
jane.smith@…into "Jane Smith" automatically). Won't help for generic mailboxes likeinfo@.
"The link in my email points to localhost"
The API was deployed without API_BASE_URL set. Tell your platform
admin to redeploy with the env var configured. The fix is one
redeploy; existing emails already sent will keep their bad link.
"I clicked Enrich and got No Google Places API key configured"
Two options:
- Use the AI agent — it doesn't need a Places key. Make sure
your platform admin has set
ANTHROPIC_API_KEYon the API service. The Enrich button defaults to AI when the key is set. - Configure Google Places — under Settings → Brand → Review Sync, paste your Google Places API key. Same per-tenant scope as the AI option.
"Customers are getting the same review request twice"
Check:
- The campaign's Sequence — if it has reminder steps, that's by design (multi-step sequences send 2–4 messages over a week).
- Your Frequency caps under Sending Policy — defaults to 3/day, 5/week. Lower these if you find the cadence too high.
- Whether you ran the same campaign send twice manually. The solicitations table treats every Send click as a new attempt; the policy engine relies on the frequency cap to dedupe.
"Reviews aren't syncing back into the inbox"
Three failure modes:
- Google Place ID missing on the location. The sync job needs
googlePlaceIdto query Google's API. Hit Enrich on the location. - Review-sync API key not configured at the brand level. Settings → Brand → Review Sync — paste your Google Places key.
- The sync job hasn't run yet. It runs hourly. Click Sync Now on the location's Reviews tab to force-run.
"The AI Assistant says it can't access something"
Two possibilities:
- Your role doesn't grant it. A tenant_user can't pause the tenant; a tenant_admin can.
- The agent doesn't have a tool for that. Some operations (like directly deleting users) are intentionally not exposed to agents.
If it's the second, ask your platform admin — they can either grant the agent that capability or run the operation directly.
"Auto-Find Locations didn't find any locations"
Possible causes:
- Limited online presence — very new business or no website.
- Brand name too generic — "Pizza Shop" vs "Joe's Brooklyn Pizza".
- Website not accessible — behind a login or construction page.
Solutions:
- Add a more complete corporate address in the Brand section.
- Try different brand name variations.
- Use the per-location Add Location + Enrich workflow instead.
- Fall back to bulk CSV upload with your internal location list.
"Auto-Find Locations found wrong/inaccurate locations"
Why it happens:
- Multiple businesses with similar names in different cities.
- Outdated information on the web.
- AI inference error (hallucination).
Solutions:
- Review recommendations before approving — that's why locations go through the Recommendations workflow first.
- Edit details in the recommendation before approving.
- Reject bad recommendations and manually add correct locations.
- If a chain has hundreds of locations, Auto-Find is best for finding headquarters — use bulk CSV for the full list.
"My translated template has broken tokens"
Should not happen — the AI translator is designed to preserve all
{{tokens}} exactly. If you see this:
- Check the original template — was the token malformed there too?
- Re-translate — click Add translation again (it won't duplicate if the locale already exists; you'll need to delete the bad translation first).
- Manually fix the token in the editor.
Report to support if the AI consistently breaks tokens — that's a bug.
"Translations aren't being used when I send"
Check:
- Contact has a
localefield — without it, Vouch defaults to en-US. - Translation exists for that locale — if the contact is fr-CA but you only have en-US and es-MX translations, they get the default.
- Campaign template binding — if you explicitly picked a template ID when sending (instead of auto-resolve), that overrides locale routing.
Fix:
- Import contacts with a
localecolumn. - Create translations for all locales you need.
- Let Vouch auto-resolve the template (don't hardcode an ID).
Where to Get Help
- In-app tooltips — hover over the ⓘ icons next to any field for inline guidance.
- AI Assistant — "How do I set up a drip campaign?" often beats reading the manual.
- Audit log — Settings → Compliance → Audit Log shows everything anyone (human or agent) has done in your tenant. Useful when something changed and you don't know who did it.
- Support — your Vouch contact, or
support@<your-vouch-domain>.
Welcome to Vouch — go ship some reviews.