A fast, local SEO dashboard for analyzing ranking and traffic changes from Google Search Console. Drop in the raw date-comparison export (Queries.csv), and instantly get topic clusters, prioritized ranking-drop analysis, and quick-win opportunities — no spreadsheets, no API keys, no data leaving your machine.
🌍 Read this in German / Deutsch.
👉 Try it now — no install needed: gsc-ranking-changes-analyzer.streamlit.app
- 🌐 Language- & format-independent (positional parsing): It doesn't matter whether your GSC exports in German (
Häufigste Suchanfragen) or English (Top queries), or whether decimals use a comma or a dot. The app detects encoding and separator automatically and reads each column by its fixed GSC position — never by header name. - 🇬🇧🇩🇪 Bilingual UI: Switch the entire dashboard between English and German with one click in the sidebar.
- 🧩 Local, dependency-light keyword clustering: Groups thousands of keywords into topic clusters in milliseconds using frequency-based head-term matching (word counts minus stopwords). No ML model, no external API, no cost — and it runs entirely on your machine. Includes a best/worst-cluster heatmap.
- 🧠 Multi-dimensional Search Intent classification: Detects user search intent (
KNOW,DO,regional:CITY,regional:COUNTRY) separately from topic clusters, fully optimized for both English and German keywords. Includes visual intent distribution charts. - 🎯 Precise change tagging: Beyond simple differences, every keyword is tagged against hard ranking thresholds —
New,OoTop3,OoTop10,OoSERP2,OoTop100,IntoTop10. Micro-movements (< 1.0 position) are cleanly separated asNone, everything else asChanged. - 🍎 Low Hanging Fruits: Surfaces "threshold" keywords ranking on the top of page 2 (positions 11–15) that already generate real impressions — the fastest quick wins in SEO.
- 📊 Interactive dashboard: An at-a-glance KPI matrix (total losses, net change, Top 3 & Top 10 drops, per-cluster performance) plus six interactive analysis tabs.
Once you upload your Queries.csv, the app generates six interactive tabs:
- Topic Clusters — Bundles click losses by head term, so you can instantly see if a whole topic (e.g. "winter tires" or "credit card") dropped collectively. Filter out brand keywords into a dedicated cluster.
- Ranking Drops — Sorts drops into prioritized buckets:
- Top 3 Drops — fell out of positions 1–3 (the painful ones).
- Top 10 Drops — dropped off page 1.
- Page 2 Drops — slid further back from page 2.
- Complete Losses — fell out of the Top 100 entirely.
- Click Losses (Detail) — The raw, hard list of every keyword that lost traffic, sorted by clicks lost.
- Low Hanging Fruits — Threshold keywords on positions 11–15, sorted by current impressions. A few internal links or small content tweaks can push these onto page 1.
- Winners — Keywords that gained clicks, with a bubble chart to visualize the wins.
- All Data — The full export with every computed KPI (combined gain/loss metrics, position change, etc.) and interactive filters (cluster, change type, keyword search).
The tool needs exactly one file:
- Open Google Search Console for your domain.
- Go to Performance → Search results.
- Click the date filter at the top and choose the Compare tab (e.g. "Compare last 28 days to previous period").
- Click Apply.
- Click Export (top right) and choose Download CSV.
- Unzip the downloaded file — inside you'll find
Queries.csv. - Upload exactly that
Queries.csvinto the app.
The app uses streamlit for the UI, pandas for data processing, and plotly for the charts. The quickest way to run it is with uv:
uv run --python 3.12 --with-requirements requirements.txt streamlit run app.pyuv installs the requirements on the fly in an isolated environment — no manual virtualenv needed. The terminal will print a local URL (usually http://localhost:8501); open it in your browser.
Prefer pip / a manual virtualenv?
python -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
streamlit run app.pyThe project is cloud-ready and can be hosted for free in a few clicks:
- Push this repo (
app.pyandrequirements.txt) to GitHub. - Sign in at share.streamlit.io with your GitHub account.
- Click New app, select this repo, and set
app.pyas the main file. - Click Deploy. Done.
All processing happens locally (or in your own Streamlit instance). Your Queries.csv is never sent to a third-party API — there are no external calls in the analysis pipeline.
MIT License © 2026 Benjamin "SEOux Indianer" Wingerter
Made with ❤️ in Munich & Bangkok — seouxindianer.de
Co-developed with Antigravity (Google DeepMind's AI coding assistant)
