Private SQL Analytics - Process Locally, Stay Secure Client-Side Data Virtualization - Maximum Privacy, Nothing Uploaded Drag, Drop, Query - Data Analysis Made Simple From Spreadsheet to SQL in One Click No Database Admin Required - Just Pure SQL Power One Tool, Many Formats - CSV, Excel, JSON, Parquet and More Convert Between Formats with SQL Superpowers Select File. Query. Export. Repeat. Turn Your Data Files into Database Tables Instantly Your Files, Your Machine, Your Rules Works Offline Once Loaded
OmniSelect FileSQL by ClientVirt

Ask your data files in plain English. Nothing uploaded.

Type a question and get the SQL, or write your own. Query and join CSV, Excel, JSON, Parquet, SQLite, SPSS and many more file types right in your browser, and export the results as CSV, JSON, Excel or Parquet. Free, no sign-up, nothing to install.

No AI and no API calls: your question becomes SQL inside your browser. Export to CSV, JSON, Excel or Parquet. Works offline once the page has loaded.

A replay of the guide Working With Client Data Under an NDA. The network is switched off in a terminal and a ping fails. Only then is a made-up client ledger added to the app and queried for spend by account: Rent comes first at 153,326.76. The result is exported to Excel, and a final check shows the network was down the whole time, so no third party ever received the file.

Plain English and SQL for your data files, in your browser

OmniSelect FileSQL turns CSV, Excel, JSON, XML, YAML, Avro and Parquet files — and SQLite, Access, SPSS, SAS and Stata data, ZIP archives and more — into SQL tables inside a browser tab. Ask a question in plain English and the SQL is written for you, or write your own. Filter, join, group and aggregate, then export the result. Files are read into memory on your own machine: they are not uploaded, there is no account to create and nothing to install.

1. Add files

Click the File Select panel or drop files onto it, up to 26 at once. Each file becomes a table named by a letter from its filename, so orders.csv is O.

2. Ask in plain English

Type a question such as total revenue by city. The SQL appears beside it, ready to edit; press Ctrl+Enter to run it. Prefer SQL? Write your own SELECT. No file to hand? Use Try sample data in the File Select panel.

3. Export

Download the result as CSV, JSON, Excel or Parquet. The file is generated in your browser and saved straight to your disk. An export holds every row of the result, not just the rows on screen.

Supported formats

FormatExtensionsHow it becomes a table
CSV, TSV, text.csv, .tsv, .txtChoose the delimiter, quote character and line ending; skip rows; header row optional
Excel.xlsx, .xls, .xlsm, .xlsb, .xltx, .xltPick the sheet; skip rows; header row optional
Other spreadsheets.ods, .dbf, .wk1, .wk3OpenDocument (LibreOffice), dBase / FoxPro and Lotus 1-2-3, read like Excel
JSON.jsonNested objects become columns named by their path; arrays of objects become rows
JSON Lines.jsonl, .ndjsonOne record per line, flattened the same way as JSON
XML.xmlNested elements and attributes become columns
YAML.yaml, .ymlNested structures flattened the same way as JSON
Avro.avroRead with WebAssembly; uncompressed, deflate and snappy files. How to read one
Parquet.parquetRead with WebAssembly, nested columns included
Arrow / Feather.arrow, .featherArrow IPC files and streams, uncompressed or compressed with LZ4 or ZSTD. How to read one
SQLite.sqlite, .db, .gpkgPick the table or view; GeoPackage files included. Read by SQLite itself, compiled to WebAssembly. How to explore one
Microsoft Access.accdb, .mdbEvery table, each its own row; files without a password. How to open one
SPSS, SAS, Stata.sav, .zsav, .por, .sas7bdat, .xpt, .dtaDates become dates; labelled values get a _label column beside the code. Guides: SPSS, SAS, SAS transport, Stata
BSON, MessagePack, CBOR.bson, .msgpack, .cborMongoDB dumps and binary records, flattened the same way as JSON. Guides: BSON, MessagePack, CBOR
Gzipped.csv.gz, .json.gz, .xml.gz …Any format above, gzip-compressed: unpacked in your browser, then read as the file inside. How it works
ZIP and TAR archives.zip, .tar, .tar.gz, .tgzEvery readable file inside becomes its own table, ready to join

Each file can be up to 50 MB and 1,000,000 rows. If a file is cut short, a notice says so above the results.

A guide for each specialist format

Some formats usually mean a licence, an install or a script before you see a single row. Each of these has its own walkthrough, with every example run in the app:

Drop in a file and run your first query.

Open the app →

Check it yourself in 60 seconds

You do not have to take “nothing is uploaded” on trust. Your browser can show you.

  1. Open the app and let it finish loading, press F12 and open the Network tab.
  2. Clear the list.
  3. Add a file and run a query. The list stays empty: the file was read and queried without a single request.
  4. For the stronger test, turn off your Wi-Fi and do it again. Queries and exports still work.
Before you clear the list you will see the page loading its own files — the scripts, the code editor and the query engines — all from this site and nothing from anywhere else. The full verification guide covers this and two further checks.

Questions

Is it free?

Yes. The web version is free to use and needs no sign-up. Organisations that need an internal deployment, a written licence or a security review pack can get in touch.

Is my data stored anywhere?

No. Files are held in memory for as long as the tab is open and discarded when you close it. The tool writes nothing to local storage and sets no cookies.

Do I need to know SQL?

No. Ask in plain English and the SQL is written for you, inside your browser, with no AI service and no API calls. You can read and edit it before it runs, and it only says LIMIT when you ask for a number of rows; the Row limit box beside Export decides how many come back. The plain-English guide shows what it understands.

What SQL can I use?

The engine is DuckDB, running inside your browser tab: SELECT with WHERE, inner and left JOIN, GROUP BY, HAVING, ORDER BY and LIMIT, aggregates such as COUNT, SUM and AVG, string functions such as UPPER and TRIM, and CASE and COALESCE. The How To Use guide has worked examples.

How big a file can it handle?

Up to 50 MB and 1,000,000 rows per file. Your own computer does the work, so its memory matters too. For data in the tens of gigabytes, a database is the right tool.

Does it work offline?

Yes, once the page has loaded: you can disconnect and keep adding files, running queries and exporting. Reloading the page needs the connection again. For machines with no network at all, see using SQL offline and air-gapped.

Can we run it on our own intranet?

Yes — it is a static, self-contained build with no server component of its own and no third-party network calls, so it is well suited to intranet or air-gapped hosting; a build for this is available on request. Where your data comes from a live database rather than files, that build can also be extended to reach it through a gateway of your own.

Can it read nested JSON and XML?

Yes. A nested field such as customer.name becomes a column you can query by its short name, name, or by its path with underscores, customer_name. Arrays of objects become one row per element.

Can it open gzipped files?

Yes. A gzipped copy of any supported format — orders.csv.gz, events.jsonl.gz, data.xml.gz — is unpacked by your browser, inside the tab, and read as the file inside, without extracting it first. The 50 MB limit applies to the unpacked size. ZIP and TAR archives work too: every readable file inside becomes its own table. The .gz guide explains the difference.

Where to next