somebody sent you the export and the answer is due today
Excel opens your file. QueryDesk answers it.
Excel gave up at a million rows, half the answer is in an export from another system, and the file is full of customer names — so it is not going into a website to get a pivot table. Drop both files here, write the join, read the number.
We never see your data. The workbench is served connect-src 'self', so the browser itself refuses to let it reach any server. Ten seconds in devtools proves it.
One file is free forever — a free tier, not a trial, and nothing expires. $49 opens several at once and joins them, saves the workspace and exports the result. Once, for life — or rent it at $13 a week.
🚫
“Excel says the file is too big”
It stops at 1,048,576 rows and the export was four million. Open the same file here and ask it a question instead of scrolling it.
🔗
“I need to join two exports, once, today”
Billing exported a CSV, the CRM exported a Parquet, and standing up a Postgres for a Tuesday afternoon is not a plan. Open both, write the join, get the answer.
🔒
“This is customer data”
So it is not going into a website to get a pivot table. Here it never leaves the tab — and that is a header the browser enforces on us, not a policy we ask you to trust.
⌨️
“Why not just use the DuckDB CLI?”
If the terminal is where you live, do — it is free and it is good, and we are not trying to beat it at SQL. This is the part nobody open-sourced well: a file opened without a toolchain, the inferred types shown before you trust them, a grid that keeps NULL, empty string and NaN apart, and a workspace that comes back tomorrow.
Twenty-three seconds: two exports, one join — the job the $49 is for. orders.csv and customers.csv from two different systems, open side by side. Watch the left rail before the query runs: QueryDesk shows you what it thinks every column is and lets you argue with it, which is how a customer ID sniffed as a number becomes something you fix now rather than something a colleague finds next month. Then the join, and the line underneath it — 23ms, on two small files, entirely in this tab. The number worth reading there is not 23. It is “in this tab”.
That was a recording. This one runs when you press it.
real engine, real SQL, your keyboard ↓
The engine is about 7 MB over the wire and it loads once — 34 MB of WebAssembly after the browser unpacks it. That is the price of running a real database in a tab instead of on somebody else's server, and it is a trade we think is worth stating rather than hiding behind a spinner.
That one runs on a single file, which is free forever. Opening a second and joining it is the $49.
Get it — $49 onceWhat it opens
CSV
Delimiter, header row, quote character and NULL literals are all yours to correct before anything runs.
TSV
Tab-separated; same options as CSV.
JSON
An array of objects, or a single object. Nested objects and arrays come through as DuckDB STRUCTs and LISTs rather than being flattened away.
NDJSON
One JSON object per line — what most log and export pipelines emit.
Parquet
Columnar and lazy: much the fastest way to work past a few million rows here.
Excel (.xlsx)not yet
Not in this build — not finished, rather than impossible. DuckDB publishes a reader for it, and QueryDesk ships DuckDB readers from its own origin rather than downloading them, which is how JSON, NDJSON and Parquet work here. We have not built or tested that path against a real workbook yet, and a spreadsheet read wrongly is worse than one not read at all. Export the sheet as CSV and it opens instantly.
What it does not do
Some of these are scope. Two of them are structural, and those are the interesting ones.
It will not connect to your database
A browser tab cannot open a TCP connection to Postgres. Doing it means a proxy, and a proxy means your credentials and your rows passing through a server we run. Structural, not a scope cut.
It is not unlimited
The engine works inside a browser's memory ceiling and cannot spill to disk. Our own measurement: 40 million rows across 8 columns — a 2.66GB CSV — opened in 6 seconds and grouped in 8, on an M4 laptop with 16GB in Chromium 151. Your machine and your columns will differ, and when it does stop it tells you what ran out and what to try.
No text-to-SQL and no AI
Both mean an outbound request from a page holding your data, which would break the one guarantee that makes this worth buying.
No dashboards, no hosted sharing, no scheduling
This is a workbench, not BI. Every one of those wants a server eventually. To hand a colleague an answer you export the result and send the file; to hand them the work, you export a .querydesk query pack — your queries, never your rows.
No Excel files in this build
Not finished, rather than impossible: DuckDB publishes a reader for .xlsx, and we ship DuckDB's readers from our own servers instead of fetching them while you work — which is how JSON and NDJSON open here. We have not tested that path against a real workbook yet, and a spreadsheet read wrongly is worse than one not read at all. Export as CSV in the meantime and it opens instantly.
No desktop app
There is no download and none is included in the price. When one exists it will earn its own price story, because it can do the thing a browser cannot: talk to a real database.
No .db / SQLite files yet
Genuinely wanted, genuinely local, and it needs a bundled reader rather than DuckDB's network-loaded scanner. Next, not now.
A saved workspace cannot re-open your file for you
It keeps your queries and your column corrections, never a copy of your data — so reopening one asks you to pick the file again, in every browser. That is the cost of not holding your bytes, and we would rather pay it than store them.
This is not an audit tool
No claim about governance, lineage or regulatory fitness. It is a place to answer a question about a file.
how it actually works
The privacy claim is a header, not a paragraph
Queries run on DuckDB compiled to WebAssembly, in a Web Worker, in your tab. The workbench is served Content-Security-Policy: connect-src 'self', so the browser itself refuses to let that page open an HTTP request, a WebSocket or a beacon to any origin but this one — not to us, not to an analytics vendor, not to a CDN. It is not a promise we keep; it is a rule enforced on us.
That has a consequence worth stating: the engine itself is served from this site rather than from jsDelivr, which is what DuckDB-WASM normally does. And DuckDB's INSTALL / LOAD cannot work here, so QueryDesk refuses those statements with an explanation instead of letting them fail as a mystery.
Powered by DuckDB (MIT). We are not affiliated with, or endorsed by, DuckDB Labs.
no subscription required
$49 is the whole price and the last of it. No seat, no per-query charge, no renewal date, and no plan that lapses and takes your saved queries with it — those are in your browser, and your data was never on our side to hold in the first place. Four paid weeks of the rental already cost more than owning it outright, which is on purpose: renting is for the one-week engagement, not for people who will still be opening CSVs next year.
Free, permanently
$0
- ✓ Open a file and read it
- ✓ Write and run SQL
- ✓ See and correct the column types
- ✓ Copy rows to the clipboard
One file at a time. Nothing expires, nothing counts down, and no card is asked for.
Everything
$49once, forever
- ✓ Open several files at once and join them
- ✓ Saved workspaces
- ✓ Query history
- ✓ Export results (CSV, JSON)
Or rent it for $13 a week — deliberately worse value than owning it, and a fair deal if you have one messy dataset and a one-week engagement. Five paid weeks unlock the lifetime licence at half price ($24.50). Nothing auto-converts.
Part of LifeTime Apps — small apps you buy once and own forever. One payment against a category that has been quietly drifting to annual licensing.
Questions worth asking
- How big a file can it actually handle?
- Bigger than Excel by a long way, and not infinite — anyone who tells you otherwise has not measured it. The engine runs inside a browser tab, in a 32-bit address space, and unlike the desktop version of DuckDB it cannot spill to disk. Here is our own measurement rather than a guess: on an M4 laptop with 16GB of memory, in Chromium 151, a 2.66GB CSV of 40 million rows and eight columns opened in 6.2 seconds, a count over it answered in 6.9, and a GROUP BY across 250,000 distinct customers in 7.7. That is one machine and one shape of file, and it is the shape that matters as much as the size — a query whose working set is large behaves differently from a scan, and a deliberately brutal self-join over that same table took 146 seconds rather than failing. So there is a real ceiling, it depends on your machine and your columns, and when you reach it QueryDesk says what ran out and what to do about it — select fewer columns, filter on the way in, or convert to Parquet, which is columnar and reads far less of itself to answer the same question.
- Where does my data go?
- Nowhere. The engine is WebAssembly running in a worker in your tab, and the workbench is served with a Content-Security-Policy of connect-src 'self' — the browser refuses to let that page open a connection to anywhere but this site. Open devtools, run a real query, and watch the network tab stay empty. The one page that can reach a server is the sign-in screen at /account, which only ever asks whether you own a licence; no file is opened on it.
- Do you keep a copy of my file?
- No, and there is nowhere in the storage schema to put one. Files are handed to the engine as handles and read straight off your disk — the bytes are never copied into our storage and never sent anywhere, because the workbench is served a policy that forbids it from reaching a server at all. The engine reads only what it needs to answer the query in front of it, and nothing about your file is written anywhere off your machine.
- Can it connect to my Postgres?
- No, and it structurally cannot: a browser tab has no way to open a raw TCP connection to a database. Doing it would mean routing your credentials and your rows through a proxy we run, which is exactly the thing this product exists not to do. That is also the honest reason a desktop version would eventually be worth building — it is the one thing a browser cannot answer.
- Is there AI in it?
- No — text-to-SQL would mean an outbound request from a page holding your data, which would break the enforcement above. If it ever ships it will be with your own API key, off by default, and with a plain statement of exactly what leaves.
- What is free and what do I pay for?
- One file, queried, read and copied to the clipboard, is free forever — not a trial, and nothing expires. The paid version opens several files at once and joins them, saves your workspace so the queries come back tomorrow, keeps a history of what you ran, and exports a result as CSV or JSON. Joining an export from one system to an export from another is the job most people are actually stuck on, and it is the honest thing to charge for.
- Does it remember my queries between visits?
- Yes — that is the paid part, and the thing it remembers is your queries, never your data. A saved workspace keeps the SQL you wrote and the column corrections you made; it never keeps a copy of the file, so reopening it asks you to pick the file again, in every browser. You can also export a workspace as a small .querydesk file and hand a colleague a query pack — queries and settings only, without a single customer row going with it. That export is free even on the free tier, because a tool that traps your queries is not one we would ship.
- Is this a DuckDB product?
- No. QueryDesk is built on DuckDB, which is MIT-licensed and excellent, and we ship it with the app rather than downloading it. We are not affiliated with DuckDB Labs and are not endorsed by them. DuckDB's own CLI is free and, if you are happy in a terminal, genuinely good — we are not trying to beat it at SQL. We are the part nobody open-sourced well: opening a file without a toolchain, seeing the inferred types before you trust them, a grid you can read, and one payment.