USD list prices, monthly equivalent billed annually, checked September 25, 2026. AI usage, add-ons and taxes excluded; features differ.
Bug recordings that turn into reviewed fixes, and customers who hear back.
Customers report bugs inside your web and mobile app with replay and logs, Kai Support investigates, and Kai Code prepares the pull request your engineers review. Gleap adds the customer conversation, with unlimited seats from Team instead of a price per creator.
★ 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.
Gleap USD list prices, monthly equivalent billed annually, checked September 25, 2026. 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();
Now live in Settings.