A Power BI replacement with zero licences, zero infrastructure, and zero compromise.
Live Demo → · Video Walkthrough → ·
Your sales data deserves better than a spreadsheet and a Power BI subscription.
Sales Intel Terminal is a self-hosted, open-source analytics engine that ingests your raw CRM export and delivers production-grade dashboards in seconds — no database, no server, no monthly fee.
Built on the fastest Python data stack available:
Polars 1.0 → Rust columnar engine → 5–10× faster than Pandas
DuckDB 1.0 → In-process SQL → millisecond GROUP BY on 200K rows
Streamlit → Reactive UI → zero-config deployment
Dataset: 200,000 row CRM export · 12.2 MB CSV
┌─────────────────────────────┬──────────────┬──────────────────────┐
│ Operation │ Pandas Stack │ Sales Intel Terminal │
├─────────────────────────────┼──────────────┼──────────────────────┤
│ Load + clean 200K rows │ ~45 seconds │ < 5 seconds ⚡ │
│ GROUP BY aggregation │ ~8 seconds │ < 0.1 seconds │
│ Multi-filter re-query │ ~12 seconds │ instant │
│ Memory footprint │ ~800 MB │ ~120 MB │
└─────────────────────────────┴──────────────┴──────────────────────┘
Four fully interactive views — each with live sidebar filters, CSV export, and glass-morphism UI.
Revenue KPIs, month-over-month growth, revenue by region, deals by stage, product breakdown, and monthly trend line — all in one view.
Rep × Region revenue density heatmap. Instantly identify your top territories, coverage gaps, and which reps are underperforming in which regions.
Stage-by-stage funnel with Emerald → Gold color gradient. Stage Health panel alongside the funnel showing per-stage deal count, % of pipeline, and status badge (WON / OK / MID / LOW).
Individual rep scorecard grid with rank medals, Gold revenue values, deal counts, and mini progress bars relative to the top performer. Full ranked leaderboard table below.
Access is protected by a single-user login gate — the dashboard is completely inaccessible without authentication.
- Passwords stored as
sha256hash — never plain text, anywhere - Session-based auth via Streamlit
session_state - Full session wipe on logout — data, filters, and file cache all cleared
- Glass-morphism login screen with animated Emerald scanline effect
Upload any CSV or Excel file with these six columns — names are case-insensitive and auto-normalised:
| Column | Type | Notes |
|---|---|---|
date |
date / string | Deal or transaction date |
revenue |
float / int / string | Supports $1,200.00 format — parsed automatically |
rep |
string | Sales representative name |
region |
string | Geographic region or territory |
product |
string | Product or service name |
stage |
string | Prospecting · Qualification · Proposal · Negotiation · Closed Won |
Missing categorical columns are auto-filled with
"Unknown"— the app never crashes on incomplete data.
Example:
date,revenue,rep,region,product,stage
2024-03-15,12500.00,Sara Ahmed,North,Enterprise Plan,Closed Won
2024-03-18,8750.00,James Okafor,West,Starter Pack,ProposalNo data? Hit ⬇ Download Sample CRM Data in the sidebar — a full demo dataset loads instantly.
sales-intel-dashboard/
│
├── app.py # Entry point — login gate, sidebar, routing, landing page
├── credentials.py # Auth store — sha256 hashing, single-user validation
├── login.py # Auth UI — glass-morphism login, session management
│
├── ingest.py # The Loader — CSV/Excel parsing & schema detection
├── transform.py # The Sanitiser — Polars 5-step cleaning pipeline
├── db.py # The Engine — DuckDB session & SQL aggregation helpers
├── metrics.py # The Calculator — MoM growth, variance alerts, KPI logic
├── charts.py # The Visual Factory — Plotly chart builders (all chart types)
├── funnel.py # The Funnel Lens — Drop-off analysis & stage health metrics
├── filters.py # The Control Panel — Sidebar filter widgets & FilterState
├── views.py # The Composer — Full page layouts, export bars, scorecards
├── theme.py # The Stylist — Glass-morphism CSS, Plotly template, helpers
├── utils.py # The Toolkit — Shared helpers & sample data generator
│
└── requirements.txt # All dependencies — version-pinned for reproducible deploys
One rule: every file has exactly one responsibility. views.py never touches data. db.py never touches the UI. Adding a new chart means one new function in charts.py — nothing else changes.
User Uploads CSV / Excel
│
▼
credentials.py ← login gate — blocks unauthenticated access
│
▼
ingest.py ← file parsing, schema detection, format normalisation
│
▼
transform.py ← Polars pipeline:
│ normalize headers → clean revenue → parse dates
│ → fill categoricals → deduplicate
▼
db.py ← DuckDB registers Polars DataFrame (zero serialisation)
│
▼
metrics.py ← SQL aggregations, MoM growth, KPI computation
│
▼
charts.py ← pure Plotly Figure objects (Emerald + Gold themed)
│
▼
views.py ← Streamlit composition — filters applied, exports rendered
| Layer | Technology | Version | Why |
|---|---|---|---|
| UI Framework | Streamlit | 1.36 | Reactive Python UI — sidebar, tabs, session state |
| Data Engine | Polars | 1.0 | Rust columnar — 5–10× faster than Pandas at scale |
| SQL Layer | DuckDB | 1.0 | In-process SQL on DataFrames — no server, no ETL |
| Visualisation | Plotly | 5.22 | Interactive dark-mode charts, hover tooltips |
| Interop | Pandas + PyArrow | 2.2 + 14 | Polars ↔ Pandas bridge for Excel and pivot ops |
| Auth | hashlib | stdlib | sha256 — zero extra dependency |
| Runtime | Python | 3.10+ | Core language |
git clone https://github.com/Ali-datasmith/Sales-Intel-Dashboard.git
cd Sales-Intel-Dashboardpython -m venv venv
source venv/bin/activate # macOS / Linux
venv\Scripts\activate # Windowspip install -r requirements.txtstreamlit run app.pyOpen http://localhost:8501 — log in and upload your CRM export.
1. Push repo to GitHub
2. Visit share.streamlit.io
3. Connect repo → set main file: app.py
4. Deploy
Zero environment variables. Zero secrets file. Runs on the free tier for datasets up to ~200K rows (1 GB RAM).
# Generate a new sha256 hash
python3 -c "import hashlib; print(hashlib.sha256('YourNewPassword'.encode()).hexdigest())"Replace the password_hash value in credentials.py with the output.
For team deployments: move credentials to
.streamlit/secrets.tomland updatecredentials.pyto read fromst.secrets.
[https://youtu.be/j4qpUIL95nU]
Muhammad Ali Rajput — Data App Developer · Python · Streamlit · Analytics Engineering
No BI licences. No infrastructure. No Pandas bottleneck. No public exposure. Just fast, secure, open-source sales analytics.
⭐ Star this repo if it saved you a Power BI subscription.




