Data & Analytics Engineers
SQL editor with template variables, AI performance analyzer, OLAP star/snowflake models, materialized caches, and query lineage.
The self-hostable BI platform with AI baked in — not bolted on. Ask in plain English and get SQL. Surface anomalies automatically. Run Claude, Gemini, Ollama or LM Studio — cloud or local. Your data stays yours.
Other BI tools sell embedded analytics, AI, and SSO as separate SKUs. Qrly ships them on day one — fully self-hostable.
| Feature | RecommendedQrlySelf-hosted · Made in Belgium | TableauSalesforce | Power BIMicrosoft |
|---|---|---|---|
| Self-hostable — your server, your data | Included | Cloud only | Azure only |
| Natural-language Ask (NL → SQL) included | Included | Tableau Pulse add-on | Copilot Premium tier |
| Built-in customer embed portal | Included | Separate paid product | Not available |
| Native scheduled subscription (4 delivery channels) | Included | Plugin / add-on | Not available |
| Azure AD + Google + LDAP + Basic Auth simultaneously | Included | Salesforce SSO only | Azure AD only |
| Visual query builder and raw SQL, round-trip convertible | SQL ⇆ visual | Custom SQL is one-way | Power Query M round-trips; DAX does not |
| Alert enforcement with automatic escalation | Included | Service Mgmt tier only | Not available |
| AI with local / on-prem option (Ollama, LM Studio) | Included | Cloud AI only | Azure OpenAI only |
| OIDC SSO user provisioning out of the box | Included | Enterprise tier only | Azure AD sync only |
| Productive in under 5 minutes | Included | Days of configuration | Days of configuration |
Evaluating Qrly against a specific tool? Jump to the detailed side-by-side.
From SQL power users to non-technical operators — every role gets a workspace tuned to how they think, with AI assistance one keystroke away.
SQL editor with template variables, AI performance analyzer, OLAP star/snowflake models, materialized caches, and query lineage.
Type a question in English, AI compiles it to SQL. Visual filters, dashboards, scheduled reports — no SQL required to ship insights.
Ship a branded analytics portal to your customers — public tokens or signed-JWT embeds, locked params, AI-assisted descriptions, no extra license.
Tenant → Org → Project hierarchy with per-tenant branding, custom domains and cache files physically separated per tenant on disk. Per-tenant LLM keys, token budgets and query governors.
Azure AD, Google, LDAP and Active Directory — concurrent, platform-wide or per organisation. AES-256-GCM at rest, full query audit log, on-prem AI for regulated workloads.
Live dashboards over WebSocket or PostgreSQL LISTEN/NOTIFY. AI anomaly detection surfaces what shifted. Cohort analysis without a data engineer in the loop.
Twelve reasons Qrly is the BI + AI stack you can actually own — not rent.
Type "MRR by plan tier last quarter" — Qrly compiles QQL/SQL, suggests a chart, and lets you review before saving. Conversational, multi-turn, never auto-runs destructive SQL.
Anthropic Claude, Google Gemini, OpenAI, Azure OpenAI, Ollama, LM Studio. Per-org config, AES-256-GCM encrypted keys, hard token budgets per user.
Statistical + AI-assisted anomaly scans on verified questions. Surfaces shifts in revenue, churn, or ops metrics in the Insights feed — promotable into a saved alert in one click.
Point Qrly at http://ai.internal — Ollama or LM Studio. Sensitive schemas never leave your network. Banks, defence, public sector use this.
One JSON spec compiles to PostgreSQL, MySQL, BigQuery, Snowflake, Redshift, SQL Server, MariaDB, SQLite, DB2, Sybase and Pervasive — 12 dialect compilers, 40 connection types. Roughly 35 operators including regex, JSON path, full-text and range.
Star and snowflake schemas with facts, dimensions, hierarchies, measures and AI-suggested dimensions. Drill-down, drill-through, pivot — all compiled to native SQL.
WebSocket interval mode or PostgreSQL LISTEN/NOTIFY for sub-second refresh. Cards update in place — no full reload, no flicker.
Public tokens or signed-JWT embeds with locked params. Ship a branded analytics portal to customers without a second SKU. Every tier.
Tenant → Org → Project → Collection, with per-connection cache files laid out per tenant and organisation, custom domains per tenant or org, and permissions re-resolved most-permissive-wins on every request.
Azure AD and Google OIDC — platform-wide clients and per-organisation registrations — plus LDAP, Active Directory and passwords, all concurrent. SSO discovery by hostname, JWT with a revocation denylist, scoped API tokens, per-IP lockout.
Rows returned, goal reached, below goal. Email, Slack, webhook, SMS and an in-app inbox. Hourly, daily, weekly or monthly, as PDF, CSV or inline, with optional AI narration. Not a marketplace add-on.
Spring Boot 4 + Java 25 + PostgreSQL, GraalVM native-image capable. Run on any Linux box or Kubernetes cluster. Export everything. Your data, your AI keys, your server, your terms.
Five core capabilities — AI Ask, alerts, multi-tenancy, subscriptions, BYO LLMs — that turn questions into decisions.
Qrly compiles natural-language questions into QQL/SQL via your chosen LLM — Claude, Gemini, OpenAI, or local Ollama. Multi-turn conversations, schema-aware, never auto-runs destructive SQL.
-- Ask: "Top 10 customers by revenue this week" → Provider: Anthropic Claude Sonnet 4.6 → Schema: public.orders, public.customers -- Compiled QQL → PostgreSQL: SELECT c.name, SUM(o.total) FROM orders o JOIN customers c WHERE o.created_at >= startOfWeek() ORDER BY 2 DESC LIMIT 10 → Suggested: horizontal bar chart → Tokens: 412 / 25,000 daily budget -- Click "Run" to execute · "Save" to publish
Configure threshold and goal-based alerts per question. Triggers fan out automatically — retrying, escalating, delivering to Slack, Teams or webhook — without human intervention.
-- Alert config: question REV-142 condition : GOAL_REACHED threshold : 100,000 EUR schedule : HOURLY -- On trigger: → notifySlack "#growth" → notifyTeams "Revenue" → postWebhook true -- REV-142: 🎯 102,440 EUR (+2.4%) STATUS GOAL_HIT → DELIVERED
The entire data model is built around Tenant → Organization → Project. Every feature — auth, AI, mailboxes, webhooks — is scoped at the correct level with zero data leakage.
-- Tenant: CloudCorp GmbH ├─ Org: Engineering ├─ Project: BACKEND ├─ Project: FRONTEND └─ Project: INFRA └─ Org: Support └─ Project: EMBED -- Tenant: StartupXYZ └─ Org: Product └─ Project: OPS → Zero cross-tenant leakage
Not a plugin. Not a webhook hack. Native scheduled subscription pipeline with four delivery channels, cron schedules, signed embed tokens, and per-recipient format selection.
-- Subscription: REV-142 weekly digest ⚙ "Revenue dashboard — every Monday" Schedule: WEEKLY · Mon 09:00 Format: PDF + inline HTML Channels: Email, Slack #growth → Rendered: 12 cards · 1.4MB PDF → Email delivered: 23 recipients → Slack posted: snapshot + link -- Click-through opens signed-JWT embed → Locked filters: org_id, tenant_id
Claude, Gemini, OpenAI, Ollama, LM Studio — all configurable per org. AI accelerates Ask (NL → SQL), schema descriptions, chart suggestions and anomaly detection, with hard rate limits, circuit breakers, and full usage logging.
-- AI providers: Acme Corp ✓ Anthropic Claude ACTIVE budget: 25k tokens/user/day ✓ Ollama (local) ACTIVE endpoint: http://ai.internal -- Ask: "MRR by plan tier last month" → Compiled: QQL → SQL → Suggested: stacked bar chart → Human reviews before save -- AI never auto-runs destructive SQL
A dense, functional UI built for power users. No animations, no clutter — just the work.
AI that drafts queries. A query language that compiles anywhere. Identity that just works. A supervised agent layer, four cache tiers, and a spreadsheet engine that survives a refresh.
Qrly's AI layer is provider-agnostic — Anthropic Claude, Google Gemini, OpenAI, Azure OpenAI, Mistral, Ollama, LM Studio, Jan.ai, LocalAI and anything else speaking the OpenAI protocol. Configure per organisation. Encrypted keys. Per-user daily token budgets. Local execution for full data sovereignty.
-- Configured providers (encrypted keys) ✓ Anthropic Claude PRIMARY model: claude-sonnet-4-6 budget: 25k tokens / user / day ✓ Ollama (on-prem) FALLBACK endpoint: http://ai.internal:11434 model: llama3.1:70b -- AI use cases: → Ask NL → SQL → DescribeBulk schema docs → AnalyzePerformance find slow paths → DetectAnomalies cron + AI scan → SuggestChart pick viz type -- Hard rate limits + circuit breakers -- AI never auto-runs destructive SQL
One JSON query document compiles to PostgreSQL, MySQL, MariaDB, SQL Server, BigQuery, Snowflake, Redshift, SQLite, H2, DB2, Sybase and Pervasive — with Trino, Presto, DuckDB, ClickHouse, Vertica, Athena and Spanner folding into a compatible dialect. Roughly 35 operators across regex, JSON path, range, full-text and arrays. Visual builder, raw SQL editor, OLAP models — three origins, one engine.
Run multiple auth providers simultaneously. Employees use Azure AD, contractors use a password, partners use Google — all on the same organisation, and the login page decides which buttons to show from the hostname it was reached on.
qrly_live_…, SHA-256 hashed, scoped, rate-limited per token, revealed once-- Active providers, login page auto-renders ✓ Azure AD ACTIVE ↳ employees ✓ Google OAuth2 ACTIVE ↳ partners ✓ LDAP / AD ACTIVE ↳ on-prem, group sync ✓ Password ACTIVE ↳ contractors, BCrypt -- SSO discovery resolves from the hostname -- JWT: HttpOnly cookie + revocation denylist -- Session timeout · max sessions · IP lockout -- Read-only pool · every SQL sanitized
An Analyst that answers, a Composer that builds dashboards, a Modeler that proposes OLAP models and an Investigator that runs a fixed six-step root-cause method with every write tool stripped out of its prompt. 29 tools — 16 read, 13 write — and every single write stages a proposal for a human to approve or reject.
-- step 4/10 · budget 12.4k / 50k tokens → validate_columns ok · fk-backed → compile_qql ok → execute_query 1,204 rows → create_dashboard PROPOSED action #8814 · awaiting approval payload: 6 cards · 12-col grid · date filter -- require_approval_for_writes = true -- agent SQL is read-only; DDL/DML rejected
Warm results in the JVM, persist them across restarts, materialize them as real tables in your own warehouse, or replicate the source tables outright over change data capture. All opt-in per connection or per question, all encrypted, and every cache failure degrades to a live query rather than an error.
-- opt-in per connection or per question ✓ T1 · JVM columnar ✓ T2 · SQLite WAL STALE mode serve stale, revalidate async ✓ T3 · Materialized UPSERT → analytics.mrr_by_plan (real table) ✓ T4 · Table sync CDC debezium · slot + publication · tailing -- AES-256-GCM at rest · never plaintext -- cache failure always degrades to a miss
Roughly 500 worksheet functions with their own tokenizer, parser and evaluator — named ranges, dynamic-array spilling, cycle detection and the full Excel error set. Then bind a block of cells to a saved question, stored QQL, ad-hoc SQL or an AI prompt, and refresh it without destroying the work built around it.
-- binding: QUESTION #412 → Sheet1!B4 -- key columns: account_id → rows written 1,180 → columns written 9 → columns kept 3 ↳ your notes → rows kept 14 → columns dropped 1 ↳ cleared, not shifted -- untagged user cells are never touched -- =XLOOKUP in col L still points at its row
Twenty-six capability areas, one self-hostable platform. No add-ons, no second SKU, no proprietary cloud. See the full capability map →
NL→QQL Ask, schema descriptions, performance analyzer, anomaly detection at |z| > 2.5, chart & filter suggestions.
Claude, Gemini, OpenAI, Azure OpenAI, Mistral, Ollama, LM Studio and any OpenAI-compatible service. Encrypted keys, per-org budgets.
Analyst, Composer, Modeler, Investigator. 29 tools, 16 read and 13 write — every write stages a proposal a human approves.
Visual builder, raw SQL, OLAP-backed. 13 chart types, 12-column grid, cascade filters, drill-through, verified questions.
One JSON document, 12 dialect compilers. ~35 operators across regex, JSON path, range, full-text and arrays.
Star & snowflake models. ROLLUP, CUBE, GROUPING SETS, time-hierarchy drill, prior-period comparison, Top-N, pivot.
~500 worksheet functions, dynamic-array spilling, 17 format presets. Refresh-safe blocks keep your columns and notes.
Card and analysis reports, public share links, bursting into one page per filter value, CSV/JSON/XML/XLSX, ZIP packages.
40 connection types over 12 dialects, plus managed AWS, Azure and GCP variants. SSH tunnels, SSL, AES-encrypted credentials.
JVM columnar, persistent SQLite or app-DB, materialized tables in your own warehouse. AES-256-GCM at rest, failures degrade to a miss.
Replicate raw tables by full reload, watermark, snapshot-delta or CDC via embedded Debezium. Atomic staging swap per dialect.
Design schemas in the browser, compiled to dialect DDL. Three-tier enable cascade, all off by default. The only DDL path.
Connections, tables, questions, dashboards, alerts and subscriptions as a graph rebuilt from source. Mermaid, Markdown and PDF export.
Opt-in JDBC introspection, curated names and descriptions, an exportable data dictionary, ERD viewer and freshness probes.
14 Basel principles in code, self-assessments with sign-off, 7 executable data-quality checks, column-level lineage, issue tracker.
Self-verifiable signed JWTs with locked params and expiry, per-org signing key, JS SDK with auto-resize, embeddable agent widget.
Run questions and reports over HTTP in JSON, CSV, NDJSON or Parquet. RPC to stored procedures, table writes with Prefer handling.
JSON-RPC at /mcp with SSE, 8 tools, read-only by design. Authenticated with existing API tokens — no new credential type.
Interval re-run or a PostgreSQL LISTEN/NOTIFY channel on the data source. WebSocket card updates, no full page reload.
Rows returned, goal reached, below goal. Email, Slack, webhook, SMS and in-app inbox. PDF, CSV or inline, with optional narration.
Tenant → organisation → project → collection. Custom domains per tenant or org, driving branding and sign-in options.
Collection, project and data access levels resolved most-permissive-wins. RESTRICTED runs saved questions; FULL authors SQL.
Password, LDAP, Active Directory, Azure AD and Google — platform-wide and per organisation. SSO discovery by hostname, scoped API tokens.
Per-connection semaphore with a FIFO queue and wait timeout. Per-user daily query budget, atomically reserved before every run.
Two tiers resolving org → tenant → default, first non-null per field. Logos, favicon, four colours, custom CSS, branded email.
Query audit log with SQL, rows, duration and status; agent tool calls; verification history. Retention enforced by a daily sweep.
Proven, battle-tested open source. No proprietary cloud dependencies. Runs on any server you control.
Annual fee on your revenue, charged in marginal tranches like income tax — so there are no cliffs, and the rate drops as you scale. From €900/yr. On-premise or private cloud. Multi-organization by design — unlimited everything, one organization, one installation. No per-seat nonsense, no hidden costs.
| Tier | Revenue | Annual | Monthly |
|---|---|---|---|
| Starter | up to €500k | €900 | €75 |
| Business | €1M | €1,500 | €125 |
| Scale | €5M | €3,600 | — |
| Scale+ | €25M | €9,000 | — |
| Enterprise | €100M | €21,750 | — |
| Group | €500M | €63,750 | — |
| Global | €1B | €93,750 | — |
Every feature ships at every tier — unlimited everything, one organization, one installation. Qrly does not gate functionality behind price. Minimum €900 a year, and there is no free tier. Consultancy, setup and training are not included in the licence — they are available on request at additional cost, quoted before any work starts.
Questions about pricing, features, or self-hosting? Drop us a line — we usually reply within a few hours.