Automating surveys
Updated August 24, 2026
A survey invite does not have to be sent by hand. Pluspoint can fire one whenever something happens: an order is placed, a contact is created, a conversation is resolved. It can also chase people who never opened the first invite. Use this article to pick the mechanism that fits, then follow the linked guide for the details.
Before you start
- Surveys access to choose a template, and Campaigns full access to build an automation. Campaigns is a global module:
campaigns:fulllets you create and edit,campaigns:restrictedis view-only.- A survey template with Enable send surveys turned on. A template with that toggle off never appears in an automation, a campaign, the Inbox or the Send surveys drawer.
- A connected outbound channel: SMS, Email, WhatsApp (Beta) or WhatsApp Business. Facebook Messenger, Instagram and live chat cannot send campaigns or automations.
- A plan that includes Campaigns, for anything built on the automations canvas.
- Contacts that carry the address the channel needs — a phone number for SMS and WhatsApp, an email address for Email. Contacts without it are skipped.
Where to find it
- Automations: Campaigns → Automated, or go to https://app.pluspoint.io/campaigns/automated.
- Survey templates: Surveys → Templates, or go to https://app.pluspoint.io/surveys/templates.
- Your API key: Settings → Account, in the read-only X-Api-Key field, or go to https://app.pluspoint.io/account-settings/general.
Choose an approach
| Approach | Best for | What starts the send | Where you set it up |
|---|---|---|---|
| Automation | Events Pluspoint already knows about, including events pushed in by a connected integration | A trigger event on the automation canvas | Campaigns → Automated |
| Public API | Your own back office, booking system or e-commerce platform | Your code calling POST /api/public/v2/surveys | Your system, authenticated with the X-Api-Key |
| Zapier | Wiring up an app you already use without writing code | A Zap trigger in the other app | Settings → Integrations → Zapier |
| Automatic follow-ups | Reminding people who received an invite but never opened it | No survey visit within the delay you set | Survey template → Sharing tab |
| QR code or survey link | Walk-in customers, receipts, table tents, order confirmations | The customer scanning or clicking | Survey template → Sharing tab |
Over-survey protection applies to every sending path — the Send surveys drawer, the queue behind the API and Zapier, and automation survey steps. It does not apply to QR scans, so a QR code always opens the survey.
Automations and the API are not exclusive. A common pattern is to push a Custom event from your system through the API, then use Custom event as the automation trigger. The timing, channel and conditions stay editable in the app.
Prepare the survey template
Every automatic path uses the same template settings, so do this first.
- Go to Surveys → Templates and open the template with the edit icon.
- Open the Sharing tab.
- Turn on Enable send surveys.
- Fill in Message template. This is required and is the text used for SMS and WhatsApp (Beta) invites.
- For the Email channel, fill in Email subject. If you leave it blank, Pluspoint generates a subject from the location or brand name.
- Optionally turn on Send automatic follow-ups, choose a Delay of 1 to 7 days and write the Follow-up message.
- Set Over-survey protection to the shortest window you are comfortable with. This stops the same person receiving repeated invites.
- Click Save.
Supported placeholders in the message and follow-up text are [name], [last_name] and [location]. On a brand template, [location] resolves to the brand title. Do not type [link] — Pluspoint appends the survey URL for you and strips any literal [link] you write. Any other [token] blocks the send with “Unsupported placeholder(s)”.
Build an automation that sends a survey
- Go to Campaigns → Automated and click Create automation.
- Give it a name. An unnamed automation cannot be saved.
- Click the Trigger node. In the right-hand panel choose one or more Trigger event(s). Selecting several means the automation fires when any of them occurs. When more than one happens, timing is counted from the latest event.
- Optionally turn on Once per contact so a contact who has already finished, exited or failed this automation is never enrolled again. Leave it off and the contact re-enters every time the event fires. Either way, a contact who is still part-way through the flow is never enrolled a second time.
- Optionally add conditions under Who can enter. Leave it empty and everyone who triggers the automation enters.
- Click the + on the edge below the trigger, then choose Send survey under Send.
- Pick a Channel and a Survey. Only templates with sending enabled are listed.
- Finish the channel-specific part:
- Email — pick an email design from the Library that carries a Survey link button.
- WhatsApp Business — pick an approved WhatsApp template whose URL button is a survey link.
- SMS and WhatsApp (Beta) — nothing more to fill in. The survey’s own Message template is used.
- To delay the invite, click the + above the send step and add a Wait, then set a number and a unit of minutes, hours or days.
- Click Save.
- Back on the Automated list, switch Enabled on.
Note A saved automation is a draft and sends nothing until you turn Enabled on. Switching it on re-validates the whole graph strictly — every template and channel it uses has to be usable at that moment.
Getting the timing right
A Wait placed directly after the Trigger is measured from the trigger event’s own timestamp, not from the moment the engine reaches it. That is what makes “send the survey 3 days after the visit” land exactly 3 days after the visit. Every other wait in the flow is measured from when the engine gets to it.
Turning on an automation whose first step is a wait also back-fills. The enrollment scan widens to that wait’s length, so contacts whose event happened within that window are picked up and scheduled at event time plus the delay.
Trigger events
| Trigger event | Fires when |
|---|---|
| Contact created | A contact record is created — by import, manually, from a widget, from a survey or through the API |
| Survey responded | A contact submits a survey |
| Survey sent | A survey invite goes out |
| Conversation resolved | An Inbox conversation is closed |
| Review left | A review that can be attributed to the contact arrives |
| Custom event | Your system posts an event to POST /api/public/v2/custom-events |
| Coupon redeemed | The contact redeems a coupon |
| CoverManager reservation | A CoverManager reservation is imported. Listed only when the CoverManager integration is connected |
| VTEX order | A VTEX order is imported. Listed only when the VTEX integration is connected |
When Custom event is selected, an extra Custom event type (optional) field appears. Leave it empty to react to any custom event, or type one event type to match it exactly.
Send surveys from your own system
The public API queues an invite exactly as the app does, so over-survey protection, unsubscribe checks and contact matching all still apply.
- Base URL:
https://app.pluspoint.io/api/public/v2 - Auth header:
X-Api-Key, copied from Settings → Account - Reference documentation:
https://docs.pluspoint.io
POST /surveys body fields:
| Field | Required | Notes |
|---|---|---|
locationId | Yes | Integer. The location the survey is sent for |
surveyTemplateId | Yes | The template’s external ID or GUID. Get it from GET /survey-templates |
channelId | Yes | GUID. Get it from GET /channels |
firstName | No | Used to personalise [name] |
lastName | No | Used to personalise [last_name] |
phoneNumber | Conditional | Required and validated for SMS and WhatsApp channels |
email | Conditional | Required for the Email channel |
delay | No | Hours to wait before sending, 0 or greater |
whatsAppTemplateId | Conditional | Required for a WhatsApp Business channel. Get it from GET /channels/{channelId}/whatsapp-templates with hasButtons=true and linkType=survey |
Other useful endpoints on the same base URL: GET /survey-templates lists templates with their questions, POST /survey-responses pushes in a response collected somewhere else, and GET /survey-responses reads responses back out.
When the invite actually goes out
Nothing here is instantaneous. Plan your delays around these cadences.
| Path | What to expect |
|---|---|
| Automation sends | Go out within a few minutes of the trigger, plus any wait you set |
| Survey queue (API, Zapier and bulk sends) | Sends for the same channel and template are spaced at least 30 seconds apart; unofficial WhatsApp is spaced roughly 30 to 60 seconds and rolls over to the next day after 200 messages |
| Automatic follow-ups | Go out about once an hour after the delay expires, and only when the survey was never opened |
| VTEX order import | Once a day at 12:00 UTC, covering the previous day’s orders |
What can stop an automatic survey
| Situation | What happens |
|---|---|
| The contact is unsubscribed | The send is refused. In an automation the enrollment exits at the next send step |
| Over-survey protection is still inside its window | The send is skipped silently and the contact moves on to the next step |
| The contact has no phone number or email for that channel | The step is skipped and the flow carries on |
| The channel is not ready | The step is retried in 30 minutes. While a channel is out of the ready state, every automation with a step on it is marked failed, and they recover when the channel reconnects |
| A WhatsApp Business template loses approval | Automations using it are paused automatically and running campaigns using it are marked failed |
| The plan stops including Campaigns | Active automations are switched to paused. They are not switched back on automatically when the plan returns |
| The account is over its location or user quota | Campaign sends are blocked even though the plan includes Campaigns. Due enrollments are parked for 30 minutes at a time and resume once billing is healthy — nothing is lost |
| An enrollment sits unprocessed for longer than the flow’s total waits plus 90 days | It exits without sending, so nobody gets a months-late message |
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| The template is missing from the Survey dropdown | Enable send surveys is off on that template | Open the template, go to the Sharing tab and turn the toggle on |
| Send survey is missing from the add-step panel | You have no Surveys module access | Ask an account admin to grant Surveys access to one of your teams |
| The Enabled switch is off and greyed out | The automation hit an unrecoverable step error | Open it, fix the highlighted step, save (which clears the failed flag) and switch it on again |
| The automation is enabled but nobody is enrolled | The trigger events happened before it was switched on, or the contacts are unsubscribed, or none of them has an address for the send channel | Enrollment only looks forward from a recent window. Verify the channel type matches the data your contacts actually have |
| Everything sends, but a specific person never gets an invite | Over-survey protection already covered them, or they are unsubscribed | Check the contact’s activity timeline and lower the over-survey window on the template if it is too wide |
| The whole Campaigns section shows an upgrade page | The plan does not include Campaigns | Use the survey link, a QR code or the Send surveys drawer, or upgrade the plan |
| Save is rejected because the flow is too big | An automation is capped at 100 steps | Split the flow into two automations |