Query a CSV and your warehouse together, in one question
Upload a CSV and ask one question spanning it and your warehouse. Claude queries each source and combines results. Profit by product, no exports, no data team.
Half your data made it into a warehouse. The other half didn't.
Orders, revenue, events, signups. That stuff runs through a system, so it lands somewhere queryable. But product costs came off a PO. The finance numbers live in a Google Sheet someone updates by hand. A vendor sent you a CSV once and that's the only copy. None of it ever got a pipeline, because building a pipeline for a 40-row cost sheet is absurd.
The answer you actually want usually needs both halves. And the two halves have never been in the same room.
Here's the short version of what Contextflo does: you upload the CSV, you ask one question, and Claude queries your warehouse for its half and the CSV for its half, then combines the results into one answer. You don't export anything. You don't build anything.
The margin question nobody can answer fast
Say you run an e-commerce brand. Revenue by product is easy. It's in your warehouse, it comes straight from checkout, and you can pull it a dozen ways.
Profit by product is the one that makes everyone go quiet.
Because cost isn't in the warehouse. Cost of goods lives in a spreadsheet your ops person maintains, updated whenever a supplier renegotiates. So to answer “which products actually make us money,” someone exports the revenue slice out of the warehouse into a CSV, opens the cost sheet next to it, and does VLOOKUPs until the two line up. An hour later you have a number that's stale the moment a cost changes.
I've watched people do this. It's not that they don't know SQL. It's that the SQL can't reach the CSV, and the CSV can't reach the warehouse, so the join happens in a human's head with a spreadsheet as scratch paper.
With Contextflo you upload the cost sheet and ask Claude: which products are most profitable after cost? Claude pulls revenue by product from the warehouse, reads cost per product from the CSV, matches them up, and hands back profit and margin. The surprise, most times, is that the best seller and the best earner aren't the same product.
Why the tools you already have can't do this
I went looking for a free way to do this before we built it. There isn't a good one. The tools split cleanly into two camps, and each camp is missing the other half.
Single-file AI tools. Drop a CSV into ChatGPT or Claude chat, or use something like ChatCSV or camelAI, and you can ask questions about that one file. Genuinely useful. But the file is on an island. It has no idea your warehouse exists. Ask it anything that needs a number from your orders table and it's stuck, because you never gave it your orders table and you can't.
BI tools. Your Looker or Metabase sits right on top of the warehouse and answers the revenue side all day. But hand it a random cost CSV and it shrugs. To get that file in, you need someone to model it, load it, and wire it up. That's a data-team job, and the whole reason you're reading this is probably that you don't have a data team.
So people fall back to the export-and-mash-in-a-spreadsheet routine. Not because it's good. Because nothing connects the two sides.
Contextflo sits across both. The warehouse connection is there (here's how the warehouse side works with BigQuery if you want the detail). The CSV becomes a table too. And Claude can reach into either one inside a single question.
What “combines the results” actually means
I want to be precise, because it's easy to oversell this.
When your question spans the CSV and the warehouse, Claude does not run one giant SQL statement that joins across two databases. That's not what's happening under the hood, and I'd rather you know that than be surprised later.
What happens is Claude runs a separate query against each source and then combines the results. One query hits your warehouse for revenue by product. One query hits the CSV for cost by product. Claude lines the two result sets up on the product and gives you the margin. Two queries, one answer.
The CSV side runs on real SQL, not vibes. Your uploaded file goes into an S3 bucket only your org can touch, and at query time we load it into DuckDB and run actual SQL against it. So “average cost by category” is a real GROUP BY, not the model squinting at a wall of text and guessing. Same rigor you'd expect on the warehouse side, applied to the random CSV in your inbox.
When you should just use a chat upload instead
If the only thing you ever need is that one CSV, on its own, use a chat upload. It's free, it's faster to start, and Contextflo would be overkill.
The moment this earns its keep is when the CSV has to sit next to data you already have. When the question is “profit,” not “cost.” When the answer needs the warehouse half that a chat upload will never see. That's the gap, and it's the whole reason this feature exists.
There's a second reason too, quieter but it comes up a lot. A chat upload belongs to one person, in one conversation. Upload the same file to Contextflo and it's a table the whole team can query, tomorrow and next month, without re-uploading anything. The margin answer stops being one analyst's spreadsheet and becomes something anyone can ask for. (More on the CSV side of this here.)
The point
Your data was never going to all live in one place. Some of it earns a pipeline. Most of it never will. That's not a failure to fix, it's just how a real business accumulates numbers.
The fix isn't forcing every stray CSV into your warehouse. It's letting the question reach both.
FAQ
Can I query a CSV and my database in the same question?
Yes. Upload the CSV to Contextflo and connect your warehouse, and Claude answers a question that needs both by querying each source separately and combining the results.
Is this a SQL join across the CSV and the warehouse?
No. Claude runs one query against the warehouse and one against the CSV, then combines the two result sets into a single answer. It's not a single cross-database join.
How is this different from uploading a CSV to ChatGPT or Claude chat?
A chat upload can only see that one file. It can't reach your warehouse. Contextflo keeps the CSV as a reusable table your whole team can query, and lets Claude use it alongside your existing data.
What warehouses does this work with?
BigQuery, Snowflake, Redshift, Databricks, and Postgres, plus uploaded CSVs. The CSV runs on DuckDB at query time, and the warehouse query runs against your connected database.
Free for one user and one data source. Upload a CSV and ask a question.