Product
ContentGrapher
ContentGrapher is a structural completeness analysis tool for explanatory content. It maps the concept graph present in a page. It builds an explanation framework representing what the topic and audience require. It measures the coverage gap between the two.
Structural completeness is distinct from prose quality, keyword density, and competitive coverage. A page is structurally complete when its concept graph contains the entities and relationships a complete explanation requires, each developed at appropriate depth and connected explicitly to the others.
Retrieval systems decompose queries into sub-queries and match each independently against content. A page covering five of eight required concepts answers five sub-queries and leaves three unmatched. ContentGrapher makes that coverage gap measurable. Entities and relationships are the primary unit of analysis, not prose quality, word count, or keyword frequency.
Origin
ContentGrapher was created by Daniel Cheung. The foundational concept originated in ContentGraph, an open-source prototype published at github.com/danielkcheung/contentgraph. ContentGraph proved the core analysis approach and is available for forking and adaptation.
ContentGrapher is the production evolution of that prototype. It adds three capabilities ContentGraph did not ship: audience specification, the boundary layer, and the re-analysis loop with delta view. Analysis is operator-funded; no API key is required from the user.
Key concepts
The degree to which a page fully explains what it claims to explain. Distinct from prose quality, keyword density, and competitive coverage. A page can rank well and be structurally incomplete; a page can be well-written and fail to cover the concepts its topic requires.
The map of entities and relationships present in a piece of content. Relationships are extracted as subject-verb-object triples, classified as explicit (directly stated) or implied (inferable from context). Entities and the relationships between them are the primary unit of content signal.
A per-concept classification indicating how effectively a concept is developed and connected within the content. Four states: well_integrated, weakly_integrated, underexplained, naming_inconsistent.
A short phrase describing each concept's functional purpose in the explanation. Assigned to concepts in both the observed map and the explanation framework. Examples: "a prerequisite the reader needs first", "the mechanism that enables the anchor", "a constraint on when it applies", "a grounding example".
The set of concepts a complete explanation of a topic requires for a specific audience. Derived from topic inference and demand signals. Each concept carries a priority (essential, important, or useful) and a presence field (yes, partial, or no).
A scope diagnosis classifying each concept as core, supportive, adjacent, or excluded relative to the page's stated purpose. Also identifies the page's Primary Retrieval Role (explain, guide, compare, evaluate, or convert) and diagnoses whether the page mixes roles.
A before-and-after comparison of two analyses of the same page. Shows which coverage gaps closed and which remain after content edits. Persists as named snapshots within a series, a set of analyses of the same URL under one account. Coverage score and concept presence are both tracked.
Concept graph output
Analysis produces two distinct graph outputs. The observed map contains concepts and relationships extracted from the content. The explanation framework contains concepts the topic and audience require. Coverage is the intersection of the two.
Green nodes: covered, present in content and required by framework. Grey nodes: observed only, in content but not structurally required. Red dashed nodes: gaps, required by framework but absent from content.
ContentGraph and ContentGrapher
ContentGraph and ContentGrapher run the same core analysis pipeline. ContentGrapher adds three capabilities ContentGraph did not ship.
Audience specification
ContentGraph infers the audience from content. ContentGrapher accepts an explicit audience definition before analysis runs. The explanation framework is then built for that specific audience: what they already know, what they are deciding, and what a complete explanation requires for them. The same page analyzed for a technical evaluator versus a first-time buyer produces different frameworks.
Boundary layer
ContentGrapher classifies each concept relative to the page's scope (core, supportive, adjacent, excluded), identifies the Primary Retrieval Role, and diagnoses whether the page mixes roles in ways that dilute its retrieval signal.
Re-analysis loop
ContentGraph is ephemeral: the session ends and history is lost. ContentGrapher persists named snapshots within a series (a set of analyses of the same URL) and produces a delta view after each re-analysis, showing which gaps closed and which remain. Coverage score is tracked over time.
Feature comparison
| Feature | ContentGraph | ContentGrapher |
|---|---|---|
| Concept graph (observed) | ✓ | ✓ |
| Integration states | ✓ | ✓ |
| Explanation framework | ✓ | ✓ |
| Writing guidance | ✓ | ✓ |
| Content architecture | ✓ | ✓ |
| Audience specification | — | ✓ |
| Boundary layer (scope diagnosis) | — | ✓ |
| Re-analysis + delta view | — | ✓ |
| Analysis history | — | ✓ |
| Shareable links | — | ✓ |
| Markdown export | ✓ | ✓ |
| JSON export | — | ✓ |
| Price | Free, open-source | 5 free; packs from $29 |
Limitations
The framework models retrieval behavior, not retrieval outcomes. The explanation framework represents what a complete explanation ideally requires. A structurally complete page is not guaranteed to be cited.
Anchor misidentification propagates through both outputs. If the primary subject is misidentified, the observed map and explanation framework are built around the wrong topic. ContentGrapher surfaces the detected anchor and allows correction before analysis continues.
The framework reflects model training knowledge. The explanation framework is built using the model's topic knowledge. For fast-moving domains, the framework may be incomplete or out of date.
Relationship extraction favors explicit prose. Relationships implied in tables, lists, code blocks, or visual layouts may not be extracted or may be classified as implied rather than explicit. Content that encodes structure in non-prose formats may produce a less complete observed map than its actual coverage warrants.
Analysis targets explanatory content. ContentGrapher is designed for content whose purpose is to explain: definitions, guides, how-tos, comparisons, evaluations. It applies less directly to narrative, opinion, or transactional content.
Out of scope
ContentGrapher does not benchmark content against competing pages. Demand signals inform the explanation framework as inputs to topic coverage requirements, not as competitive coverage targets. Inclusion decisions are determined by what the explanation requires for the topic and audience.
ContentGrapher does not generate content, monitor AI-generated responses, predict rankings, or measure prose readability. Its output is structural: a concept map, a coverage gap, writing guidance specific to identified gaps, and a page architecture blueprint.