DEV Community

VeilAnalytics
VeilAnalytics

Posted on

Stop Uploading Your Excel Files to AI Tools — Here's the Private Alternative

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:

  1. Receives your file on their servers
  2. Stores it for the duration of the conversation (and possibly longer for model training/safety, depending on your settings)
  3. Processes it using a Python code execution environment on their infrastructure
  4. 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:

  1. Open VeilAnalytics in Chrome
  2. Press F12 → Network tab
  3. Upload your Excel/CSV file
  4. 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())
"
Enter fullscreen mode Exit fullscreen mode

Step 2: Ask Questions Without Uploading

Option A — VeilAnalytics (No code, browser-based):

  1. Go to veilanalytics.netlify.app
  2. Drop your CSV file
  3. Ask: "What's the total revenue by region?" or "Show me the top 10 customers by order value"
  4. 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)
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

🔐 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)