Step 3: Building Your Topical Map

The Topical Authority Map Build.

Welcome to the Sovereign Content Operator protocol. The Topical Map is the mandatory prerequisite for all other services. You have two ways to build yours—choose the path that matches the scale of your digital continent.


Path A: The Visual Builder
NotebookLM Method. Use this if you have under 300 posts and prefer a visual, no-code AI interface.


Path B: “God Mode”
Firecrawl Method. Use this for massive sites (500+ pages) to scrape and process at scale.

Path A: The Visual Builder (NotebookLM)

Phase 1: Ingesting Your Website

NotebookLM acts as a localized research assistant. We need to feed it your live content.

  1. Go to NotebookLM and log in with your Google account.
  2. Click “Create New” to start a fresh notebook (Name it: “ContentOps Master Build”).
  3. In the “Add Sources” menu, click Website.
  4. Paste your blog post URLs.

🚨 TROUBLESPOT: Source Limits
The free version limits you to 50 sources. If you have more, use the Firecrawl method instead.

🚨 TROUBLESPOT: “Could not fetch”
If a URL is blocked by security, simply copy the raw text of the post and use the “Copied Text” source option instead.

Phase 2: Teaching the AI the “Schema”

  1. The Topical Map Viewer comes pre-loaded with three training nodes. Locate the Export Master button on the bottom left of the screen and download that as your “training map.” Give it a name like: Initial Map State.json.
  2. Click the “+” (Add Source) button in the left-hand panel of NotebookLM.
  3. Select File / Upload and upload your Initial Map State.json.

Phase 3: The AI Extraction

Use the chat box to instruct the AI to generate your database. Paste this prompt exactly:

Act as a Senior SEO Content Architect. Review the uploaded JSON file to understand the strict ContentOps node schema we require. Then, review ALL of the website URLs/Text sources I have uploaded. Extract the data for every source and format it strictly as a JSON array of node objects. For each source, generate: id (slugified), title, url, status, cluster, targetKeyword, description, bigIdea, semanticKeywords, and anchorTextOptions.

CRITICAL RULES: Output RAW JSON ONLY. No markdown backticks. NO CITATION MARKERS ([1]). Output as a single JSON array: [ {node1}, {node2} ].

Note: If it stops halfway, type “Continue exactly where you left off, strict JSON, no citations.”

Path B: The “God Mode” Protocol (Firecrawl)

If your website has more than 50 pages, standard AI tools will freeze if you try to feed them your entire site at once. To bypass this, we use the “God Mode” process: Firecrawl to scrape your site into pure text, and Google AI Studio to process that massive text file into your ContentOps database.

Phase 1: The Firecrawl Setup & Extraction

Step 1: Install the Prerequisites

Go to Python.org and download the latest version. CRITICAL: Check the box “Add Python to PATH” before clicking Install. Once installed, open Command Prompt (cmd) and type: pip install firecrawl-py

Step 2: Set Up Your Command Center Folder

Create a folder named ContentOps_Scrape on your C:\ drive or Documents folder.

Step 3: Get Your Firecrawl API Key

Go to Firecrawl.dev, create an account, and copy your API Key from the Dashboard. You will need to check your way through their onboarding process, but when you’re finished, you’ll get your API key.

Step 4: Create the Extraction Script

Paste this code into Notepad. Replace “fc-your-actual-api-key-here” with your new Firecrawl key. Save as batch_scrape.py (ensure “Save as type” is set to All Files).

from firecrawl import FirecrawlApp
import time
API_KEY = “fc-your-actual-api-key-here”
OUTPUT_FILE = “MASTER_SCRAPE.txt”URLS = [“https://yourwebsite.com/post-1/”, “https://yourwebsite.com/post-2/”]
client = FirecrawlApp(api_key=API_KEY)
with open(OUTPUT_FILE, “w”, encoding=”utf-8″) as f:
for i, url in enumerate(URLS, start=1):
result = client.scrape_url(url, params={‘formats’: [‘markdown’]})
f.write(f”# PAGE {i}\nURL: {url}\n\n{result.get(‘markdown’, ”)}\n\n{‘=’*80}\n\n”)

Step 5: Run the Scrape

Open the Command Prompt Terminal (Windows Key then type command),

type cd C:\ContentOps_Scrape

then: python batch_scrape.py.

🚨 The Backup Method: If the script crashes, log into your Firecrawl Dashboard, find the “Activity Tab”, Find your successful scrape, and download the Markdown ZIP.

Extract the contents of that zip file to C:\ContentOps_Scrape.

Then run this command in your Command Prompt Terminal: copy *.md MASTER_SCRAPE.txt.

That last command should compress all the scraped individual files into one massive .md file. Your next step is in AI Studio which will through an error if you drop that .md file, so open the .md file and resave as a .txt to remove the friction.

Phase 2: Google AI Studio Setup

We use Gemini 1.5 Pro because it has a 2-million token context window.

  1. Go to aistudio.google.com.
  2. Upload MASTER_SCRAPE.txt and your Initial Map State.json.
  3. The Master Extraction Prompt: Paste and run this prompt:
“I have attached a massive text file (MASTER_SCRAPE.txt) and an architectural schema JSON file. Extract data for EVERY PAGE in the text file. Format strictly as a JSON array of node objects. For each source, generate: id (slug), title, url, status, cluster, targetKeyword, description, bigIdea, semanticKeywords, and anchorTextOptions. Output RAW JSON ONLY. No markdown backticks. NO CITATION MARKERS. Node list must be flat.”

If it hits the limit, type: “You hit your output limit. Please continue EXACTLY where you left off, starting with the next node in the JSON array.”

Finalization: Flash Inject & Harvester

1. Flash Inject: Highlight the resulting JSON block, copy it, and paste it into the Flash Inject JSON tool in your ContentOps App.

2. Inspect & Clean: Go in and inspect each node. Ensure inferred fields make sense. Check “yes” for media-heavy nodes and add links to their YouTube/Podcast files.

3. Assign Offers: Manually reassign all sales/service pages to the “Offers and Landing Pages” cluster. Assign the correct Transitional and Core offers to each informational post.

4. The Harvester: Open a node, click the test URL, then scroll down to the Harvester paste area (bottom). Go to your live site post, hit Ctrl+U (View Source), copy all code (Ctrl+A, Ctrl+C), and paste into the Harvester area. Hit scan. The Harvester will parse the real internal links and wire them bi-directionally across your map.

Let Us Build Your Map

The Topical Map is the most critical asset in your empire. If you’d rather have an architect build it for you, apply as a ContentOps App Operator.

Members save 50% on all Foundation Map builds.

[Build My Map (50% Off)]

Still Stuck?

If your JSON failed to import or the Harvester is acting up, send us a ticket.