A ten-agent example. USD list prices, checked September 26, 2026; Chatwoot’s pricing page does not state a billing period. AI usage, add-ons and taxes excluded; features differ.
Most conversations resolved for under $0.05 each*, live in minutes.
Florian Berger3m
Mia Kellerman 4m
Jonas Weber 12m
Sofia Lindqvist 1h
Tom Alvarez Tomorrow 3h
Ade Okafor 6m
Priya Raman 2d
Kai Support transferred ticket to Human.
Kai Support answers chat, email and WhatsApp and hands the hard ones to your team with the full context. Chatwoot gives you an open-source support inbox; Gleap adds in-app bug reports, a feature roadmap and unlimited seats from Team instead of per-agent pricing.
★ 4.6/5 on G2 Trusted by 4,500+ teams worldwide
7 days free. Cancel anytime. Card required. First charge on day 8 unless you cancel.
Florian Berger3m
Mia Kellerman 4m
Jonas Weber 12m
Sofia Lindqvist 1h
Tom Alvarez Tomorrow 3h
Ade Okafor 6m
Priya Raman 2d
Kai Support transferred ticket to Human.
Gleap A ten-agent example. USD list prices, checked September 26, 2026; Chatwoot’s pricing page does not state a billing period. AI usage, add-ons and taxes excluded; features differ.
Answer customers. Investigate issues. Build what comes next. Kai Support and Kai Copilot work on every plan; investigations and Kai Code come with Team. AI usage is billed separately on every plan.
Answers customers
Answers from your knowledge base and connected sources. From Team, it investigates hard tickets with logs, the click trail and your code.
Works with your team
Press ⌘J on any page. It answers customers when you say yes, drafts articles, explains your numbers and, from Team, drafts the changelog when a fix ships. Your team sends what it drafts.
Builds the fix
Plans the change, writes and tests code, and opens a pull request. Your engineers review and merge.
@@ -42,7 +42,15 @@ NotificationsDrawer const { items } = useNotifications();− useEffect(() => { if (open) refetch(); });+ const socket = useNotificationSocket();+ useEffect(() => {+ if (!open) return;+ return socket.on('notification:new',+ (n) => setItems((p) => [n, ...p]));+ }, [open, socket]); return <Drawer open={open}>
@@ -8,6 +8,18 @@ useNotificationSocket const socket = useSocket();+ const on = useCallback((evt, fn) => {+ socket.on(evt, fn);+ return () => socket.off(evt, fn);+ }, [socket]);− return socket;+ return { on };
@@ -0,0 +1,4 @@+ it('appends a pushed notification',+ async () => {+ render(<NotificationsDrawer open />);+ socket.emit('notification:new', n);+ expect(await findByText(n.title))+ .toBeVisible();