{"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-05-21T02:07:41.420Z"},"content":[{"type":"documentation","id":"1b16f433-4237-4eea-9496-b53a09b88482","slug":"linear-research-integration","title":"Send Koji Insights to Linear: Auto-File Engineering Tickets from Customer Interviews","url":"https://www.koji.so/docs/linear-research-integration","summary":"Connect Koji to Linear so interviews that surface real customer pain points auto-create tagged Linear issues — with verbatim quotes, theme tags, quality scores, and direct links to the live interview attached. The guide covers the critical design decision (which interviews should become tickets) using filters on quality score, theme, structured-answer thresholds, and sentiment; the full Zapier setup; severity-based team routing; deduplication via 'Find Issue' lookups; and the direct Linear GraphQL approach for teams that outgrow Zapier. The result replaces the Slack-thread-to-screenshot-to-ticket workflow that loses customer context with a closed-loop research-to-execution pipeline.","content":"**TL;DR:** Wire Koji to Linear so every customer interview that surfaces a real pain point auto-creates a tagged Linear issue with the verbatim quote, theme, study link, and quality score attached. Setup takes about 20 minutes via Zapier (or 2–3 hours via Linear's GraphQL API directly). Most engineering teams report this single integration replaces the \"Slack thread → screenshot → ticket title from memory\" workflow that everyone hates, and dramatically increases the percentage of customer-driven tickets that actually get prioritized.\n\n## Why teams sync Koji to Linear\n\nLinear is where engineering work actually happens. Tickets there get triaged, sprinted, and shipped — which means anything that wants to influence the roadmap needs to live there. Research findings that never reach Linear effectively never reach the roadmap.\n\nThe traditional flow looks like this: PM watches an interview recording → takes notes in Notion → writes a Linear ticket from memory → engineering reads the ticket without context → builds something slightly different than what the customer described. By the time the feature ships, the link back to \"this is what Dana said in the August interview\" is gone, and so is any way to evaluate whether the feature actually solved the problem.\n\nA Koji → Linear sync replaces that whole chain with a webhook. Every completed Koji interview that surfaces a pain point can auto-create a Linear issue containing:\n\n- Verbatim customer quote (not a paraphrase)\n- Theme tag from Koji's AI analysis\n- Quality score (so engineering can deprioritize low-confidence signal)\n- Direct link back to the live Koji interview, so anyone can play the voice clip\n- Participant segment and metadata\n- Study context and AI summary\n\nThis is the modern alternative to manual ticket creation. Platforms like Koji automate moderation, transcription, theme extraction, and quality scoring; Linear becomes the surface where engineering executes against that evidence. The two pieces fit together cleanly through Linear's webhook-friendly architecture.\n\n## Integration paths\n\nThere are two production-ready ways to send Koji interviews to Linear:\n\n1. **Zapier (recommended)** — point-and-click, ~20 minutes, supports filters, no code\n2. **Linear GraphQL API (advanced)** — write a webhook receiver that calls Linear's API directly\n\nMost teams should start with Zapier. The GraphQL path is worth it once you need rich formatting (markdown tables, attachments) or you're sending more than a few thousand tickets per month.\n\n## Prerequisites\n\n- A Koji study with at least one completed interview\n- A Linear workspace where you have permission to create issues in at least one team\n- A Zapier account (the Starter plan is needed for filters)\n- About 20 minutes\n\n## Step 1: Decide which interviews become tickets\n\nThis is the most important design decision and the one most teams skip. Do NOT auto-create a Linear ticket for every interview — your engineering backlog will explode and the signal-to-noise will tank within a week.\n\nThe patterns that work in production:\n\n- **Filter by quality score.** Only create tickets from interviews with quality score 4 or higher (out of 5). This drops gibberish and accidental submissions automatically.\n- **Filter by theme.** Only create tickets when Koji's AI detects a theme that maps to engineering work — e.g. \"bug-report\", \"performance-issue\", \"missing-feature\". Themes like \"general-praise\" or \"competitor-mention\" should never become tickets.\n- **Filter by structured-answer threshold.** If your study has a scale question like \"How easy was this?\", auto-create a ticket only when the participant rates it 2 or below — those are the real problems worth filing.\n- **Filter by sentiment.** Negative-sentiment interviews are usually the higher-leverage ones to file.\n- **Combine filters.** \"Quality score 4+ AND theme contains 'bug' OR scale rating <= 2\" is the kind of multi-condition filter Zapier handles natively.\n\nWrite down which filter you want before you start the integration. You can always change it later, but having a default rule prevents the first-day backlog explosion.\n\n## Step 2: Set up the Koji webhook\n\nIn Koji:\n\n1. Open the study you want to monitor\n2. Go to Settings → Webhooks (or the Webhooks tab in the study editor)\n3. Add a new webhook destination — leave the URL field empty for now\n\nYou'll paste the Zapier URL here in the next step.\n\n## Step 3: Create the Zap\n\nIn Zapier:\n\n1. New Zap → Trigger: **Webhooks by Zapier** → **Catch Hook**\n2. Zapier gives you a URL. Copy it.\n3. Paste it into the Koji webhook destination, save the Koji study, then fire a \"Test webhook\" from Koji\n4. Back in Zapier, click \"Test trigger\" — you should see a real Koji payload with study ID, interview ID, quality score, themes, structured answers, transcript text, and the public URL\n\n## Step 4: Add the filter step\n\nClick \"+ Add step\" → **Filter by Zapier**. Add your conditions. For the most common \"bug-or-pain\" filter:\n\n- `interview.quality_score` is greater than or equal to `4`\n- AND `interview.themes` text contains `bug` OR `pain` OR `frustration` OR `confusion`\n\nYou can chain ANDs and ORs natively. Zapier's filter UI makes this easier than writing it in code.\n\n## Step 5: Create the Linear issue\n\nAdd a new action: **Linear → Create Issue**. Connect your Linear account. Configure:\n\n- **Team:** the engineering team that owns this study's surface area (e.g. \"Onboarding\", \"Billing\", \"Search\")\n- **Title:** map to `interview.headline` if Koji generates one, otherwise build it from the theme + participant ID — e.g. `[Research] {theme}: {participant_name}`\n- **Description:** the most important field. Build it from these blocks (markdown supported in Linear):\n\n```\n**Quote:** \"{interview.headline_quote}\"\n\n**Theme:** {interview.themes}\n**Quality score:** {interview.quality_score}/5\n**Segment:** {interview.metadata.segment}\n**Study:** {study.title}\n\n**AI summary:** {interview.ai_summary}\n\n**Listen to the interview:** {interview.public_url}\n\n---\nAuto-filed from Koji. Edit or close if not actionable.\n```\n\n- **Labels:** map to `interview.themes` — Linear will create the labels on the fly if they don't exist (or you can pre-create the labels you care about)\n- **Priority:** map to a formula — if quality score >= 5 then \"High\", if 4 then \"Medium\", else \"Low\"\n- **Assignee:** leave empty so triage handles it (most teams) or set to a designated triage owner\n\nTest the action. The Linear issue should appear in your team's inbox within seconds.\n\n## Step 6: Turn the Zap on and tune\n\nToggle the Zap to \"On.\" Watch it for a week and tune the filter based on what you see. The most common adjustment: tightening the theme list because your initial filter was too permissive.\n\n## Patterns that pay off\n\n### Auto-link to existing issues\n\nAdd a Zapier \"Find Issue\" step before \"Create Issue.\" Search by theme tag. If an issue already exists for that theme, add a comment to the existing one instead of creating a duplicate. This is huge for keeping the backlog clean when the same pain shows up across multiple interviews.\n\n### Severity-based team routing\n\nUse a Zapier Paths step. Route interviews with the `bug` theme to the platform team, `pricing` to the growth team, and `onboarding` to the activation team. Each path can have its own filter and its own Linear team mapping.\n\n### Auto-close confirmation tickets\n\nWhen Koji's AI detects a `feature-praise` theme that mentions a recently shipped feature, you can auto-comment on the Linear issue that originally tracked the work and close it. This closes the customer-research loop without any human intervention.\n\n### Weekly digest issues\n\nInstead of one ticket per interview, run a Zapier Digest action: aggregate all interviews from a study for the past 7 days, then create one Linear ticket with all the quotes grouped by theme. This is the right pattern for steady-state insight ingestion vs. urgent bug surfacing.\n\n### Block deploys on research signal\n\nPair this with your release process: a Linear ticket tagged `block-release` from a Koji interview can fail your release checklist. This is overkill for most teams but useful for safety-critical products.\n\n## The Linear API approach (if you outgrow Zapier)\n\nLinear's GraphQL API is one of the cleanest issue-tracker APIs around. If you outgrow Zapier:\n\n1. Stand up a webhook receiver (Vercel, Cloudflare Workers, AWS Lambda)\n2. Verify Koji's webhook signature (HMAC)\n3. Transform the payload into a Linear `IssueCreateInput`\n4. Call `issueCreate` via Linear's GraphQL endpoint with a personal API key\n5. Optionally: call `issueLabelCreate` to ensure labels exist before tagging\n\nThis typically takes a senior engineer half a day. The advantage is markdown formatting, file attachments, custom views, and per-issue webhook callbacks back to Koji for closed-loop research.\n\n## Common pitfalls\n\n- **Label explosion.** If you map every Koji theme to a Linear label without filtering, your label list will balloon. Pre-create the 10–15 labels you care about and let Zapier skip the rest.\n- **Quote truncation.** Linear issue titles are limited to ~256 characters. Use a Zapier Formatter step to truncate the headline before mapping.\n- **Stale evidence.** Six months in, the original interview may be archived in Koji. Make sure your Linear ticket includes the participant ID and study ID — not just the URL — so the evidence can be re-fetched even if the URL changes.\n- **Triage burnout.** Even with good filters, expect 5–15 tickets per week from a moderately active research program. Assign a rotating triage role so no one person owns the whole queue.\n- **Customer privacy.** Verbatim quotes can contain identifying information. If your participants are under a strict NDA, anonymize quotes in the Zapier Formatter step before they hit Linear.\n\n## Why this changes how engineering teams ship\n\nThe biggest lift from a Koji + Linear integration is not the time saved on ticket creation — it's the change in what gets prioritized. Once every backlog ticket has a verbatim customer quote attached, the discussion in standup shifts from \"should we build this?\" to \"how do we solve what this person said?\" Quality scores let you weight signal honestly. Theme tags let you batch similar pains. And the link back to the live interview means anyone — engineer, designer, exec — can play the voice clip and form their own opinion in 30 seconds. That's a fundamentally different decision-making loop than the one most teams have today, and it's the kind of compounding advantage that the modern AI-native research stack makes possible.\n\n## Related resources\n\n- [Connect Koji to Zapier](/docs/zapier-research-automation) — the foundational webhook + Zapier guide\n- [Sync Koji Research Insights to Notion](/docs/notion-research-integration) — pair with Linear for full research-to-execution flow\n- [Sync Koji to HubSpot](/docs/hubspot-research-integration) — push insights to sales workflows\n- [Send Research Insights to Slack](/docs/slack-research-insights-integration) — real-time notifications\n- [Koji Webhook Setup](/docs/webhook-setup) — payload reference\n- [Koji Structured Questions Guide](/docs/structured-questions-guide) — the 6 question types Linear will receive\n- [Closing the Loop on Customer Feedback](/docs/closing-the-loop-customer-feedback) — turn shipped tickets into follow-up interviews\n- [User Research API](/docs/user-research-api-guide) — full API reference for direct integration\n","category":"API Reference","lastModified":"2026-05-20T03:27:15.913392+00:00","metaTitle":"Sync Koji to Linear: Auto-File Tickets from Customer Interviews","metaDescription":"Connect Koji to Linear via Zapier or GraphQL API to auto-create Linear issues from completed AI interviews. Filter by quality score and theme; attach verbatim quotes and study links.","keywords":["koji linear integration","linear customer feedback","auto-create linear tickets","customer interview to linear","research linear automation","linear webhook research","koji zapier linear","product feedback linear"],"aiSummary":"Connect Koji to Linear so interviews that surface real customer pain points auto-create tagged Linear issues — with verbatim quotes, theme tags, quality scores, and direct links to the live interview attached. The guide covers the critical design decision (which interviews should become tickets) using filters on quality score, theme, structured-answer thresholds, and sentiment; the full Zapier setup; severity-based team routing; deduplication via 'Find Issue' lookups; and the direct Linear GraphQL approach for teams that outgrow Zapier. The result replaces the Slack-thread-to-screenshot-to-ticket workflow that loses customer context with a closed-loop research-to-execution pipeline.","aiPrerequisites":["A Koji study with at least one completed interview","A Linear workspace with issue-creation permission","A Zapier account (Starter plan recommended for filters)","About 20 minutes"],"aiLearningOutcomes":["Choose the right filter rules so your Linear backlog doesn't explode","Set up a Zapier Catch Hook for Koji interview completions","Build a Linear issue description that includes verbatim quotes and metadata","Map quality scores to Linear priority automatically","Route different themes to different Linear teams","Deduplicate issues using Linear's Find Issue lookup","Migrate to direct Linear GraphQL API when volume justifies it","Anonymize quotes for privacy-sensitive participants"],"aiDifficulty":"intermediate","aiEstimatedTime":"12 min read"}],"pagination":{"total":1,"returned":1,"offset":0}}