BI + AI · Self-Hosted · Made in Belgium

Business Intelligence. Powered by AI.

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.

40Connection Types
5LLM Adapters
13Chart Types
28Agent Tools
100%Self-Hostable
Why Teams Switch

BI + AI in one product. No add-ons. No lock-in.

Other BI tools sell embedded analytics, AI, and SSO as separate SKUs. Qrly ships them on day one — fully self-hostable.

Legend: Fully included Partial / extra cost Not available
Feature RecommendedQrlySelf-hosted · Made in Belgium TableauSalesforce Power BIMicrosoft
Self-hostable — your server, your dataIncludedCloud onlyAzure only
Natural-language Ask (NL → SQL) includedIncludedTableau Pulse add-onCopilot Premium tier
Built-in customer embed portalIncludedSeparate paid productNot available
Native scheduled subscription (4 delivery channels)IncludedPlugin / add-onNot available
Azure AD + Google + LDAP + Basic Auth simultaneouslyIncludedSalesforce SSO onlyAzure AD only
Visual query builder and raw SQL, round-trip convertibleSQL ⇆ visualCustom SQL is one-wayPower Query M round-trips; DAX does not
Alert enforcement with automatic escalationIncludedService Mgmt tier onlyNot available
AI with local / on-prem option (Ollama, LM Studio)IncludedCloud AI onlyAzure OpenAI only
OIDC SSO user provisioning out of the boxIncludedEnterprise tier onlyAzure AD sync only
Productive in under 5 minutesIncludedDays of configurationDays of configuration
Deep Comparisons

Qrly vs every alternative

Evaluating Qrly against a specific tool? Jump to the detailed side-by-side.

Who It's For

BI for the team. AI for the analyst.

From SQL power users to non-technical operators — every role gets a workspace tuned to how they think, with AI assistance one keystroke away.

Data & Analytics Engineers

SQL editor with template variables, AI performance analyzer, OLAP star/snowflake models, materialized caches, and query lineage.

SQL + QQLOLAP ModelsAI Perf AnalyzerLineage Graph

Business & Ops Analysts

Type a question in English, AI compiles it to SQL. Visual filters, dashboards, scheduled reports — no SQL required to ship insights.

AI Ask (NL→SQL)Visual BuilderInsights FeedSubscriptions

Embedded Analytics & SaaS

Ship a branded analytics portal to your customers — public tokens or signed-JWT embeds, locked params, AI-assisted descriptions, no extra license.

Public EmbedSigned JWTLocked FiltersWhite Label

MSPs & Consultancies

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.

Multi-TenancyCustom DomainsPer-Tenant LLMQuery Budget

Enterprise IT & Compliance

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.

Per-Org OIDCAES-256-GCMOn-Prem AIQuery Audit

Product & Growth Teams

Live dashboards over WebSocket or PostgreSQL LISTEN/NOTIFY. AI anomaly detection surfaces what shifted. Cohort analysis without a data engineer in the loop.

Live DashboardsAI AnomaliesCohort Analysis13 Chart Types
Why Qrly

BI for everyone. AI on your terms.

Twelve reasons Qrly is the BI + AI stack you can actually own — not rent.

USP — 01

AI Ask — Plain English to SQL

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.

USP — 02

Bring Your Own LLM

Anthropic Claude, Google Gemini, OpenAI, Azure OpenAI, Ollama, LM Studio. Per-org config, AES-256-GCM encrypted keys, hard token budgets per user.

USP — 03

AI Anomaly Detection

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.

USP — 04

Local LLM = Full Data Sovereignty

Point Qrly at http://ai.internal — Ollama or LM Studio. Sensitive schemas never leave your network. Banks, defence, public sector use this.

USP — 05

QQL — Cross-Dialect Query Language

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.

USP — 06

OLAP Models Without a Cube Server

Star and snowflake schemas with facts, dimensions, hierarchies, measures and AI-suggested dimensions. Drill-down, drill-through, pivot — all compiled to native SQL.

USP — 07

Live Dashboards, Not Polled Snapshots

WebSocket interval mode or PostgreSQL LISTEN/NOTIFY for sub-second refresh. Cards update in place — no full reload, no flicker.

USP — 08

Embedded Analytics Included

Public tokens or signed-JWT embeds with locked params. Ship a branded analytics portal to customers without a second SKU. Every tier.

USP — 09

Multi-Tenancy Down To The Disk

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.

USP — 10

Identity Without Compromise

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.

USP — 11

Alerts & Subscriptions Built In

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.

USP — 12

Self-Hostable, No Lock-In

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.

Screenshots

See every pixel.

A dense, functional UI built for power users. No animations, no clutter — just the work.

Qrly UI screenshot 1
Project workspace — question list, SQL editor and recent activity in one view
Qrly UI screenshot 2
Connections — JDBC sources with type, scope, host and live status
Qrly UI screenshot 3
Connection detail — ERD and Data Dictionary tabs with AI Assistant and schema sync
Qrly UI screenshot 4
Schema browser — 69 tables, 1215 columns, 256 relationships rendered as interactive ERD
Qrly UI screenshot 5
AI Assistant — auto-describe tables, fill data dictionary, generate analysis reports
Qrly UI screenshot 6
Visual question builder — pick source, joins, calculated fields, filters, summarize, group-by
Qrly UI screenshot 7
SQL editor — Format, Explain, Convert to Visual, AI Helper for plain-English to SQL
Qrly UI screenshot 8
Subscriptions — schedule a question or dashboard with format, recipients and cron cadence
Qrly UI screenshot 9
Users admin — invite, deactivate and manage members with status and last-login
Qrly UI screenshot 10
AI Providers — bring-your-own LLM (Claude, OpenAI, Gemini, Mistral, Ollama, LocalAI) with spend tracking
Qrly UI screenshot 11
Audit Log — every query against your data sources with user, rows, duration and status
Qrly UI screenshot 12
Permissions — group-based access on collections and data connections
Qrly UI screenshot 13
OLAP model — base table, joins, dimensions and measures with AI assistant
Feature Deep-Dives

Six pillars. One platform.

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.

AI Layer

AI woven into every workflow.

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.

  • Ask — natural language → QQL, compiled, executed and narrated
  • Schema descriptions — AI-written docs for tables & columns, schema-only by default
  • Performance analyzer — a heuristic score with findings ranked HIGH to INFO; AI recommendations are an explicit step, so no tokens are spent by default
  • Anomaly detection — |z| > 2.5 and week-over-week deltas above 25%, surfaced in the Insights feed
  • Chart suggestions — picks the right viz for the result shape
  • Filter suggestions — recommends interactive parameters and their lookup SQL
  • Context drawer — opens the exact system prompt that was sent, broken down by source
AI Providers — Acme Corp
-- 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
BI Layer

QQL across any database.

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.

  • 40 connection types across 12 dialect compilers, including managed AWS, Azure and GCP variants
  • 13 chart types: bar, line, area, pie, scatter, KPI, gauge, progress, funnel, pivot, maps — plus TREND on dashboards
  • OLAP star/snowflake models with ROLLUP, CUBE, GROUPING SETS, pivot and prior-period comparison
  • Live dashboards: WebSocket interval or PostgreSQL LISTEN/NOTIFY on the data source
  • Interactive filters, calculated fields, forecasting and drill-through
  • Question-as-view — reuse any saved question as a source or join target, five levels deep, with cycle detection
BACKEND · Question List
REV-142Chart
Monthly recurring revenue by plan tier
VerifiedMaterialized⏱ refresh 5m
REV-139Dashboard
Sales pipeline — North America Q2
SharedLive
REV-136Alert
Anomaly detected — orders/hour below threshold
SlackTriggered
Authentication

Any Identity. One Platform.

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.

  • Azure AD and Google (OAuth2/OIDC) — platform-wide clients and per-organisation registrations, composed at runtime
  • LDAP and Microsoft Active Directory per organisation, with group sync and encrypted bind credentials
  • SSO discovery by hostname — a custom domain resolving to one organisation narrows the page to that organisation
  • API tokens qrly_live_…, SHA-256 hashed, scoped, rate-limited per token, revealed once
  • JWT in an HttpOnly cookie with a denylist for logout and revocation, rotating keys and a validation cache
  • Configurable session timeout, max sessions per user, login-failure tracking and per-IP lockout
Auth Configuration — Acme Corp
-- 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
Agent Layer

Four personas. Nothing writes unasked.

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.

  • Propose then approve — write tools have no path to the real service call; approval required defaults to on
  • Four stop conditions — step cap, daily token budget re-queried mid-run, wall-clock deadline, provider error
  • Repetition circuit breaker — the same call three times returns a synthetic observation telling the model to change approach
  • Server-side tool allow-list per session, on top of prompt-level filtering
  • Full audit — every tool call with step, input, output, duration and status; opt-in per-step prompt auditing
  • Verified findings — an independent validator re-checks every outlier the Investigator claims
Agent Session — Composer
-- 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
Performance Layer

Four cache tiers. Then replication.

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.

  • T1 JVM cache — in-process, byte-budgeted, with an optional columnar store of typed primitive arrays
  • T2 persistent cache — the application database or a per-connection SQLite WAL file, laid out per tenant and organisation
  • T3 materialized tables — a real table in a database you own, directly queryable by any other tool
  • T4 table sync — full reload, watermark, snapshot-delta or CDC through embedded Debezium on Postgres, MySQL and SQL Server
  • AES-256-GCM at rest in both cache tiers — the cache never stores plaintext rows
  • Read routing transparently rewrites visual questions to the synced copy; native SQL is never rewritten
Cache Tiers — warehouse-prod
-- 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
Spreadsheet Reports

A real workbook. Bound to live SQL.

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.

  • Refresh-safe blocks — source columns are addressed by name, so inserted columns and rows are preserved and never overwritten
  • Key columns return each record to its previous row, so hand-written cells stay beside their record across reorders
  • AI bindings resolve once to SQL, then refresh as plain SQL — a scheduled refresh never spends tokens
  • 17 conditional-format presets plus colour scales, data bars and icon sets with custom thresholds
  • Point mode, fill handle, paste-special including transpose, frozen panes, merged cells, find and replace
  • Server-side export to XLSX with real formulas, CSV, JSON and XML — the same bytes a subscription emails
Refresh — Q3 Board Pack.sheet
-- 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
Full Capabilities

BI + AI under one roof.

Twenty-six capability areas, one self-hostable platform. No add-ons, no second SKU, no proprietary cloud. See the full capability map →

AI — Ask & Insights

NL→QQL Ask, schema descriptions, performance analyzer, anomaly detection at |z| > 2.5, chart & filter suggestions.

BYO LLM

Claude, Gemini, OpenAI, Azure OpenAI, Mistral, Ollama, LM Studio and any OpenAI-compatible service. Encrypted keys, per-org budgets.

AI Agents

Analyst, Composer, Modeler, Investigator. 29 tools, 16 read and 13 write — every write stages a proposal a human approves.

Questions & Dashboards

Visual builder, raw SQL, OLAP-backed. 13 chart types, 12-column grid, cascade filters, drill-through, verified questions.

QQL Query Language

One JSON document, 12 dialect compilers. ~35 operators across regex, JSON path, range, full-text and arrays.

OLAP Models

Star & snowflake models. ROLLUP, CUBE, GROUPING SETS, time-hierarchy drill, prior-period comparison, Top-N, pivot.

Spreadsheet Reports

~500 worksheet functions, dynamic-array spilling, 17 format presets. Refresh-safe blocks keep your columns and notes.

Reports & Packages

Card and analysis reports, public share links, bursting into one page per filter value, CSV/JSON/XML/XLSX, ZIP packages.

Connections

40 connection types over 12 dialects, plus managed AWS, Azure and GCP variants. SSH tunnels, SSL, AES-encrypted credentials.

Four Cache Tiers

JVM columnar, persistent SQLite or app-DB, materialized tables in your own warehouse. AES-256-GCM at rest, failures degrade to a miss.

Table Sync & CDC

Replicate raw tables by full reload, watermark, snapshot-delta or CDC via embedded Debezium. Atomic staging swap per dialect.

Constructions

Design schemas in the browser, compiled to dialect DDL. Three-tier enable cascade, all off by default. The only DDL path.

Lineage

Connections, tables, questions, dashboards, alerts and subscriptions as a graph rebuilt from source. Mermaid, Markdown and PDF export.

Schema Sync & Dictionary

Opt-in JDBC introspection, curated names and descriptions, an exportable data dictionary, ERD viewer and freshness probes.

BCBS 239

14 Basel principles in code, self-assessments with sign-off, 7 executable data-quality checks, column-level lineage, issue tracker.

Embedded Analytics

Self-verifiable signed JWTs with locked params and expiry, per-org signing key, JS SDK with auto-resize, embeddable agent widget.

Public Data API

Run questions and reports over HTTP in JSON, CSV, NDJSON or Parquet. RPC to stored procedures, table writes with Prefer handling.

MCP Server

JSON-RPC at /mcp with SSE, 8 tools, read-only by design. Authenticated with existing API tokens — no new credential type.

Live Dashboards

Interval re-run or a PostgreSQL LISTEN/NOTIFY channel on the data source. WebSocket card updates, no full page reload.

Alerts & Subscriptions

Rows returned, goal reached, below goal. Email, Slack, webhook, SMS and in-app inbox. PDF, CSV or inline, with optional narration.

Multi-Tenancy

Tenant → organisation → project → collection. Custom domains per tenant or org, driving branding and sign-in options.

Permissions Engine

Collection, project and data access levels resolved most-permissive-wins. RESTRICTED runs saved questions; FULL authors SQL.

Authentication

Password, LDAP, Active Directory, Azure AD and Google — platform-wide and per organisation. SSO discovery by hostname, scoped API tokens.

Governor & Budgets

Per-connection semaphore with a FIFO queue and wait timeout. Per-user daily query budget, atomically reserved before every run.

Whitelabel Branding

Two tiers resolving org → tenant → default, first non-null per field. Logos, favicon, four colours, custom CSS, branded email.

Audit Trail

Query audit log with SQL, rows, duration and status; agent tool calls; verification history. Retention enforced by a daily sweep.

Technology

Boring tech. By design.

Proven, battle-tested open source. No proprietary cloud dependencies. Runs on any server you control.

  • Java 25
  • Spring Boot 4.0.3
  • Jakarta EE 11
  • Spring Security
  • PostgreSQL 14+
  • Flyway Migrations
  • HikariCP
  • Thymeleaf
  • Bootstrap 5 / Tabler.io
  • ApexCharts
  • Vanilla ES6+
  • JWT (HS256/RS256/ES256)
  • OAuth2 / OIDC
  • LDAP
  • JDBC (12 dialects)
  • Anthropic / Gemini / OpenAI
  • Ollama / LM Studio
  • PostgREST-style API
  • OpenAPI 3 / Swagger
  • WebSocket Live
  • AES-256-GCM
  • Debezium CDC
Pricing

Pay what you scale. Less as you grow.

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.

Your annual revenue
€
Your annual fee
€1,500
per year · unlimited everything, one organization, one installation · 0.15% effective
TierRevenueAnnualMonthly
Starterup 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.

  • All prices excl. VAT
  • € billing only
  • On-premise or private cloud
  • Multi-organization · Unlimited users & projects
  • Services quoted separately
Self-Hostable · BYO LLM · No Lock-In

Your data. Your AI. Your server.

Spring Boot 4 + PostgreSQL on your infra. Bring your own LLM — Claude, Gemini, or local Ollama. Sensitive schemas never leave your network unless you want them to. View Pricing Explore Features
Get in Touch

Let's talk about Qrly.

Questions about pricing, features, or self-hosting? Drop us a line — we usually reply within a few hours.

Address
Schrieksesteenweg 40-42
2221 Heist-op-den-Berg, Belgium
Email
Use the contact form — we'll get back to you promptly.
Machine translation

Read this site in your language.

The site is written in English. Google Translate can show it in Dutch, French and Luxembourgish. The translation is automatic and not reviewed by us: for prices and terms the English page is the one that counts.

Translation by Google. Choosing a language loads Google Translate, sends the text of the pages you open to Google and stores one cookie in this browser until you close it. English switches all of that off. Google privacy policy