Skip to main content
Five surfaces · one widget · live

Turn every button into a live conversation.

Five trigger surfaces. Zero forms. One AI agent your visitors can reach from any page, button, or link — without re-embedding.

Live console
0/6
$ waiting for triggers…
Talk to a human

Want a 20-min walkthrough of the widget on your site?

Book a Demo
The problem

Static forms send visitors into a queue.
Conversations don’t.

Every “Contact us” button is a form. Every form is a wait. Every wait is a conversion you’ve already lost. The widget flips that model: visitors talk to your AI agent immediately, on the same page they were already reading.

Formqueued · replied to hours later · often never
Widgettriggered · answered in seconds · on the same page
Five surfaces · one widget

Five ways to start a conversation. The same agent answers every one.

01Declarative

HTML, no JavaScript.

Add data-autocrew-question to any button or link. Marketing edits the CMS; the widget handles the rest. Works on <button>, <a> (without navigating away), and bubbles through nested click targets.

Best for
  • FAQ pages — every question becomes a trigger
  • Pricing tier CTAs — pre-filled qualifying questions
  • Footer quick-links — turn dead ends into conversations
Declarative
01 / 05
<button data-autocrew-question="What are your hours?">
  See our hours
</button>
Try it on this page
02URL parameter

Email-friendly. Self-cleaning.

Append ?autocrew_q=… to any URL. The widget opens on landing and sends the question, then strips the param so a refresh doesn't re-fire. Pair with UTM tags for full campaign attribution.

Best for
  • Email campaigns — link straight into a conversation
  • Paid-ad landing URLs — per-audience question text
  • Chatbot handoffs from other apps
URL parameter
02 / 05
https://yoursite.com/?autocrew_q=Show%20me%20a%20demo
  &utm_source=email&utm_campaign=spring
Try it on this page
03JavaScript API

Programmatic control.

window.AutoCrew.ask(), .open(), .close(), .isReady(), .onReady(). Calls before widget.js loads queue safely via the GA-style stub. Single-event dispatch keeps your analytics clean.

Best for
  • Post-form-submit handoff with prefilled context
  • Idle-detection — recover before they bounce
  • Scroll-depth or exit-intent triggers
JavaScript API
03 / 05
// Wire to any in-page event
window.AutoCrew.ask("Help me with my account");

// Or check ready state first
window.AutoCrew.onReady(() => {
  console.log("widget v" + window.AutoCrew.version);
});
Try it on this page
04Search element

Drop-in shadow-DOM box.

<autocrew-search> is a custom element with closed shadow DOM — no CSS conflicts, no host access to internals. Configure with placeholder, button-label, primary-color, mode, auto-send. Submit calls ask(), so length caps and event dispatch are reused automatically.

Best for
  • Help-center search box — one element, real answers
  • Hero "Ask anything" CTA above the fold
  • Docs site search replacement (closed shadow DOM, zero CSS conflicts)
Search element
04 / 05
<autocrew-search
  placeholder="Search docs…"
  button-label="Ask"
  primary-color="#FF6B35"
></autocrew-search>
Try it on this page
05Voice mode

Tap to talk.

Add data-autocrew-mode="voice" to any trigger. Falls back to chat if voice is disabled. Six visible states (Connecting / Listening / Thinking / Speaking / Muted / Error). Barge-in is supported — the visitor interrupts the agent mid-response and it stops cleanly.

Best for
  • Mobile CTAs — voice beats typing on a phone
  • Healthcare intake / triage flows
  • Hands-free contexts (warehouse, drive-through, kitchen)
Voice mode
05 / 05
<button data-autocrew-open data-autocrew-mode="voice">
  Start a voice call
</button>
Try it on this page
Voice mode

A real voice agent. Six visible states. One tap to start.

Most chat widgets stop at text. Voice mode runs a full audio session: live transcription, natural-cadence speech, and barge-in — the visitor interrupts the agent mid-response and it stops cleanly. Each state is signalled visually so the caller never wonders if anyone’s there.

Best for
  • Mobile CTAs — voice beats typing on a phone
  • Healthcare intake / triage flows (HIPAA-aware)
  • Hands-free contexts — warehouse, drive-through, kitchen
Book a demo
In the wild

Six places this earns its keep.

Each surface from the previous section maps to specific moments on real sites. Pick the ones that match yours — ship one, ship them all.

<autocrew-search>

Search box that actually answers

Replace the static help-center search with a drop-in shadow-DOM element. Same agent, same intelligence — just disguised as the search box your visitors expect.

Built for production

The boring engineering that keeps this in production.

None of this is glamorous. All of it is what separates a demo from something you embed on a live site and forget about.

01

500-character message cap

Every trigger surface — declarative, URL, API, search — auto-truncates the message. No injection wormholes via overlong strings; no LLM context overruns.

02

Single-event dispatch

Every trigger fires exactly one autocrew:triggered event, even on nested click targets that bubble up. Your analytics never double-count.

03

Pre-init queue stub

Calls to AutoCrew.ask() before widget.js finishes loading buffer in a small queue and replay on init. GA-style. Drop-in. No race conditions.

04

Closed shadow DOM

The widget renders inside a closed shadow root. Host CSS can't leak in, host JS can't reach internals, your visitor's session stays scoped.

05

Self-cleaning URLs

?autocrew_q= and ?autocrew_open= are stripped via history.replaceState after consumption. Refresh doesn't re-trigger; shared links stay clean.

06

Per-crew session isolation

Each crewCode owns its own session, conversation history, and tenant scope. Multi-tenant safe by construction — no leakage between crews.

Configure without code

Engineering ships once. Marketing iterates forever.

Every visible config knob lives in the AutoCrew dashboard. Theme, position, copy, suggested questions, voice toggle, greeting timing — change them per crew, push live, no redeploy. The widget pulls fresh config on every page load.

Tone the widget per audience without a code change
A/B test copy and suggested questions in the dashboard
Flip voice on for one crew, off for another
Swap colors and position when the brand refreshes
Install

Three lines. One crewCode. That’s it.

Paste the snippet anywhere in your page’s HTML. The widget picks up its config from the dashboard, attaches the trigger listeners, and starts answering. No build step, no SDK install.

index.htmlRequired
<!-- 1. Tell the widget which crew to load -->
<script>
  window.AutoCrewConfig = { crewCode: "YOUR-CREW-CODE" };
</script>

<!-- 2. Drop in the widget -->
<script src="https://app.autocrew-ai.com/widget.js" async></script>
  1. 01
    Drops in
    Loads async. No render-blocking. No bundler config.
  2. 02
    Pulls config
    Theme, position, suggested actions, voice toggle — all from your crew.
  3. 03
    Wires triggers
    Declarative attrs, URL params, JS API, search element — all live.
Optional

If you call AutoCrew.ask() before widget.js finishes loading, drop in the queue stub to buffer + replay. GA-style.

head.htmlPre-init queue
<!-- Optional: buffer pre-init AutoCrew.ask() calls -->
<script>
  window.AutoCrew = window.AutoCrew || {
    q: [],
    ask: function () { (this.q = this.q || []).push(["ask", arguments]); },
    open: function () { (this.q = this.q || []).push(["open", arguments]); },
    close: function () { (this.q = this.q || []).push(["close", arguments]); },
    onReady: function () { (this.q = this.q || []).push(["onReady", arguments]); }
  };
</script>
Try it without signing up

The widget is already running on this page. Ask it for a walkthrough — you’ll see exactly what your visitors would.

Versus the alternatives

Static forms. Off-the-shelf chatbots. Custom builds. None of them ship in five minutes.

CapabilityStatic formGeneric chatbotCustom AI buildAutoCrew triggers
Time to deployHoursDaysWeeksMinutes
Per-page question targetingNoPartialYesYes
Voice modeNoNoCustom buildYes
Single-dispatch + length-cappedNoVariesVariesYes
Live handoff to humansNoYesYesYes
New triggers without re-embedNoNoNoYes
CostLowPer-seat (high)Very highUsage-based

The single feature only AutoCrew has: a new trigger never requires a re-embed. Add an HTML attribute, change a URL param, the widget picks it up.

Last button

Ship a widget that talks back.

Twenty minutes with a human, or thirty seconds with the widget itself. Either way you’ll know whether this fits your site before you commit a line of code.

Book a Demo
Or grab the embedthree-line snippet