# Brand Wiki (ListeningMind) > Crawls a brand website to build an entity map, brand wiki, evidence claims and schema, then links them to ListeningMind search demand to produce an action plan, entity gaps, coverage and page signals. GEO/AEO teams use it to fix content so AI answers describe the brand correctly. Demand data exists for Korea, Japan and the US; demand and category context can also be imported from Intent KG runs. Korean: 브랜드 사이트를 AI가 읽는 엔티티·위키·근거로 정리하는 앱 · Japanese: ブランドサイトをAIが読むエンティティ・Wiki・根拠に整理するアプリ ## Use it as an agent - [MCP server](https://daas-wiki.listeningmind.ai/mcp): Streamable HTTP, JSON-RPC. 41 app tools plus app_guide, result store tools (results_sync, results_list, results_get, results_compare, results_export) and settings sweeps (plan_batch, batch_status) - WebMCP: every page of this app registers the same tools in `document.modelContext` for a browser agent; calls that spend credits ask the person on the page - [OpenAPI](https://daas-wiki.listeningmind.ai/.well-known/openapi.json): the same tools as a REST contract (operationId = tool name) - [agents.md](https://daas-wiki.listeningmind.ai/agents.md): step-by-step guide · [API catalog](https://daas-wiki.listeningmind.ai/.well-known/api-catalog) · [MCP server card](https://daas-wiki.listeningmind.ai/.well-known/mcp/server-card.json) - Every page answers `Accept: text/markdown` with a markdown version - Tools of kind run or delete spend credits or delete data: over MCP the call returns confirm_url for a person, then call confirmation_status - Accounts: reading results and history is open. Starting a run or changing data needs a ListeningMind member: the person approving confirm_url signs in or [signs up](https://daas-wiki.listeningmind.ai/_lm/auth/signup); other changes over MCP need the member's agent key (LM-User-Key header, created at https://daas-wiki.listeningmind.ai/_lm/account) ## What you give and what you get - Inputs: Brand site URL (required), brand name, market (KR/JP/US...), language, industry, max pages to crawl. Optional: demand keywords as CSV/JSON, a KG topic. - Outputs: Entity map (core, supporting, context), wiki page per entity, claims with source URLs, JSON-LD, demand keywords, action plan, entity gaps, coverage report, page signals, draft entity pages, a brand MCP server, exports (md, json, csv, jsonld, llms.txt). - Cost: Crawling costs no credits. Analysis, action plan, gaps, coverage, page signals and page generation use server LLM calls (scale with page count; amounts not reported). Live demand fetch uses up to 5 cluster_finder calls plus keyword_info for about 120 keywords; a new KG build costs 20k-50k credits. Importing from an existing KG costs 0 credits. ## How a result is made (in order) 1. `create_project`: Create a project for the brand site. 2. `discover_urls`: Collect candidate URLs from sitemaps and links. 3. `update_crawl_settings`: Adjust crawl scope such as max pages if needed. 4. `crawl_pages`: Crawl the selected pages. 5. `start_entity_analysis`: Start the entity, wiki and claim analysis. 6. `get_analysis_status`: Poll until the analysis is done. 7. `get_analysis`: Read the entity map and wiki. 8. `get_kg_link`: See whether a category Intent KG is linked (0 credits). 9. `import_demand_from_ontology`: If a KG exists, import demand keywords from it (0 credits). 10. `fetch_demand_live`: Otherwise fetch demand live from ListeningMind (spends credits). 11. `import_category_context`: Import the KG's category knowledge as wiki context. 12. `start_action_plan`: Build the action plan linking demand to entities. 13. `get_action_plan_status`: Poll until the plan is done. 14. `start_entity_gap`: Find missing entities and facts. 15. `get_entity_gap_status`: Poll until the gap analysis is done. 16. `start_coverage`: Evaluate coverage of AI questions. 17. `get_coverage`: Read the coverage report. 18. `start_page_signals`: Score per-page AI-readability signals. 19. `get_page_signals`: Read the page signals. 20. `generate_entity_page`: Draft canonical pages for entities that need them. 21. `get_project`: Read the full result bundle. 22. `export_project`: Export wiki, JSON-LD, llms.txt or CSV. ## Method (how the analysis works) 1. Create a project for the brand site, gather URLs from sitemaps and links, and judge AI crawler access from robots.txt. 2. Crawl the selected pages and store their text. 3. Run the AI analysis: entity map (core, supporting, context), brand wiki pages, claims with source URLs and schema. 4. Attach demand keywords: import them from an Intent KG run (0 credits), fetch them live from ListeningMind, or import your own. 5. Build the action plan linking demand to entities, then entity gaps, coverage of AI questions and per-page signals. 6. Draft canonical pages for entities that need them and export the wiki, JSON-LD, llms.txt or CSV. ## Reading the result - analysis.entities, analysis.wikiPages and analysis.claims are the core; every claim carries a source URL, so you can check what the site actually supports. - actionPlan.actionItems maps demand keywords to entities and content actions; start the work from there. - entityGap.gaps lists entities and facts the brand should cover but does not. - The coverage report (get_coverage) shows how well the site covers the questions AI assistants would ask; pageSignals.overallScore and the page signals score structure, schema, entity clarity and demand fit. - connector.items is the demand data behind the plan (keyword, intent, CEP, monthly volume, trend). ## Requests this app answers well - Crawl our brand site and build the entity map and brand wiki that AI assistants read - Find the entities and facts that have search demand but are missing from our site - Create llms.txt and JSON-LD for our brand site - Make a content action plan for our site based on demand keywords in Japan ## Continue in another app - [GEO Audit](https://daas-geo.listeningmind.ai/llms.txt) (MCP `https://daas-geo.listeningmind.ai/mcp`): When page signals or coverage show weak pages, or after editing pages from the action plan. Carry: The URLs of low-scoring pages (up to 5 per audit) and the brand's main category keyword as the topic. - [Prompt Builder](https://daas-prompt.listeningmind.ai/llms.txt) (MCP `https://daas-prompt.listeningmind.ai/mcp`): When you want to measure, after the content work, whether ChatGPT and Gemini mention and recommend the brand. Carry: The brand name as own brand and the category keyword used for demand as the keyword. ## Using the screens (browser agents) - `describe_screen`: menus, tabs, fields and buttons of the current screen, and what the page is for - `go_to`: open a menu or page of this app by its label or path - `fill_field`: type a value into a field by its label (never presses run; runs go through the run tools, which ask the person) - `read_this_page`: the text and ids of what the person is looking at ## Tools - `list_projects` (read, GET /api/projects): Lists all brand wiki projects: {projects:[{projectId, brandName, domain, seedUrl, language, country, industry, crawlSettings, status, createdAt, updatedAt}]}. status moves created -> discovered -> crawling -> crawled -> analyzed. - `create_project` (action, POST /api/projects): Creates a project for one brand website. Only seedUrl is required; brandName defaults to the host name, language and country are normalized (empty language is detected from content later). Returns {project} with projectId (HTTP 201). - `get_project` (read, GET /api/projects/{project_id}): Returns everything stored for a project: {project, discovery, pages, analysis (entities, wiki pages, claims, schema), connector (demand keywords), actionPlan, entityGap, generatedPages, pageSignals, categoryContext}. Can be large. - `update_crawl_settings` (action, PATCH /api/projects/{project_id}): Updates crawl settings of a project before crawling. maxPages is clamped to 1-1000 and maxDepth to 1-10. Returns {project}. - `delete_project` (delete, DELETE /api/projects/{project_id}): Deletes a project and all its data. Returns {ok:true}. - `discover_urls` (action, POST /api/projects/{project_id}/discover): Collects candidate URLs from the site's sitemaps and links and reads robots.txt to judge AI crawler access. Pass robotsOnly='1' to only re-read robots.txt for an existing discovery. Returns {discovery:{urls:[{url, included, ...}], ...}}. - `crawl_pages` (run, POST /api/projects/{project_id}/crawl): Crawls pages and stores their text. With no urls it crawls every discovered URL marked included (capped by maxPages). Waits until done (up to 5 minutes). Returns {crawled, successful, failed}. - `start_entity_analysis` (run, POST /api/projects/{project_id}/analyze): Starts the AI analysis of the crawled pages: entity map (core, supporting, context), brand wiki pages, evidence claims and schema. Runs in the background; returns {started:true} or 409 {reason:'already-running'}. Poll get_analysis_status. - `get_analysis_status` (read, GET /api/projects/{project_id}/analyze): Returns {status:{state (idle, running, done, error), startedAt, finishedAt, message, progress:{pagesCited, totalPages, entities, elapsedSec}}, claudeAvailable}. Repeat until state is done or error. - `get_analysis` (read, GET /api/projects/{project_id}/analysis): Returns {analysis}: entities with types, layers, descriptions, CEPs, attributes and evidence; brand wiki pages; claims with source URLs; review status. null before analysis. - `save_analysis` (action, PUT /api/projects/{project_id}/analysis): Replaces the whole analysis object, as the in-app editor does when you edit an entity or wiki page or change review status. Send the full analysis from get_analysis with your edits. Returns {ok:true}. - `get_demand_data` (read, GET /api/projects/{project_id}/connector): Returns the project's demand connector: {connector:{source, importedAt, items:[{keyword, intent, cep, monthlyVolume, trend, relatedEntity, note}]}} or null. - `import_demand_data` (action, PUT /api/projects/{project_id}/connector): Saves demand keywords you already have. Send exactly one of items, csv (header keyword,volume,intent,cep,trend,note; Korean headers also work) or json (a JSON string of an array or {items}). Replaces the current connector. Returns {connector}. - `check_live_demand_fetch` (read, GET /api/projects/{project_id}/connector/fetch-direct): Tells whether the server can fetch demand directly from ListeningMind for this project: {available, market:{code, name, gl}, marketSupported, message}. Only KR, JP and US markets have data. - `fetch_demand_live` (run, POST /api/projects/{project_id}/connector/fetch-direct): Server calls the ListeningMind Data API: expands related keywords from up to 5 seed keywords (cluster_finder rels), then gets volume and trend for up to about 120 candidates (keyword_info), keeps those with volume, and saves them as the demand connector. Returns {imported, source}; 409 no-credentials or unsupported-market. - `prepare_demand_handoff` (action, POST /api/projects/{project_id}/connector/fetch): Writes a FETCH-LM.md instruction file into the project folder and returns {command, gl, market, marketSupported, seeds} so a Claude Code session with the ListeningMind MCP can collect demand and write connector.json. No credits by itself. - `list_ontology_runs_for_demand` (read, GET /api/projects/{project_id}/connector/fetch-ontology): Lists existing Intent KG (topic ontology) runs that can be imported as demand data, optionally filtered by topic text and market. Returns {runs:[{runId, topic, gl, ...}]}. Never builds. - `import_demand_from_ontology` (action, POST /api/projects/{project_id}/connector/fetch-ontology): Imports the decision layer of one existing Intent KG run as the project's demand connector. Give runId, or topic (+gl) to match a run. Never builds a new run. Returns {imported, connector, stats}; 404 no-match when no run exists. - `start_action_plan` (run, POST /api/projects/{project_id}/actionplan): Builds the action plan that maps demand keywords to entities and content actions. Needs an analysis and demand data. Runs in the background; returns {started:true}. Poll get_action_plan_status, then read actionPlan from get_project. - `get_action_plan_status` (read, GET /api/projects/{project_id}/actionplan): Returns {status:{state, message, ...}, claudeAvailable}. Repeat until done or error; the plan itself is in get_project.actionPlan. - `save_action_plan` (action, PUT /api/projects/{project_id}/actionplan): Saves the full action plan after edits such as changing an action item's status. Send the full actionPlan object. Returns {ok:true}. - `start_entity_gap` (run, POST /api/projects/{project_id}/entitygap): Finds entities and facts the brand should cover but does not (uses demand data as a hint if present). Needs an analysis. Background job; returns {started:true}. Poll get_entity_gap_status, then read entityGap from get_project. - `get_entity_gap_status` (read, GET /api/projects/{project_id}/entitygap): Returns {status:{state, message, ...}, claudeAvailable}. Repeat until done or error. - `save_entity_gap` (action, PUT /api/projects/{project_id}/entitygap): Saves the full entity gap report after edits such as a gap status toggle. Returns {ok:true}. - `start_coverage` (run, POST /api/projects/{project_id}/coverage): Checks how well the site covers the entities and demand (questions AI assistants would ask). Needs an analysis. Background job; returns {started:true}. Poll get_coverage. - `get_coverage` (read, GET /api/projects/{project_id}/coverage): Returns {status:{state, message}, report, claudeAvailable}. Repeat until state is done or error; report holds the coverage result. - `start_page_signals` (run, POST /api/projects/{project_id}/page-signals): Scores crawled pages for AI-readability signals (structure, schema, entity clarity, demand fit). Needs analysis and crawled pages. Background job; returns {started:true}. Poll get_page_signals. - `get_page_signals` (read, GET /api/projects/{project_id}/page-signals): Returns {status:{state, message}, report, claudeAvailable}. Repeat until state is done or error. - `generate_entity_page` (run, POST /api/projects/{project_id}/generate-page): Generates a draft canonical page (text and schema) for one entity of the analysis. Background job; returns {started:true}. Poll get_page_generation_status; the result appears in get_project.generatedPages. - `get_page_generation_status` (read, GET /api/projects/{project_id}/generate-page): Returns {status, aiAvailable}. status describes the current or last page generation job (state, entityId, message). Repeat until done or error. - `list_ontology_runs_for_context` (read, GET /api/projects/{project_id}/wiki/fetch-ontology-context): Lists existing Intent KG runs whose knowledge layer can be imported as category context for the wiki. Returns {runs}. Never builds. - `import_category_context` (action, POST /api/projects/{project_id}/wiki/fetch-ontology-context): Imports one KG run's knowledge layer (conventions, heuristics, trade-offs, benchmarks, pitfalls) as the project's category context, cited at the bottom of wiki pages. Give runId, or topic (+gl). Returns {imported, context, stats}. - `get_kg_link` (read, GET /api/projects/{project_id}/kg): Returns the project's link to the Intent KG: matched run digest (run_id, topic, type counts), candidates and any build in progress. refresh='1' re-matches automatically; topic (+gl) matches a given topic. 0 credits. - `match_kg_topic` (action, POST /api/projects/{project_id}/kg): Matches the project to an existing KG run for the given topic and saves the link. Returns {link}. 0 credits. - `request_kg_build` (run, POST /api/projects/{project_id}/kg): Asks the Intent KG app to build a new topic graph for this project (sends build:true and confirm:true). Returns {link} with link.building.jobId; poll get_kg_build. - `get_kg_build` (read, GET /api/projects/{project_id}/kg): Returns {job:{status, ...}, link}. When status is done the link is refreshed to the new run. Repeat until done or error. - `ask_dual_demo` (run, POST /api/projects/{project_id}/mcp-demo): Answers one question twice: from internal brand knowledge only, and from brand knowledge plus live ListeningMind search demand for the most related entity. Returns {internal, combined, evidence:{wiki, market}}. - `get_brand_mcp_info` (read, GET /api/projects/{project_id}/mcp): Describes the per-project brand knowledge MCP server (JSON-RPC 2.0 over POST to the same path): service name, transport, endpoint and tool names (search_wiki, list_entities, read_entity, search_market, gap_report, category_kg). - `export_project` (read, GET /api/projects/{project_id}/export): Downloads project data. format: markdown (wiki), json (whole bundle), entities-csv, claims-csv, jsonld (schema.org), llms-txt, connector (demand JSON), connector-csv. Sent as an attachment. - `get_settings` (read, GET /api/settings): Returns {settings:{defaultMaxPages, defaultMaxDepth, defaultExcludePaths, respectRobots}} applied to new projects. - `update_settings` (action, PUT /api/settings): Updates defaults for new projects. defaultMaxPages is clamped to 1-1000 and defaultMaxDepth to 1-10. Returns {settings}. ## Pages - [Projects](https://daas-wiki.listeningmind.ai/): Create projects and browse them by market. - [Settings](https://daas-wiki.listeningmind.ai/settings): Default crawl settings for new projects. ## Limits - Results are stored on the server (project folder); nothing is kept only in the browser (only the UI language is in localStorage). ListeningMind demand exists only for KR, JP and US; other markets are refused with unsupported-market. Analysis-type jobs run in the background and return 409 already-running if the same job is running. Status reads report state under status.state. Each project also exposes a brand MCP server at POST /api/projects/{id}/mcp (JSON-RPC 2.0); its search_market tool spends credits. No auth (internal network). ## The ListeningMind apps (same account, same tools, call any of them) Each app has `/mcp`, `/llms.txt`, `/agents.md` and WebMCP on its pages. `family_apps` and `recommend_app` return this list with addresses. - [ACO](https://daas-aco.listeningmind.ai/llms.txt): Diagnoses whether a product detail page can be cited by AI answers and used by shopping agents (MCP `https://daas-aco.listeningmind.ai/mcp`) - [AOO](https://daas-aoo.listeningmind.ai/llms.txt): Measures whether AI agents can get real tasks done on a website (MCP `https://daas-aoo.listeningmind.ai/mcp`) - [Brand Finder](https://daas-brand.listeningmind.ai/llms.txt): Which brands lead search by generation or field, and what their brand assets are (MCP `https://daas-brand.listeningmind.ai/mcp`) - [Brand Naming Agent](https://daas-naming.listeningmind.ai/llms.txt): Creates and checks brand name candidates grounded in search data (MCP `https://daas-naming.listeningmind.ai/mcp`) - [CEP Finder](https://daas-cep.listeningmind.ai/llms.txt): In which situations do people start looking for this category (category entry point map) (MCP `https://daas-cep.listeningmind.ai/mcp`) - [Creative Finder](https://daas-creative.listeningmind.ai/llms.txt): Finds purchase situations (CEP) in search data and drafts a creative, an image and a video for each (MCP `https://daas-creative.listeningmind.ai/mcp`) - [Demand Forecast](https://daas-forecast.listeningmind.ai/llms.txt): What category demand looks like in the next 3-6 months and when to launch or campaign (MCP `https://daas-forecast.listeningmind.ai/mcp`) - [Funnel Leak Finder](https://daas-funnel.listeningmind.ai/llms.txt): Where category search journeys leak to competitors (MCP `https://daas-funnel.listeningmind.ai/mcp`) - [GEO Audit](https://daas-geo.listeningmind.ai/llms.txt): Checks whether a web page is ready to be read and cited by search engines and AI answer engines (MCP `https://daas-geo.listeningmind.ai/mcp`) - [ICSS](https://daas-icss.listeningmind.ai/llms.txt): Synthetic consumer panel conditioned on search intent, for surveys and FGDs (MCP `https://daas-icss.listeningmind.ai/mcp`) - [Intent KG](https://daas-intent.listeningmind.ai/llms.txt): What people look for about a topic, why, and how they choose (Intent Knowledge Graph) (MCP `https://daas-intent.listeningmind.ai/mcp`) - [Prompt Builder](https://daas-prompt.listeningmind.ai/llms.txt): Finds what consumers ask AI and builds managed brand prompts with AI visibility (MCP `https://daas-prompt.listeningmind.ai/mcp`) - [Pulse Finder](https://daas-pulse.listeningmind.ai/llms.txt): What is rising in search for a gender and age segment right now (MCP `https://daas-pulse.listeningmind.ai/mcp`) - [Smart Store Suite](https://daas-store.listeningmind.ai/llms.txt): Which Smart Store products to grow, and how to rewrite their titles and detail pages in searchers' words (MCP `https://daas-store.listeningmind.ai/mcp`) - [Taste Finder](https://daas-taste.listeningmind.ai/llms.txt): In what sensory and emotional words do people choose this (consumer taste report from search data) (MCP `https://daas-taste.listeningmind.ai/mcp`) - [ListeningMind Data API](https://daas.listeningmind.ai/llms.txt): the search data behind every app (MCP `https://daas.listeningmind.ai/mcp`) · [glossary](https://daas.listeningmind.ai/en/glossary) · [all apps](https://daas.listeningmind.ai/en/apps) ## Optional - ListeningMind data and other apps: https://www.listeningmind.com · contact m-support@listeningmind.com