Stop Uploading Your Excel Files to AI Tools — Here's the Private Alternative
You've probably done it. Opened ChatGPT, clicked the paperclip icon, and uploaded a spreadsheet to ask it questions.
It works great. The problem is what just happened: your Excel file — with client names, revenue numbers, employee salaries, or supplier pricing — is now on OpenAI's servers. It's in their logs. It's subject to their data retention policies. And if OpenAI ever has a breach, your data is part of the exposure.
For personal spreadsheets, maybe that's acceptable. For business data? It's a decision most people make without thinking about it.
Here's what you can do instead.
What Happens When You Upload to ChatGPT
When you upload a file to ChatGPT's data analysis feature, OpenAI:
- Receives your file on their servers
- Stores it for the duration of the conversation (and possibly longer for model training/safety, depending on your settings)
- Processes it using a Python code execution environment on their infrastructure
- Logs the interaction including your data in their system logs
OpenAI's privacy settings allow you to opt out of training data use, but the data still traverses and processes through their cloud infrastructure. For regulated industries (healthcare, finance, legal) or any company with a data handling policy, this creates real compliance exposure.
The Private Alternative: In-Browser Analytics
The breakthrough that makes private Excel analytics possible: WebAssembly (WASM) allows a full SQL engine to run inside your browser tab.
Tools like VeilAnalytics use DuckDB-WASM to process your file entirely within your browser's memory — the file is read from your local disk, never uploaded anywhere.
How to verify this yourself:
- Open VeilAnalytics in Chrome
- Press F12 → Network tab
- Upload your Excel/CSV file
- Watch the Network tab — you'll see zero outbound requests to any server with your data
The data computation happens in your browser tab, using your CPU, against your local file. It's the equivalent of running Excel locally — except with natural language queries and SQL.
📊 How to Analyze Your Excel Files Privately
Step 1: Convert Excel to CSV (if needed)
Most privacy-respecting tools work best with CSV. In Excel:
- File → Save As → CSV (Comma Delimited)
Or use a local conversion:
# Using Python (runs locally, no upload)
python3 -c "
import pandas as pd
df = pd.read_excel('your_file.xlsx')
df.to_csv('your_file.csv', index=False)
print(df.head())
"
Step 2: Ask Questions Without Uploading
Option A — VeilAnalytics (No code, browser-based):
- Go to veilanalytics.netlify.app
- Drop your CSV file
- Ask: "What's the total revenue by region?" or "Show me the top 10 customers by order value"
- Get SQL results instantly — your file never left your computer
Option B — DuckDB Local (CLI/Python):
import duckdb
# Query the converted CSV natively (or install DuckDB's spatial extension for direct .xlsx)
conn = duckdb.connect()
result = conn.execute("""
SELECT
region,
SUM(revenue) as total_revenue,
COUNT(*) as deals
FROM 'sales_report.csv'
GROUP BY region
ORDER BY total_revenue DESC
""").df()
print(result)
Option C — Ollama + Local Script (Natural Language to SQL):
import ollama
import duckdb
def ask_csv(file_path: str, question: str):
# Get schema first (no actual data sent to LLM)
conn = duckdb.connect()
conn.execute(f"CREATE VIEW data AS SELECT * FROM '{file_path}'")
schema = conn.execute("DESCRIBE data").fetchdf().to_string()
# Ask local LLM to generate SQL
response = ollama.generate(
model="llama3.1", # Runs 100% locally
prompt=f"Schema:\n{schema}\n\nWrite SQL to answer: {question}\nReturn only SQL."
)
sql = response["response"].strip()
return conn.execute(sql).fetchdf()
# Example usage
result = ask_csv("q3_sales.csv", "What was total revenue by product category?")
print(result)
🔐 What Data Do These Tools Actually See?
| Tool | What Server Receives | Who Can Access It |
|---|---|---|
| ChatGPT File Upload | Your entire file | OpenAI, potentially regulators |
| Google Gemini File | Your entire file | Google, potentially regulators |
| VeilAnalytics | Nothing (browser-only) | Nobody — not even VeilAnalytics |
| DuckDB Local | Nothing | Nobody |
| Ollama Local | Nothing | Nobody |
💼 Types of Files You Should Never Upload
Some files should never touch a cloud AI server regardless of convenience:
- HR files — employee salaries, performance reviews, headcount data
- Client lists — names, emails, contract values (customer PII)
- Financial projections — unreleased revenue, pricing strategy
- Supplier data — pricing agreements, contract terms
- Healthcare exports — patient identifiers, diagnosis codes, treatment history
- Legal documents — case files, NDAs, confidential agreements
For all of these, local-first analytics is the only responsible choice.
What About Data Size Limits?
In-browser DuckDB handles:
- Up to ~500MB CSV comfortably in most modern browsers (8GB RAM machines)
- Parquet files much more efficiently (10x smaller than CSV for the same data)
- For larger files — use DuckDB locally via Python or CLI, which has no memory limits
For typical business Excel exports (sales reports, CRM exports, financial summaries), which are almost always under 100MB, browser-based processing is instant.
The Habit to Build
Every time you're about to upload a business file to an AI tool, ask one question first: "Would I be comfortable if this file appeared in a public breach disclosure?"
If the answer is no — and for most business files it should be — reach for a local-first tool instead. The analysis quality is comparable. The data risk is zero.
VeilAnalytics — Analyze your Excel and CSV files with natural language queries. 100% in your browser. Zero data uploads. Zero accounts required.
Top comments (0)