# Funnel Leak Finder (ListeningMind) > Search journey leak finder. It samples real search paths that start from category entry keywords with path_finder, classifies every node as a brand, generic, compare, exit or channel query, and shows where journeys switch to competitor brands and where your brand captures or loses them. Brand marketers and search / content teams use it to pick points to defend or attack. Data comes from the ListeningMind Data API (path_finder, keyword_info, intent_finder, SERP / AI Overview). Markets: Korea, Japan, US. Korean: 카테고리 검색 여정이 어디서 경쟁 브랜드로 새는가 · Japanese: カテゴリの検索ジャーニーがどこで競合に流れるか ## Use it as an agent - [MCP server](https://daas-funnel.listeningmind.ai/mcp): Streamable HTTP, JSON-RPC. 32 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-funnel.listeningmind.ai/.well-known/openapi.json): the same tools as a REST contract (operationId = tool name) - [agents.md](https://daas-funnel.listeningmind.ai/agents.md): step-by-step guide · [API catalog](https://daas-funnel.listeningmind.ai/.well-known/api-catalog) · [MCP server card](https://daas-funnel.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-funnel.listeningmind.ai/_lm/auth/signup); other changes over MCP need the member's agent key (LM-User-Key header, created at https://daas-funnel.listeningmind.ai/_lm/account) ## What you give and what you get - Inputs: Entry seed keywords (up to 3, e.g. running shoes), your brand (name, aliases, domain; optional), competitor list (e.g. Nike;nike, Adidas;adidas), comparison point (3m/6m/12m or none), sample size (100/200/300/500), deep, number of nodes for the automatic AI Overview read, market (kr/jp/us), credit cap. - Outputs: KPIs and share, hub nodes, leak edges to competitors, funnel stages, inbound and transition, journey tree, metrics and class per node, SERP / AI Overview presence, watch lines (conquest, uncaptured, defend, poach, strengthen) with narrative. Node and path explanations, node brief (Markdown, HTML, PDF). Report as HTML, PDF or Markdown, leaks CSV, raw JSON. - Cost: With defaults (1 seed, sample 200, 6-month comparison) about 6,000-15,000 Data API credits and 2-7 minutes. One path_finder call costs about 2,850 / 5,650 / 8,450 / 14,050 credits at sample 100 / 200 / 300 / 500, and a comparison point doubles the calls. Server cap 30,000. Competitor suggestion about 330 per seed; AI Overview check 30 per node. Explanations use LLM calls only. ## How a result is made (in order) 1. `get_config`: Get examples, comparison points, sample sizes and their cost. 2. `suggest_competitors`: Get competitor candidates when the person has none. 3. `check_inputs`: Catch a seed that is a brand or a competitor that is a channel. 4. `estimate_credits`: Check expected credits and tell the person. 5. `start_run`: Start the run. 6. `get_run`: Poll until done and read the result. 7. `prune_brands`: If retailers or platforms were taken as competitors, clean them up. 8. `reclassify_node`: Fix misclassified nodes. 9. `get_watch_lines`: Read the lines worth acting on, with numbers. 10. `explain_watch_lines`: Write the strategy narrative for those lines. 11. `explain_node`: Drill into an important node. 12. `check_ai_overview`: Check AI Overview presence for nodes of interest. 13. `get_node_brief_markdown`: Get the brief for an explained node. 14. `get_report_markdown`: Get the full report as text. 15. `download_leaks_csv`: Export the leak table. Run stages reported by the app: paths → info → classify → deep → serp → narrative → done ## Method (how the analysis works) 1. Sample real search paths that start from the category entry seeds with path_finder (also at the comparison point, if set). 2. Measure every node with keyword_info. 3. Classify nodes as brand, generic, compare, exit or channel queries with rules and an LLM. 4. Read SERP and AI Overview for top nodes to see which brands appear. 5. Compute shares, hub nodes, leak edges to competitors and funnel stages, then select watch lines with a narrative. ## Reading the result - kpi.my_share_paths and kpi.comp_share_paths (and the _demand values) are the share of journeys and demand held by your brand and by competitors; none_share_paths is the share with no brand. - leak_edges are the points where journeys switch to competitor brands; hubs are nodes many journeys pass through. - Watch lines (conquest, uncaptured, defend, poach, strengthen) are the rule-selected lines to act on, with numbers. - Check share.brands for retailers or platforms counted as competitors; prune_brands or reclassify_node fixes them and recomputes the result. - SERP and AI Overview presence per node shows which brands appear on the result page of that query. ## Requests this app answers well - Show where people searching for running shoes switch to competitor brands - Compare where our brand captures and loses search journeys now versus 6 months ago - List the journey lines to defend and to attack for cordless vacuums in Japan - Make a PDF node brief for the query that leaks most to competitors ## Continue in another app - [Prompt Builder](https://daas-prompt.listeningmind.ai/llms.txt) (MCP `https://daas-prompt.listeningmind.ai/mcp`): When you want to see whether AI answers for the category recommend your brand or the same competitors. Carry: The category seed keyword, your brand and the competitor list cleaned with prune_brands. - [GEO Audit](https://daas-geo.listeningmind.ai/llms.txt) (MCP `https://daas-geo.listeningmind.ai/mcp`): When a watch line points to a query you must defend or win with your own page. Carry: That node keyword as the topic and the URL of your page meant to answer it. ## 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 - `get_config` (read, GET /api/config): Returns markets, example inputs per market, comparison points, path_finder sample sizes with their credit cost, score weights, credit cap and the current account credit balance. Free. - `suggest_competitors` (run, POST /api/suggest_competitors): Proposes category-qualified competitor brands grounded on the queries around the seeds, returning {competitors: [...]} with names and aliases. Uses intent_finder plus one LLM call; about 330 Data API credits per seed (cap twice that). Fetched data is cached and reused by the run. - `check_inputs` (read, POST /api/check_inputs): Checks the run inputs against the brand / channel dictionary and returns {warnings: [{field, text}]}, e.g. a seed that is a brand, or a competitor that is really a retailer or platform. No credits, no LLM. - `estimate_credits` (read, POST /api/estimate): Returns the expected Data API credits for the inputs: {credits, path_finder_calls, per_call, nodes_est, deep, aio, aio_nodes, cap, note}. Computed locally, no API calls. - `start_run` (run, POST /api/runs): Starts a background run: samples search journeys from the seeds with path_finder (now and at cmp_point), measures every node with keyword_info, classifies nodes into brand, generic, compare, exit and channel queries (rules plus LLM), reads SERP / AI Overview for top nodes and computes where journeys leak to competitors. Returns {run_id, url}. Poll get_run. Typically 2-7 minutes and about 6,000-15,000 credits with defaults. - `get_run` (read, GET /api/runs/{run_id}): Returns one run: status (running, done, error), progress {stage, pct, steps}, credits, params, error and, when done, the result (kpi, share, hubs, leak_edges, funnel, inbound, transition, tree, metrics, classes, serp, overview). Repeat until status is done or error. - `list_runs` (read, GET /api/runs): Lists recent runs with run_id, status, credits, created_at, url, seeds, my_brand, cmp_point, gl and deep. - `get_run_evidence` (read, GET /api/runs/{run_id}/evidence): For a finished run, returns the Data API calls per endpoint with calls, credits and cache hits. Free. - `get_watch_lines` (read, GET /api/runs/{run_id}/watch): Marketer view of a finished run: rule-selected journey lines (conquest, uncaptured, defend, poach, strengthen) with numbers, plus the LLM wording if it was generated before for this language. Free. - `explain_watch_lines` (run, POST /api/runs/{run_id}/watch_explain): Generates and stores the LLM wording (strategy narrative) for the rule-selected watch lines. Returns {items, narrative}. Paid LLM call, no Data API credits. The stored wording also appears in report exports. - `explain_node` (run, POST /api/runs/{run_id}/explain): Explains one journey node of a finished run (who arrives, where they go next, which brands win) with an LLM narrative. With fetch_serp=true and no stored SERP it first reads the SERP (about 30 credits, cap 200). Stored per keyword and language, so repeating is free. - `explain_path` (run, POST /api/runs/{run_id}/explain_path): LLM narrative for one line of the journey tree, from the root to a node. The path must exist in result.tree. Stored, so repeating is free. No Data API credits. - `check_ai_overview` (run, POST /api/runs/{run_id}/aio_check): Reads SERP and AI Overview for the given nodes of a finished run and stores which brands appear. Up to 30 keywords per call; 30 Data API credits per node not yet fetched (cap 900 per call). Returns the stored SERP digests. - `reclassify_node` (action, POST /api/runs/{run_id}/reclassify): Changes the role of one node and recomputes the whole result without credits. Roles: my (own brand), comp (a competitor brand, give brand), generic, compare, exit, channel. Returns the new result. - `demote_brand` (action, POST /api/runs/{run_id}/demote_brand): Turns a name wrongly treated as a competitor (a platform or OS such as Android) into a category term: all its nodes become channel queries, it leaves the competitor list, and the result is recomputed. Your own brand cannot be demoted. No credits. Returns the new result. - `prune_brands` (run, POST /api/runs/{run_id}/prune_brands): One LLM pass over the run's brand names: retailers, carriers, marketplaces and platforms stop being competitors and their nodes become channel queries; the result is recomputed. No Data API credits. Returns the new result. - `get_node_brief_markdown` (read, GET /api/runs/{run_id}/brief.md): Returns {keyword, markdown}: a one-page brief for a node already explained with explain_node in the same language. Free. 404 if not explained yet. - `get_node_brief_html` (read, GET /runs/{run_id}/brief.html): Returns the printable HTML brief for an explained node. download=1 adds an attachment header. Free. - `download_node_brief_pdf` (read, GET /runs/{run_id}/brief.pdf): Downloads the node brief as a PDF. Returns 503 when the server has no headless Chrome; then use get_node_brief_html. Free. - `get_report_markdown` (read, GET /runs/{run_id}/report.md): Returns the full run report as Markdown, including the watch lines and their stored wording. Free. - `get_report_preview` (read, GET /runs/{run_id}/preview.html): Returns the full run report as an HTML page for viewing. Free. - `download_report_html` (read, GET /runs/{run_id}/report.html): Downloads the full report as a self-contained HTML file. Free. - `download_report_pdf` (read, GET /runs/{run_id}/report.pdf): Downloads the full report as PDF. Returns 503 when the server has no headless Chrome; then use get_report_preview. Free. - `download_leaks_csv` (read, GET /runs/{run_id}/leaks.csv): Downloads the leak table as CSV (UTF-8 with BOM). Free. - `download_run_json` (read, GET /runs/{run_id}/run.json): Returns {result, raw, classes} for a finished run: the computed result, the raw sampled paths and node data, and the node classes. Free. - `rerun_run` (run, POST /api/runs/{run_id}/rerun): Starts a new run with the same parameters as an earlier run. Returns {run_id, url, from}. Same cost as start_run minus cached calls. - `delete_run` (delete, DELETE /api/runs/{run_id}): Deletes a run and its stored data. Cannot be undone. - `list_entities` (read, GET /api/entities): Lists the learned name dictionary used to classify nodes: {items: [{name, gl, scope, type, source, updated_at}], types}. Types: brand, channel, platform, other. Free. - `add_entity` (action, POST /api/entities): Adds or updates a name in the classification dictionary so future runs treat it as the given type. scope limits it to one seed keyword's category; empty scope means global. No credits. - `delete_entity` (delete, DELETE /api/entities): Removes a name from the classification dictionary for a market and scope ('*' = all scopes). - `list_recent` (read, GET /api/recent): The three most recent finished runs shown on the start screen (run_id, seeds, my_brand, shares). Signed-in members only. - `get_report_robots` (read, GET /_lm/report-robots/{run_id}): Returns whether search engines may index this report page (index or noindex), and why: a company member's run or one set by hand is index; a customer's run, and any run that is still going, failed or came back empty, is noindex. Read only; no credits. ## Pages - [Funnel Leak Finder home](https://daas-funnel.listeningmind.ai/): Input form and run history. - [Method](https://daas-funnel.listeningmind.ai/method): Node classes, leak score and weights. - [Brand and channel dictionary](https://daas-funnel.listeningmind.ai/entities): View, add and remove names used for classification. ?gl=kr|jp|us ## Limits - Seeds must be category terms, not brands, and at most 3 are used. Markets kr/jp/us, languages ko/ja/en. A node brief needs explain_node in the same language first. reclassify_node, demote_brand and prune_brands overwrite the stored result. Dictionary changes affect all later runs. ## 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`) - [Brand Wiki](https://daas-wiki.listeningmind.ai/llms.txt): Turns a brand website into the entities, wiki pages and evidence AI assistants read (MCP `https://daas-wiki.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`) - [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