Prove every row made it across.
Compare two copies of a table, convert queries and run them on real engines, and hand your reviewer a signed-off report. All inside your browser tab — your data is never uploaded.
- No account, no upload
- CSV, Parquet and JSON
- Free for commercial use
CSVcustomers.csv
Rows12,480Columns6
PQcustomers_v2.parquet
Rows12,479Columns7
Differences found
- 1 key in the source is missing from the target
- country: 38 matched rows hold a different value
- Keys matched
- 12,478
- Only in source
- 1
- Only in target
- 0
- Columns differ
- 1
Customers — nightly sync check
Differences found
source 4738cfd4c0eb69fd…
target d1cef7985d2510c8…
- Real SQL engines in the tab
- Sixteen SQL dialects
- Enforced by the browser
- Free, no sign-up
One workflow, from schema to sign-off
Each tool does one job on its own. Used together, they take you from "what changed?" to evidence your reviewer can sign.
- 1
See what changed
Schema DiffPaste the old and new CREATE TABLE. Get every added, dropped and retyped column.
+ signup_channel varchar
~ total_spend int → bigint
− legacy_ref varchar
= customer_id varchar - 2
Generate the checks
Bulk Query GeneratorOne validation query per changed column, with the right NULL placeholder for each type.
-- 1 of 3 SELECT 'total_spend', count(*) FROM input_db a JOIN output_db b ON … - 3
Convert and run them
SQL ConverterMove the checks to the target engine, then run them on real PostgreSQL or SQLite in the tab.
SQL Server → PostgreSQL
✓ Runs on PostgreSQL 18
✓ Same answer as the original
3 rows · 21 ms Prove the data
Parity RunDrop both exports. Every row matched on its key, every difference counted, the report downloaded.
= Match
12,480 rows against 12,480
7 columns, 0 differences
report.html ready to sign
Every tool, grouped by the job
The same three groups as the Tools menu, so the page and the navigation teach one map of the product.
Verify data
Prove two copies of a table match.
Write and move SQL
Get a query right for the engine it runs on.
- SQL ConverterMove a query between engines, with what needs a human.
- SQL FormatterFormat SQL for sixteen dialects, with a syntax check.
- SQL IN List BuilderTurn a column of values into a quoted, escaped IN clause.
- Bulk SQL ConverterFormat, convert or review every SQL file — and SQL in Excel or CSV cells — at once.
Explore and review
Look at data and queries before trusting them.
Built for data that is not allowed to leave the building
Your infosec team does not have to take our word for it. Every guarantee below is a mechanism they can check in two minutes with the browser's developer tools.
- The browser enforces itA Content Security Policy forbids the page from contacting any other origin.
- Engines and fonts are served from this siteThe SQL engines load from the same origin, and only when a tool needs them.
- No account, no cookiesVisits are counted without cookies. What you paste is never part of it.
- Check it yourselfOpen the network tab while you work: nothing you paste or drop is ever sent.
default-src 'self';font-src 'self';connect-src 'self'; -- no request to any other serverworker-src 'self' blob:;form-action 'none';frame-ancestors 'none';
Customers — nightly sync check
Generated 2026-10-07 09:05 UTC · Prepared by Data platform team
Differences found
- 1 key in the source is missing from the target.
- country: 38 matched rows hold a different value.
| Side | File | Rows | SHA-256 |
|---|---|---|---|
| Source | customers.csv | 12,480 | 4738cfd4c0eb69fd163814c2d7a8… |
| Target | customers_v2.parquet | 12,479 | d1cef7985d2510c89a2cbe40d37d… |
Hand your reviewer evidence, not a screenshot
Every Parity Run ends in a report someone can sign: one HTML file that prints cleanly to PDF and needs nothing to open.
- Reproducible. Both files are identified by their SHA-256 fingerprint, with every setting and SQL statement printed.
- Honest. A match on some columns is never called a match, and every relaxed comparison is listed.
- Private by default. Example values are real data, so they stay out unless you include them.
Sixteen dialects that disagree about quoting
A wrong escape does not throw — it runs, and returns the wrong rows. So every dialect carries its own rules, and every rule is tested.
- "id"
- How a name is quoted
- ''
- How an apostrophe is escaped
- \\
- Backslashes must be doubled
PostgreSQL
"name"''
MySQL
`name`''\\
SQLite
"name"''
SQL Server (T-SQL)
[name]''
Oracle
"name"''
MariaDB
`name`''\\
Snowflake
"name"''\\
Google BigQuery
`name`\'\\
Amazon Redshift
"name"''\\
Amazon Athena / Trino
"name"''
Apache Spark SQL
`name`\'\\
Apache Hive
`name`\'\\
ClickHouse
`name`''\\
DuckDB
"name"''
IBM Db2
"name"''
Standard SQL
"name"''
Start with your own two files
Nothing to install, nothing to sign up for. Close the tab and it is gone.