Case Study

LinkedIn AI
Support Chat

Upgrading LinkedIn's AI support chat into an agentic platform — an intake AI that reads the customer's intent and routes to a suite of purpose-built agents that don't just answer, they take action. Plus a new design language built to make the support chat feel like one system.

+11%
self-serve rate
73K+
rep hours saved every quarter
~$7M
annually in self-serve savings
+$60M
in annual revenue when scaled
Role
Staff Product Designer · Design Lead
Timeline
2025 – present
Platform
Web · In-product support chat
Scope
Intake AI · Agent suite · Design system
LinkedIn AI Support Chat — the Help assistant open over the Admin Center

Background

The jobs customers bring to support, the problem sending them to a rep, and the rebuild that answered it.

Every customer arrives with one of three jobs to be done.

LinkedIn's B2B customers range from admins managing billing, seats, and access to the recruiters, marketers, and sales reps using the products daily. Whoever they are, they arrive with one of three jobs, and the intake AI has to tell them apart.

Learning
Learning how to do something.
"How do I set up a Sponsored Content campaign?"
Troubleshooting
Stuck or something isn't working.
"I can't find my invoice. Help me download it."
Action
Getting a task done.
"Assign a Recruiter seat to my new hire."

The case categories the existing experience could self-serve had plateaued.

~40%
of support chats ended with a rep, a number that hadn't moved meaningfully in several quarters.
50%+
of those escalations, we estimated, could have been resolved in chat without a rep.
Why they escalated
Needed an action the AI couldn't take
The customer wanted something done. The AI could explain the steps but couldn't complete them.
Couldn't collect the right info
The AI never gathered the details it needed, so the request stalled.
Missed intent
The AI misread the ask and routed the customer to a rep by default.
Too many turns with the AI
Long back-and-forths wore customers down. Many gave up and asked for a person.

The gaps pointed to what needed to be rebuilt: a chat that could understand the ask, collect what it needed, and take action.

Source: analysis of escalated support transcripts.

Building a new experience that's smarter and more efficient at addressing customer needs.

The gaps mapped to two layers to rebuild: the experience customers move through, and the intelligence that does the work. Each became a track of work in itself.

Layer 01 — The plumbing
A new component library
One fast, consistent chat across every line of business, built on a shared design system. Efficient prompting and reusable components expedite the conversation and collect the right information, so no friction pushes customers to a rep.
Layer 02 — The agents
Agents that understand and act
A repeatable way to build intelligent agents that take action. Each is assembled from shared skills and components, so new agents ship without reinventing the interface or re-fracturing the experience.

The first change: A new component library

Find the friction, then rebuild the chat on one shared design system so the assistant behaves the same everywhere and gets out of the customer's way — a new container, persistent conversations, and an all-new set of chat components.

I started with a heuristic audit and research with customers.

I audited the existing experience end to end — every path to support, from in-product help to chat to each line of business's assistant, across Sales, Talent, Learning, and Marketing. Walking each flow as a heuristic analysis let me put the four experiences side by side and see exactly where each one broke down. I paired the audit with research, talking to customers about where support had failed them, so the friction I designed against was grounded in their experience and not just my own read.

Heuristic audit mapping the in-product help to chat-with-support flow across LinkedIn's lines of business — Sales (LSS), Talent (LTS), Learning (LLS), and Marketing (LMS).
The audit — every path to support walked across all four lines of business. Click to enlarge

Key painpoints I discovered.

The experiences hadn't just drifted visually. Each one added friction, and friction sent customers to a rep.

Multiple entry points
Support started in a different place in each product.
Why it mattered: Because support started somewhere different in every product, customers couldn't find help and gave up, contacting a rep directly instead.
Different UI styles
Each line of business had its own type, color, message bubbles, and assistant identity.
Why it mattered: Because the assistant looked different in every product, customers couldn't tell it was the same tool and lost trust in it right when they needed help most.
Inconsistent container controls
Some chat windows could be resized and some warned before closing, while others did neither.
Why it mattered: Because the controls worked differently everywhere, customers couldn't predict what would happen — and with no warning before closing, some shut the window and lost their entire conversation.
No persistent conversation
Leaving the page or closing the chat wiped the conversation.
Why it mattered: When customers followed the assistant's own instructions to another page, the conversation was wiped and they had to start over from the beginning.
A chat window that couldn't move
The chat was fixed in place, covering part of the product.
Why it mattered: When the support chat covered information in the background that customers needed to access, they had to minimize the chat window, ending the conversation.
Scarce prompting
The assistants rarely offered prompts or quick options, so customers had to type out what they needed from scratch.
Why it mattered: With little to guide them, customers typed messages back and forth with the AI, and conversations dragged on until they gave up and asked for a rep.

One design system across every line of business.

With the friction mapped, I implemented a new chat UX, grounded in the audit and industry best practices for conversational interfaces. The redesign made the chat behave the same everywhere and get out of the customer's way.

The changes included a new chat container, persistent messaging that survives navigation, the ability to minimize the chat window without losing context, and an all-new set of chat components: message bubbles, loading states, typing indicators, prompts and chips, forms, and info cards.

The second change: Agents that understand and act

I built a reusable framework to design, build, and train our agents around. Once we identified a customer's real job-to-be-done, the agent could sift through their actual needs, pin down what they wanted, and deliver it more efficiently — and if a question was still open, it held off on acting until it had enough information to decide. The Invoice Agent was the first.

Let's look at the Invoice Agent as an example of our reusable agentic framework.

To make the framework concrete, I'll walk through the Invoice Agent — the first one we built, and the clearest example of why the approach was needed. Invoices were the perfect test case because one simple ask hid many different needs: "I want to download my invoices" could mean three completely different jobs, each with different information already in hand, and the agent had to tell them apart in a single conversation.

First, reading the transcripts with AI to make sense of them at scale.

I worked through real customer support transcripts with AI, categorizing each conversation by how customers phrased the request, what information they already had in hand, and the outcome they were really after. Clustering the verbatims into jobs-to-be-done turned messy, one-off chats into clear, repeatable patterns of need.

Sensemaking matrix clustering support transcripts into user types, jobs-to-be-done, verbatims, how users identify what they need, problem category, and a recommended agent solution.
Sensemaking — clustering transcripts into jobs-to-be-done, the signals users give, and the outcomes they want. Click to enlarge

What I took away: one question, very different jobs.

The clearest pattern was how often a single question masked completely different needs — and how differently customers were equipped to answer it. Someone asking to "download an invoice" often didn't want the invoice at all: they'd found an unidentified charge and wanted to trace it, arriving with a date and an amount to identify it by. Someone else downloading invoices for accounting came with a date range instead, and a third was new to LinkedIn and just wanted to learn how to do it. Same request, different trigger, different information already in hand — and the agent has to tell them apart in a single conversation.

“I want to download my invoices” can mean:

“I want to learn how to do it myself.”
Learning
“I want to find an invoice I got charged for.”
Troubleshooting
“I want to download a range of invoices to send to accounting.”
Action

Then, a reusable framework — from customer need to prompt engineering.

The output was a reusable framework we could point at any agent we wanted to build, train, and design. It reads the customer's real job-to-be-done, then breaks the goal into an action type and the parameters the agent needs to complete it. Those parameters become required slots: while any is unanswered, the agent treats it as an open question and won't act until it has enough information to decide. That structure is exactly what the prompt engineering keys on, so the assistant knows which slots to collect and can drive the customer to the outcome faster.

Command example decomposing 'Download invoices from one of my specified ad account from the last 30 days that are unpaid' into an action type (Task), implied context, and parameters — focus, result, and data sources.
The framework — decomposing a customer goal into an action type and the parameters the agent must capture. Click to enlarge

Finally, mapping the user flows to pressure-test the framework — and build prompts into it.

Next I mapped the end-to-end user flows for each agent. This did two things: it showed how the framework held up in practice across every branch — one account or many, billing-admin permissions or none — and it gave us the exact moments to work prompts in and expedite the conversation.

Downloading an invoice was the perfect example. A customer might identify the invoice they want in several ways — invoice number, transaction and amount, date range, order ID — so by prompting for that up front, the agent skips the back-and-forth and gets to the download faster.

High-level use cases and workflows for the Download Invoice agent — VCA entrypoint, intent clarification, and the invoice-retrieval and permissions flows branching across one vs. multiple accounts and billing-admin permissions.
User flows for the Invoice Agent — the framework applied across account and permission branches, with prompts placed to shorten the exchange. Click to enlarge

The final design

The final Invoice Agent design is a good example of the frameworks and components we created to help any agent scale and solve customer needs efficiently.

Reading intent when the ask is vague.

Clear requests are easy. Vague ones are where support breaks down. "Where download invoices" could come from someone who wants directions, someone who looked and can't find them, or someone who just wants the invoices. If the agent guesses wrong, the person ends up on the wrong path, gets frustrated and asks for a rep. So the agent reads the wording and the account context to tell those apart. When it still isn't sure, it asks one short question before choosing a path.

Knowing why they came, so we can ask the right things.

The transcripts showed why people came, not just what they asked for. Someone downloading invoices was usually checking an unfamiliar charge, gathering invoices to send to accounting, or looking for one that had gone missing. Each of those goals came with details they already had: a charge amount, a date range or an account. So the agent opens with a prompt that fits the likely goal and shows the one component that goal needs, such as a charge lookup, a date picker or an account selector. It skips everything else, expediting the conversation.

A shelf of components to collect user information.

There are a variety of edge cases where the agent needs to collect additional information from the customer before it can act. For these instances we designed a shelf of new components the agent could select from, each built to capture one kind of input cleanly and consistently. Because they share the same design language and behavior, the agent can compose exactly the inputs a task needs — and every future agent draws from the same shelf, so collecting information never gets reinvented or fragmented.

Outcomes & impact

The framework and shared system shipped as a first suite of agents, built for the highest-volume, highest-friction requests.

Four agents for the top case drivers.

We scoped the first release to the highest-volume, highest-friction requests — the cases that most often escalated to a human. Each is a purpose-built agent with its own guided, agentic flow, but they all share the same intake, the same design language, and the same rails, so the suite grows without fragmenting.

Invoice Agent
Locate and download any invoice on the account and deliver it right in the chat — no ticket, no waiting.
Action
License Agent
Assign, revoke, or reassign seats — manage who has access to what, without ever leaving the conversation.
Action
Subscription Agent
Purchase or cancel subscriptions — change what the account is paying for, guided step by step with clear confirmation.
Action
Learning Agent
Share the right learning material — surface and send the exact course or guide for what the customer is trying to do.
Learning

The impact, by the numbers.

+11%
self-serve rate
73K+
rep hours saved every quarter
~$7M
annually in self-serve savings
+$60M
in annual revenue when scaled

This first suite is small on purpose — four agents on one shared framework — but it proves the model. When the intake AI reads intent and hands off to an agent that can actually complete the task, support stops being a place customers go to ask and becomes a place where things get done.

That's the shift this phase is built for. Every new agent plugs into the same intake, the same rails, and the same design language, so coverage compounds instead of fragmenting, and the experience gets better as it grows. Agentic support isn't a feature bolted onto chat — it's where enterprise support is heading, and this is the foundation it's built on.