AstroBaaS

Catalogue & product data

Customer Surveys & Feedback Collection

Paid pluginsize Mplanned, not built

Indicative price, not an offer: $19-49/mo per 1,000 responses/mo

Generated from docs/plan/paid/customer-surveys-feedback-collection/PLAN.md in the AstroBaaS repository. Nothing described below is implemented — it is the written plan for it.

A paid module that embeds post-purchase surveys in order confirmation emails and customer portals to collect feedback on products, checkout experience, and satisfaction. Routes responses to a dashboard, analyzes sentiment, and routes actionable feedback to teams (product, support, logistics). Merchants use this to identify churn risks and product issues without building custom surveys.

The problem

We don’t know why customers don’t reorder. We need to ask them after purchase — ‘are you happy with the product?’, ‘would you recommend us?’, ‘what would make you come back?’ — and see patterns. Building a survey tool is too much work; we need something ready to use.

What it does

  • Survey builder: drag-and-drop to create post-purchase surveys (NPS, CSAT, open-ended questions, multiple choice, rating scales)
  • Survey template library: pre-built surveys for ‘product satisfaction’, ‘checkout experience’, ‘likelihood to repurchase’
  • Trigger rules: ‘send survey 24 hours after order ships’ or ‘send survey only for orders >€100’
  • Embed surveys in order confirmation email as clickable link or inline widget
  • Survey response collection and storage per order
  • Dashboard: NPS score over time, CSAT breakdown by product/category, sentiment analysis on open-ended responses
  • Export responses as CSV with order context (product, price, customer region, time to survey completion)
  • Routing rules: route feedback mentioning ‘broken’ to support team, flag detractors (NPS <7) for outreach
  • A/B test surveys: show variant A to 50% of customers, variant B to 50%, compare response rates
  • Privacy: surveys never collect PII beyond email; comply with GDPR on data retention (delete after 90 days default)

What it deliberately does NOT do

Each boundary carries its reason. A boundary without a reason gets crossed by the next person who reads this.

  • Email campaign automation based on survey responses — that is paid email marketing module. Survey module sends one confirmation email only; multi-email campaigns are paid marketing.
  • Generative AI to auto-respond to feedback — that is paid AI response module. Survey module collects and displays feedback; AI module generates responses.
  • Telephone or SMS surveys — this is email-only. SMS surveys are a paid communications module.
  • Integration with external survey tools (Typeform, Qualtrics) — survey builder is proprietary. Data can be exported to external tools; no bi-directional sync.
  • Video or image feedback collection — this is text/rating surveys only. Rich media survey collection is a paid media module.
  • Competitor benchmark surveys — this collects data about your own customers only, not market data.

Data model

New SURVEY table (survey_id, template_id, trigger_rules JSON, questions JSON array). New SURVEY_RESPONSE table (response_id, order_id, survey_id, question_id, answer JSON, responded_at, sentiment_score). New SURVEY_DASHBOARD_CACHE table (date, nps_score, csat_avg, response_count, refreshed_at). Migration required: none (new tables).

API

  • POST /admin/surveys (create survey)
  • GET /admin/surveys (list surveys)
  • PATCH /admin/surveys/:id (update survey and trigger rules)
  • POST /admin/surveys/:id/preview (send test survey email to merchant)
  • GET /admin/surveys/:id/responses (list responses, filter by date/product/sentiment)
  • GET /admin/surveys/:id/dashboard (NPS, CSAT, sentiment summary)
  • POST /surveys/:responseToken/submit (public endpoint to submit response)
  • GET /admin/surveys/:id/export (CSV export of responses)

Every route added here must also appear in src/pages/openapi.json.ts — a test fails the build if it does not.

Admin

Survey builder with template picker, question editor (add NPS, CSAT, multiple choice, open-ended). Trigger rules UI (if order > €100, if category = shoes, delay 24h). Dashboard with NPS gauge, CSAT bar chart, response rate over time, sentiment cloud from open-ended. Response list filterable by date, product, NPS score. Export to CSV.

The seam — why this is paid

Paid survey module owns survey builder, response collection, dashboard, and sentiment analysis. Core provides order data (order ID, product, price, shipping date) via API and sends one-off survey email on trigger (core email system sends, but paid module defines content). Paid module does not own customer email campaigns; that is paid marketing module.

Paid module owns survey builder, response storage, sentiment analysis, and feedback routing logic; core provides post-order webhook only

Dependencies

  • Order management (core)
  • Email system (core)
  • Audit log (core, optional but recommended)

Acceptance checks

Each of these must be able to fail. Before claiming this is done, break the code deliberately and watch each one go red.

  • Survey is created with 5 questions (NPS + CSAT + 2 multiple choice + 1 open-ended); each question has answer options
  • Trigger rule ‘send survey 24h after order ships, only if order > €50’ is saved and honored (check order.shipped_at and order.total_amount_minor)
  • Survey email is sent 24 hours after order transitions to ‘shipped’ state, to customer email
  • Customer clicks survey link, sees all questions on one page, submits response
  • Response is recorded with order_id, question_id, answer, responded_at timestamp
  • Dashboard shows NPS score as (% promoters - % detractors) × 100 based on NPS question (9-10 = promoter, 7-8 = passive, 0-6 = detractor)
  • Open-ended responses are analyzed for sentiment (positive/neutral/negative) and displayed as word cloud
  • Export CSV includes order_id, order_total, product_name, response_date, and all answers per row
  • Survey response is deleted after 90 days by default; retention period is configurable

Risks

If survey email is sent too soon (before order ships), customer sees incomplete picture. Mitigate: use order.shipped_at as trigger, not order.created_at. If open-ended text is not sanitized, XSS in dashboard is possible. Mitigate: sanitize all user text on storage and display. If sentiment analysis is inaccurate (false positives for ‘broken’), merchants waste time on non-issues. Mitigate: show confidence score on sentiment, allow manual override, and document limitations. If survey response data is not deleted, GDPR retention violations occur. Mitigate: configurable retention with automatic cleanup job.

Commercial context

Suggested price$19-49/mo per 1,000 responses/mo
Rival anchorZigpoll $15-99/mo freemium, Propel (survey add-on), Report Pundit

The anchor is what the nearest equivalent charges on Shopify or Magento today. It is context for a pricing decision, not the decision.


Generated from the commerce plan. See docs/COMMERCE-PLAN.md for the full catalogue and ../../AI-GUIDE.md for how to work on this repository.