PlaysbyMoat8
Back to the library
The workflow guideProduct & Engineering

Bring product feedback from multiple channels together

This workflow combines messages, forms, and customer context into a shared feedback database with AI search. Designed for product teams.

5 implementation stepsAdvanced

How this works

This workflow combines messages, forms, and customer context into a shared feedback database with AI search. Designed for product teams. Use this to create a reliable searchable feedback repository from multiple incoming channels. The main outcome is normalized, traceable records that later analysis can query without repeatedly rebuilding the collection.

Define a canonical record and stable ingestion keys before adding AI classification. Preserve raw comments, split distinct needs, attach permitted account context and update records idempotently. Search answers should cite stored feedback rather than treat generated summaries as new customer evidence.

Before you start

Channel inventory

Choose forms, messages and support exports with defined access.

Canonical schema

Agree record IDs, source references, timestamps, topics and context fields.

Repository destination

Use an available database or a file-based table with a documented update process.

Prepare the inputs

channel_records
Required

source ID, message ID, text, timestamp and author reference

Retain source identity and avoid duplicate imports.

customer_context
Required

account segment and permitted metadata

Join through stable IDs and record unknown matches.

topic_taxonomy
Required

approved topic definitions

Allow unclassified records instead of forcing a weak match.

ingestion_state
Required

last cursor, fingerprints and prior record IDs

Support safe reruns without overwriting original evidence.

demand_query_rules
Optional / conditional

Question, observation windows, independent-count unit and permitted segment filters.

Use only for demand-count queries. Distinguish messages, requests, respondents and customer accounts; unknown account matches cannot support a claimed unique-account count.

Implementation, step by step

  1. Define the record contract

    • Map each channel's fields to the canonical schema.
    • Record timezone, deletion and edit behavior before importing.
    • Include observation date, feedback type, verified account ID, permitted segment and a restricted raw-evidence reference. Keep support-ticket state separate from whether a feature need is fulfilled.

    Checkpoint: The schema supports all selected channels.

  2. Import raw feedback

    • Save source text and immutable references before AI processing.
    • Use source-message keys or fingerprints to detect repeated imports.

    Checkpoint: The raw layer is complete and deduplicated.

  3. Normalize individual needs

    • Extract separate observations while preserving their parent message.
    • Classify topics and attach only verified customer context.
    • Distinguish requests, praise, complaints and operational questions. Link repeated statements about the same need and account without erasing the individual evidence records.

    Checkpoint: Each normalized record points to its original comment.

  4. Build retrieval

    • Index permitted text and structured filters for product questions.
    • Return evidence-linked results and respect source restrictions in answers.
    • For demand queries, return separate mention and distinct-account counts with the time window, segment filter and coverage. Provide representative permitted excerpts linked to the underlying records.
    • Compare periods only with compatible coverage and counting units. Preserve positive, negative and minority views; a before/after association does not establish the effect of a release.

    Checkpoint: Search can find records by topic and context.

  5. Maintain updates

    • Apply source edits as new versions and reconcile missing or deleted records according to policy.
    • Log ingestion counts, failures and classification corrections.
    • A closed support ticket does not close a feature request. If access is revoked or feedback changes, refresh affected counts and excerpts as well as the searchable record.

    Checkpoint: The repository remains auditable across runs.

Decisions along the way

One comment contains two requests

Create two linked observations under one parent message.

Account join is uncertain

Keep customer_context unknown rather than infer from a similar name.

Source record is edited

Preserve version history and refresh affected summaries.

A customer repeats one request across several tickets.

Retain the messages but count one account for that theme and period when the query asks how many customers requested it.

A large segment contributes more messages than another.

Report counts with available segment coverage; do not claim higher prevalence without a suitable denominator.

What you will produce

feedback-records.jsonl

JSONL

A reusable searchable feedback dataset.

Include: record_id · parent_id · source_ref · text · topic · account_context · version · observed_at · feedback_type · account_id · source_ticket_state · need_state · access_scope

ingestion-report.json

JSON

A reconciliation record for each import.

Include: source · received · inserted · updated · duplicates · failed

feedback-evidence-query.json

JSON

Optional saved query over the repository, with reproducible count definitions.

Include: query · period · segment_filter · count_unit · mention_count · distinct_account_count · unknown_account_count · coverage · evidence_refs

Check the result

  • Reconcile received records with inserted, updated, duplicate and failed counts.
  • Test repeated imports for duplicate prevention.
  • Verify search results cite original comments.
  • Check source permissions survive normalization and retrieval.
  • Check a multi-ticket customer does not inflate a distinct-account count and that unknown identities stay separate.
  • Verify query excerpts honor original access and that closed tickets retain their unresolved product needs.

When something goes wrong

Connector cursor expires

Resume from a verified checkpoint and deduplicate replayed records.

Malformed source record

Quarantine it with the raw payload and continue unaffected records.

Search summary invents a need

Remove the unsupported statement and cite only stored observations.

A worked example

SYNTHETIC EXAMPLE · NOT A REPORTED BUSINESS RESULT

Request

Synthetic: import feedback from a form and support export.

Inputs

Form F8 says 'save filters and export results'; support record S4 repeats the same customer's export request and references F8. Both records match account A2; another export request comes from A3, while a third source cannot be matched to any account.

Expected result

Synthetic result: create two observations under F8, link S4 as corroborating evidence for export, and avoid counting it as a second independent customer request. For an export-demand query, show two verified distinct accounts plus one unknown account record, not four customers. Keep the unresolved request even if its support ticket closes.

Run a small pilot

Start small

Ingest two channels for one product area with a controlled replay.

Record the baseline

Record manual collection effort and missing records.

Agree success criteria

Agree ingestion completeness, duplicate handling and retrieval accuracy before adding channels.

Stop or revise

Stop automated updates if source IDs or permissions cannot be preserved.

Keep the scope clear

  • A searchable record is not a verified product requirement.
  • The workflow may organize permitted feedback but cannot expand access to restricted source content.

Check before using

Check the meaning of the original comments and look for duplicates. The team sets product priorities.

Business activities

  • Resolve customer questions
  • Plan products and business changes

Editorially adapted workflow; not independently tested.

FROM A RECIPE TO YOUR WORKFLOW

Bring the company context together.

This workflow needs reliable inputs before it needs a better prompt. Moat8 Vault brings working information into a readable archive for the AI tools you use.

For this recipe: Feedback messages and forms · Customer interactions · CRM data

Start with one recurring task, agree which sources to use, and review the first result with your team.

Discuss this workflow

What does your team do?

Choose the recurring work you would like to improve.

A field guide, made for work.

Plays is a curated library of anonymized business workflows. Each recipe explains the inputs, steps, tools, and checks you can adapt to your team. These are editorial guides, not independently tested implementations.

When you share a company website, the guide may read a limited number of public pages on that website. Messages and retrieved page text are sent to our AI provider, NVIDIA, to recommend relevant workflows. Share a general description rather than confidential information.

Saved workflows and selected activities stay in this browser. Your chat history and selected company website are kept in this tab and cleared when you reload or start a new chat. The server does not store conversations. Live source monitoring is not enabled.

If you allow analytics, PostHog receives page views and actions such as workflow saves, skill downloads and link clicks. Random browser and session identifiers connect these actions without identifying you by name. Your choice and browser identifier expire after 90 days; sessions restart after 30 minutes of inactivity or 24 hours. We use local storage, not analytics cookies. Messages, company URLs, search text, full referrers and IP addresses are not sent. There are no person profiles or session recordings. You can decline or withdraw in Analytics settings; Do Not Track and Global Privacy Control keep analytics off.

Read the Plays Privacy Notice ↗