ScavioScavio
ProductoPreciosDocumentación
Iniciar sesionComenzar
  1. Inicio
  2. Tutoriales
  3. Cómo construir un escáner de visibilidad LLM automatizado
Tutorial

Cómo construir un escáner de visibilidad LLM automatizado

Analice qué tan visible es su marca en los resultados de búsqueda basados ​​en LLM. Realice un seguimiento de las citas de IA, la presencia orgánica y las señales de OEA.

Obtener clave API gratisDocumentacion API

Los LLM ahora impulsan experiencias de búsqueda en Google AI Mode, Bing Copilot y Perplexity. La visibilidad de su marca en estas respuestas generadas por IA impacta directamente en el tráfico. Este escáner verifica la presencia de su marca en los resultados de búsqueda que alimentan las respuestas de LLM, rastreando citas de IA, fragmentos destacados y datos de People Also Ask. Cada escaneo de marca cuesta $0,025 en 5 palabras clave.

Requisitos previos

  • Python 3.8+
  • solicita biblioteca
  • Una clave API de Scavio de scavio.dev
  • Palabras clave objetivo y dominio de marca

Guia paso a paso

Paso 1: Escanee las señales de visibilidad de LLM en palabras clave

Consulte varias funciones de búsqueda que utilizan los LLM para generar respuestas.

Python
import os, requests, json
from datetime import datetime
from collections import defaultdict

API_KEY = os.environ['SCAVIO_API_KEY']
SH = {'x-api-key': API_KEY, 'Content-Type': 'application/json'}

BRAND_DOMAIN = 'scavio.dev'
KEYWORDS = [
    'best search api for ai agents',
    'mcp search tool setup',
    'web search api comparison 2026',
    'serp api free tier options',
    'search api for rag pipeline',
]

def scan_llm_visibility(keyword, domain):
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=SH, json={'query': keyword, 'country_code': 'us'}, timeout=10).json()
    domain_l = domain.lower()
    # AI Overview / Answer Box (feeds LLM responses)
    ai = data.get('ai_overview', data.get('answer_box', {}))
    ai_cited = domain_l in json.dumps(ai).lower() if ai else False
    # Featured Snippet (high-priority LLM source)
    featured = data.get('featured_snippet', {})
    in_featured = domain_l in json.dumps(featured).lower() if featured else False
    # People Also Ask (LLM follow-up context)
    paa = data.get('people_also_ask', [])
    in_paa = any(domain_l in json.dumps(q).lower() for q in paa)
    # Organic position (base visibility)
    organic = data.get('organic_results', [])
    org_pos = next((i+1 for i, r in enumerate(organic) if domain_l in r.get('link', '').lower()), None)
    # Top 3 domains (who LLMs are citing)
    top3 = [r.get('displayed_link', '').split('/')[0] for r in organic[:3]]
    return {
        'keyword': keyword,
        'ai_cited': ai_cited,
        'has_ai_overview': bool(ai),
        'in_featured': in_featured,
        'in_paa': in_paa,
        'organic_pos': org_pos,
        'top3_domains': top3,
    }

scans = []
for kw in KEYWORDS:
    scan = scan_llm_visibility(kw, BRAND_DOMAIN)
    scans.append(scan)
    signals = []
    if scan['ai_cited']: signals.append('AI')
    if scan['in_featured']: signals.append('FS')
    if scan['in_paa']: signals.append('PAA')
    pos = f'#{scan["organic_pos"]}' if scan['organic_pos'] else '-'
    print(f'  {kw[:40]:40} | {pos:5} | {", ".join(signals) or "none"}')
print(f'\nCost: ${len(KEYWORDS) * 0.005:.3f}')

Paso 2: Calcular la puntuación de visibilidad de LLM

Agregue datos de escaneo en una puntuación de visibilidad compuesta.

Python
def calculate_llm_score(scans, domain):
    total = len(scans)
    # Component scores
    ai_cited = sum(1 for s in scans if s['ai_cited'])
    has_ai = sum(1 for s in scans if s['has_ai_overview'])
    featured = sum(1 for s in scans if s['in_featured'])
    paa = sum(1 for s in scans if s['in_paa'])
    top3 = sum(1 for s in scans if s['organic_pos'] and s['organic_pos'] <= 3)
    top10 = sum(1 for s in scans if s['organic_pos'] and s['organic_pos'] <= 10)
    # Weighted score (100 max)
    ai_score = (ai_cited / max(has_ai, 1)) * 35  # AI citations worth most
    featured_score = (featured / total) * 25  # Featured snippets
    paa_score = (paa / total) * 15  # PAA presence
    organic_score = (top3 / total) * 15 + (top10 / total) * 10  # Organic ranking
    total_score = ai_score + featured_score + paa_score + organic_score
    print(f'\n=== LLM Visibility Score: {domain} ===')
    print(f'  Overall: {total_score:.0f}/100')
    print(f'\n  Component Breakdown:')
    print(f'    AI Citations:    {ai_score:.0f}/35 ({ai_cited}/{has_ai} keywords with AI)')
    print(f'    Featured Snippet: {featured_score:.0f}/25 ({featured}/{total} keywords)')
    print(f'    People Also Ask: {paa_score:.0f}/15 ({paa}/{total} keywords)')
    print(f'    Organic Top 3:   {top3}/{total} keywords')
    print(f'    Organic Top 10:  {top10}/{total} keywords')
    return {
        'total_score': total_score,
        'ai_score': ai_score,
        'featured_score': featured_score,
        'paa_score': paa_score,
        'organic_score': organic_score,
    }

visibility = calculate_llm_score(scans, BRAND_DOMAIN)

Paso 3: Generar recomendaciones procesables

Identifique brechas y proporcione acciones específicas para mejorar la visibilidad de LLM.

Python
def generate_recommendations(scans, visibility, domain):
    print(f'\n{"=" * 60}')
    print(f'  LLM VISIBILITY SCANNER REPORT')
    print(f'  Brand: {domain} | Date: {datetime.now().strftime("%Y-%m-%d")}')
    print(f'  Score: {visibility["total_score"]:.0f}/100')
    print(f'{"=" * 60}')
    recs = []
    # AI citation gaps
    ai_gaps = [s['keyword'] for s in scans if s['has_ai_overview'] and not s['ai_cited']]
    if ai_gaps:
        recs.append({
            'priority': 'HIGH',
            'action': 'Optimize for AI citations',
            'keywords': ai_gaps,
        })
    # Featured snippet opportunities
    fs_gaps = [s['keyword'] for s in scans if not s['in_featured'] and s['organic_pos'] and s['organic_pos'] <= 5]
    if fs_gaps:
        recs.append({
            'priority': 'MEDIUM',
            'action': 'Target featured snippets (already ranking top 5)',
            'keywords': fs_gaps,
        })
    # Not ranking at all
    absent = [s['keyword'] for s in scans if not s['organic_pos']]
    if absent:
        recs.append({
            'priority': 'HIGH',
            'action': 'Create content (not ranking)',
            'keywords': absent,
        })
    print(f'\n  Recommendations ({len(recs)}):')
    for r in recs:
        print(f'\n  [{r["priority"]:6}] {r["action"]}')
        for kw in r['keywords'][:3]:
            print(f'    - {kw}')
    # Competitor visibility
    print(f'\n  Top Competitors (by AI/organic presence):')
    all_domains = defaultdict(int)
    for s in scans:
        for d in s.get('top3_domains', []):
            if d and domain not in d:
                all_domains[d] += 1
    for d, count in sorted(all_domains.items(), key=lambda x: -x[1])[:5]:
        print(f'    {d:30} | Top 3 in {count}/{len(scans)} keywords')
    print(f'\n  Scan cost: ${len(scans) * 0.005:.3f}')
    print(f'  Monthly (daily): ${len(scans) * 0.005 * 30:.2f}')

generate_recommendations(scans, visibility, BRAND_DOMAIN)

Ejemplo en Python

Python
import os, requests, json
SH = {'x-api-key': os.environ['SCAVIO_API_KEY'], 'Content-Type': 'application/json'}

def llm_visibility(keyword, domain):
    data = requests.post('https://api.scavio.dev/api/v1/search',
        headers=SH, json={'query': keyword, 'country_code': 'us'}, timeout=10).json()
    ai = data.get('ai_overview', data.get('answer_box', {}))
    cited = domain.lower() in json.dumps(ai).lower() if ai else False
    pos = next((i+1 for i, r in enumerate(data.get('organic_results', [])) if domain in r.get('link', '')), None)
    print(f'{keyword[:35]:35} | AI: {cited} | Pos: {pos or "-"}')

llm_visibility('best search api', 'scavio.dev')

Ejemplo en JavaScript

JavaScript
const SH = { 'x-api-key': process.env.SCAVIO_API_KEY, 'Content-Type': 'application/json' };
const data = await fetch('https://api.scavio.dev/api/v1/search', {
  method: 'POST', headers: SH,
  body: JSON.stringify({ query: 'best search api', country_code: 'us' })
}).then(r => r.json());
const ai = data.ai_overview || data.answer_box || {};
const cited = JSON.stringify(ai).toLowerCase().includes('scavio');
const pos = (data.organic_results || []).findIndex(r => r.link?.includes('scavio.dev'));
console.log(`AI cited: ${cited} | Position: ${pos >= 0 ? pos + 1 : 'absent'}`);

Salida esperada

JSON
  best search api for ai agents            | #3    | AI
  mcp search tool setup                    | #2    | AI, FS
  web search api comparison 2026           | #5    | none
  serp api free tier options               | #4    | PAA
  search api for rag pipeline              | #6    | none

Cost: $0.025

=== LLM Visibility Score: scavio.dev ===
  Overall: 52/100

  Component Breakdown:
    AI Citations:    18/35 (2/4 keywords with AI)
    Featured Snippet: 5/25 (1/5 keywords)
    People Also Ask: 3/15 (1/5 keywords)
    Organic Top 3:   2/5 keywords

============================================================
  LLM VISIBILITY SCANNER REPORT
  Brand: scavio.dev | Date: 2026-05-21
  Score: 52/100
============================================================

  Recommendations (2):

  [HIGH  ] Optimize for AI citations
    - web search api comparison 2026
    - serp api free tier options

  Scan cost: $0.025
  Monthly (daily): $0.75

Tutoriales relacionados

  • Cómo crear informes automatizados de visibilidad GEO
  • Cómo realizar un seguimiento de las respuestas del modo IA de Google a través de SERP API
  • Cómo crear un panel de visibilidad en modo IA

Preguntas frecuentes

La mayoria de los desarrolladores completan este tutorial en 15 a 30 minutos. Necesitaras una clave API de Scavio (el plan gratuito funciona) y un entorno de Python o JavaScript.

Python 3.8+. solicita biblioteca. Una clave API de Scavio de scavio.dev. Palabras clave objetivo y dominio de marca. Una clave API de Scavio te da 50 creditos gratuitos al registrarte.

Si. El plan gratuito incluye 50 creditos al registrarte, mas que suficiente para completar este tutorial y crear un prototipo funcional.

Scavio tiene un paquete nativo de LangChain (langchain-scavio), un servidor MCP y una API REST simple que funciona con cualquier cliente HTTP. Este tutorial usa the raw REST API, pero puedes adaptarlo al framework que prefieras.

Recursos relacionados

Best Of

Las mejores herramientas de base de conocimientos personales para LLM locales en mayo de 2026

Read more
Best Of

Las mejores API de búsqueda para la conexión a tierra de LLM local en 2026

Read more
Workflow

Diario Local LLM Search Grounding Pipeline

Read more
Glossary

LLM Desplazamiento de Tráfico

Read more
Solution

Usa busqueda para detectar y corregir respuestas erroneas de LLM

Read more
Solution

Respuestas terrestres de LLM con datos de búsqueda en tiempo real

Read more

Empieza a construir

Analice qué tan visible es su marca en los resultados de búsqueda basados ​​en LLM. Realice un seguimiento de las citas de IA, la presencia orgánica y las señales de OEA.

Obtener clave API gratuitaLeer la documentacion
ScavioScavio

API de busqueda en tiempo real para agentes de IA. Busca en todas las plataformas, no solo en Google.

Producto

  • Funciones
  • Precios
  • Panel
  • Afiliados

Desarrolladores

  • Documentacion
  • Referencia de API
  • Inicio rapido
  • Integracion MCP
  • Python SDK

Alternativas

  • Alternativa a Tavily
  • Alternativa a SerpAPI
  • Alternativa a Firecrawl
  • Alternativa a Exa

Herramientas

  • Formateador JSON
  • cURL a codigo
  • Contador de tokens
  • Todas las herramientas

© 2026 Scavio. Todos los derechos reservados.

Featured on TAAFT
Terminos de servicioPolitica de privacidad