Back to Tools

Topical Map Generator

Use cases

Content strategy planning Building topic clusters and pillar pages Organising keyword research Identifying content gaps Planning site architecture

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.

Streamlit App Requires API Key

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

Launch App View Source

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. 1 Enter OpenAI API key in the sidebar
  2. 2 Select model (GPT-4o, GPT-4o Mini, GPT-4.1)
  3. 3 Paste keywords or upload a file (around 200 recommended; larger lists risk token limits)
  4. 4 Set hierarchy depth (2-5) and level names
  5. 5 Generate the topical map (a single API call)
  6. 6 Check Total Keywords Mapped against your input count
  7. 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).

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