Any website, a working chatbot in minutes.
Point Contextly at your docs, drop in one script tag, and a grounded AI chatbot goes live on your site — no infrastructure to manage.
Open, portable, self-hostable
Everything you need to ship a production RAG chatbot
No infrastructure to manage. We handle ingestion, retrieval, auth, and monitoring so you can focus on your users.
Document Ingestion
Upload PDFs, Markdown, or paste a URL — Contextly chunks, embeds, and indexes it with Azure OpenAI embeddings.
Embeddable Widget
One script tag drops a secure chat widget onto any site. Iframe isolation keeps customer data where it belongs.
Semantic Search
High-performance vector retrieval over pgvector HNSW indexes, tuned for relevance and context-window limits.
Tenant Isolation
Every database query is scoped to a project_id, with Row-Level Security as defense-in-depth. Your data never leaks across tenants.
Async Ingestion
Heavy processing is offloaded to Dramatiq workers via Redis, so uploads never block your API or dashboard.
Observability
Structured JSON logs, Prometheus metrics, and real-user widget telemetry give you full visibility into performance and usage.
From docs to live chatbot in four steps
Upload your content
Drop in PDFs, paste a URL, or add Markdown. We accept the formats your docs already live in.
Chunk & embed
Content is split into context-aware chunks and converted into embeddings by Azure OpenAI, stored in pgvector.
Users ask questions
Your visitors chat through the embedded widget or your own API integration. Every request is tenant-scoped.
Get grounded answers
The model answers from retrieved chunks with inline citations, reducing hallucinations and building trust.
Integration
Add Contextly to your site in seconds
Drop one script tag before the closing body tag. The widget fetches a short-lived token, loads the iframe, and starts answering questions from your indexed content.
- No build step required
- Works on any website or CMS
- Automatic token refresh before expiry
- Origin-validated for your domain
▍Security
Built safe by default
Security is not a checkbox here. It shapes how we store keys, issue tokens, and isolate tenant data.
Tenant isolation
Every database query includes project_id. Combined with Row-Level Security, your data stays strictly separated — no cross-tenant leakage, ever.
bcrypt API keys
API keys are hashed with bcrypt, never SHA-256. They resist GPU cracking and are easy to rotate or revoke.
JWT widget tokens
Short-lived tokens validated for signature, expiry, issuer, audience, and origin on every request.
No wildcard postMessage
Widget and parent communicate with explicit targetOrigin. No open wildcards, ever.
Guarantees
What holds true from day one
Row-level security on every query
project_id scoping enforced in-app and by PostgreSQL RLS.
Short-lived widget tokens
24h signed JWTs, origin-validated, auto-refreshed.
bcrypt-hashed API keys
Keys are never stored or logged in plaintext.
Observability out of the box
Structured JSON logs, Prometheus metrics, widget telemetry.
Pricing
Start free, scale with confidence
Generous free tier for side projects. Pro when you need more projects, higher token limits, and priority support.
Pro
For serious projects
- 5 projects
- 2M token cap
- Higher token limits
- Priority support
FAQ
Questions? Answered.
Ready to ship your AI assistant?
Join teams building the next generation of customer-facing support and documentation chatbots.