From URL to live sales agent in under 5 minutes
Blengi reads your website, builds an AI agent grounded in your own content, and embeds it on any page with one line of HTML. Here's exactly what happens.
Drop your URL
< 1 minuteSign up, paste your website URL, and we auto-discover your sitemap and key pages (about, pricing, FAQ, docs). Tick the ones you want indexed and we crawl them in the background — respecting robots.txt, blocking authenticated paths, never touching internal hosts.
- Cloudflare Browser Rendering for JS-heavy sites
- Plain HTTP fallback for simple sites
- Notion + Google Docs sources via OAuth
We index your knowledge
~30 seconds for most sitesCrawled pages are extracted (Readability), chunked along semantic boundaries (~500 tokens with overlap), embedded with Cloudflare bge-base-en-v1.5 or OpenAI text-embedding-3-small, and upserted into Vectorize or Qdrant — every chunk tagged with workspace + agent so retrieval is strictly tenant-scoped.
- Recursive splitter — paragraphs first, sentences as fallback
- Two-stage retrieval: ANN recall + cross-encoder rerank
- Strict workspace isolation enforced by global query scope
Customize the agent
5 minutes of fine-tuningSet persona, tone, language, theme colors, starter prompts, and behavior rules. Add curated answers for pricing or refunds where you can't tolerate paraphrasing. A live preview shows visitors exactly what they'll see.
- 8 widget languages (en, es, fr, de, pt, ja, ar, zh)
- Behavior rules: scroll-depth, idle, exit-intent, intent-keyword
- A/B test rule variants and watch conversion deltas
Publish a snapshot
instantHit Publish — we snapshot the agent into an immutable version row. The widget runtime always reads from the published version, so editing draft settings never affects live visitors. Roll back to any prior version with one click.
- Versioned per-publish history
- Strict allowed-origin enforcement on /v1/widget/init
- One-click rollback to any prior snapshot
Embed one script tag
30 secondsPaste a single <script> tag before </body>. The widget bundle is ≤ 50KB gzipped, async, and renders inside a Shadow DOM so it can't conflict with your site's CSS. Works on any framework — WordPress, Shopify, Next.js, plain HTML.
- Shadow DOM isolation — no CSS leaks
- Persistent visitor sessions across reloads
- Optional voice mic (browser SpeechRecognition)
Visitor asks, AI answers
< 1 second to first tokenA visitor types a question. Hot path: curated short-circuit check → embed query → vector search → rerank → assemble prompt with sources tagged for prompt-injection defense → stream LLM response back over SSE. No DB writes, no synchronous webhooks — persistence is async after the stream completes.
- Hot-path 1s p95 TTFT contract enforced
- Citations [1] [2] linking back to your sources
- Confidence threshold per agent — agent says "I don't know" before guessing
Capture leads, jump in live
when intent is highBehavior rules detect when a visitor shows real intent (asks about pricing, asks for a demo, hits the third turn) and offer the inline lead form. Captured leads land in your inbox immediately, fire a Slack alert, and POST to your webhook for HubSpot / Pipedrive / Mailchimp.
- Real-time inbox via Reverb WebSocket
- One-click human takeover — visitor sees "Human is here"
- Outgoing webhooks with HMAC-signed payloads
1 second to first token. Every time.
The visitor-message → first-token path has a hard p95 budget. No DB writes, no synchronous webhooks, no retries. Persistence and analytics are dispatched async after the stream completes.
OpenTelemetry spans wrap every phase so when the budget breaks the span heatmap points right at the offender.
p95 latency budget
- Receive + auth30 ms
- Curated short-circuit5 ms
- Embed query120 ms
- Vector search80 ms
- Rerank120 ms
- Prompt assembly10 ms
- LLM time-to-first-token500 ms
- Total to first token~ 865 ms

