Back to docs
API Reference

Sync Koji AI Interviews to Salesforce: Customer Insights on Every Account, Contact, and Opportunity

Push interview transcripts, AI themes, sentiment, and quality scores from Koji into Salesforce with a scheduled worker on the Koji read API and the Salesforce REST API — so account executives, customer success managers, and revenue ops teams act on customer evidence inside the CRM they already live in.

Answer first: Koji has no outbound webhooks yet, so this is a scheduled pull rather than a push, and it still takes 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 sync worker that PATCHes those fields via the Salesforce REST API, and (3) have that worker poll Koji's read endpoint and act when an interview comes back completed with its analysis present. A per-minute poll puts the record in Salesforce within about a minute of the interview finishing. With tools like Koji, your reps no longer need to dig through transcripts — the customer's own words live on the account record.

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

Why connect Koji to Salesforce

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

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

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

What the integration writes back

When a polled interview comes back completed with its analysis attached, the worker writes the following onto the matching Salesforce Contact (and rolls up to the parent Account):

  • Latest customer quote — The single most representative pull-quote, picked by the AI consultant.
  • Interview themes — Comma-separated list of top themes extracted from the conversation.
  • Sentiment — positive, neutral, or negative, with optional sub-scores per theme.
  • Quality score — 1–5, the same score Koji uses for credit gating. Below 3 = filtered.
  • Transcript URL — A signed link to the full transcript inside Koji, for reps who want context.
  • Completion timestamp — Used to power "last spoken to" filters in pipeline reports.

Optionally 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) — and each carries a stable question ID, so a single integration build will continue to work as you tweak interview wording.

Step 1 — Create the Salesforce custom fields

In Salesforce Setup, navigate to Object Manager → Contact → Fields & Relationships and create the following:

API NameTypeLengthNotes
Latest_Customer_Quote__cLong Text Area4000Visible on layouts
Interview_Themes__cText255Comma-separated themes
Interview_Sentiment__cPicklist—positive / neutral / negative
Interview_Quality_Score__cNumber1, 01–5 scale
Transcript_URL__cURL255Signed Koji link
Last_Koji_Interview_At__cDate/Time—Sort & filter

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

Add the new fields to your default Contact and Account page layouts so reps can see them without expanding "Show more."

Step 2: Deploy the sync worker

The simplest production-grade pattern is a scheduled serverless function (Vercel Function, AWS Lambda, Cloudflare Worker) that:

  1. Fetches each pending interview with GET /api/v1/interviews/{id} and a server-side key holding the interview:read permission, and skips anything that is not yet completed with analysis present.
  2. 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.
  3. PATCHes the Contact via /services/data/vXX.0/sobjects/Contact/{id} with the fields above.
  4. 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.

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

A single worker 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. Mind the Koji side too: each API key allows 60 requests per minute by default, so spread large batches across cycles. For high-volume programs, queue the writes and send them in micro-batches.

Step 3: Track pending interviews and poll them

There is no webhook settings page to point at your endpoint, so the worker keeps its own list:

  • When you create an interview or send its link, store the interview_id and your own external_id in a pending table.
  • On each scheduled run, call GET /api/v1/interviews/{id} for every pending id with an Authorization: Bearer header.
  • Write to Salesforce when status is completed and analysis is present, so themes, sentiment and the quality score arrive together with the transcript. If you want a faster, "transcript only" write, act on completed alone and update the record again once the analysis lands.
  • Remove the id from the pending table once written, and expire stale ids so the poller does not grow unbounded.

If the interview runs in the embed widget, the respondent's browser also fires koji:interview_completed, which you can forward to the worker as a fast path. Treat it as a hint, not the source of truth: it only fires while the tab is open. The webhook setup doc covers both patterns, and the research automation page covers idempotency, retries, and replay.

No-code path — Zapier or Make

If you cannot run a serverless function, the same integration is buildable in Zapier or Make in under 30 minutes:

  1. Trigger: a schedule every few minutes, then an HTTP step calling GET https://www.koji.so/api/v1/interviews/{id} for each pending id and a filter that passes only interviews where status is completed and analysis is present. There is no Koji trigger app to subscribe to.
  2. Action: Salesforce → Find Contact by Email.
  3. Action: Salesforce → Update Contact with the mapped fields.
  4. Optional action: Slack post to a #customer-voice channel with the quote.

This 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 doc for the full step-by-step.

Workflows that become possible

Once interview data flows into Salesforce, the Salesforce platform itself unlocks a set of automations that would be impossible with surveys:

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

Comparison: Koji + Salesforce vs survey-tool + Salesforce

Most teams already have a Qualtrics, SurveyMonkey, or Typeform integration with Salesforce. Why replace it with Koji? Three concrete differences:

  • 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."
  • 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.
  • 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.

If you're still on a traditional survey + CRM pattern, the convert survey to AI interview guide walks through the migration without breaking your existing flows.

Plan requirements

The headless API and the MCP connector are available on every plan, including a free account. Outbound webhooks are not available yet, so the sync runs as a scheduled pull. Interviews start as low as €1 per qualified interview, and €3 per qualified voice interview. The no-code Zapier path above is the lightest way to build the same sync without running your own forwarder. See the plan comparison guide for the full feature matrix and the API authentication doc to set up your first key.

Anonymous mode and compliance

Koji supports a fully anonymous mode in which no respondent email is collected. For those interviews, the read endpoint returns respondent_email = null and your worker should skip the Salesforce write rather than try to match. For compliance-heavy industries, see the GDPR-compliant AI user research doc and the anonymizing customer interview data walkthrough.

Related Resources

Related Articles

API Authentication

How Koji Headless API authentication works: pk_live_ API keys, permissions, session tokens, and origin allowlists.

Attio + Koji: Launch AI Interviews from Your CRM and Sync Every Insight Back to the Record

Connect Attio to Koji to trigger AI customer interviews from CRM records and lists, then write themes, quotes, and structured scores back onto each contact and company automatically.

Churned Customer Interviews: How to Talk to Users Who Left (and Win Them Back)

Learn how to conduct churned customer interviews that reveal why users really left — and how AI-moderated interviews make it scalable. Includes questions, structure, and templates.

How to Use Your CRM Data for Targeted AI Research: Import Participants and Personalize Every Interview

Your CRM already contains your best research sample. Learn how to export customer segments, import them into Koji, send personalized interview links, and get 3–5x higher response rates than generic research recruitment.

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.

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 using the Koji API and the HubSpot API.

Intercom + Koji: Run Deep AI Interviews From Your Support and Messaging Workflows

Trigger Koji AI-moderated interviews from Intercom conversations, post-resolution surveys, and outbound messages — then sync themes, sentiment, and quality scores back as Intercom user attributes.

How to Interview Enterprise Customers and C-Suite Decision Makers

A practical playbook for running customer research interviews with enterprise buyers and C-suite decision makers. Covers recruiting strategy, ROI framing, time-respect, multi-stakeholder triangulation, and how to use Koji's AI interviewer to land 30-minute exec conversations without burning your champion.

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 Zapier schedule that polls the Koji API.

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 Schedule modules.

Mixpanel + Koji: Trigger AI Interviews from Product Events and Pipe Insights Back as Properties

Trigger Koji AI-moderated interviews from Mixpanel cohorts and behavior, then pipe themes, sentiment, and quality scores back into Mixpanel as events and user profile properties.

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

Connect Koji to Notion via Zapier (or the API) 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.

Pipedrive + Koji: Turn Deal Stages into AI Win-Loss and Post-Demo Interviews

Connect Pipedrive to Koji to trigger AI voice and text interviews when deals are won, lost, or move stage, then sync themes and structured scores back to Pipedrive deal fields for a continuous win-loss program.

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.

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.

Structured Questions in AI Interviews

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

User Research API: Embed AI Interviews into Any Product or Workflow

How to use Koji's User Research API to run AI-moderated interviews from your own backend. Covers REST endpoints, the embed widget, how to get completion signals without webhooks, authentication, rate limits, and headless interview patterns.

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 have a small scheduled worker poll Koji and post themes, sentiment, and a transcript link back onto the ticket automatically.