browse-geo
Generative Engine Optimization (GEO) monitoring — track brand and domain visibility across AI-powered search engines: Google AI Overviews, Perplexity, and ChatGPT Search. Run multi-query sweeps, detect citations, measure domain presence, and generate cross-engine visibility reports. Uses the browse CLI with camoufox for stealth.
What this skill does
# browse-geo: Generative Engine Optimization Monitoring ## Goal Monitor how a brand or domain appears in AI-generated search results across three engines: Google AI Overviews, Perplexity, and ChatGPT Search. Produce a visibility matrix showing which queries surface the target domain, in what position, and with what context. ## Prerequisites Camoufox is required for Google (bot detection). Check availability: ```bash browse --runtime camoufox doctor ``` If camoufox is not installed, stop and tell the user to install it manually: > Install it with: `npm install camoufox-js && npx camoufox-js fetch` Do NOT install anything automatically. For ChatGPT Search, a persistent browser profile with an authenticated ChatGPT session is required. If one does not exist, ask the user to authenticate: ```bash browse --profile chatgpt --headed goto https://chatgpt.com # User logs in manually via headed browser # Profile persists cookies for future sessions ``` ## Step 0: Gather inputs Before running any queries, collect from the user: 1. **Target domain** — the domain to track (e.g., `example.com`) 2. **Query list** — 3-10 brand-relevant search queries 3. **Engines** — which engines to check (default: all three) If the user provides only a domain, suggest relevant queries based on the domain's likely industry and product category. Use `AskUserQuestion` to confirm the query list. ## Step 1: Google AI Overviews Google AI Overviews appear at the top of search results for informational queries. Use camoufox with consent dismissal to avoid bot detection and cookie banners. ### Navigate and extract For each query: ```bash BROWSE_CONSENT_DISMISS=1 browse --runtime camoufox --headed goto "https://www.google.com/search?q=<url-encoded-query>" browse --runtime camoufox --headed wait --network-idle browse --runtime camoufox --headed snapshot -i ``` ### Analyze results Read the snapshot output. The AI Overview section typically has an "AI Overview" label, expandable summary text with inline citations, and source links. If present, use `browse --runtime camoufox --headed text` to extract full content. For each query, record: `ai_overview_present` (yes/no), `domain_cited` (yes/no), `citation_position` (number or null), `citation_context` (the claim it supports), and `competing_domains` (other cited domains). ## Step 2: Perplexity Perplexity shows AI-generated answers with numbered source citations. ### Navigate and extract For each query: ```bash browse goto "https://www.perplexity.ai/search?q=<url-encoded-query>" browse wait --network-idle browse snapshot -i ``` ### Analyze results Perplexity shows numbered footnote-style citations (e.g., [1], [2]) within the answer and a "Sources" section with URLs. Use `browse text` for full content if needed. For each query, record: `answer_generated` (yes/no), `domain_cited` (yes/no), `citation_numbers` (positions referencing the target domain), `citation_context`, `total_citations`, and `competing_domains`. ## Step 3: ChatGPT Search (authenticated) ChatGPT Search requires an authenticated session. Use a persistent profile. ### Navigate and query For each query: ```bash browse --profile chatgpt goto https://chatgpt.com browse --profile chatgpt snapshot -i ``` Find the input field from the snapshot, then: ```bash browse --profile chatgpt fill <input-ref> "<query>" browse --profile chatgpt press Enter browse --profile chatgpt wait --network-idle ``` ChatGPT streams responses. Wait for output to stabilize, then snapshot: ```bash browse --profile chatgpt wait --network-idle browse --profile chatgpt snapshot -i ``` If a stop/regenerate button is visible, the response is still streaming — wait and re-snapshot. Use `browse --profile chatgpt text` for full content extraction. ### Analyze results ChatGPT Search shows inline numbered citation links and a "Sources" panel with URLs. For each query, record: `response_generated` (yes/no), `search_used` (yes/no -- ChatGPT may answer from training data without search), `domain_cited` (yes/no), `citation_position` (number or null), `citation_context`, and `competing_domains`. ## Step 4: Generate visibility report After running all queries across selected engines, compile the results into a structured report. ### Visibility matrix Create a table with queries as rows and engines as columns: ``` | Query | Google AI Overview | Perplexity | ChatGPT Search | |------------------------|--------------------|------------|----------------| | "best <product>" | Cited (#2) | Cited (#1) | Not cited | | "<brand> vs competitor"| No AI Overview | Cited (#3) | Cited (#2) | | "how to <task>" | Cited (#1) | Not cited | Not cited | ``` ### Summary metrics Calculate and report: - **Visibility rate**: percentage of queries where the domain appears, per engine - **Average citation position**: mean position when cited, per engine - **Best-performing queries**: queries where the domain appears across multiple engines - **Gap queries**: queries where the domain is absent from all engines - **Top competing domains**: domains that appear most frequently across all queries ### Recommendations Based on the findings, suggest: - Which queries have the highest AI visibility potential - Where competitors are cited but the target domain is not - Content gaps that could improve citation likelihood - Which engines favor the domain (focus optimization there) ## Multi-query workflow When running many queries, batch by engine to minimize context switching: 1. Run all queries on Google AI Overviews first (camoufox session stays warm) 2. Run all queries on Perplexity second (no special runtime needed) 3. Run all queries on ChatGPT Search last (authenticated profile session) Between queries on the same engine, no need to restart the browser. Navigate directly to the next search URL. ## Important rules - **Camoufox for Google** — Google blocks regular Chromium for automated searches. Always use `--runtime camoufox --headed` for Google queries. - **Rate limiting** — Add natural pauses between queries on the same engine. Do not run more than one query every 5-10 seconds on Google. Perplexity and ChatGPT are more lenient. - **AI Overviews are not always present** — Google shows AI Overviews for informational queries, not navigational or transactional ones. Record absence as a data point. - **ChatGPT may not use search** — ChatGPT sometimes answers from training data without invoking web search. When no sources panel appears, record `search_used: no`. - **Snapshot before text** — always take a snapshot first to understand page structure, then use text extraction for full content if needed. - **Do not fabricate results** — if a citation is ambiguous or unclear, note it as uncertain rather than asserting presence or absence. - **Profile persistence** — the `--profile chatgpt` flag reuses cookies across sessions. If the session expires, ask the user to re-authenticate via headed mode. ## Limitations - **Google AI Overviews availability** — not all queries trigger AI Overviews; availability varies by region and query type - **ChatGPT Search access** — requires a ChatGPT Plus or Team subscription with search enabled - **Rate limits** — aggressive querying may trigger temporary blocks on any engine - **Dynamic content** — AI-generated answers change over time; results represent a point-in-time snapshot - **Image/video citations** — this workflow tracks text citations only; rich media citations in AI answers are not captured
Related in Ads & Marketing
ads
IncludedMulti-platform paid advertising audit and optimization skill. Analyzes Google, Meta, YouTube, LinkedIn, TikTok, Microsoft, and Apple Ads. 250+ checks with scoring, parallel agents, industry templates, and AI creative generation.
banana
IncludedAI image generation Creative Director powered by Google Gemini Nano Banana models. Use this skill for ANY request involving image creation, editing, visual asset production, or creative direction. Triggers on: generate an image, create a photo, edit this picture, design a logo, make a banner, visual for my anything, and all /banana commands. Handles text-to-image, image editing, multi-turn creative sessions, batch workflows, and brand presets.
rpg-migration-analyzer
IncludedAnalyzes legacy RPG (Report Program Generator) programs from AS/400 and IBM i systems for migration to modern Java applications. Extracts business logic from RPG III/IV/ILE source code, identifies data structures (D-specs), file operations (F-specs), program dependencies (CALLB/CALLP), and converts RPG constructs to Java equivalents. Generates migration reports, complexity estimates, and Java implementation strategies with POJO classes, JPA entities, and service methods. Use when modernizing AS/400 or IBM i legacy systems, analyzing RPG source files (.rpg, .rpgle, .RPGLE), converting RPG to Java, mapping data specifications to Java classes, planning legacy system migration, or when user mentions RPG analysis, Report Program Generator, RPG III/IV/ILE, AS/400 modernization, IBM i migration, packed decimal conversion, or mainframe application rewrite.
brand-library-architect
IncludedBuild a complete brand library for a product — visual asset render pipeline, brand documentation set (BRAND, COPY, MANIFESTO, BIOS, FAQ, GLOSSARY, TONE, PRICING), open-source convention files (README, CONTRIBUTING, SECURITY, CODE_OF_CONDUCT), and a self-contained press kit. This skill should be used when the user asks to "build a brand library / brand kit / press kit / brand assets" for a product, "set up a brand library workflow," "create a positioning manifesto plus visual identity," or any combination of brand documentation + visual asset pipeline. Apply phase-by-phase or run end-to-end. Templates are product-agnostic and use {{TOKEN}} placeholders the skill prompts the user to fill.
writing-tech-post
IncludedAuthors engineering blog posts end-to-end: launch deep-dives, incident postmortems, architecture migrations, performance case studies, tutorials, AI/agent system writeups, security disclosures, and research-to-product translations. Picks the correct archetype, plans the abstraction ladder, enforces an evidence cadence (diagrams, benchmarks, profiles, traces, code, ablations), tunes voice against publisher house styles (Datadog, Vercel, GitHub, AWS, Meta, Cloudflare, Jane Street), and runs a pre-publish gate for narrative momentum and disclosure ethics. Use when drafting a new engineering post, restructuring a draft that feels flat, deciding which evidence form belongs where, validating that depth and product context are balanced, or preparing a postmortem, migration, or performance narrative for external publication. Do not use for API reference documentation, README authoring, marketing copy, release notes, generic SEO content, ghost-written executive thought leadership, or non-engineering long-form essays.
blog-google
IncludedGoogle API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity analysis for E-E-A-T, YouTube video search for embedding, and Google Ads Keyword Planner. Progressive feature availability based on credential tier (API key, OAuth/service account, GA4, Ads). Shares config with claude-seo at ~/.config/claude-seo/google-api.json. Use when user says "google data", "page speed", "core web vitals", "search console", "indexation", "GA4", "keyword research", "nlp entities", "blog performance", "youtube search", "google api setup".