Automations add a contact to a review campaign when something happens in another system: a meeting ends, a deal is won, a payment succeeds, an order is completed. The campaign then sends the request through the customer's own SMS and email providers.
Every automation lives at `Connect -> Integrations -> Automations` and is set up from your agency account for each customer. Each connection uses the customer's own credentials, stores them encrypted, and can be paused, edited or deleted from the same page.
Where to find them
Open the customer account from your agency (`Business -> Customers -> Manage Customers -> Open dashboard`, or the `Customer` tab if your sidebar shows it), then go to `Connect -> Integrations -> Automations`. Each platform has a card with a `Connect` button that opens a setup wizard. Credentials are validated before anything is saved, and a half-finished setup is kept as a draft you can resume.
- The page shows totals for connections, active connections, events received and requests sent
- Every connection has an activity log listing each event received, skipped, cancelled or sent, with the reason
- After 25 consecutive failures a connection is marked as needing attention and shows `integration(s) stopped working`
This automation is managed from your agency account only. Reach it by opening a customer account (`Business -> Customers -> Manage Customers -> Open dashboard`, or the `Customer` tab if your sidebar shows it) and going to `Connect -> Integrations -> Automations` — it is not visible to customers, and `View as customer` cannot reach it.
Calendly
Trigger: a booking is created. The request is timed from the meeting end. A cancelled booking cancels the pending request. There is no no-show detection and no event-type filter.
- In Calendly open `Integrations -> API and webhooks` and generate a Personal Access Token. Webhooks require a Calendly Standard, Teams or Enterprise plan.
- Step 1: paste the token. Choose `Only my calendar` or `My whole Calendly organization` (the organization option needs an admin or owner token).
- Step 2: choose the campaign and timing (up to 24 hours after the meeting ends, or next morning).
- Step 3: activate. The webhook subscription is created in Calendly for you and bookings start flowing immediately.
- Phone numbers are read from the SMS reminder number or a phone-type booking question, so SMS campaigns work when the booking form collects a phone.
HubSpot
Trigger: a deal enters one of the stages you select. `Closed Won` is pre-selected, but any stage in any pipeline can be chosen. The request is timed from the moment the deal entered the stage. Deals are checked every 15 minutes with a 48-hour look-back, so there is no webhook to configure in HubSpot.
- A HubSpot super admin creates a private app under `Settings -> Integrations -> Private Apps` (newer accounts: `Development -> Legacy apps`) with the scopes `crm.objects.deals.read` and `crm.objects.contacts.read`, then copies the access token (it starts with `pat-`).
- Step 1: paste the token. Step 2: tick the stages. Step 3: campaign and timing (up to 7 days, or next morning). Step 4: activate.
- The request goes to the deal's first associated contact. Deals with no contact, or whose contact has no email or phone, are logged as skipped.
- A deal that is reopened, lost or moved out of the selected stages before the send is cancelled. A deal that re-enters a stage is never asked twice.
- Works on HubSpot's free CRM, which includes private apps.
HighLevel (GoHighLevel)
Trigger: an appointment on the selected calendars ends. Appointments are checked every 15 minutes (48 hours back, 30 days ahead). Cancelled, no-show and invalid appointments never send and cancel any pending request. There is no marketplace app and no webhook.
- In HighLevel open `Settings -> Private Integrations` (enable it under `Settings -> Labs` if you cannot see it), create an integration with the scopes `View Contacts` and `View Calendars & Calendar Events`, and copy the token (it starts with `pit-` and is shown once). The Location ID is under `Settings -> Business Profile`.
- The legacy API Key under `Settings -> Business Profile` does not work here. Use a Private Integration token.
- Step 2: choose `All calendars` (calendars added later are included automatically) or specific calendars.
- Step 3: campaign, attendance and timing. `Send unless cancelled or marked no-show` (recommended, re-checks the status right before sending, works even when statuses are never updated) or `Only when marked Showed` (nothing sends without an explicit Showed).
- Optional `Only these tags`: comma-separated HighLevel contact tags. When set, only contacts carrying at least one of the tags receive requests.
- Timing: up to 7 days after the appointment ends, or next morning.
Stripe
Trigger: a charge succeeds (or is captured, for authorization-only holds). Refunds cancel the pending request. Subscription renewals are skipped: only one-time payments and the first payment of a new subscription trigger a request, so subscribers are never re-asked every billing cycle.
- In the Stripe Dashboard open `Developers -> API keys` and create a restricted key with `Charges: Read`, `Customers: Read`, `Invoices: Read` and `Webhook Endpoints: Write`.
- Step 1: paste the key. A test-mode key is accepted and flagged `Test mode`; only test payments trigger until you swap in a live key.
- Step 2: campaign and timing (up to 24 hours after the payment, or next morning). Step 3: activate. The webhook endpoint is created on the Stripe account for you.
- Stripe has no test-event delivery for live endpoints, so the endpoint being created is the verification.
- A trialed subscription's first real charge is billed as a renewal by Stripe and is skipped. It shows in the log as a skipped row.
Square
Trigger: a payment reaches `COMPLETED`. Cancelled and failed payments and refunds cancel the pending request. Refunds are processed even while the connection is paused.
- In the Square Developer Dashboard open your application, then `Credentials`, and copy the Production Access Token.
- Step 2: campaign, locations and timing. Choose `All locations` or specific Square locations (loaded live from the account). Timing up to 24 hours after the payment, or next morning.
- Step 3: `Create Webhook & Send Test`. Square delivers a test event to prove delivery end to end. You can activate without waiting for it.
- Contact details come from the buyer email on the payment, or from the Square customer record when one is attached.
WooCommerce
Trigger: an order is marked `Completed`. Refunded, cancelled and failed orders cancel the pending request, and a partial refund before the send cancels it too. Processing and on-hold orders are ignored. No plugin is installed on the WordPress site.
- In WooCommerce open `Settings -> Advanced -> REST API` and add a key with `Read/Write` permissions under an administrator or shop manager user. The store URL must start with `https://`.
- Step 1: store URL, consumer key and secret. Hosts that strip the Authorization header are detected and the connection falls back to query-string authentication automatically.
- Step 2: campaign and timing (up to 24 hours after completion, or next morning). Timing is anchored to the completion time recorded by WooCommerce.
- Step 3: the `order.updated` webhook is created on the store through your key. WooCommerce sends an unsigned test ping; some hosts block it while real deliveries work, so you can activate without waiting.
- Every six hours the webhook is re-activated if WooCommerce silently disabled it, and completed orders from the last 72 hours are back-filled. If the webhook was deleted from the store, the connection is flagged.
- Contact details come from the order's billing name, email and phone.
Shopify
Trigger: your choice of `When the order is fulfilled` (recommended for physical products) or `When the order is paid` (digital products and services). Cancellations and refunds cancel the pending request. Gateway test orders are ignored. Shopify POS orders arrive as normal orders and trigger the same way.
- The store owner creates a custom app in the Shopify Dev Dashboard (`Settings -> Apps -> Develop apps`): grant `read_orders` and `read_customers`, release, install on the store, then copy the Client ID and Client secret from the app settings.
- Step 1: `.myshopify.com` domain, client ID and secret. Step 2: campaign, trigger moment and timing (up to 7 days, or next morning). Step 3: `Create Webhooks & Activate`.
- Webhooks for paid, fulfilled, cancelled and refunded orders are created on the store. Shopify deletes a subscription after repeated delivery failures; every six hours missing subscriptions are re-created and orders from the last 72 hours are back-filled.
- On the Shopify Basic and Starter plans, custom apps receive limited customer contact details. Orders that arrive without an email are skipped. The Grow plan or higher gives full coverage.
- Shopify has no test-event API. The subscriptions being accepted is the verification.
Inbound webhooks: Zapier, Make, n8n, Pabbly Connect and any app
The `Webhooks` card and the `Zapier`, `Make`, `n8n` and `Pabbly Connect` cards share one engine. The wizard gives you an endpoint URL on your own domain (`https://your-domain/api/webhooks/inbound/...`). Any app that can POST JSON to that URL adds contacts to the campaign. There is no EmbedMyReviews app to install in those platforms.
- Step 1: name the connection and choose a campaign. A configured domain is required because the URL is built from it.
- Step 2: paste the URL into your app and send a test. The test payload is captured so you can map fields visually. You can skip capture and map manually, or re-capture later.
- Step 3: map `First Name`, `Last Name` or `Full Name`, `Email` and `Phone` using dot-notation paths. Email or phone is required. A full name is split automatically when first and last are not mapped.
- Optional `Appointment or order date`: pick the payload field that holds when the appointment or order happens. Fields such as `end_time`, `appointment_date`, `completed_at` or `order_date` are suggested when they parse as dates.
- Step 4: `Straight away`, `A set time after the moment` (15 minutes to 7 days, timed from the mapped date, or from arrival when the date is missing), or `The next morning`.
- Optional signing secret: when set, requests must carry an HMAC-SHA256 signature of the raw body (or `timestamp.body`). The token in the URL can be regenerated at any time; the old URL stops working immediately.
- Duplicate submissions inside five minutes are ignored. Bodies above 256 KB are rejected.
| Platform | What to add after your trigger | Plan note |
|---|---|---|
| Zapier | `Webhooks by Zapier` action, event `POST`, payload type `json`, then `Test step` | Webhooks by Zapier requires a paid Zapier plan |
| Make | `HTTP -> Make a request`, method `POST`, body type `Raw`, content type `JSON`, then `Run once` | Works on every Make plan, including free |
| n8n | `HTTP Request` node, method `POST`, body content type `JSON`, then execute the node | n8n Cloud or self-hosted |
| Pabbly Connect | `API by Pabbly` action, `POST`, payload `JSON`, then `Save and Send Test Request` | Any plan with API by Pabbly |
| Any other app | Point its webhook or HTTP action at the endpoint URL with a JSON body | None |
Choosing a route
- Customer runs on Calendly, HubSpot, HighLevel, Stripe, Square, WooCommerce or Shopify: use the native automation
- Customer sends emails from their system (invoices, confirmations): use Email Triggered Invites
- Customer already uses Zapier, Make, n8n or Pabbly Connect: use that preset
- Anything else that can send a webhook: use the generic Webhooks card