The Problem
A 30-person SaaS company collects feedback in 4 different places: Intercom conversations, NPS surveys (Typeform), a support email inbox, and a #product-feedback Slack channel where team members paste things they hear from customers. The product manager checks each one manually, maybe once a week. Patterns get missed. Urgent signals get buried. The PM spends 3+ hours every Monday just reading through everything without any structured analysis.
The worst part: when a customer mentions something that signals they might churn ("we're evaluating alternatives", "this doesn't work for our use case anymore"), it sits unread in Intercom for days. By the time someone notices, the customer is already gone. The feedback exists, but nobody is systematically watching it.
The Solution
A 30-node pipeline that runs every Monday at 9am. It pulls the last 7 days of feedback from all 4 sources, normalizes the data into a unified format, runs AI classification on every piece (category, sentiment, urgency, theme), routes negative and retention-risk feedback to the right teams immediately, and generates a weekly AI insights report that goes to Notion, Slack, and the PM's inbox.
- Schedule trigger fires Monday 9am
- 4 parallel HTTP requests pull from Intercom API, Typeform API, Gmail API, and Slack search API
- 4 Code nodes normalize each source into a unified schema (source, date, customer, email, content)
- Merge combines all feedback into a single stream
- Deduplication removes cross-posted content (same feedback appearing in Slack + email)
- Split in Batches sends groups of 5 to OpenAI for classification (category, sentiment -1 to 1, urgency, theme, retention impact)
- Every piece gets stored in Airtable with full AI metadata
- Negative sentiment items (< -0.3) trigger an immediate Slack alert to #product-alerts
- Items flagged as affecting retention also alert #cs-team for personal follow-up within 24h
- Aggregate node calculates weekly stats (theme frequency, sentiment trend, category distribution)
- OpenAI generates a 5-7 bullet insight report with emerging patterns and recommended actions
- Report pushes to Notion (product roadmap page), Slack (#product-team), and email (PM digest)
Why I Built It This Way
I use HTTP Request nodes for Intercom, Typeform, Gmail, and Slack instead of native nodes because each API requires specific filtering that native nodes don't expose. Intercom's native node doesn't let you filter by date range. Typeform's doesn't support the `since` parameter. For this use case, raw HTTP gives full control over exactly what data comes back, reducing noise and keeping the AI classification costs low.
The normalization layer (4 separate Code nodes) exists because each source has wildly different data shapes. Intercom nests contacts inside conversations inside arrays. Typeform uses field references. Gmail uses headers. Trying to handle all 4 formats in one Code node would be unmaintainable. One parser per source means you can add a 5th source later without touching existing logic.
I batch AI calls in groups of 5 rather than one-by-one or all-at-once. One-by-one means 50+ API calls (slow, expensive). All-at-once means a single massive prompt that OpenAI struggles with (context too long, classification quality drops). Batches of 5 hit the sweet spot: fast enough (~6 batches for 30 items), cheap, and each call has focused context so classification accuracy stays high.
The dual alert system (product team for negative feedback + CS team for retention signals) is critical. Not all negative feedback means someone will churn. A customer saying "this feature is frustrating" needs a product fix. A customer saying "we're looking at other options" needs an immediate human conversation. The AI distinguishes these with the `affects_retention` boolean, which triggers a completely different response path.
The weekly insight report uses a two-step process: first aggregate stats programmatically (exact numbers, percentages), then pass those stats to OpenAI for pattern recognition. I never ask AI to count things or calculate percentages. AI is terrible at math. The Code node handles numbers, AI handles interpretation. This is a fundamental principle in my automation architecture.
The Workflow
This is a sanitized replica of the production workflow. Credentials, API keys, and client-specific data have been removed to protect confidentiality.
Results
- PM saves 3+ hours/week on manual feedback review
- Retention-risk signals detected same-day instead of next-week (or never)
- Product team gets structured, actionable insights instead of raw noise
- 2 churn saves in the first month from immediate CS outreach on flagged feedback
- Complete searchable feedback database in Airtable with AI metadata on every item
- Notion roadmap page always has fresh, data-backed insight for prioritization discussions
Timeline
2026
Stack
Responsibilities
- Multi-source data aggregation architecture
- AI feedback categorization and sentiment analysis
- Retention risk detection from feedback signals
- Automated weekly insight generation pipeline
