Which accounts are paying for seats nobody uses?
Why it's hard
Seats paid sit on the subscription row, logins sit in an events table with millions of rows, and "active" means something different to every team that asks.
PostgreSQL + Querri
Your product's accounts, users and events already live in Postgres. Querri lets ops, finance and customer teams ask about them in plain language, alongside billing and the CRM, without anyone writing a query against production.
Querri only reads your PostgreSQL data and never changes a row. Your password goes into a secure form the agent never sees. SOC 2 Type II, HIPAA and ISO 27001:2022 certified.
Why PostgreSQL reporting gets hard
Engineering teams and the people who depend on them describe the same friction. Postgres does its own job well. The friction sits between the database and the person with the question.
Only people who know SQL and the schema can get answers, and they're the ones shipping the product. Customer success and finance wait in line for a query, and the answer gets pasted into a spreadsheet.
A heavy reporting query against the production database shares CPU, memory and locks with customer traffic. Nobody wants to be the person whose dashboard slowed down checkout.
On a hot standby, a query that conflicts with replication is canceled once replay has waited longer than max_standby_streaming_delay, which defaults to 30 seconds. A big analytical read can fail halfway through.
Statuses stored as integers, settings packed into JSONB, soft-deleted rows, test accounts mixed in with customers. Reading the tables correctly takes knowledge that lives in the codebase.
An update overwrites the old value, so last month's plan or status is gone unless someone built history tables. Billing, CRM and support data sit in other systems the database can't join to.
What you can finally answer
Each is a request ops, finance and customer teams send to engineering every week, why it stalls, and how Querri handles it.
Why it's hard
Seats paid sit on the subscription row, logins sit in an events table with millions of rows, and "active" means something different to every team that asks.
Why it's hard
The answer needs the signup date, the first meaningful event and a definition of "meaningful" that product and growth actually agree on.
With Querri
Write the milestone down once in Facts & rules, and Querri measures time to reach it by week, plan and channel. The signup-to-first-value playbook walks through the setup.
Why it's hard
Trial activity is in Postgres and the deal is in the CRM. Matching a workspace to a company is a manual lookup sales never has time for.
With Querri
Connect HubSpot or Salesforce next to Postgres. Ask Querri to match workspaces to companies by email domain. The answer says how the match was made and lists the busy trials with no open deal.
Why it's hard
A drop in usage looks normal in a total. It only stands out when each account is compared with its own past, and nobody runs that query for every customer every day.
With Querri
Keep account activity as a KPI, and nightly monitors check it against its own history and leave the slipping accounts in your Inbox. The at-risk renewals playbook adds renewal dates from the CRM.
Why it's hard
Status 3 means canceled, deleted_at means gone, and internal test accounts look like customers. Get one of those wrong and the churn rate is off.
With Querri
Tell Querri the rules in plain words, such as "leave out accounts with our own email domain." Every answer after that follows them, and Querri checks the data first for duplicates and blanks before it counts.
Why it's hard
Someone runs a saved query on Monday, copies the result into last week's workbook and fixes the formatting by hand.
With Querri
Build the numbers once as a project. A schedule reruns it on the latest sync and emails a formatted workbook. See reports and automation.
Why it's hard
Customer-facing reporting usually means an engineering project: a charting library, an API, and careful filtering so no customer sees another's rows.
With Querri
Build the dashboard by asking, then put it in your app with Embed. A row filter per customer, set once in Workspaces & access, keeps each one to their own data.
Why it's hard
Giving an assistant a connection string means it guesses at your schema, and a credential ends up somewhere it shouldn't.
With Querri
Link Querri with Claude or ChatGPT. Answers come from your Library, using the definitions your team set, limited to what each person may see in Querri. No database credential leaves Querri.
PostgreSQL plus the rest
Postgres knows who signed up and what they did. The CRM knows who sales is talking to, accounting knows who paid, and support knows who's stuck. With all four connected to one Library, a single question about an account can draw on each of them.
PostgreSQL pairs well with
Answers you can stand behind
"How many customers churned in September?" can count cancellations made in September or plans that actually ended then, after a paid period ran out. Each is defensible, and they rarely match. Querri gives one, says which, and shows the other, so finance and product argue about customers rather than queries. See how answers work.
Wake up to what changed
Overnight, Querri compares each KPI with its own track record and goes looking for movement nobody asked about. By morning the results are in your Inbox, and Querri acts on none of them without your approval.
Custom PostgreSQL dashboards
Say what the dashboard should show, or begin from a screenshot of one your team already relies on. Charts read from the same Library as the chat, so product usage can sit beside revenue and support data, and each team or customer can be limited to the rows they should see.
Reports you can stop rebuilding
Days from signup to the first meaningful action, split by signup week and channel.
Read the playbookUsage, seats and support load rolled into one score per account, watched every night.
Read the playbookAccounts renewing soon whose activity in the app is falling.
Read the playbookSeats paid against seats active, per account and plan, kept as a KPI with history.
See KPIsSignups, activation and active accounts, emailed every week as a formatted workbook.
See Excel toolsOne version per customer, sent on a schedule, each showing only that customer's rows.
See reportsWhat comes over
On the schedule you set, Querri copies the chosen tables and views into its own storage. Every question is answered from that copy, so none of them run against your database. It can only sync what the Postgres user you connect with can read.
What you can sync
Full refresh by default. On an incremental schedule, name a cursor column such as updated_at and Querri pulls only rows past the last run's high-water mark, as often as hourly. Deleted rows drop out on a full refresh.
Rows stream to Parquet in chunks, a full sync that's cut off resumes where it stopped, and there's no row cap unless you set one. Reads use a handful of connections per table and are tuned to stay light, on a primary or a read replica.
Querri attaches your database in read-only mode, so it can't insert, update or delete anything. It never changes a row or a table.
You type the username and password into a secure form; they're stored encrypted and the Connector Agent never sees them. SSL is required by default.
How to connect PostgreSQL
Open Connect and say "connect our Postgres database," or pick PostgreSQL from the catalog.
Host, database and username, plus port and password, in a secure form the agent never reads. A read-only user, ideally on a replica, is a good choice.
For a database behind a firewall, add your own OpenVPN profile and certificates in the VPN tunnel panel. They're stored encrypted.
Pick a schema and take every table or just a few, add custom SQL if you need it, and set a schedule. The agent loads nothing before you say yes.
When the first sync lands in your Library, anyone with access can ask, chart or schedule from it.
PostgreSQL FAQ
Ask the Connector Agent on the Connect page for PostgreSQL, or select it in the catalog. Enter the host, database, username and password in the secure form (the port defaults to 5432 and SSL is on), pick a schema and tables, then approve the load and a schedule.
You choose one schema per connection, then take every table in it or select specific ones. Base tables, views, materialized views and foreign tables are all listed, and you can add your own SQL queries as extra sources. Querri only sees what the connected Postgres user is allowed to read.
Full refreshes run on a daily, weekly or monthly schedule. An incremental schedule can run as often as hourly and pulls only rows whose cursor column, such as updated_at, is newer than the last run. A sync you start by hand is a full sync. Incremental runs don't see deleted rows; a full refresh does.
No. Querri only reads your data. It attaches the database in read-only mode, so it can't insert, update or delete a row or alter a table. For extra assurance, connect with a Postgres user that only has SELECT rights.
Questions never run against your database; they run on the copy Querri syncs. The sync itself is tuned to go easy, with a handful of connections per table, and you choose when it runs. You can also point it at a read replica so the primary isn't touched at all.
Yes. Enter the replica's host instead of the primary's. Keep in mind that a hot standby cancels queries that conflict with replication after max_standby_streaming_delay, 30 seconds by default, so a sync of a large table may need that limit raised. Turning on hot_standby_feedback prevents the cancellations caused by vacuum cleanup, at the cost of some bloat on the primary.
Querri can only sync the schemas and tables the connected Postgres user can read, and the schema picker only shows schemas that user has USAGE on. Once data is in Querri, row-level access and sharing settings in Querri decide what each person sees; Postgres roles don't carry over per person.
Use the VPN tunnel panel in the connection form and upload your own OpenVPN profile, CA certificate, client certificate and private key. All four are stored encrypted. SSH tunnels aren't supported for PostgreSQL today, so the VPN is the route for databases that aren't reachable from the internet.
Connect both, and Querri joins them in the Library on a shared key such as an account ID or email domain. You can then put product usage next to renewal dates, account owners and pipeline, and when a match is uncertain the answer says so instead of guessing quietly.
Connect Postgres and HubSpot, and Querri matches app workspaces or users to HubSpot contacts and companies. That lets you see which active trials have no deal, which leads ever activated, and which marketing sources bring users who stick around.
Connect both, and Querri lines up support conversations with what each account does in your product. Ask which features drive the most conversations, or whether accounts that contact support early activate faster or slower than the rest.
Tell Querri which event counts as first value, and it measures the time from each account's signup to that event, by week, plan or channel. The signup-to-first-value playbook walks through the steps, and the result can run as a KPI that keeps its history.
Teach Querri the rules once: which status means canceled, which rows are soft-deleted, which accounts are internal. Every count after that follows them. When churn could mean cancellations or ended plans, Querri says which reading it used and shows the other.
Build the analysis once as a project in Querri, then schedule it. Each run uses the latest synced data and sends a formatted Excel workbook by email, or one version per team or customer, so nobody runs a query and pastes results by hand.
Yes. Describe the dashboard you want, or start from a screenshot of one you already have, and change it by asking. It can mix Postgres with billing, CRM and support data, and each person or customer can be limited to their own rows.
Yes. Link Querri with Claude or ChatGPT one time. The assistant answers from your Querri Library with your team's definitions, under each person's own access, and never gets a database login. It works from the same definitions your dashboards use.
Each connection reads one schema, so several schemas mean several connections. Custom SQL can't sync incrementally, incremental runs only on a schedule, and it doesn't detect deleted rows. There's no SSH tunnel, no SSL certificate verification beyond require, and no change-data-capture streaming; data arrives on a schedule.
Yes. If the user can't read Postgres's system catalogs, Querri falls back to a simpler listing. In that mode materialized views aren't listed and custom SQL queries are refused, so select the tables and views you need directly.
Querri is SOC 2 Type II, HIPAA and ISO 27001:2022 certified, and your data is never used to train a model. Connections require SSL by default, passwords and VPN files are stored encrypted, the Connector Agent never sees them, and the database is attached read-only.
Keep exploring
Setup takes a few minutes. Querri only reads your data and never changes a row.