# GEO Audit (ListeningMind) > GEO Audit renders 1-5 URLs (or HTML captured in the browser) in a real browser, compares them with the pre-JS HTML and scores SEO, AEO and GEO items with rules. Only the main content (without navigation, footer and recommendation widgets) is judged, and a re-review step drops weakly supported findings. With a topic keyword it checks coverage against ListeningMind Data API search volume, intents and related keywords. Marketers and SEO staff use it for pages in Korea, Japan and the US. Korean: 웹페이지가 검색엔진과 AI 답변 엔진에 읽히고 인용될 준비가 됐는지 점검합니다 · Japanese: ウェブページが検索エンジンとAI回答エンジンに読まれ引用される準備ができているか点検します ## Use it as an agent - [MCP server](https://daas-geo.listeningmind.ai/mcp): Streamable HTTP, JSON-RPC. 10 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-geo.listeningmind.ai/.well-known/openapi.json): the same tools as a REST contract (operationId = tool name) - [agents.md](https://daas-geo.listeningmind.ai/agents.md): step-by-step guide · [API catalog](https://daas-geo.listeningmind.ai/.well-known/api-catalog) · [MCP server card](https://daas-geo.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-geo.listeningmind.ai/_lm/auth/signup); other changes over MCP need the member's agent key (LM-User-Key header, created at https://daas-geo.listeningmind.ai/_lm/account) ## What you give and what you get - Inputs: 1-5 public URLs or captured HTML (up to 6 MB); optional topic keyword (up to 60 characters), market (kr/jp/us) and an earlier audit id to compare with. - Outputs: Per URL: overall score and grade, axis scores, item verdicts with evidence, readability, before/after render comparison, re-review result, topic coverage and comparison with the previous audit. HTML and PDF report downloads. - Cost: No Data API credits unless a topic is given; a topic adds one keyword_info and one intent_finder call. When the server has an LLM key, one re-review LLM call is made per page. A job is limited to 240 seconds (40 seconds per page fetch); the recent average duration is avg_s from get_queue_status. ## How a result is made (in order) 1. `get_queue_status`: Check how busy the queue is. 2. `start_audit`: Start the audit with URLs; use start_audit_html for private pages. 3. `get_audit`: Poll until state is done, at least once a minute (queued jobs are dropped after about 90 seconds without polling). 4. `download_report_pdf`: Download the PDF report. 5. `download_report_html`: Download the HTML report. 6. `rerun_audit`: After fixing, re-run the same URLs to compare. 7. `list_history`: Find earlier audits. 8. `delete_history_entry`: Delete records that are no longer needed. Run stages reported by the app: 대기 → 수집·렌더링 → 사이트 신호·링크 점검 → 분석 완료 → 결과 재검토(비판적 점검) → 오류 ## Method (how the analysis works) 1. Fetch 1-5 URLs, or take HTML captured in the browser, and render each page in a real browser. 2. Compare the rendered page with the pre-JS HTML. 3. Check site signals and links, then score SEO, AEO and GEO items with rules, judging only the main content (without navigation, footer and recommendation widgets). 4. With a topic keyword, check coverage against ListeningMind Data API search volume, intents and related keywords. 5. Re-review the results critically and drop weakly supported findings. ## Reading the result - Per URL, scores.overall and grade are the summary; scores.axes splits it into SEO, AEO and GEO. - items lists each check with its verdict and evidence; the fixes come from here. - render_compare (ratio) compares the rendered page with the pre-JS HTML. - review.flagged lists findings the re-review step questioned; readability.score and topic coverage complete the picture. - After rerun_audit, compare shows what changed against the earlier audit. ## Requests this app answers well - Check whether our product introduction page is ready to be cited by AI answer engines - Compare the SEO, AEO and GEO scores of these 3 URLs and list what to fix - Check our blog post's coverage for the topic 'vegan cosmetics' - I fixed the page audited last week; audit it again and tell me what changed ## Continue in another app - [ACO](https://daas-aco.listeningmind.ai/llms.txt) (MCP `https://daas-aco.listeningmind.ai/mcp`): When the audited page is a product detail page and you need product-level fixes for AI answers and shopping agents. Carry: The same URL (or the captured HTML) and market. - [AOO](https://daas-aoo.listeningmind.ai/llms.txt) (MCP `https://daas-aoo.listeningmind.ai/mcp`): When you want to know whether AI agents can get tasks done across the whole site, not one page. Carry: The site's domain. ## 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_queue_status` (read, GET /api/queue): Shows how busy the audit queue is before submitting: {running, waiting, slots, avg_s}. avg_s is the recent average audit duration in seconds. - `start_audit` (run, POST /api/audit): Starts an SEO/AEO/GEO audit of 1-5 public URLs. Each page is rendered in a headless browser, compared with the pre-JS HTML, checked against rule-based items, then re-reviewed. Returns the job status object {id, state (queued, running), urls, progress[], position, ahead, eta_s}. Poll get_audit at least once a minute: a queued job that is not polled for about 90 seconds is dropped. One active audit per client IP; 429 returns the running job_id. - `start_audit_html` (run, POST /api/audit_html): Audits one page from rendered HTML captured in the user's browser (what the bookmarklet and Chrome extension send), for pages behind login, bot blocking or on a private network. The server does not fetch private hosts. Returns the job status object; poll get_audit. - `get_audit` (read, GET /api/audit/{jid}): Reads one audit. While queued or running returns {id, state, urls, progress[] (per-URL stage), position, ahead, eta_s or elapsed_s}; when done returns state done and result {reports[{url, final_url, facts, fetch, render_compare, scores{axes, overall, grade}, readability, items[], review, topic, compare}], topic, axes_meta, cats_meta, generated_at, job}. Repeat until state is done, error or cancelled. - `cancel_audit` (action, DELETE /api/audit/{jid}): Cancels a queued audit (a running one finishes). Returns {state}. 404 when the job is no longer in memory. - `rerun_audit` (run, POST /api/audit/{jid}/rerun): Audits the same URLs again and links the new audit to this one so the report shows what changed. Not possible for private-network pages (use start_audit_html with parent instead). Returns the new job status object; poll get_audit with its id. - `download_report_pdf` (read, GET /api/audit/{jid}/report.pdf): Downloads the finished audit report as a PDF (rendered from /report/{jid}). Limited to 60 downloads per hour per IP. - `download_report_html` (read, GET /api/audit/{jid}/report.html): Downloads the finished audit report as a single static HTML file with inlined CSS. Limited to 60 downloads per hour per IP. - `list_history` (read, GET /api/history): Lists past audits of the caller: {items[{id, created, owner, source, urls, topic, parent, ...}]}, newest first, up to 200. Only audits submitted with the same X-GA-Owner header are returned; without that header the list is empty. - `delete_history_entry` (delete, DELETE /api/history/{jid}): Deletes one stored audit result. Works only for audits owned by the X-GA-Owner token sent with the request. Returns {deleted: true} or 404. ## Pages - [GEO Audit](https://daas-geo.listeningmind.ai/): Main screen with URL input, progress, results and history (#history). #job={id} reopens a result. - [Bookmarklet and extension](https://daas-geo.listeningmind.ai/install): Install guide for the bookmarklet and Chrome extension used for pages behind login or on internal networks. ## Limits - Markets: kr, jp, us. Up to 5 URLs per job, HTML up to 6 MB. One active audit per client IP, 20 per hour, and 503 when the queue is full. All verdicts are rule based; the LLM is used only for re-review. History and deletion are scoped by the X-GA-Owner header (a 16-64 character token per browser), so the same token must be sent to see them. POST requests need a Content-Length header. - Auth: none. Optional header X-GA-Owner: tags submitted audits with an owner; list_history and delete_history_entry only see audits of the owner tokens in that header (comma separated, up to 5). ## 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`) - [Funnel Leak Finder](https://daas-funnel.listeningmind.ai/llms.txt): Where category search journeys leak to competitors (MCP `https://daas-funnel.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