Turn keyword lists or a Search Console export into topic clusters (one cluster = one page). Free built-in lexical grouping needs no key. Optional SERP-overlap or embedding grouping with your own Serper/SerpApi or OpenAI key. Intent labels, pillar map, cannibalisation flags, CSV export.
Billing fix: keywords are charged first; AI labels are sized from the budget left afterwards, and their charge is checked before labels are delivered. Previously, AI labels could use up the budget and the keyword charge was then refused, so keywords were delivered without being charged and the charged totals were wrong.
Keywords that don't fit the max total charge now get explicit free rows (type: "keyword-skipped"). The status reports "N not processed (max total charge reached)". The summary now includes notProcessed, aiLabelled, aiNote and chargedEvents.
README: explains how the budget is split, which hosts are called, and that SERP and embedding modes need your own keys. Contact line changed to hello@webrevenuescan.com (also in the User-Agent).
1.0.0 — 2026-10-11
First release.
Input from keyword lists (with optional volume), pasted CSV or a CSV URL. Columns are auto-detected for GSC, Semrush, Ahrefs and Keyword Planner exports. Duplicates are merged.
Three clustering methods, all using deterministic head-first clustering:
SERP overlap on the user's Serper.dev/SerpApi key, with a 30-day cache
OpenAI embeddings
free lexical clustering (stemmed, IDF-weighted)
Intent labels from modifier rules, brand terms and SERP features, with the signals listed. Each cluster gets a suggested page type.
Pillar → cluster map, cannibalisation flags (several ranking URLs in one cluster) and shared top URLs per cluster.
HTML cluster map, keyword and cluster CSVs. Optional AI labels and briefs on the user's own key.