New Plain × Linear · two-way sync, GA

Support that thinks
like product.

Plain is the customer support platform for B2B product teams. Slack-first, Linear-linked, API-extensible. Ship support that lives with the product — not bolted on the side of it.

SOC 2 Type II GDPR Free 7-day trial · No credit card
L
Linear · ENG-2841
Webhook signature mismatch
SLA · On track
8m 42s / 30m
First-response window
#
Slack handoff
#cust-grafana → @mira
plain.com / inbox / #4129
Open
#4129·Grafana Labs·Tier 2

Webhook deliveries failing with 401 after key rotation

ENG-2841 #cust-grafana SLA on track Tier 2 · API
JK
Jana Karkov SRE · Grafana 10:42
Rotated our prod webhook key yesterday and we're now getting 401 invalid_signature on every delivery. Old key was still on the dashboard 10 min after rotation — is the cache TTL configurable?
MR
Mira Rao Eng · Plain 10:51
Confirmed — rotation cache TTL is 60s. The 10-min lag points to a stale signing secret on our edge. Rolled a fix to edge-eu just now; can you re-trigger one delivery and confirm the 401 is gone?
// re-test signature locally curl -X POST https://hooks.plain.com/v1/grafana \ -H "x-plain-signature: $(./sign.sh)" \ -d '{"event":"ticket.created"}' // expect → 200 OK
47% Faster first-response, on average
3.2× More tickets resolved inside Slack
12m p50 engineer reply time
0 Chat widgets shipped to production
Trusted by product teams — Series A → public·co
01 · Product surface

Support that lives
in your stack.

Plain doesn't sit beside your product on a different domain. It threads through the tools your team already lives in — Linear for engineering follow-up, Slack for customer channels, GitHub for code-linked context. Every conversation is one keystroke from the codebase it's about.

01

Two-way Linear sync

A Plain ticket creates a Linear issue. A Linear issue closes the Plain ticket. The thread, the labels, and the assignee stay aligned without a webhook to babysit.

02

Slack channels as inboxes

Shared customer channels appear as native Plain inboxes. Replies in Slack are replies in Plain. SLAs and assignees follow the thread, not the tool.

03

GitHub deep-context

Paste a commit hash or a PR link. Plain hydrates it into the thread with the author, the diff summary, and the deploy status — so engineers reply with one tab open, not seven.

04

Customer cards from your data warehouse

Plan, MRR, last shipped feature, current incidents — pulled from Snowflake or Postgres on every ticket open. No more "what tier are they on?" round trips.

02 · Foundations

Capabilities that scale with the team.

Three engines underneath every inbox. Integrations bring the work in, workflows route it, SLAs make the contract visible to the customer and the engineer alike.

Integrations

Connected to every tool you ship from.

30+ first-party integrations. Linear, Slack, GitHub, Notion, Linear-status, Discord, PagerDuty, Datadog — two-way where it matters, read-only where it shouldn't.

L Linear CONNECTED
# Slack CONNECTED
G GitHub CONNECTED
N Notion CONNECTED
P PagerDuty + 26 more
Workflows

Routing that reads the ticket, not the form.

Build deterministic routing in TypeScript or visual flows. Trigger on plan tier, ticket topic, queue depth, or a customer-card field. AI suggests; humans confirm; logs are auditable.

Webhook · ticket.created
Classify · API issue
Route · #plain-eng-rotation
·Notify · on-call engineer
·Link · Linear ENG-*
SLA

Visible contracts. Honest math.

Define SLA windows per plan, per topic, per channel. Plain enforces them, shows them to the customer, and warns the on-call before they're breached — in Slack, not in a dashboard.

Mon · 06 97.4% met Sun · 12
03 · Architecture

An API-first core.
No widget bloat.

Plain is plumbing first, UI second. Build your own portals, embed threads anywhere, automate from your CI. Everything you see in the app is the same API your engineers can call.

/v1/threads

One coherent API.

Every action in Plain — create a thread, link an issue, ship an SLA breach event — is the same call your dashboard makes. REST, webhooks, and a typed SDK.

node go curl
import { PlainClient } from "@team-plain/typescript-sdk"; const plain = new PlainClient({ apiKey: process.env.PLAIN_KEY }); // open a thread + link a Linear issue + post the first message await plain.createThread({ customerExternalId: "cus_grafana", title: "Webhook 401 after key rotation", components: [ { type: "text", text: "Cache TTL was 600s, expected 60s" }, { type: "linearIssue", key: "ENG-2841" } ], labels: ["api", "tier-2"], slaPolicyId: "sla_enterprise_tier2" });
Architecture

Zero chat widgets.

Your customers are buyers, not retail shoppers. We never inject a bouncing bubble in the corner of your app. Build your own surface; we'll power it.

Real-time

Sub-second sync.

Plain pushes updates over WebSockets in under 400 ms p95. Slack, Linear, and your dashboard agree on state in the same breath.

Event stream

Webhook everything that moves.

Forty-two event types, retried on your terms. Pipe them to Segment, Snowflake, or your own warehouse for proper support analytics.

10:42:08thread.created · #4129 grafana · tier-2→ sf
10:43:11thread.linked · → Linear ENG-2841→ sf
10:51:42message.sent · @mira-r · 247 chars→ sf
11:08:55sla.met · first-response · 26m / 30m→ sf
11:14:02thread.escalated · → on-call · @rk→ pd
04 · The inbox

A real Tuesday morning,
on a CX team that ships.

Four lanes, twelve threads, three engineers on-call. Every ticket carries its product context. Most resolve where they were born: in a customer Slack channel.

New · Triage04
#41312m

CSV export truncating at 50k rows on enterprise plan

Bugslack
CJCursor · Jess LinP2
#41324m

SSO sign-in loop after enabling SCIM

Authslack
VRVercel · Rin O.P1
#41339m

Question · how to bulk-archive idle threads via API

How-to
GDGrafana · DevP3
#413411m

Quota alert email arrived 14h after the breach

Alert
MDModal · DomP2
Investigating03
#412922m

Webhook deliveries failing with 401 after key rotation

ENG-2841slack
MRGrafana · Jana K.P1
#41261h

Stripe webhook signature failing on plan-change events

BIL-918
TSTinybird · SaraP2
#41242h

Linear sync skipping `cancelled` issues silently

ENG-2838api
CSCal · SamP2
Awaiting customer03
#41183h

Asked customer for HAR trace · idle 1h

Perf
MRSourcegraph · TomP3
#41155h

Sent reproduction repo · waiting for branch link

ENG-2820
RJResend · JoP2
#41091d

Plan upgrade question · CFO approval pending

Billing
MSMistral · SamiP3
Resolved · today09
#4127

Webhook retry policy clarification · doc updated

Docs
MRCursor · EliP3
#4125

In-app form not pre-filling user email · CSP fixed

FE-512
RKBrex · Rio K.P2
#4123

CLI auth failing on stale token · SDK 2.18.1

SDK
MRMintlify · PriP2
05 · Migration

Honest comparison.
Including what we don't do.

Most teams arriving at Plain are leaving Intercom or Zendesk. Here's where each tool wins and loses for a B2B product team in 2026. Caveat: every workspace differs; this is the median case from our migration audits.

Capability
Plain
Intercom
Zendesk
Pricing model
$35 / seat, flat
Per-resolution + seat
Per-seat, 5 tiers
Slack channel as native inbox
Two-way, first-class
~One-way notify
Add-on, read-only
Linear issue two-way sync
Native, GA
~Zapier middleware
Not supported
Typed API + SDK (TS, Go)
First-class, versioned
~REST only, untyped
REST, 2 OAuth scopes
Chat widget on customer site
Headless only, opt-in
Default-on bubble
Default bubble
SLA gauges visible to customer
Per-thread, per-plan
~Internal only
~Enterprise tier
Workflow logic in TypeScript
Functions + visual editor
Visual-only DSL
Visual-only macros
Onboarding to first ticket
~29 min, self-serve
2-4 weeks (sales-led)
4-8 weeks (sales-led)
Data residency · EU + US
Both, per-workspace
~EU only on Enterprise
Both
06 · Pricing

Pricing you can budget.
Not negotiate.

Flat per-seat. No per-resolution surcharges. Every tier ships with the API, webhooks, SSO, and the same Linear sync. Volume discounts at 25 seats, automatic.

Foundation

Seed → Series A

Run your support out of Plain from day one. Built for teams replacing a shared inbox + Linear-issue rituals.

$35 / seat / month
  • Slack, email, in-app, portal channels
  • Two-way Linear & GitHub sync
  • 2,000 AI credits / month
  • Sidekick AI assistant + Ari agent
  • Customer cards from Postgres / Snowflake
  • REST + TS/Go SDK · webhooks
  • Community Slack support
Start the trial
Most picked
Horizon

Series A → Series C

When support stops being two engineers covering nights and becomes a real on-call rotation with SLAs.

$299 / month · 3 seats incl.
  • Everything in Foundation
  • Microsoft Teams & Discord channels
  • 15,000 AI credits / month
  • SLA policies + business hours
  • Escalation paths · PagerDuty + on-call
  • Help Center · Knowledge base
  • Reporting themes & CSAT
  • Priority Slack support · 4h p50
Book a demo
Frontier

Series C → Public

For Grafana-scale support. White-glove onboarding, custom AI agents on your stack, dedicated CSM.

Custom · talk to us
  • Everything in Horizon
  • Custom credits + bring your own LLM
  • Custom workspaces · contracting
  • SSO + SCIM · audit log API
  • Advanced data residency · BYO-KMS
  • Dedicated CSM + Slack Connect
  • Solutions-engineer onboarding
  • 99.99% uptime SLA · 24/7
Talk to sales
07 · From the inbox

What heads of CX
actually tell us.

Five quotes pulled from our 6-month review calls. Every number was verified against the customer's workspace before publication.

47% faster first-response

"We moved off Intercom in a weekend. The big surprise: our engineers started replying to tickets. Plain feels like a Linear issue with a customer attached — and that changed who owns support inside the company."

JB
Jules Barreau
Head of CX · Tinybird
−$11k / mo vs Zendesk

"Zendesk priced us at $14k/mo for the AI plus the 'productivity' bundle. Plain came in at $3k flat with the same seats. The pricing is the feature."

LM
Laura Mendes
VP Customer Ops · Modal
3.2× more in-Slack resolutions

"Our customers were already in our shared Slack channels. Plain just made those threads first-class tickets. SLAs, routing, the whole thing — without asking anyone to install an app."

DS
Daniel Sequeira
Head of Business Ops · Mistral
12-min p50 engineer reply

"We rotate four engineers across the inbox. The Linear two-way means a ticket either becomes an issue or it doesn't — there's no 'work-in-progress' purgatory anymore."

CO
Christopher O'Neill
Head of Developer Success · Sourcegraph
29-min onboarding

"We chose Plain because it was the right fit for our fast-moving team to get going quickly. We were running real tickets through it before lunch on the first day."

JK
Jo Barrow
Chief of Staff · Cursor
08 · Questions

Eleven things
buyers always ask.

If your question isn't here, our team replies in under 4 hours on Slack. Yes, on a Saturday too — we eat our own dog food.

Intercom's 2024 AI pivot moved them toward per-resolution pricing and a B2C-aesthetic chat widget. Plain stayed product-team-first: flat per-seat pricing, no widget, native Slack/Linear/GitHub integrations, and a typed API as the source of truth. We're optimized for engineers replying to ten high-context tickets a day, not agents replying to a thousand low-context ones.
Yes. Our migration script imports tickets, contacts, macros, and SLA policies via Zendesk's export API. Most teams are running real traffic on Plain within 48 hours of starting. Our solutions engineers run a parallel-shadow week so the team gets used to keyboard shortcuts before the cut-over.
Any Slack channel you connect — customer-shared or internal — becomes a native Plain inbox. New messages create threads, replies in Slack reply in Plain, assignees and SLAs follow the thread. The customer never installs anything; they just keep using their Slack channel.
Yes. A Plain thread can spawn a Linear issue (with the customer's message as the description). When the Linear issue closes, the Plain thread auto-replies the customer with the resolution. Labels, assignees, and status flow both directions. No Zapier in the middle, no rate-limit anxiety.
Three layers. Sidekick is your assistant on every thread: it summarises, surfaces precedent, drafts a reply for review. Ari is the autonomous tier-1 agent (suggests, never sends without a human on a free plan). On Frontier you can bring your own LLM or run a custom agent inside our orchestration layer.
200 requests / second per workspace on Horizon, 500 on Frontier. Webhook events are at-least-once with 24h retention. SDK clients handle retries and back-off out of the box. Hit our rate limit and we'll quietly raise it on your workspace within an hour — no ticket required.
We ship a headless component library (React + Web Components) you can compose into your own UI. There is no default-on bubble in the corner. You decide where support shows up, what colour, and which channels are exposed. Your brand stays yours.
SOC 2 Type II, GDPR-compliant, ISO 27001 in progress. EU and US workspaces are isolated at the database level (per-workspace, not per-tier). BYO-KMS available on Frontier. Audit log API on every plan.
If you have 5 support seats and 10k tickets/month, Horizon at $299 covers 3 seats + ~$70 for the additional 2 seats = $369/month flat. The same workload on Intercom in 2026 averages $11–14k/mo when you include AI resolutions. We publish full math at plain.com/pricing — no calculator wall.
Not today. Our shared edge is what makes the Slack/Linear realtime sync feel native. We offer dedicated single-tenant deployments on Frontier for teams with hard regulatory needs — it's effectively self-hosted from a data-isolation perspective, without the ops burden.
Because most support tools earn their adjectives — "Comprehensive Service Desk Suite", "Enterprise Customer Experience Cloud" — and forget the noun. We wanted the noun. Support, in plain English, for product teams who treat their customers the way they treat their codebase.

Ship support that ships with the product.

Plain is in production at Grafana, Vercel, Cursor, Modal, Mistral and 280+ other modern B2B teams. Book a 25-minute demo — you'll see your own data in a sandbox workspace before we hang up.

Book a demo Start free trial
SOC 2 Type II · 7-day trial · No credit card