Back to docs
API Reference

Send Research Insights to Slack: Real-Time Customer Interview Notifications via Webhooks

Get customer interview insights from Koji into your Slack workspace. There is no native Slack app and Koji has no outbound webhooks, so you either paste the study's public report link into a channel, or have your own backend, Zapier, n8n or Make poll the Koji read API and post to a Slack incoming webhook. Step-by-step setup with a working recipe.

The 60-second answer

Koji 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.

If 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.

Why pipe research into Slack?

Research 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.

With Koji feeding a Slack channel you get:

  • Near-real-time visibility: every completed interview posted within a minute of finishing
  • Cross-functional reach — engineers, designers, support, and execs all see the same raw quote
  • Faster product decisions — a single quote in #product-channel can shortcut a 30-minute meeting
  • Customer obsession at scale — your CEO can lurk on #voice-of-customer and stay close to users without scheduling a single call

Koji'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.

What your poller can detect today

Koji emits no events, so the poller decides what counts as news. The states worth watching for, all visible on the read endpoint:

  • status is completed: the interview finished, and the transcript and structured answers are ready
  • analysis is populated: themes, the summary and the quality score are ready too
  • the quality score is 3 or above, the same threshold Koji bills at
  • a report exists for the study, so you can link straight to it

Themes 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.

For most teams the high-signal moment is an interview arriving with its analysis. Set up one channel for that.

Setup: Slack → Koji in 3 steps

Step 1 — Create the Slack incoming webhook

  1. In Slack, go to Apps → search for Incoming Webhooks → click Add to Slack.
  2. 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.
  3. Slack generates a unique URL like https://hooks.slack.com/services/T0000/B0000/XXXXXXXX. Copy it.

Step 2 — Decide on payload shape

Slack's incoming webhooks accept either a plain {"text": "..."} payload or rich Block Kit JSON. The interview you read back from Koji looks roughly like:

{
  "status": "completed",
  "study_id": "abc123",
  "study_name": "B2B onboarding research",
  "respondent_id": "anon_xyz",
  "duration_seconds": 720,
  "quality_score": 4,
  "summary": "Participant struggled with onboarding step 3...",
  "top_quote": "I almost gave up at the import screen.",
  "themes": ["onboarding friction", "data import"],
  "transcript_url": "https://www.koji.so/p/abc123/r/anon_xyz"
}

Since the shapes differ, you need a tiny middleware that reformats Koji's JSON into Slack's format.

Step 3 — Connect with one of three integration patterns

Option A — No-code (5 minutes)

Use 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:

New interview completed for {{study_name}}
Quote: "{{top_quote}}"
Themes: {{themes}}
Quality: {{quality_score}}/5
Full transcript: {{transcript_url}}

Option B — Lightweight serverless (15 minutes)

Deploy 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 guide.

Option C — Direct via the Headless API (advanced)

If you are already using the Headless API, 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.

Step 4: Give the poller a key and a list

There 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 and Rate Limits and CORS: a key allows 60 requests a minute by default.

Run the poller once by hand against an interview that has already finished. Within a few seconds you should see a message appear in Slack.

Five Slack research workflows worth setting up

1. Interview firehose

Channel: #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.

2. Churn-signal alerting

Channel: #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.

3. Feature-request capture

Channel: #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.

4. Daily research digest

Channel: #research-daily. Posts a 5pm summary every day: number of interviews completed, top 3 themes, top 3 quotes, quality score average. Ideal for execs.

5. Stakeholder mentions

Channel: 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.

Why a live channel beats the "export CSV every Monday" workflow

CapabilityManual CSV exportReport link or a Slack poller
Latency1–7 daysAbout a minute
DistributionEmail attachment to 3 peopleWhole channel sees it
DiscoverabilitySits in someone's inboxSearchable in Slack forever
Action timeDays (waits for next standup)Immediate (link → discussion)
Setup timeWeekly recurring choreOne-time, runs forever

Platforms like Koji eliminate the "research bottleneck" entirely. Insights flow into the same channels where decisions already happen.

Filtering noise: only Slack the signal

Two controls keep your channels useful:

  1. 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.
  2. 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.

For sensitive employee research running in Anonymous Mode 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.

Combining with Koji's 6 structured question types

When your study uses Koji's structured questions (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:

"Sarah scored NPS as 9/10. Top reason for the 9: 'The new dashboard saves me 2 hours a week.'"

…instead of just an unstructured quote. Single, parseable, ready to ingest into your analytics warehouse alongside the conversation.

Security best practices

  • 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.
  • Store the Slack webhook URL as a secret in your environment (not in code). Anyone with the URL can post to your channel.
  • 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.
  • Rotate keys quarterly. Issue a fresh per-study API key and retire the old one.
  • Apply Koji rate limits — see Rate Limits and CORS. High-volume studies (1,000+ interviews/day) should batch events through a queue.

What about Microsoft Teams, Discord, or Mattermost?

The 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.

Plan availability and pricing

The 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 for the full feature matrix.

Related Resources

Further reading on the blog

<!-- further-reading:blog -->

Related Articles

Customer Interview Cadence: How Often Should You Talk to Users? (2026)

Set the right customer interview cadence for your team — from one a week (Teresa Torres' baseline) to daily continuous discovery — and how AI moderation makes higher cadences sustainable.

Google Sheets + Koji: Launch AI Interviews from a Spreadsheet and Auto-Log Every Insight Back

Turn a Google Sheet of contacts into a batch of Koji AI interviews, and auto-append every completed interview's themes, sentiment, quality score, and transcript link back to a live results tab — no data stack required.

Headless API Overview

Manage interviews programmatically with the Koji REST API — start, message, and complete interviews from your own code.

How the Quality Gate Works

Understand Koji's quality gate — conversations scoring below 3/5 are completely free and don't consume credits, protecting your research budget.

How to Automate User Research: Build a Pipeline That Runs 24/7

A step-by-step guide to automating user research — from setting up AI-moderated interviews to continuous discovery pipelines that generate insights every week without manual effort.

Sync Koji Customer Interviews to HubSpot: Live Insights on Every Contact

Push Koji interview transcripts, themes, and quality scores onto HubSpot contact and company records in real time using webhooks and the HubSpot API.

Jira + Koji: Auto-File Customer-Research-Backed Tickets and Close the Loop on Every Fix

Send Koji AI interview themes, customer quotes, and quality scores directly into Jira as fully-formed tickets — and pipe Jira ticket resolution back to the participants who reported it.

Send Koji Insights to Linear: Auto-File Engineering Tickets from Customer Interviews

Wire Koji to Linear so every customer interview that surfaces a real pain point auto-creates a tagged Linear issue — with verbatim quote, theme, study link, and quality score attached. Replace the Slack-thread-to-screenshot-to-ticket workflow with a webhook.

Connect Koji to Make (Make.com): Build No-Code Customer Research Automations

Use Make (formerly Integromat) scenarios to trigger Koji AI interviews from any app and route themes, sentiment, and transcripts to Slack, Notion, your CRM, or a spreadsheet — no code, using HTTP and Webhooks modules.

MCP Authentication & Security

How Koji MCP authenticates with OAuth 2.1 and PKCE. Covers the authorization flow, token lifecycle, security model, data privacy, and how to revoke access.

Sync Koji Research Insights to Notion: Build a Self-Updating Research Repository

Connect Koji to Notion via Zapier (or webhook) so every completed AI interview becomes a fresh Notion page — with transcript, structured answers, themes, quality score, and AI summary attached. Build a research repository that updates itself.

Plan Comparison Guide

Compare every way to buy Koji credits: pay as you go, one-time packs, Starter, Pro and Scale plans, and Enterprise. Find the right fit for your research needs.

Rate Limits and CORS

Per-key rate limits, X-RateLimit headers, 429 handling with backoff, quota errors, and how CORS works on the Koji API.

Real-Time Research Insights: How to See Themes, Quotes, and Quality Scores as Interviews Complete

Stop waiting weeks for analysis — modern AI research platforms surface themes, structured-question distributions, sentiment, and quality-scored quotes the moment each interview ends. Here is how real-time research insights work in Koji and how to design studies that take advantage of them.

Research Automation: How to Build Real-Time Research Pipelines with Webhooks

Build automated research pipelines on the Koji API today: event-triggered interviews, completion detection, and insight routing, no native webhooks required.

Segment + Koji: Trigger AI Interviews from CDP Audiences and Sync Insights Back as Traits

Use Segment Audiences and events to trigger Koji AI-moderated interviews, then pipe themes, sentiment, and quality scores back into Segment as track events and user traits that fan out to every downstream tool.

Structured Questions in AI Interviews

Mix quantitative data collection — scales, ratings, multiple choice, ranking — with AI-powered conversational follow-up in a single interview.

Webhook Setup

Koji has no native outbound webhooks yet. Three working alternatives: polling the read endpoint, embed completion events, and automation platforms.

Connect Koji to Zapier: Automate Customer Research Workflows in Minutes

Route every completed AI customer interview from Koji into 6,000+ Zapier apps — including Notion, Linear, Salesforce, Airtable, and Gmail. A step-by-step integration guide.

Zendesk + Koji: Trigger AI Interviews from Support Tickets and Sync Insights Back to Every Conversation

Use Zendesk triggers and webhooks to launch Koji AI-moderated interviews from solved tickets, low CSAT, or specific tags — then post themes, sentiment, and a transcript link back onto the ticket automatically.