What this workflow does
- Daily at 5am starts the run.
- Get taxonomy reads the active themes from the
feedback_taxonomytable in Supabase. - Get new Zendesk tickets searches for tickets created since yesterday.
- Get new Typeform responses pulls completed responses from the last day for one form.
- Clean and mask comments combines both sources. It removes quoted email threads, signatures and “Sent from my” lines, and masks emails, phone numbers and order numbers before any text reaches a model. Very short comments are skipped and the run is capped at 200 comments.
- Split and tag with Claude sends each comment with your taxonomy. Claude returns one or more points, each with a verbatim quote, theme ID, subtopic, sentiment, severity and competitor mention. It uses structured outputs with low effort.
- Validate tags turns each point into a row. Theme IDs not in the taxonomy become “other” with a proposed label, quotes that do not appear in the comment are blanked and marked unverified, and the taxonomy version is stored. Refusals, truncated replies and responses with no text block go to the alert channel.
- Upsert points to Supabase writes all rows in one request with merge-duplicates on source, source ID and point index, so reruns do not create duplicates.
- Post daily tagging summary posts counts by theme, negative and high-severity totals, and any proposed new themes for a person to review.
- Alert: feedback tagging needs attention collects every failure.
Before you import
- A current n8n version, cloud or self-hosted.
- A Supabase project. The service role key stays server-side in n8n.
- A Zendesk API token, a Typeform personal access token for the form, an Anthropic API key and a Slack app that can post.
Setup
- Run the SQL from the yellow note in the Supabase SQL editor.
- Agree on 8 to 15 themes with your product and support leads, and insert them into
feedback_taxonomywith short definitions and examples. - Import the JSON and attach credentials: Supabase on the taxonomy node and the upsert node, Zendesk on the ticket node, Typeform on the responses node, Anthropic on the Claude node, Slack on both Slack nodes.
- Replace
REPLACE_WITH_TYPEFORM_FORM_ID,REPLACE_WITH_SUPABASE_PROJECT_REF,REPLACE_WITH_SUMMARY_CHANNELandREPLACE_WITH_ALERTS_CHANNEL. - If your Typeform passes a customer ID as a hidden field, name it
customer_idso points can be joined to CRM revenue later. - Review the masking patterns for identifiers specific to your business.
Test it
Create two test tickets in Zendesk, one with an order number and phone number in the text, and submit one Typeform response with mixed feedback. Run the workflow manually. Check in Supabase that each comment became several points with sensible themes, that no email or phone number appears in any row, and that rerunning does not add rows.
Make it production-ready
- Monthly audit. Hand-tag a random 100 points and compare with the model. Fix definitions where disagreements cluster.
- Promote themes deliberately. Review proposed themes monthly and bump the taxonomy version when you add one.
- Checkpoints. Replace the “since yesterday” window with a stored checkpoint per source so missed runs catch up.
- Revenue view. Join
customer_refto CRM plan and revenue data for themes by revenue at risk. - Healthcare data. If you are a HIPAA covered entity or business associate and comments can contain protected health information, you need a BAA with each vendor in the path. This is general information, not legal advice.
- Error workflow. Add an n8n error workflow; source API outages otherwise fail quietly.
The customer feedback analysis guide covers taxonomy design and reporting. For help building the dashboard, talk to Lumeor.