{"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-24T11:40:36.616Z"},"content":[{"type":"documentation","id":"9ffa24da-5db9-43a0-9b31-bf0a37164926","slug":"salesforce-research-integration","title":"Sync Koji AI Interviews to Salesforce: Customer Insights on Every Account, Contact, and Opportunity","url":"https://www.koji.so/docs/salesforce-research-integration","summary":"Pipe Koji AI-moderated interview output into Salesforce in three steps: (1) create custom Contact fields (Latest_Customer_Quote__c, Interview_Themes__c, Interview_Sentiment__c, Interview_Quality_Score__c, Transcript_URL__c), (2) deploy a webhook forwarder that verifies the Koji signature and PATCHes those fields via the Salesforce REST API using a Connected App with the OAuth 2.0 Client Credentials Flow, (3) subscribe to the interview.analysis_ready event in Koji webhook settings. End-to-end latency is under 5 seconds. The integration unlocks Salesforce-native workflows: churn risk flows triggered on negative sentiment, discovery-completeness gates on Opportunities, theme-based VOC reports, and pre-renewal CSM briefs — patterns that traditional survey + CRM integrations cannot deliver because they lack AI moderation, theme extraction, and quality scoring. A no-code Zapier path is also covered. Anonymous-mode interviews are handled correctly (no email present, no write). Webhooks require the Interviews plan or higher; the Insights plan uses the Zapier route.","content":"# Sync Koji AI Interviews to Salesforce\n\n**Answer first:** You can pipe every Koji AI-moderated interview into Salesforce in three steps — (1) create three or four custom fields on the Contact and Account objects (Latest_Customer_Quote__c, Interview_Themes__c, Interview_Quality_Score__c, Transcript_URL__c), (2) deploy a small webhook forwarder that verifies the Koji signature and PATCHes those fields via the Salesforce REST API, and (3) subscribe to Koji's `interview.analysis_ready` event. End-to-end latency from interview completion to Salesforce update is typically under 5 seconds. With tools like Koji, your reps no longer need to dig through transcripts — the customer's own words live on the account record.\n\nIf you're tired of customer voice being trapped in survey dashboards, this is the integration that closes the loop between your AI-native research stack and the system of record your revenue team already runs on.\n\n## Why connect Koji to Salesforce\n\nSalesforce is the system of record for B2B revenue. But Salesforce alone can only tell you *what* a customer did (deals, support tickets, product usage events) — it cannot tell you *why* they did it. Traditional CX programs try to fill that gap with NPS surveys piped into custom fields, but a numeric score with one open-text field is a very thin signal compared with a 12-minute conversational interview moderated by an AI that knows when to probe.\n\nKoji is purpose-built to generate that deeper signal at scale. The AI interviewer asks the questions you scope, follows up automatically when answers are vague, scores each conversation for quality (only 3+ conversations count toward usage), extracts themes and sentiment, and writes back a clean structured artifact. Pipe that into Salesforce and three things change:\n\n- **Account executives** open an opportunity and immediately see the prospect's own words about their current pain, who else is in the buying committee, and what alternatives they're evaluating — no waiting for a researcher to summarize.\n- **Customer success managers** get an automatic alert in the account feed when a renewal-cycle interview comes back with negative sentiment or a churn-risk theme, weeks before the renewal date.\n- **Revenue operations** can build reports and dashboards that segment customers by themes extracted from interviews (e.g., \"all accounts where 'integration friction' surfaced in the last 90 days\") — something no survey tool can do because surveys do not extract themes natively.\n\n## What the integration writes back\n\nEvery time an interview reaches the `analysis_ready` state, Koji emits a webhook with a structured payload. The integration writes the following onto the matching Salesforce Contact (and rolls up to the parent Account):\n\n- **Latest customer quote** — The single most representative pull-quote, picked by the AI consultant.\n- **Interview themes** — Comma-separated list of top themes extracted from the conversation.\n- **Sentiment** — `positive`, `neutral`, or `negative`, with optional sub-scores per theme.\n- **Quality score** — 1–5, the same score Koji uses for credit gating. Below 3 = filtered.\n- **Transcript URL** — A signed link to the full transcript inside Koji, for reps who want context.\n- **Completion timestamp** — Used to power \"last spoken to\" filters in pipeline reports.\n\nOptionally you can map structured-question answers to dedicated fields. Koji supports six structured question types — `open_ended`, `scale`, `single_choice`, `multiple_choice`, `ranking`, and `yes_no` (see the [structured questions guide](/docs/structured-questions-guide)) — and each carries a stable question ID, so a single integration build will continue to work as you tweak interview wording.\n\n## Step 1 — Create the Salesforce custom fields\n\nIn Salesforce Setup, navigate to **Object Manager → Contact → Fields & Relationships** and create the following:\n\n| API Name | Type | Length | Notes |\n|---|---|---|---|\n| `Latest_Customer_Quote__c` | Long Text Area | 4000 | Visible on layouts |\n| `Interview_Themes__c` | Text | 255 | Comma-separated themes |\n| `Interview_Sentiment__c` | Picklist | — | positive / neutral / negative |\n| `Interview_Quality_Score__c` | Number | 1, 0 | 1–5 scale |\n| `Transcript_URL__c` | URL | 255 | Signed Koji link |\n| `Last_Koji_Interview_At__c` | Date/Time | — | Sort & filter |\n\nRepeat on the **Account** object if you want roll-up visibility, or create a Salesforce flow that propagates the Contact-level fields to the parent Account whenever the Contact is updated.\n\nAdd the new fields to your default Contact and Account page layouts so reps can see them without expanding \"Show more.\"\n\n## Step 2 — Deploy the webhook forwarder\n\nKoji webhooks are HMAC-signed and emit POST requests to a URL you control. The simplest production-grade pattern is a serverless function (Vercel Function, AWS Lambda, Cloudflare Worker) that:\n\n1. **Verifies the signature** using the shared secret from Koji webhook settings — never skip this; webhooks without signature verification are an injection vector.\n2. **Looks up the Salesforce Contact** by email (from the interview's respondent email) using a SOQL query: `SELECT Id FROM Contact WHERE Email = :email LIMIT 1`.\n3. **PATCHes the Contact** via `/services/data/vXX.0/sobjects/Contact/{id}` with the fields above.\n4. **Handles anonymous interviews** — if `respondent_email` is null (interview was run in anonymous mode), do not write back. Optionally log the event to a dead-letter queue for manual review.\n\nFor authentication to Salesforce, the recommended path is a **Connected App with the OAuth 2.0 Client Credentials Flow** (server-to-server). Avoid the username/password flow — it's deprecated and triggers security alerts in modern orgs.\n\nA single forwarder typically runs at <100ms p95 for the Salesforce write, well within Salesforce's API limits as long as you don't fire thousands of interviews concurrently. For high-volume programs, queue the events and write in micro-batches.\n\n## Step 3 — Subscribe to the Koji webhook event\n\nIn Koji, open **Settings → Webhooks → New Webhook** and:\n\n- Set the **Target URL** to your forwarder endpoint.\n- Subscribe to the **`interview.analysis_ready`** event (this fires once analysis finishes — not when the interview merely completes, so you receive themes and quality score together).\n- Optionally subscribe to **`interview.completed`** as well if you want a faster, \"transcript only\" write before the analysis arrives.\n- Save the signing secret and store it as an environment variable in your forwarder.\n\nThe full event reference lives in the [webhook setup](/docs/webhook-setup) doc, and the [research automation webhooks](/docs/research-automation-webhooks) page covers idempotency, retries, and replay.\n\n## No-code path — Zapier or Make\n\nIf you cannot run a serverless function, the same integration is buildable in Zapier or Make in under 30 minutes:\n\n1. Trigger: **Koji** (webhook) → `interview.analysis_ready`.\n2. Action: **Salesforce → Find Contact** by Email.\n3. Action: **Salesforce → Update Contact** with the mapped fields.\n4. Optional action: **Slack** post to a `#customer-voice` channel with the quote.\n\nThis path is what most early-stage teams pick when they don't yet have an engineering team to own the forwarder. See the [Zapier research automation](/docs/zapier-research-automation) doc for the full step-by-step.\n\n## Workflows that become possible\n\nOnce interview data flows into Salesforce, the Salesforce platform itself unlocks a set of automations that would be impossible with surveys:\n\n- **Churn risk flow** — When `Interview_Sentiment__c = 'negative'` AND the parent Account's ARR is above a threshold, create a high-priority Case routed to the CSM and post to a Slack channel.\n- **Discovery completeness scoring** — In Sales Cloud, populate a custom Opportunity field that says \"discovery interview complete\" only when an Account has at least N interviews with quality score ≥4 in the last 60 days. This becomes a forecast-stage gate.\n- **Voice-of-customer reports** — Build a Salesforce report that groups Accounts by themes pulled from interviews (`CONTAINS(Interview_Themes__c, 'onboarding')`) and intersects with deal stage. You now have a quantitative view of qualitative signal.\n- **Renewal pre-work** — Trigger an interview link 60 days before each renewal, write the result back, and brief the CSM with a pre-renewal call summary generated from the transcript.\n\n## Comparison: Koji + Salesforce vs survey-tool + Salesforce\n\nMost teams already have a Qualtrics, SurveyMonkey, or Typeform integration with Salesforce. Why replace it with Koji? Three concrete differences:\n\n- **Open-text quality**. Surveys collect a sentence. Koji's AI moderator probes — it sees a thin answer and asks the follow-up the human researcher would have asked. The \"Latest Customer Quote\" field ends up populated with substance, not \"it's fine.\"\n- **Built-in theme extraction**. With surveys, theming requires a separate tagging pass (or a manual researcher). Koji writes the themes directly. Salesforce filtering on themes becomes a native CRM operation, not a separate analytics workflow.\n- **Quality gating**. Surveys cannot tell whether the respondent took the survey seriously. Koji scores each interview 1–5 and only writes back the ones that pass the bar — keeping your CRM clean.\n\nIf you're still on a traditional survey + CRM pattern, the [convert survey to AI interview](/docs/convert-survey-to-ai-interview) guide walks through the migration without breaking your existing flows.\n\n## Plan requirements\n\nWebhooks and the headless API are available on the Interviews plan (€79/month, 79 credits/month) and Enterprise. The Insights plan (€29/month) does not include webhooks — for that tier, the Zapier route is the supported path. See the [plan comparison guide](/docs/plan-comparison-guide) for the full feature matrix and the [API authentication](/docs/api-authentication) doc to set up your first key.\n\n## Anonymous mode and compliance\n\nKoji supports a fully anonymous mode in which no respondent email is collected. For those interviews, the webhook payload arrives with `respondent_email = null` and your forwarder should skip the Salesforce write rather than try to match. For compliance-heavy industries, see the [GDPR-compliant AI user research](/docs/gdpr-compliant-ai-user-research) doc and the [anonymizing customer interview data](/docs/anonymizing-customer-interview-data) walkthrough.\n\n## Related Resources\n\n- [Structured Questions Guide](/docs/structured-questions-guide) — the six question types Koji supports and how each renders in reports.\n- [HubSpot Research Integration](/docs/hubspot-research-integration) — the same pattern, mapped to HubSpot CRM.\n- [Webhook Setup](/docs/webhook-setup) — full reference for Koji webhook events, signatures, and retries.\n- [Research Automation Webhooks](/docs/research-automation-webhooks) — idempotency, replay, and dead-letter patterns.\n- [Zapier Research Automation](/docs/zapier-research-automation) — no-code automations across your stack.\n- [CRM Research Integration Guide](/docs/crm-research-integration-guide) — broader patterns for any CRM.\n- [User Research API Guide](/docs/user-research-api-guide) — programmatic access to studies, interviews, and reports.","category":"API Reference","lastModified":"2026-05-24T03:16:30.916378+00:00","metaTitle":"Salesforce + Koji: Sync AI Customer Interview Insights to Every Account","metaDescription":"Connect Koji AI interviews to Salesforce via webhooks and the REST API. Push transcripts, themes, sentiment, and quality scores onto Contact and Account records in real time.","keywords":["salesforce integration","salesforce research integration","salesforce customer interview","salesforce voice of customer","crm research integration","salesforce webhook","salesforce ai research","customer insights salesforce"],"aiSummary":"Pipe Koji AI-moderated interview output into Salesforce in three steps: (1) create custom Contact fields (Latest_Customer_Quote__c, Interview_Themes__c, Interview_Sentiment__c, Interview_Quality_Score__c, Transcript_URL__c), (2) deploy a webhook forwarder that verifies the Koji signature and PATCHes those fields via the Salesforce REST API using a Connected App with the OAuth 2.0 Client Credentials Flow, (3) subscribe to the interview.analysis_ready event in Koji webhook settings. End-to-end latency is under 5 seconds. The integration unlocks Salesforce-native workflows: churn risk flows triggered on negative sentiment, discovery-completeness gates on Opportunities, theme-based VOC reports, and pre-renewal CSM briefs — patterns that traditional survey + CRM integrations cannot deliver because they lack AI moderation, theme extraction, and quality scoring. A no-code Zapier path is also covered. Anonymous-mode interviews are handled correctly (no email present, no write). Webhooks require the Interviews plan or higher; the Insights plan uses the Zapier route.","aiPrerequisites":["Koji account with at least the Interviews plan","Salesforce org with Setup access to create custom fields and a Connected App","Ability to run a small webhook forwarder (Vercel/Lambda/Cloudflare) or a Zapier seat","Familiarity with HMAC signature verification (or the Zapier route)"],"aiLearningOutcomes":["Map Koji interview fields onto Salesforce Contact and Account objects","Verify Koji webhook signatures before writing to Salesforce","Subscribe to the interview.analysis_ready event in Koji","Build churn-risk, discovery-completeness, and renewal-pre-brief workflows on top of the synced data","Handle anonymous-mode interviews safely"],"aiDifficulty":"intermediate","aiEstimatedTime":"18 minutes"}],"pagination":{"total":1,"returned":1,"offset":0}}