A visitor lands on your pricing page and opens your chat widget. They ask three questions, get good answers, and close the tab. You never knew they were there.
The AI chat widget captures that visitor's email if they share it during the conversation. One line makes them a contact in your Audience tab, linked to the full transcript.
OperatorStack's AI chat has two built-in lead capture tools: save_contact (stores email as a unified contact, source="chat") and waitlist_signup (adds the visitor to your waitlist during the conversation). Both fire when a visitor provides their email. Both create a chat_lead_captured event and link the chat transcript to the contact record.
Two Ways Chat Captures Leads
Most chat widgets offer one thing: a form before the conversation starts. OperatorStack captures leads differently. The AI holds the conversation first, then calls a tool when the visitor provides their email.
There are two tools registered on every conversation:
save_contact collects email and optional name and interest. Use this when a visitor is not ready to join a waitlist but still wants to be in touch. The AI calls it the moment a visitor shares their email address.
waitlist_signup does the same capture but also adds the visitor to your project's waitlist, assigns a position, and generates a referral code. Use this when the visitor explicitly asks about joining or the conversation reaches a natural "sign me up" moment.
Both run automatically. You do not write any code to trigger them.
How the Lead Capture Flow Works
When a visitor opens your chat widget, OperatorStack starts a ChatConversation record with a visitor_id. The AI holds the conversation. When the visitor shares their email, the AI calls one of the two tools.
Visitor shares their email. The AI calls save_contact (or waitlist_signup) with {email, name, interest} as arguments.
OperatorStack runs upsert_contact() with source="chat". If the email already exists in your project (from a prior waitlist signup or form submission), the conversation links to the existing contact. No duplicate created.
A chat_lead_captured event fires. The ChatConversation record gets lead_email and contact_id set. The conversation is now linked to a real contact.
A lead notification email goes to you. OperatorStack sends a notification to the project owner's email with the lead's name, email, and stated interest. This is throttled so a burst of leads does not flood your inbox.
If the visitor used waitlist_signup, their ChatConversation is also linked to a WaitlistSignup record. They get a position number and a referral code, same as a visitor who joined through the waitlist embed widget.
What Appears in Your Audience Tab
After capture, open the Audience tab and click the contact. You see:
- The email and name they provided in chat
- Source set to "chat"
- A link to the full conversation transcript
- Any other interactions (if they later submit a form or share the waitlist)
If the visitor was already in your contact list from an earlier interaction, the chat conversation is added to their existing record. One person, one record.
Configuring the Capture Behavior
The AI asks for emails based on its system prompt and personality settings. You can tune this in the Chat tab of your project dashboard.
To make the AI ask for email sooner: Add an instruction like "If a visitor expresses interest in the product or asks about pricing, offer to add them to the waitlist before answering." The waitlist_signup tool handles the rest.
To change the prompt phrasing: Add example dialogue in the personality field. The AI reads the instructions and mimics the style you describe.
To prevent the AI from pushing waitlist signup: Remove the instruction to offer the waitlist. The AI will still capture emails via save_contact if visitors share them voluntarily, but it will not proactively offer signup.
Write your system prompt the way you would brief a human sales rep on their first day. Tell it what the product does, who it is for, and what to say when someone asks about pricing or availability. The AI follows that brief during every conversation.
Chat Lead Capture vs Form Lead Capture
Both create unified contacts. The difference is timing and friction.
A form requires the visitor to decide upfront to engage. If they are not ready, they skip it. A chat widget starts a conversation first. By the time the AI asks for an email, the visitor has already gotten value. That sequence converts better on pricing and feature-explanation pages.
Chat lead capture only fires when the visitor provides an email during the conversation. The AI does not extract emails from page text or cookies. If a visitor never types their email, no contact is created.
Checking Your Lead Capture Rate
Your Chat analytics tab shows total conversations alongside leads captured and a lead capture rate percentage. A rate below 10% usually means visitors are getting answers but leaving before the AI asks for an email, or the system prompt is not prompting for contact at the right moment.
Adjust the system prompt to ask for an email earlier in high-intent conversations. Re-check the rate after a few days.
Frequently Asked Questions
How does the AI know when to ask for an email?
The AI is instructed to call save_contact as soon as a visitor shares their email, and to offer waitlist signup when a visitor expresses interest in the product. You can shape this behavior by editing the system prompt in your Chat settings.
Can I control what the AI says when asking for an email?
Yes. Edit the personality and system prompt fields in your Chat tab. You can instruct the AI to ask for an email at specific moments, like after answering a pricing question or when a visitor says they are interested.
Do chat leads merge with existing contacts?
Yes. OperatorStack runs upsert_contact() on the email. If that email already exists in your project (from a waitlist signup or form submission), the chat conversation links to the existing contact. You see one record with the full history.
What if a visitor never shares their email?
The conversation still happens and is logged, but no contact is created. You can see anonymous conversation counts in your Chat analytics. Nothing is captured until an email is provided.
How do I see the conversation transcript?
Open the Audience tab and click a contact who came through chat. The full conversation thread is linked to their record. You can also view conversations in the Chat tab under your project.