Topical Map Generator
Use cases
Uses OpenAI chat completion API with JSON response formatting to organise keywords semantically.
Configurable hierarchy depth (2-5 levels) with customisable level names.
Recursive function flattens nested JSON into tabular format.
Keywords are stripped of whitespace; no deduplication is applied.
Recommended limit ~200 keywords.
Temperature fixed at 0.7.
Platform
Browser-based (no installation required)
Input
OpenAI API key
Keywords: text area (newline/comma separated) or file (CSV, XLSX, TXT)
Recommended: ~200 keywords max
Output
JSON hierarchy and CSV/Excel export
Features
- GPT-4o, GPT-4o Mini, or GPT-4.1 model selection
- Hierarchy depth slider (2-5 levels, default 4)
- Customisable level names per hierarchy level
- Keyword input via text area or CSV, XLSX, or TXT upload
- Recursive JSON-to-table flattening
- JSON, CSV, and Excel export via openpyxl
How to use
- 1 Enter OpenAI API key in the sidebar
- 2 Select model (GPT-4o, GPT-4o Mini, GPT-4.1)
- 3 Paste keywords or upload a file (around 200 recommended; larger lists risk token limits)
- 4 Set hierarchy depth (2-5) and level names
- 5 Generate the topical map (a single API call)
- 6 Check Total Keywords Mapped against your input count
- 7 Download as JSON, CSV, or Excel
Frequently asked questions
- Can I paste keywords that contain commas?
- Be careful. The tool only splits on commas when your input contains commas and no line breaks. If your input has line breaks, it splits on those instead, so a line like 'sofas, corner sofas' stays together as a single keyword. Do not mix the two formats: use either one keyword per line or one comma-separated string, not both.
- What happens if I submit more than 200 keywords?
- Nothing stops you: the 200 figure is a warning, not a hard cap. The entire list is sent to the model in a single API call, so very large lists risk hitting token limits, which can truncate the JSON response and cause the run to fail or silently drop keywords.
- How do I know every keyword made it into the map?
- The prompt asks the model to place each keyword in exactly one position, but the tool does not verify this. Compare the 'Total Keywords Mapped' metric against the number of keywords you submitted; if it is lower, the model dropped some. Re-running can help because temperature is fixed at 0.7, so each run produces a different map.
- Does the tool remove duplicate keywords before sending them?
- No. Keywords are whitespace-trimmed but not deduplicated, so duplicates in your list are sent to the model as-is and waste tokens. Deduplicate in your spreadsheet first.
- What drives the API cost?
- One OpenAI chat completion call per generation, whatever the list size. Input tokens scale with your keyword list and output tokens with the size of the generated hierarchy, so cost is driven by keyword count, hierarchy depth, and which model you pick (GPT-4o Mini is the cheap option in the model dropdown).
Want me to run this for you?
I run this tool as a managed service, or build something custom around your data. You get the insights without touching the code.
Related Tools
Get keyword suggestions with search volumes from DataForSEO API.
Fetch search volume data from Keywords Everywhere API in bulk.
Build hierarchical trees of related searches from Google.
Analyse URL overlap across multiple keyword SERPs to find cannibalisation.
Classify keywords into Google's 4 micro-moments using OpenAI.
Calculate Return on Ad Spend from revenue and ad costs.
Need something built for your business?
This tool started as bespoke client work. I build custom scripts, data pipelines, and full apps for SEO and product data problems that off-the-shelf tools don't solve.
Tell Me What You Need