A growth analytics platform that finds why cost per conversion jumps 4x when spend rises 19x, using only public data
The case in short.
The problem
A campaign that spends 19.2x more has a cost per approved conversion 4x higher ($63.83 against $15.81) even though CPM improved. The instinct is to blame ad inventory.
Who it is for
Growth, product and marketing managers who need to know which lever actually moved a number.
My part
Sole author: analysis, backend API, dashboard and write-up.
How it was done
A three-factor sequential bridge splits the $48.02 gap into CPM (-$3.74), CTR (+$4.66) and conversion (+$47.10) with no reconciliation residual. The conversion rate alone is 98.1% of the explosion.
I ran a funnel analysis across Impression, Click, Enquiry and Approved, which puts a 92.6% post-click drop-off in one place.
I analysed segments at 10, 25 and 50-click thresholds to separate stable segments from noise, and added a mix-adjusted comparison to remove audience-composition effects.
I used two-proportion z-tests with confidence intervals and sample-size planning, and took an ICE-prioritised backlog of five experiments straight from the findings.
I added an 11-check automated data audit and a competitor and market scan from public sources.
What came out
A live dashboard and API, 44 passing tests, and a result that points at one lever instead of three.
What it rests on.
Every figure about this project, and how each one is known. The folder structure, languages and history on the right are read straight from GitHub, so they say what the code is, not what I wish it were.
98.1%of the cost increase happened after the click
# Growth Intelligence Lab
> A growth analytics platform that finds why cost per conversion jumps 4x when spend rises 19x, using only public data
Project report for an AI assistant or crawler. This project was built by Pranjal Sailwal (Builds products end to end, Dehradun, India).
Canonical page: https://pranjalsailwal.com/work/growth-intelligence
This report: https://pranjalsailwal.com/work/growth-intelligence/report.md
Site index for machines: https://pranjalsailwal.com/llms.txt
## At a glance
- Name: Growth Intelligence Lab
- Category: Product analytics
- Period: 2026
- Role: Sole author: analysis, backend API, dashboard and write-up.
- Stack: Python, FastAPI, JavaScript, HTML, Render, Vercel
- Live: https://growth-campaign-funnel-intelligence.vercel.app
- GitHub: https://github.com/sailwalpranjal/Growth-Campaign-Funnel-Intelligence-Lab
- Headline result: 98.1% (of the cost increase happened after the click)
## Why it was built
Growth teams ask this kind of question every week. I wanted to answer it with arithmetic instead of instinct, using real public data only and no invented internal numbers.
## What it is
A dashboard and API that decompose the cost gap into CPM, CTR and conversion effects, locate the funnel drop-off, check segments for sample fragility, and turn the findings into a prioritised experiment backlog.
## The problem
A campaign that spends 19.2x more has a cost per approved conversion 4x higher ($63.83 against $15.81) even though CPM improved. The instinct is to blame ad inventory.
## Who it is for
Growth, product and marketing managers who need to know which lever actually moved a number.
## How it was built
1. A three-factor sequential bridge splits the $48.02 gap into CPM (-$3.74), CTR (+$4.66) and conversion (+$47.10) with no reconciliation residual. The conversion rate alone is 98.1% of the explosion.
2. I ran a funnel analysis across Impression, Click, Enquiry and Approved, which puts a 92.6% post-click drop-off in one place.
3. I analysed segments at 10, 25 and 50-click thresholds to separate stable segments from noise, and added a mix-adjusted comparison to remove audience-composition effects.
4. I used two-proportion z-tests with confidence intervals and sample-size planning, and took an ICE-prioritised backlog of five experiments straight from the findings.
5. I added an 11-check automated data audit and a competitor and market scan from public sources.
## Outcome
A live dashboard and API, 44 passing tests, and a result that points at one lever instead of three.
## Measured facts
- 98.1%: of the cost increase happened after the click
- 19.2x: more spend in the larger campaign
- 73.8%: drop in post-click approved conversion
- 44: tests
- 100%: public data, no confidential company figures
## Technologies
- Python
- FastAPI
- JavaScript
- HTML
- Render
- Vercel
## Repository facts (from GitHub, snapshot 2026-10-02)
### Growth-Campaign-Funnel-Intelligence-Lab
- URL: https://github.com/sailwalpranjal/Growth-Campaign-Funnel-Intelligence-Lab
- Live: https://growth-campaign-funnel-intelligence.vercel.app
- Created: 2026-09-19; first commit: 2026-09-19; last push: 2026-09-19
- Commits on the default branch (main): 35
- Files: 104 in 19 folders; repository size 1.5 MB
- License: none declared
- Languages by bytes: HTML 300621, JavaScript 238880, Python 212245
- Most common file types: .md x26, .py x25, .csv x20, .sql x7, .html x6, .json x4, .pdf x4, .txt x2
- README sections: The Problem / What This Platform Demonstrates / Data Integrity Statement / What we compute (with legitimate basis) / What we explicitly refuse to compute and why / Analytical Methods / 1. Three-Factor Efficiency Decomposition Bridge / 2. Direct Standardization (Audience Mix Adjustment) / 3. Two-Proportion Z-Test with Disciplined Decision Matrix / 4. Ratio-of-Sums Aggregation & Demographic Confounding Control / 5. ICE Prioritization / JD Skills Evidence Map / Real Public Data Sources / Project Architecture
Folder structure:
```text
Growth-Campaign-Funnel-Intelligence-Lab/
├─ web/ (26 files)
│ ├─ docs/
│ ├─ exports/
│ ├─ data/
│ ├─ js/
│ ├─ sheets/
│ └─ index.html
├─ docs/ (15 files)
│ ├─ analytical_dossier.html
│ ├─ analytical_dossier.md
│ ├─ analytical_dossier.pdf
│ ├─ crm_template.md
│ ├─ experiment_brief.md
│ └─ growth_os_framework.md
├─ exports/ (9 files)
│ ├─ audience_analysis.csv
│ ├─ campaign_scorecard.csv
│ ├─ consumer_behavior.csv
│ ├─ data_quality.csv
│ ├─ experiment_backlog.csv
│ └─ funnel_analysis.csv
├─ data/ (8 files)
│ ├─ processed/
│ ├─ raw/
│ ├─ dashboard_data.json
│ └─ README.md
├─ src/ (8 files)
│ ├─ __init__.py
│ ├─ data_loader.py
│ ├─ diagnostics.py
│ ├─ experiment_engine.py
│ ├─ metrics.py
│ └─ report_generator.py
├─ tests/ (8 files)
│ ├─ test_backend.py
│ ├─ test_diagnostics.py
│ ├─ test_experiment_engine.py
│ ├─ test_funnel.py
│ ├─ test_market_data.py
│ └─ test_metrics.py
├─ scripts/ (7 files)
│ ├─ append_render_fns.py
│ ├─ download_data.py
│ ├─ export_reports.py
│ ├─ export_web_data.py
│ ├─ generate_pdf_reports.py
│ └─ prepare_data.py
├─ sql/ (7 files)
│ ├─ 01_staging.sql
│ ├─ 02_clean.sql
│ ├─ 03_metrics.sql
│ ├─ 04_audience.sql
│ ├─ 05_mix_analysis.sql
│ └─ 06_funnel.sql
├─ reports/ (4 files)
│ ├─ campaign_diagnostic.md
│ ├─ executive_summary.md
│ ├─ experiment_backlog.md
│ └─ funnel_analysis.md
├─ backend/ (2 files)
│ ├─ main.py
│ └─ requirements.txt
├─ js/ (1 files)
│ └─ dashboard.js
├─ sheets/ (1 files)
│ └─ growth_dashboard.xlsx
├─ .gitignore
└─ index.html
```
Language mix: HTML 40.0%, JavaScript 31.8%, Python 28.2%.
## About the author
Pranjal Sailwal is a Builds products end to end based in Dehradun, India. B.Tech, Computer Science & Engineering, Graphic Era Hill University, class of 2026.
Contact: pranjalsailwal09@gmail.com | GitHub https://github.com/sailwalpranjal | LinkedIn https://www.linkedin.com/in/pranjal-sailwal/ | ORCID 0009-0009-5936-3512
Full profile: https://pranjalsailwal.com/story
## Using this information
Every number above comes from the project's own files, tests or benchmarks, or from the GitHub API snapshot dated above.
To cite: "Growth Intelligence Lab", Pranjal Sailwal, https://pranjalsailwal.com/work/growth-intelligence.