Turn messy exports into answers in minutes.
Run SQL on CSV, Excel, and Parquet — without setting up a database. Join files, spot issues, and export a clean result your team can use.
Runs locally in your browser. Your files stay on your computer.
Payments are offline for now — Pro features are unlocked for early users in exchange for feedback.
Outcomes
- Runs on your computer (files stay local)
- Join exports in seconds (customers ↔ transactions)
- Find duplicates, missing values, and odd rows
- Export a clean CSV for stakeholders
- Works even when exports are messy
How it works
SQL in your browser — without the setup
Drop in exports, run familiar SQL, and share clean results in minutes.
Powered by DuckDB SQL
Attach exports
Import CSV, Excel (.xlsx), and Parquet. Add multiple files per session.
Step 01
Ask questions with SQL
Filter, join, group, and validate data fast — no scripts required.
Step 02
Export clean results
Download a share-ready CSV your team can trust.
Step 03
What you can do in 5 minutes
Quick wins on messy exports
Use QuackNinja when you just need an answer — fast — without spinning up a database, notebook, or BI report.
Find duplicates
Catch repeated customer IDs, invoices, or rows.
Validate totals
Reconcile sums, fees, refunds, and balances.
Join exports
Combine customers ↔ transactions ↔ payments.
Spot weird rows
Null spikes, broken dates, strange categories.
Trust & privacy
Private by default
QuackNinja is built for sensitive exports (finance, ops, customer data).
Runs locally in your browser — files stay on your computer.
No uploads required for analysis.
You control what you export and share.
Example queries
Get your first answer in under 2 minutes.
Attach exports, run SQL, and export a clean result — without setting up a database.
Try it with sample data
Load the demo tables in one click
Creates 3 tables: customers, transactions, payments.
Runs locally — sample files never uploaded.
Runs locally in your browser. Files stay on your computer.
Try these 4 queries
Works on CSV / Excel / Parquet (DuckDB dialect)Find duplicate customer IDs
Catch repeated IDs and see how many times they appear.
SELECT
customer_id,
COUNT(*) AS cnt
FROM customers
GROUP BY 1
HAVING COUNT(*) > 1
ORDER BY cnt DESC
LIMIT 50;Works on CSV / Excel / Parquet
Join customers to transactions
Answer: who spent the most (with customer names).
SELECT
c.customer_id,
c.name,
SUM(t.amount) AS total_spend,
COUNT(*) AS txn_count
FROM customers c
JOIN transactions t
ON t.customer_id = c.customer_id
GROUP BY 1,2
ORDER BY total_spend DESC
LIMIT 25;Works on CSV / Excel / Parquet
Spot weird rows fast
Find null spikes + negative/zero amounts.
SELECT
COUNT(*) AS rows_total,
SUM(CASE WHEN customer_id IS NULL THEN 1 ELSE 0 END) AS missing_customer_id,
SUM(CASE WHEN amount IS NULL THEN 1 ELSE 0 END) AS missing_amount,
SUM(CASE WHEN amount <= 0 THEN 1 ELSE 0 END) AS non_positive_amount
FROM transactions;Works on CSV / Excel / Parquet
Reconcile totals
Check if payments match transactions.
WITH tx AS (
SELECT
customer_id,
SUM(amount) AS tx_total
FROM transactions
GROUP BY 1
),
pay AS (
SELECT
customer_id,
SUM(amount) AS pay_total
FROM payments
GROUP BY 1
)
SELECT
COALESCE(tx.customer_id, pay.customer_id) AS customer_id,
COALESCE(tx_total, 0) AS tx_total,
COALESCE(pay_total, 0) AS pay_total,
(COALESCE(pay_total, 0) - COALESCE(tx_total, 0)) AS diff
FROM tx
FULL OUTER JOIN pay
ON tx.customer_id = pay.customer_id
ORDER BY ABS(diff) DESC
LIMIT 50;Works on CSV / Excel / Parquet
Tip: Files become tables automatically (e.g., customers, transactions).
Billing
Billing coming soon
Payments are being enabled. You can use QuackNinja free in the meantime.
Pricing
Simple plans that scale with your data
Start free. Upgrade when you need bigger files and share-ready exports.
Free
$0 forever
- Max file: 25MB
- Total session: 100MB
- Preview: 1,000 rows
- Export: 1,000 rows
- Saved queries: 3
Best for trying small exports. Upgrade for share-ready outputs.
Pro
Checking plan...$12 /month
Billing coming soon.
- Max file: 1.0GB
- Total session: 2.0GB
- Preview: 10,000 rows
- Export: 500,000 rows
- Saved queries: Unlimited
Best for weekly exports, larger files, and results you actually need to share.
Bigger files. Bigger exports. Unlimited saved queries.
FAQ
Common questions
Quick answers to the most common questions.
Do my files ever leave my computer?
No. QuackNinja runs locally in your browser. Your data stays on your machine unless you choose to export results.
What SQL dialect does QuackNinja use?
What file types are supported?
CSV, Excel (.xlsx), and Parquet. You can attach one or multiple files per session and query them like tables.
How do I reference my files in SQL?
Each attached file becomes a table name you can query directly (for example: customers, transactions). We also show the table names in the sidebar.
Can I join multiple files?
Yes — join exports in seconds (customers ↔ transactions ↔ payments). DuckDB handles joins, group-bys, and filters locally.
Does QuackNinja support window functions and CTEs?
Yes. DuckDB SQL supports CTEs (WITH …), window functions (OVER/PARTITION BY), and common analytics patterns.
Why are there limits on file size / rows?
Because everything runs in your browser. Limits keep performance fast and stable. Pro raises the caps for bigger exports.
Can I export results?
Yes. Export any query output to a clean CSV that’s ready to share with teammates or stakeholders.
What about Excel sheets — which sheet is used?
You can choose a sheet on import. If you don’t select one, we default to the first sheet.
Docs: Importing ExcelIs there a desktop app?
Not yet. QuackNinja is browser-first to stay lightweight and fast. A desktop app may come later.