Realtime voice
Speech in and out over WebRTC. Users talk naturally and hear answers immediately.
Embeddable voice agents
Marlin embeds in one script tag. Users talk, the agent reads your UI, highlights what to click, and responds out loud — no chat widget required.
New to Marlin? Create a free account — or tap Ava in the bottom-right to try it on this page.
1 script tag
to embed on any site
WebRTC
speech in and out
Page-aware
highlights & guidance
<!-- Add before </body> -->
<script
src="https://cdn.onmarlin.com/widget.js"
data-project="pk_live_your_project_key"
data-api="https://onmarlin.com/api/session"
data-target="#app"
async
></script>How it works
Marlin sends the agent a pruned accessibility tree with numbered element indices. The agent uses those indices to highlight, scroll, and guide — out loud.
Page context
Reads the live accessibility tree — roles, labels, values, and states — so the agent always knows what's on screen.
Element highlighting
Pulses a highlight on the exact element to click. Spoken guidance stays in sync with what users see.
On-demand snapshots
Captures a JPEG when the DOM isn't enough — charts, canvas content, and visual layouts.
Speech in and out over WebRTC. Users talk naturally and hear answers immediately.
Ephemeral API keys, no screen-share prompt, in-memory state only.
Scope the widget to any element. Works on static sites, SPAs, and multi-page apps.
Visual understanding
Canvas and chart content isn't in the accessibility tree. Marlin captures a snapshot on demand, so the agent can describe trends and visual state — not just buttons and links.
Example response
“Voice sessions climbed through Q2 — June hit 91k. Want me to highlight the export button?”
Ask Ava about the chart on this page to see it in action.
Setup
Copy the install snippet above, add a token endpoint on your server, and Marlin handles the rest.
Add the Marlin widget before </body>. Point data-api at your token endpoint.
Expose POST /api/session on your server. Never ship your OpenAI key to the browser.
Users talk, Marlin reads the page, highlights elements, and responds out loud.
// POST /api/session → ephemeral Realtime API key
export async function POST() {
const session = await openai.realtime.sessions.create({
model: "gpt-realtime-2",
});
return Response.json(session.client_secret);
}Compare
Traditional support bots answer in a sidebar. Marlin reads your page, highlights elements, and guides users out loud.
| Capability | Marlin | Intercom | Drift | Zendesk |
|---|---|---|---|---|
| Real-time voice (speech in / out) | Yes | Limited | No | No |
| Live page & DOM awareness | Yes | No | No | No |
| On-screen element highlighting | Yes | No | No | No |
| One-script embed install | Yes | Partial | Partial | Partial |
| No screen-share permission | Yes | No | No | No |
| Text chat | Out of scope | Yes | Yes | Yes |
Pricing
No credit card to install. Upgrade when traffic grows.
Try Marlin on a single site.
$0/mo
For teams running voice guidance in production.
$99/mo
For orgs with security, scale, and SLA requirements.
Custom
Copy the snippet, wire up your token endpoint, and ship. Ava can walk you through anything you get stuck on.