Most websites lose almost everyone who visits. People land, have a question or a doubt, don't find the answer quickly, and leave. A chat widget is the obvious fix, but one that sits in the corner waiting to be clicked usually doesn't do much.
What we've seen work better, working with agencies and shop owners, is treating chat as part of the sales process, not a support add-on:
Show up at the right moment. Open the widget when someone's been on the checkout page for a couple of minutes, or sat on a product page without adding anything to the cart. That's usually when a question is stopping the sale (delivery, returns, sizing).
Know why they're there. Pass the page, the product or the cart to your n8n workflow with every message, so the agent can answer the actual question and doesn't open with "How can I help?".
Ask different questions on different pages. Pricing-page prompts and returns-page prompts shouldn't be the same.
Don't lose the people who aren't ready to buy. Capture them as leads into your CRM (HubSpot, Pipedrive, Mailchimp or whatever you use) with consent, so you can follow up.
Book the calls. Let the chat book the meeting with Calendly or Cal.com, so a warm visitor doesn't have to wait for an email.
All of that can be wired up with n8n and a bit of JavaScript, and we've put ready-made workflows for the CRM, booking and order-lookup parts at n8nchatui.com/recipes.
What I'd like to know: which of these has actually moved the needle for you or your clients? And what have you tried that didn't work? I'd love real numbers if anyone's willing to share.
Hey Product Hunt 👋 Ross (@ross_jenkins) & Dani (@dani_martin1), the owners of N8N Chat UI.
The problem
n8n is brilliant for building AI agents, but its built-in chat widget is basic. Making it look like your brand means digging into HTML, CSS and JavaScript, and your webhook URL sits in the page source for anyone to find.
What we built
A visual builder that turns any n8n workflow into a polished, on-brand chat widget. Customize it with a live preview, copy one snippet, and it's on your site. No code.
Try the builder yourself, no signup needed: n8nchatui.com
Key features
Popup or in-page widgets, fully themed: colors, fonts, avatars, welcome messages, custom CSS
Streaming replies, voice input, file uploads, follow-up prompts, Markdown/HTML rendering
RTL support for Arabic, Hebrew and Persian
Managed widgets: hidden webhook, domain restrictions, geofencing, rate limits and real-time analytics
MCP server: ask Claude, Cursor or VS Code to create and restyle widgets for you
Official plugins for WordPress, Webflow, Shopify and Wix, plus an n8n community node
For developers: it's no-code, but not locked down
Send messages programmatically with sendMessage(): start a chat from a "Ask about this product" button, a form submission, a URL parameter, or after a visitor has been idle on the checkout page
Event callbacks (onWidgetOpen, beforeSubmit, onResponseReceived, onError…) to hook the chat into your analytics or app logic
Pass custom metadata (user ID, plan, current page) to your n8n workflow with every message
Change the theme and starter prompts on the fly with updateTheme() and updatePrompts(), no reload needed
Session keys to keep separate conversations per page or per user
Works with any backend that returns JSON, not only n8n
For agencies
Build a branded chat widget for every client in minutes, and clone widgets to reuse your best setups
Help your clients turn more website visitors into leads and sales
Show clients the results in the analytics panel, with message counts you can use to charge them per message
How pricing works
One paid plan: a lifetime license. Pay once, never pay again. You can also try it free with 100 credits, no card needed.
How it started
N8N Chat UI launched on the n8n community forum in April 2025 to fix a problem every n8n builder runs into: you build a great AI agent, put it on your website, and get a generic chat window with hardly any options to match your brand, unless you write the code yourself.
It caught on. More than 2,700 people have built widgets with it, and a lot of what shipped along the way began as requests from the community: session management, a free way to get started, streaming replies, voice notes and file uploads.
Why we bought it
In August 2026, we bought N8N Chat UI from its original creator, and Nicholas and Daniel from Ross's team at DigitalME joined us to build it out. We could see how many people already relied on it, because it fixes what n8n's own chat widget can't. And we could see how much further it could go: more advanced features, and a library of ready-made n8n recipes we're building to give to the community for free.
Our first big step is getting it onto the platforms people actually build with: official plugins for WordPress, Wix, Webflow and Shopify, plus an n8n community node that replaces the usual webhook wiring.
🎁 Product Hunt offer: $90 off the lifetime license ($59 instead of $149), plus 2,500 free credits to try Managed widgets
We'd love your feedback: which integrations or features should we build next? Drop them below.
Thanks to @jonnotie for hunting us, and to the PH community!
Questions or feedback? Email us at hello@n8nchatui.com, or connect with me on LinkedIn.
— Ross & Dani
@ross_jenkins @dani_martin1 @jonnotie How do you protect webhook URLs from being exposed in the browser?
@ross_jenkins @jonnotie @vipul_kumar1280 That's exactly what Managed widgets are for. The visitor's browser never sees your n8n webhook URL.
How it works:
The browser only talks to us. Your embed code points to our proxy (proxy.n8nchatui.com/api/chat/your-widget). Your real webhook URL is stored encrypted on our side and isn't included in anything we send to the page.
We forward each message to n8n from our server. If you turn on authentication on your n8n webhook (Basic Auth, Header Auth or JWT), we add those credentials on the way through. They never reach the browser either, and your webhook rejects anything that doesn't come through us.
You decide who can use it. Domain restrictions (the widget only loads on your sites), country restrictions and per-visitor rate limits are all set in the dashboard.
With a Standalone widget, the browser connects straight to your n8n, so the webhook URL is in your page code. That's fine for plenty of uses, but if keeping the URL private matters to you, use Managed.
— Dani
Great app idea, the Javascript API is a nice touch for interacting with users without their input. I'lll give it a go.
@timg58 Thanks Tim! Yes, that's a fun one to play with. A nudge at the right moment, like when someone's been on the pricing page for a while, gets far more replies than a widget waiting in the corner.
Here's the API reference to get you started: https://n8nchatui.com/docs/configuration/chat-widget-api-reference
Let us know how you get on, and if you get stuck, just reply here or email hello@n8nchatui.com.
— Dani
The LTDs are the way to go in the AI age. Question, is the lifetime license separate from any usage costs associated with n8n itself??
@syed_shayanur_rahman Yes, they're completely separate. The lifetime license is for the widget itself. Your n8n and AI costs stay with whoever you already pay:
N8N Chat UI license ($59 during launch): unlimited Standalone widgets, all the customisation, footer removal. You pay us nothing per message, because messages go straight from the widget to your own n8n.
n8n: whatever your setup already costs. On n8n Cloud, each chat message runs your workflow once, so it counts towards your plan's executions. If you self-host, it's just your server.
AI model: if your workflow calls OpenAI, Claude or similar, those token costs go to that provider as usual.
So we never take a cut of usage. The one exception is Managed widgets, our hosted option with the hidden webhook, domain locks and analytics, which run on credits. The launch license includes 2,500 Managed credits that never expire, so you can try that side for free too.
One thing to be upfront about: the license works forever and includes a year of updates and priority support. After that, updates are an optional add-on. You don't have to renew to keep using it.
— Dani
Congrats Dani and Ross! 🎉 Quick disclosure: I work with Dani at Millside Creative. I hadn't used N8N Chat UI before, so I tried it on a client site.
I connected Claude through the MCP server and asked it to match the widget to the client's branding. It set the colours, welcome message and starter prompts in one go, so I had something on-brand to look at straight away instead of a blank builder. Great time saver!
Good luck today!
@joanne_davies4 Thanks Jo, really glad it saved you time! 🙌 That's the use case we had in mind: let Claude do the first pass on the branding so you're tweaking something close, not starting from blank.
If anyone else wants to try it, the MCP setup is in the docs at n8nchatui.com. Happy to answer questions here.
Does the chat keep the conversation if the visitor refreshes the page or comes back later?
@ayberkbozkus Yes, by default. The widget saves the conversation in the visitor's browser, so it's still there after a refresh, on other pages of your site, or when they come back days later on the same device. It stays until they click the reset button in the chat.
The widget also sends the same session ID with every message, so if your n8n workflow uses a memory node keyed on that ID, your bot remembers the context too, not just the chat window.
A few options depending on what you need:
Start fresh every time: turn on "clear chat on reload" in the widget settings and each page load starts a new conversation.
Separate conversations on different pages: set a session key in the widget's metadata, for example one chat for product pages and another for support. Docs here: https://n8nchatui.com/docs/configuration/session-management
Across devices: history is stored per browser, so a visitor who switches from phone to laptop starts a new chat. If you need history across devices, you'd save it in your n8n workflow against a logged-in user's ID.
— Dani
Ross, good launch. What does the analytics look like... does it primarily focus on track conversations through to lead conversions, or widget usage and message counts?
@iamanantgupta Thanks! At the moment the built-in analytics focus on usage, not conversions. For each Managed widget, over any date range, you get:
total messages and unique conversations
average messages per conversation and your busiest times
failed requests, with error details so you can fix workflow problems
the browsers and devices people use, plus a map of where your visitors are
Conversions aren't built in, mostly because "converted" means something different for every business: a booked call, a captured email, a sale. Two ways people track it today:
In n8n: when the workflow captures a lead or books a call, it also sends the record to your CRM, a sheet or an analytics tool, tagged with the session ID. That gives you conversation-to-conversion tracking you define yourself.
On your site: the widget has JavaScript callbacks (widget opened, message sent, response received and more) that you can link to GA4, a Meta pixel or anything else. Docs: https://n8nchatui.com/docs/configuration/event-callbacks
Conversion tracking in the dashboard is a fair request, and we're noting it.
— Dani
Read in your pinned maker comment about the file uploads. Are file types & upload sizes configurable per widget?
@roopreddy Yes, everything is set per widget. In the widget editor you can:
Turn uploads on or off.
Choose the accepted file types. Tick any of these:
documents: PDF, TXT, RTF, MD, DOC, DOCX, XML, JSON
spreadsheets: CSV, XLS, XLSX
images: JPG, JPEG, PNG, GIF, BMP, WEBP, SVG
Set the maximum file size in MB.
Set the maximum number of files per message.
New widgets start with JPG, PNG and PDF, up to 5 files of 10 MB each. You can change all of that.
So a support widget can accept screenshots only, while a quoting widget on another page takes PDFs and spreadsheets. Files arrive in your n8n workflow along with the message, ready to use.
One practical note: your n8n server also limits how big an incoming request can be, so if you raise the size a lot, check that n8n will accept it.
— Dani