Growstack AI.
Engineering case study by Priyansh Dobariya · Python · FastAPI · LangGraph · ClickHouse
Big data. Simple conversations.
A Python analytics backend that turns natural-language business questions into ClickHouse filters, query previews, and tracked data exports.

Behind the build.
Built the Python backend service for conversational analytics.
Implemented graph-based filter extraction and ClickHouse query generation.
Separated preview, export, tracking, and credit-count responsibilities.
Tools & technologies
What I built
I built the Growstack Python backend service: the Python service behind conversational filtering, ClickHouse query construction, result previews, and tracked exports. This contribution is scoped to that service; the wider Growstack product has other components.
What this solves
Business users need to explore large people and company datasets without hand-writing ClickHouse filters or losing track of what was exported.
How it works
FastAPI routes call a Python chat manager and a separate LangGraph filter agent. The filter graph classifies intent, rejects non-business requests, loops through tools when needed, and builds a structured filter output. QueryGenerator turns that filter into ClickHouse SQL; a ClickHouse client executes queries. ExportTrackingService delegates people and company exports, previews, credit counts, and tracking to focused services.
From input to outcome
A question enters the chat manager, which identifies the data intent and asks the filter graph for structured criteria. Query generation produces a ClickHouse candidate; the client can validate syntax and execute it. The user can inspect a preview before an export service selects records and records the export for that user.
Decisions visible in the code
- A separate filter graph keeps intent classification, tool calls, and final filter construction inspectable.
- Preview and export services separate exploration from record delivery and export tracking.
- People and company export paths have their own services while sharing a routing and credit-count layer.
What the workflow enables
The service gives users a path from a business question to queryable data and keeps the export operation traceable in backend records.
My ownership of this Python service is confirmed. The repository does not establish a reproducible dataset-size benchmark, measured time savings, or ownership of the full product.