{"site":{"name":"Koji","description":"AI-native customer research platform that helps teams conduct, analyze, and synthesize customer interviews at scale.","url":"https://www.koji.so","contentTypes":["blog","documentation"],"lastUpdated":"2026-09-21T15:03:06.697Z"},"content":[{"type":"documentation","id":"ac1945fc-72a1-4fad-9a1f-8cb9ee4918e7","slug":"slack-research-insights-integration","title":"Send Research Insights to Slack: Real-Time Customer Interview Notifications via Webhooks","url":"https://www.koji.so/docs/slack-research-insights-integration","summary":"Koji has no native Slack app and no outbound webhooks, so there is nothing to register a callback URL with. The simplest route is to publish the study report and paste its public link into a channel, where it stays live as responses land. For per-interview messages: create a Slack incoming webhook URL, then have your own backend, Zapier, n8n or Make poll the Koji read endpoint on a schedule and post a Slack message when an interview comes back completed with its analysis. If the interview runs in the embed widget, the browser event koji:interview_completed can trigger the same post as a fast path. The API and MCP connector are available on every plan, including a free account. The interview you read back includes structured answers from all 6 question types, and an anonymous study carries no respondent name or email at all.","content":"## The 60-second answer\n\nKoji has no native Slack app and no outbound webhooks, so nothing inside Koji posts to Slack on its own. Two things do work today. The quickest: publish the study report and paste its public link into the channel. It stays live and updates as responses land, and anyone can open it without a Koji account. The automated one: create a Slack incoming webhook, then have your own backend, or Zapier, n8n or Make, poll the Koji read endpoint and post a message when an interview comes back completed with its analysis. A per-minute poll puts the quote, theme, quality score and transcript link in your channel about a minute after the interview ends.\n\nIf you have ever wished your team got pinged in Slack the moment a customer says \"I'd pay double for that feature\" — this is the workflow.\n\n## Why pipe research into Slack?\n\nResearch loses 80% of its impact when insights sit in a dashboard nobody opens. A 2024 Forrester study found that organizations with real-time research distribution channels were 3.5x more likely to act on customer feedback within a sprint, vs. teams reading quarterly reports.\n\nWith Koji feeding a Slack channel you get:\n\n- **Near-real-time visibility**: every completed interview posted within a minute of finishing\n- **Cross-functional reach** — engineers, designers, support, and execs all see the same raw quote\n- **Faster product decisions** — a single quote in `#product-channel` can shortcut a 30-minute meeting\n- **Customer obsession at scale** — your CEO can lurk on `#voice-of-customer` and stay close to users without scheduling a single call\n\nKoji's read endpoint returns the finished interview; Slack's incoming webhooks accept structured JSON; a 30-line poller or a scheduled no-code automation glues the two together. We will show both.\n\n## What your poller can detect today\n\nKoji emits no events, so the poller decides what counts as news. The states worth watching for, all visible on the read endpoint:\n\n- `status` is `completed`: the interview finished, and the transcript and structured answers are ready\n- `analysis` is populated: themes, the summary and the quality score are ready too\n- the quality score is 3 or above, the same threshold Koji bills at\n- a report exists for the study, so you can link straight to it\n\nThemes across interviews are not pushed anywhere. To alert on one, keep a running count in your own store as each interview lands, or read the study report and let its clustering do the work.\n\nFor most teams the high-signal moment is an interview arriving with its analysis. Set up one channel for that.\n\n## Setup: Slack → Koji in 3 steps\n\n### Step 1 — Create the Slack incoming webhook\n\n1. In Slack, go to **Apps** → search for **Incoming Webhooks** → click **Add to Slack**.\n2. Pick the channel where research insights should post. We recommend `#voice-of-customer` for general research, `#cs-alerts` for churn signals, and `#product-feedback` for feature requests.\n3. Slack generates a unique URL like `https://hooks.slack.com/services/T0000/B0000/XXXXXXXX`. Copy it.\n\n### Step 2 — Decide on payload shape\n\nSlack's incoming webhooks accept either a plain `{\"text\": \"...\"}` payload or rich Block Kit JSON. The interview you read back from Koji looks roughly like:\n\n```json\n{\n  \"status\": \"completed\",\n  \"study_id\": \"abc123\",\n  \"study_name\": \"B2B onboarding research\",\n  \"respondent_id\": \"anon_xyz\",\n  \"duration_seconds\": 720,\n  \"quality_score\": 4,\n  \"summary\": \"Participant struggled with onboarding step 3...\",\n  \"top_quote\": \"I almost gave up at the import screen.\",\n  \"themes\": [\"onboarding friction\", \"data import\"],\n  \"transcript_url\": \"https://www.koji.so/p/abc123/r/anon_xyz\"\n}\n```\n\nSince the shapes differ, you need a tiny middleware that reformats Koji's JSON into Slack's format.\n\n### Step 3 — Connect with one of three integration patterns\n\n**Option A — No-code (5 minutes)**\n\nUse a tool like Zapier, Make, or n8n with this recipe: run on a schedule every few minutes, call `GET https://www.koji.so/api/v1/interviews/{id}` for each interview you are waiting on, filter to the ones that are completed with an analysis, transform with a \"format JSON\" step, then post to Slack with the incoming webhook URL. There is no Koji trigger app to subscribe to. Map the Koji `top_quote` field into the Slack `text` field with formatting like:\n\n```\nNew interview completed for {{study_name}}\nQuote: \"{{top_quote}}\"\nThemes: {{themes}}\nQuality: {{quality_score}}/5\nFull transcript: {{transcript_url}}\n```\n\n**Option B — Lightweight serverless (15 minutes)**\n\nDeploy a small scheduled worker on Vercel, Cloudflare Workers, or AWS Lambda. The worker polls the Koji read endpoint, reformats each finished interview into Block Kit, and pushes it to Slack. A complete TypeScript example lives in our [Webhook Setup](/docs/webhook-setup) guide.\n\n**Option C — Direct via the Headless API (advanced)**\n\nIf you are already using the [Headless API](/docs/headless-api-overview), have your existing backend poll Koji for finished interviews and post to Slack alongside the work it already does (write to your data warehouse, update CRM, ping PagerDuty for negative sentiment, etc.). This is the route most enterprise customers go.\n\n### Step 4: Give the poller a key and a list\n\nThere is no webhook page in Koji to register a URL with. Instead, create an API key with the `interview:read` permission and keep it server side, then give your poller a list of interview ids to watch. Store each `interview_id` when you create or send an interview, and drop it from the list once you have posted it to Slack. See [API Key Permissions](/docs/api-permissions) and [Rate Limits and CORS](/docs/rate-limits-and-cors): a key allows 60 requests a minute by default.\n\nRun the poller once by hand against an interview that has already finished. Within a few seconds you should see a message appear in Slack.\n\n## Five Slack research workflows worth setting up\n\n### 1. Interview firehose\nChannel: `#voice-of-customer`. Trigger: the poller sees an interview completed with quality_score 3 or above. Posts the top quote, themes, and transcript link. Keeps the whole team close to customers.\n\n### 2. Churn-signal alerting\nChannel: `#cs-alerts`. Trigger: the poller matches the interview's themes against `cancel|leaving|switching|too expensive`. Tags your CS lead. Pulls churn signals out of noisy data immediately.\n\n### 3. Feature-request capture\nChannel: `#product-feedback`. Trigger: the poller matches themes against `wish|need|missing|wanted`. Auto-creates Linear tickets via the Linear Slack app. Closes the loop from interview to backlog.\n\n### 4. Daily research digest\nChannel: `#research-daily`. Posts a 5pm summary every day: number of interviews completed, top 3 themes, top 3 quotes, quality score average. Ideal for execs.\n\n### 5. Stakeholder mentions\nChannel: project-specific (e.g., `#proj-checkout-redesign`). Filters interviews by `study_id` and posts to the matching project channel. Keeps domain stakeholders in the loop without spamming everyone.\n\n## Why a live channel beats the \"export CSV every Monday\" workflow\n\n| Capability | Manual CSV export | Report link or a Slack poller |\n|---|---|---|\n| Latency | 1–7 days | About a minute |\n| Distribution | Email attachment to 3 people | Whole channel sees it |\n| Discoverability | Sits in someone's inbox | Searchable in Slack forever |\n| Action time | Days (waits for next standup) | Immediate (link → discussion) |\n| Setup time | Weekly recurring chore | One-time, runs forever |\n\nPlatforms like Koji eliminate the \"research bottleneck\" entirely. Insights flow into the same channels where decisions already happen.\n\n## Filtering noise: only Slack the signal\n\nTwo controls keep your channels useful:\n\n1. **Quality gate**: every conversation gets a 1 to 5 quality score, and only 3 and above is billed. Have the poller skip anything below 3 so low-effort or abandoned interviews never reach Slack. See [How the Quality Gate Works](/docs/how-the-quality-gate-works).\n2. **Theme thresholds**: there is no theme event to configure, so keep a running count in your own store and post only once 3 or more respondents have raised the same theme. Prevents single-data-point overreaction.\n\nFor sensitive employee research running in [Anonymous Mode](/docs/anonymous-employee-research-ai-interviews) there is nothing to strip: the lead form is off, so the interview carries no name or email and your Slack message can only ever be theme-level.\n\n## Combining with Koji's 6 structured question types\n\nWhen your study uses Koji's [structured questions](/docs/structured-questions-guide) (open_ended, scale, single_choice, multiple_choice, ranking, yes_no), the interview you read back includes the exact structured answer for every question. This means your Slack message can say:\n\n> \"Sarah scored NPS as 9/10. Top reason for the 9: 'The new dashboard saves me 2 hours a week.'\"\n\n…instead of just an unstructured quote. Single, parseable, ready to ingest into your analytics warehouse alongside the conversation.\n\n## Security best practices\n\n- **Keep the Koji API key server side.** It carries read access to your studies, so it never belongs in browser code or in a client-side automation step.\n- **Store the Slack webhook URL as a secret** in your environment (not in code). Anyone with the URL can post to your channel.\n- **Use a per-study webhook URL** if you have sensitive studies. Slack lets you create unlimited incoming webhooks; isolating them per channel limits blast radius.\n- **Rotate keys quarterly.** Issue a fresh per-study API key and retire the old one.\n- **Apply Koji rate limits** — see [Rate Limits and CORS](/docs/rate-limits-and-cors). High-volume studies (1,000+ interviews/day) should batch events through a queue.\n\n## What about Microsoft Teams, Discord, or Mattermost?\n\nThe same pattern works. All three accept incoming webhooks. Replace the Slack URL with their equivalents. The Koji side is identical: your poller simply points at a different destination URL.\n\n## Plan availability and pricing\n\nThe API and the MCP connector are available on every plan, including a free account, and outbound webhooks are not available yet. Interviews start as low as €1 per qualified interview, and €3 per qualified voice interview. Reading interviews is not metered: you can poll as often as the rate limit allows without additional cost. See the [plan comparison guide](/docs/plan-comparison-guide) for the full feature matrix.\n\n## Related Resources\n\n- [Webhook Setup](/docs/webhook-setup): why there are no outbound webhooks yet, with polling and embed-event code samples\n- [Research Automation](/docs/research-automation-webhooks): building near-real-time research pipelines\n- [Headless API Overview](/docs/headless-api-overview) — running Koji programmatically\n- [Structured Questions in AI Interviews](/docs/structured-questions-guide) — the 6 question types that produce parseable data\n- [How to Automate User Research](/docs/how-to-automate-user-research) — building 24/7 research pipelines\n- [MCP Authentication & Security](/docs/mcp-authentication-security): keeping your Koji keys and tokens safe\n- [Real-Time Research Insights](/docs/real-time-research-insights) — the Koji insights dashboard\n\n## Further reading on the blog\n\n- [Best AI Tools for UX Research in 2026: The Complete Buyer's Guide](/blog/best-ai-tools-ux-research-2026) — The UX research AI tool landscape has exploded. This guide maps the best AI tools for every phase of the research workflow in 2026 — from pl\n- [The UX Researcher's Guide to Scaling Research with AI (2026)](/blog/ux-researcher-guide-scaling-with-ai-2026) — Demand for user research has never been higher — but researcher headcount hasn't kept pace. Here's how UX researchers are using AI to scale \n- [Why AI Interviewers Are the Future of Customer Research](/blog/why-ai-interviewers-are-the-future-of-customer-research) — AI interviewers are transforming how product teams conduct customer research, enabling conversations at scale without sacrificing depth or q\n\n<!-- further-reading:blog -->\n","category":"API Reference","lastModified":"2026-09-20T18:39:49.390886+00:00","metaTitle":"Slack Integration: Send Research Insights to Slack via Webhooks | Koji","metaDescription":"Get Koji customer interview insights into Slack channels. No native Slack app: paste the public report link, or poll the Koji API and post to a Slack incoming webhook. Setup, code examples, and 5 workflows.","keywords":["slack research integration","customer feedback slack","research insights slack","webhook slack","koji webhooks","slack notifications research","user research automation","customer interview alerts","voice of customer slack","real-time research"],"aiSummary":"Koji has no native Slack app and no outbound webhooks, so there is nothing to register a callback URL with. The simplest route is to publish the study report and paste its public link into a channel, where it stays live as responses land. For per-interview messages: create a Slack incoming webhook URL, then have your own backend, Zapier, n8n or Make poll the Koji read endpoint on a schedule and post a Slack message when an interview comes back completed with its analysis. If the interview runs in the embed widget, the browser event koji:interview_completed can trigger the same post as a fast path. The API and MCP connector are available on every plan, including a free account. The interview you read back includes structured answers from all 6 question types, and an anonymous study carries no respondent name or email at all.","aiPrerequisites":["Koji account with webhooks enabled","Slack workspace admin access","Basic familiarity with REST APIs (or a no-code tool like Zapier)"],"aiLearningOutcomes":["Create a Slack incoming webhook and drive it from a poller on the Koji read API","Map the Koji interview payload into Slack Block Kit format","Set up 5 production research workflows in Slack","Keep your Koji API key and Slack webhook URL out of client code","Filter noise using the quality score and your own theme thresholds"],"aiDifficulty":"intermediate","aiEstimatedTime":"10 min read"}],"pagination":{"total":1,"returned":1,"offset":0}}