Where is the unoccupied position in this category?

We know the category and we know the incumbents. Map the forks this category has already run, show me who took which branch and which branch killed them, and tell me which one is still open — with the price, the bundle and the message that go with it.

A disciplined run

20 calls

Which costs

$4

Stop at

33 calls

Reading this

Free

The method

Balaji Srinivasan's idea maze, popularised by Chris Dixon's essay of the same name: a good idea is not a sentence but a detailed path through a maze whose turns lead to treasure or to certain death, and whose walls move as technology changes. W. Chan Kim and Renée Mauborgne's eliminate-reduce-raise-create grid forces the subtraction that makes a chosen position defensible; the bundle follows Madhavan Ramanujam's leaders, fillers and killers.

Use this one when

When you have a category and a domain but not a position: choosing where to enter, what to build next to, or where to expand. Use positioning-teardown instead once the product exists and the job is to sell it better, and demand-validation when the question is whether any market is there at all. This one runs before both of them and hands them their subject.

Which tools does this playbook call?

Where is the unoccupied position in this category? calls 20 operations, in the order below. A disciplined run spends 20 of them, $4 in total.

What do you have to supply?

domainrequired
The domain that anchors the maze — yours, or the incumbent whose category you want to enter. Use the domain they serve today, not a retired one.
angle
The path you already favour, in one sentence. The run will try to kill it first.
buyer
The segment you intend to serve, if you have a view. A role and a scale is enough.
price
The price point you would enter at. Whitespace at $20 a month and at $2,000 a month are different rooms.
market
Country to measure, if not the United States.

How do you run it, step by step?

The anchor

<the domain that anchors the category>

What you are building

Balaji Srinivasan's frame, which Chris Dixon's essay carried further: an idea is not a point, it is a maze. "I have an idea for doing music and movies on the internet" is one sentence. The maze is the tree of forks underneath it — open source or closed, free or paid, per download or subscription, music only or music and movies — and each leaf is a company. Some leaves hold treasure. Napster and Kazaa took the wrong branch and are dead.

Srinivasan's test is blunt: if your idea is one sentence, you do not have a good idea. What you should be able to produce instead is a detailed path that is aware of every competitor and every branch already taken.

Dixon adds what a founder worth backing actually holds: a sense for the history of the industry, the players in the maze, the casualties of the past, and the technologies likely to move walls and change assumptions. That last clause is why this run has a step for it. The maze is time-varying. Pandora was a struggling idea until the iPhone put a computer in every pocket, and then it was a different company. Doors open. Doors also close, because an incumbent can cross a bridge a startup cannot.

This run draws that map from outside, from one domain. It cannot ask anyone anything. What it can do is read where the demand is, where the money is, which branches are taken, which branches killed whoever took them, and which walls have moved since.

Fix these before the first call

  PATH YOU BELIEVE IN   your favoured branch, as a path and not a sentence
  WALL YOU EXPECT       what you think stopped whoever tried it before
  PRICE FLOOR           the number below which this is not a business for you
  WALK-AWAY             the finding that would end the run

An empty room is empty for a reason until you have found the reason. Most whitespace is desert: nobody is standing there because nobody could ever pay to stand there. Steps 6 and 7 exist to tell the two apart, and a run that skips them returns a beautiful map of a place with no water.

THE EVIDENCE LADDER. Rank every signal by what it would cost someone to fake. Prefer signals higher up, and never let a lower rung outvote a higher one:

  1. Money someone is paying a competitor, or sustaining ad spend
  2. Salary a company is paying humans to do this job
  3. Search commercial-intent queries with real, repeated volume
  4. Time people build workarounds — spreadsheets, templates, macros
  5. Attention views, engagement, followers, upvotes
  6. Words someone said they would like it. Never sufficient on its own.

Rungs 1 and 2 cost money to fake. Rung 6 costs nothing, which is why so much of it exists.

FINDING URLS. Several tools take a URL and cannot search for one — social_linkedin_posts, social_reddit_posts, social_reddit_comments, company_jobs, company_person, web_fetch. When you need a page, find its URL with YOUR OWN web search first, using a site: filter. That costs nothing and is exact. web_search does the same job for a billed call and is the fallback when you have no search of your own. Never construct a URL from a company name: a wrong URL comes back as a dead page, which reads as an absence of evidence rather than as your mistake.

BATCHING. The keyword tools bill once per call however many terms you send — keyword_volume takes 1,000, keyword_intent 1,000, keyword_overview 700, keyword_ideas 200. Pool your terms and send them in one call rather than looping. A batch whose rows exceed one response comes back trimmed and says how many rows it held versus returned: size the next batch from that figure and send the terms you did not get. A term missing from a trimmed response was withheld, NOT measured at zero. Scoring it as zero is the single most common way one of these runs reaches a confident wrong answer.

1. THE BOUNDARY — what business is this domain actually in?

Three calls on the anchor, answering three different questions.

  • domain_categories on the anchor. It returns numeric category codes with
  organic metrics and **no labels**, so treat it as orientation and nothing
  more: it tells you how many distinct categories the domain has presence in
  and how lopsided that presence is. Do not build the map on it.
  • domain_relevance with target_type=site. What the index considers this
  site to be ABOUT, with volume and CPC per term.
  • domain_rankings with limit=1000. What it actually WINS. **Pull it deep
  on the first call.** At a limit of 150 you will find hundreds of terms
  "missing" from the ranked set that are merely below the cut, and report a
  gap that is really a truncation.

Then compute three numbers, and all three are findings.

The footprint, and whether the instruments can see at all. Count the ranked terms. Under about fifty — a stated default, not a measured constant — the domain tools are blind on this anchor and every ratio below is noise: an anchor that ranks for one keyword is not a small player in its category, it is absent from the index. That is a finding about the company, not a failed run — but it means the maze has to be anchored on an incumbent instead. Keep your subject as the subject; move the anchor to the domain that holds the category's money terms, and read every later step as being about the room rather than about them.

The branded share. Count the ranked terms containing the brand name. A domain whose ranked set is mostly branded has a brand footprint, not a category footprint — it wins its own name and does not hold the ground its category is fought on. That single ratio changes how you read step 2.

Relevance minus rankings. Terms the index associates with this domain that it does not rank for. Deduplicate first: domain_relevance returns variant phrasings that share one volume figure and one CPC — "task management software", "task and project management software", "task mgmt software" all carrying the same number. Collapse rows on (volume, CPC) or you will size the category at two or three times its real width. What survives, ranked by volume times CPC, is ground this domain is credited with and does not hold. If the anchor is yours, that is the cheapest expansion anyone will hand you. If it is a rival's, it is the part of their category they have claimed and not defended.

2. THE ROSTER — and read the branded share before you trust it

  • domain_competitors on the anchor: rivals by keyword-set overlap.
  • domain_serp_rivals on the 10–20 highest-value terms from step 1: who owns
  the battlegrounds. It starts from keywords rather than from a domain, so it
  returns whoever holds those terms whether or not they overlap the anchor.

The trap, and it is severe. domain_competitors measures overlap across the anchor's WHOLE keyword set. When that set is mostly branded, the domains that overlap it are wherever the brand is discussed — video platforms, forums, publishers, the anchor's own template ecosystem — and not one of them is a competitor. Above roughly half branded, treat domain_competitors as a map of the brand's audience and build the roster from domain_serp_rivals instead. The two lists routinely share almost nothing, and the disagreement tells you which one you are holding.

Below the footprint floor it degrades further. With a handful of ranked terms, domain_competitors returns whoever shares your one accidental keyword — a page of unrelated businesses that happen to rank for a phrase in your privacy notice. It is not wrong; it is answering the question you asked with the only data you gave it. Do not read a roster out of it.

Keep the publishers. On a category's money terms the largest holders of estimated value are usually not products at all but review sites, forums and listicles. They are rooms, and they are the rooms collecting the rent.

3. THE DEAD ENDS — the casualties, read against their cohort

domain_traffic_history with targets= the entire roster and date_from at least 36 months back. One billed call takes up to 1,000 domains: send every domain you have, plus the ones you suspect are already dead. The marginal domain is free and the corpses are the point.

Never read a curve on its own. Build a roster index first: normalise each domain's series to its own first month, then take the median across the roster per month. Whole categories move together, and a category's measured organic value can fall by a third over three years while every company in it is trading normally. Judge each domain against that index, never against zero:

  OUTRUNNING     rising against the index — an occupied branch someone is winning
  WITH COHORT    moving as the category moves; the branch is neither hot nor dead
  LAGGING        losing ground steadily; a branch going wrong, not yet gone
  DEAD END       collapsed while the cohort held — somebody hit a wall here
  NO DATA        a flat zero series. The product is gone, not declining

An absolute rule marks the whole category dead. A relative one finds the four or five domains that actually failed, and those are your walls.

A ratio off a base near zero is not a growth rate, in either direction. A domain that went from an estimated value of 1 to 25,000 and one that went from 1 to 0 will both produce spectacular multiples and neither is evidence. Read the absolute level alongside the ratio and discard any domain whose starting value was too small to move. Your own anchor is often one of them.

Then cluster the dead ends by what they SOLD, not by domain. One company failing is a company failing. The finding is several independent companies failing on the same branch — the same promise, the same buyer, the same price shape — because that is a wall rather than a management team. A branch where five or six unrelated domains all fell against a holding cohort is the strongest negative result this run produces, and it is invisible if you read the list one company at a time.

Four checks before you call any fall a wall.

  • A sibling rising in the same batch. A company that moved domains shows
  as a collapse and a rocket side by side. Batching is what makes this free to
  see, and it is why the roster goes in whole. Check the anchor itself: if the
  anchor is the retired half of a migration, restart the run on the live one.
  • web_fetch the two most interesting collapses as format=markdown.
  It answers with the page as one markdown string rather than a row set. A
  dead site, a redirect to a new brand and a trading company with a pivoted
  homepage are three different findings and only one is a wall. **When the
  collapsed company is still trading, what it sells NOW is the shape of the
  wall** — a consumer app whose survivors all sell to teams tells you the wall
  was the buyer and the price, not the product. Where the survivors escaped to
  is the most useful sentence on the branch.
  • **Confirm an OUTRUNNING domain before you treat its rise as category
  evidence.** `domain_top_pages` on it, and read what those pages are about.
  A domain can triple on generic content that has nothing to do with this
  category — interview questions, salary guides, job descriptions — and
  counting it as demand for the category is the same error as attributing
  another company's ad spend.
  • Name collisions. Two unrelated companies with similar domains land in
  the same batch and read as one story. Check what each domain actually sells.

4. THE DOORS — which walls have moved

This is the step that separates a map from a history lesson, and it is Srinivasan's point about a time-varying maze made measurable.

keyword_history on up to 700 terms in one call. Send three sets together: the category's established vocabulary, the vocabulary of any enabling shift you suspect, and the exact phrases the dead ends from step 3 were built on.

Read the monthly series, not a yearly average. The response nests each point's volume inside keyword_info.monthly_searches rather than putting it on the row, and a reader that misses the nesting concludes there is no history at all. A single month an order of magnitude above its neighbours is an artefact until a second instrument agrees.

Three shapes, and each means something different:

  • A door that opened. A phrase at nothing three years ago and at thousands
  a month now dates the shift to the year. That is a wall that moved, and the
  branch behind it may now be passable.
  • A door that never opened. A phrase flat at a few hundred a month for
  five years is a room whose demand never arrived. Cross-reference step 3:
  **a dead end whose vocabulary is still flat is a wall that is still a wall.**
  Two instruments agreeing is the strongest finding this run produces.
  • A vocabulary that migrated. The same job renamed — the enterprise
  phrasing flat and expensive while a newer phrasing for the identical job
  climbs. The job did not change; the words the buyer uses did. Whoever still
  markets in the old words has a distribution problem they may not have
  noticed.

The best room on the map is a proven dead end whose wall has since moved. Demand was proven, an attempt was made and dated, the reason it failed is known, and that reason no longer holds. Nothing else combines evidence and absence of competition the same way.

5. THE ROOMS — draw them from demand, not from companies

  • keyword_ideas on 3–5 seeds taken from the JOB the category does, never
  from the category's name.
  • keyword_related on the richest seed at depth=2. It traverses what the
  same people also search rather than what resembles your seed, which makes it
  the only instrument here that can leave the category you started in.
  Adjacent problems are adjacent rooms. Depth 3 and 4 leave the building.
  • keyword_volume on everything pooled — one call, up to 1,000 terms.
  • keyword_intent on the same pool.
  • keyword_difficulty on the commercial survivors, when search is a route you
  would actually enter through. That number is the cost of the door, not the
  value of the room.

Fold your candidate category nouns into the same pool. You need them in step 8, and priced here they cost nothing extra.

Check the harvest's centre of gravity before you price it. Read the top of the pool by volume times CPC. If it is another category's vocabulary — the platform, the database, the department's tooling — your seeds were sector nouns wearing a job's clothes, and the expansion followed the sector. Re-seed from the sentence the buyer would say about their own problem, not from the noun their industry uses for the activity.

Srinivasan's acronym test, and this data can run half of it. He argues the businesses that worked were built on a constraint outsiders did not know — know your customer for payments, laboratory developed tests for diagnostics, the over-the-air reception rule for streaming television — and that you know you have something when explaining the acronym sets off a light bulb. From outside you can find the vocabulary, if not the constraint: terms the incumbents rank for that your problem-led harvest never returned, and terms carrying low volume with high CPC and commercial intent. Cheap words are outsider words. A term almost nobody searches that costs a fortune per click is an insider term with a budget behind it, and it is the likeliest place a constraint worth knowing is hiding. The sharpest version carries all three at once: tiny volume, a CPC larger than most products charge in a month, and a high competition index — a handful of buyers a month that several advertisers are fighting over. Go and learn the constraint before you commit; this run can only point at it.

A phrase that returns no row at all is not a small room. Distinguish three outcomes: measurable volume, a row reporting zero, and no row returned. The last one means the phrase is not vocabulary — nobody shops in those words. Put the feature your product leads with through this test by name. A headline feature with no vocabulary is not necessarily a bad feature, but it cannot be the thing you are found by, and pricing a room on it is pricing a room nobody asks for.

Group into 5–8 rooms. Two terms belong in the same room when the same domains rank for both; one domain_serp_rivals call on each of two candidate head terms settles a boundary argument. Discard rooms with no commercial or transactional intent — that is an audience, a different and harder business. Use the floor demand-validation uses: about 5,000 searches a month for a consumer room, about 1,000 for a B2B one.

6. OCCUPANCY — who is standing in each room

For the two or three largest domains on the roster:

  • domain_top_pages. Does a page exist that is ABOUT this room, and does it
  earn traffic? A room covered in a paragraph on a feature page is not
  occupied. A room with its own page in their top ten is.
  • ads_creatives with target=<domain>. Compute run length from
  `first_shown` and `last_shown`. **A creative live 90+ days is a claim that
  survived that company's own performance review**, and it outranks anything
  on their website. The `title` field is the advertiser's name, never the ad
  headline. The row count comes back capped, so report the median run length
  and the share running 90+ days rather than a creative count you cannot
  verify.
  • ads_meta_advertisers on the room's own phrase, or on a competitor's
  domain. It searches ads BY PHRASE rather than by advertiser, so it returns
  companies absent from your roster — exactly who occupies a room you had
  scored as empty — and it names each one's `page_id` and dates their ads.
  • ads_meta_library on that page_id for the creatives themselves. It
  answers as one image, because the copy in those ads is pixels: read it, or
  hand it to a vision model.

Score every room:

  OCCUPIED    a dedicated page in their top ten AND a creative sustained 90+ days
  CONTESTED   one of the two without the other
  OPEN        neither

Stated default rather than a measured constant: a room where incumbent pages already rank for more than ~60% of its volume is occupied whatever the ads say, and under ~20% it is open. Between the two you are fighting, not walking in.

7. WATER OR DESERT — the test the whole run turns on

An OPEN room is a hypothesis. Three tests, cheapest first, and a room must pass at least two:

  1. Money next door. Free — you measured it in step 5. Do the room's
   commercial terms carry a real CPC? A room whose neighbours cost money to
   reach sits beside somebody's budget. A room where every CPC rounds to zero
   is being ignored by every advertiser who already tested it.
  1. Somebody is paid to do this today. company_jobs on one listing for
   the role that does this job by hand — find the posting URL with your own
   search first. A salary band is a budget line that already exists, and the
   ceiling on what software can charge to remove it. The band itself is absent
   from most postings; the function being hired for is still a fact, and still
   costs them money.
  1. The nearest paid substitute. web_fetch the closest incumbent's
   pricing page as `format=markdown`, or `format=html` when the tiers sit in a
   table you need cell by cell. Take the floor, the pushed tier, and what they
   meter on. The metering axis is the decision you will copy or break next.

Whitespace with no money next to it is not whitespace. It is a market that has already been priced, at zero. Write that verdict per room and move on rather than arguing with it.

KILL CRITERION, fixed now: if no room is both OPEN and passes two of the three money tests, this maze has been walked. The remaining moves are price, bundle, or a different maze — and reaching that is a result, not a failed run. Report it with the rooms and the reason each one failed.

8. THE OFFER — five layers, decided together or not at all

Kim and Mauborgne's constraint governs this step: an offer that only adds is not a new position, it is a more expensive incumbent. Their eliminate-reduce-raise-create grid exists to force the half of the decision that gets skipped, because subtracting is what makes a position both defensible and cheap.

Fill five lines for the winning room. Each has to make the next obvious:

  POSITION   the branch you take, and the alternative you replace
  BUYER      the characteristic that makes someone a fit — a trigger, a scale,
             a constraint, a stack. Never a demographic
  BUNDLE     leaders behind the tier you want bought, fillers in the base tier
             where they raise perceived value at no cost, killers removed —
             Ramanujam's classification, worked properly in pricing-power
  PRICE      the metric first and the number second: say what the bill does
             when the customer succeeds
  MESSAGE    one sentence, in the buyer's own words, that the incumbent could
             not say

The message is evidence rather than copywriting. Take the phrasing from app_reviews with sort_by=most_recent on an incumbent's app, or social_reddit_posts on the room's canonical complaint thread. Quote verbatim: a paraphrase loses the exact word the buyer would type, which is the part you are buying.

Then run the three tests that kill most candidate offers:

  • THE SUBTRACTION TEST. Name what you ELIMINATE and what you REDUCE, then
  name who will therefore not buy from you. An offer that eliminates nothing
  cannot be cheaper, faster or simpler than the incumbent, so it will be
  compared feature by feature — a comparison the incumbent wins by default.
  • THE SWAP TEST. Put the incumbent's name at the top of your message. If
  it still reads true you have written the category's message, not yours, and
  the room is not open. Do it with the price and the bundle too: if their sales
  team could quote your bundle at your price tomorrow without changing their
  product, you have found a feature, not a position.
  • THE CLONE TEST. An empty room is not a moat. Srinivasan's own examples
  are the winners who arrived second and executed faster — the search engines
  and social networks people remember are not the ones that got there first.
  So say how long the room stays yours once an incumbent notices, and what
  makes that longer than a quarter: the constraint from step 5, a distribution
  position, a data asset, a price they cannot match without hurting their
  existing book. "Nobody is there yet" is not on that list.

9. THE WALL YOU WILL HIT

From steps 3 and 4 you know who walked toward this room and what stopped them, and whether that wall has moved. Name the wall on your own path and who hit it first. If the answer is "nobody has tried this", either the map is incomplete or the room is desert — both mean go back rather than forward.

Close with the cheapest experiment that would find your wall inside 30 days, and the number it has to produce.

Where this run is blind

  • A room with no query is invisible here. The method is biased toward
  whitespace inside a vocabulary that already exists, and the largest new
  categories arrive before their words do. Two partial corrections sit in the
  run — the dead ends in step 3, where somebody tried it before the words
  existed, and step 4, where a vocabulary that migrated shows the words
  arriving. Neither is a substitute. Say so in the report.
  • The constraint itself is not public. Step 5 can find the insider
  vocabulary; it cannot tell you the regulation, contract term or technical
  limit behind it. That part is practitioner knowledge and this API does not
  hold it.
  • Occupancy is measured in public search and public ads only. A room held
  through a sales team, a channel partner, a procurement framework or an app
  store reads as empty here and is not. The cheap correction is hiring: a
  roster company staffing account executives against a room has occupied it in
  a way no page will show.
  • A domain is not a company. Multi-product companies hold rooms on
  subdomains, on paths, and under brands sharing no domain with the anchor.
  Where the roster looks thin for a category you know is crowded, that is
  usually why.
  • An app-first product is nearly invisible to every step here. A company
  whose product is downloaded rather than visited can carry real revenue and
  almost no ranked terms, and this run will read it as absent. When the anchor
  is one of those, the map is still worth drawing — anchor it on an incumbent
  per step 1 — but say plainly that the subject's own position was inferred
  from its site copy and its price, not measured.

RULES THAT MAKE THE OUTPUT TRUSTWORTHY

  • Cite the tool and the argument behind every number you state.
  • Distinguish measured (a tool returned it) from inferred (you reasoned to it).
  • State the strongest evidence AGAINST your conclusion before your conclusion.
  • Absence of a signal is not evidence of absence. Name which instrument was
  blind and why.
  • Coverage is public data and varies by query, country, and date. A thin
  result is a thin result, not an empty market.
  • If the data does not settle it, say INCONCLUSIVE and name the one call that
  would settle it. An unspent budget and an uncertain answer at the same time
  is a failed run; so is a confident answer the data did not support.

Deliver

The maze as a tree: the forks already run, who took each branch, and what happened to them — dead ends named against the roster index, with what web_fetch showed each one to be, and each wall marked still standing or moved with the year it moved. Then the one room you would take, the five-line offer that takes it, what that offer gives up, and how long it stays yours. Then the wall you expect and who hit it first. State the strongest evidence against your choice before you state the choice.

Method: Balaji Srinivasan's idea maze, popularised by Chris Dixon's essay of the same name: a good idea is not a sentence but a detailed path through a maze whose turns lead to treasure or to certain death, and whose walls move as technology changes. W. Chan Kim and Renée Mauborgne's eliminate-reduce-raise-create grid forces the subtraction that makes a chosen position defensible; the bundle follows Madhavan Ramanujam's leaders, fillers and killers. · last updated · published by Wuthering AI