Skills Agentes

Google Maps Contact Extract

Extrae detalles de contacto de negocios desde resultados y páginas de detalle de Google Maps, y visita cada web del negocio para recopilar emails, teléfonos y perfiles en redes sociales.

Oficial

Reemplaza a: Google Maps Email Extractor

Estrellas
6k

en todo el repo

Actividad
56

0–100, la ruta de este skill

Actualizado
hace 3 meses

último commit aquí

Commits
4

últimos 90 días

Contexto
2.9k tok

194 tok en reposo

Paquete
4 archivos

23 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add browser-act/skills --skill google-maps-contact-extract --agent claude-code

Se instala solo en este repositorio.

Este skill makes network requests.

Qué hace

  • Busca en Google Maps por palabra clave y ubicación, extrayendo nombre, dirección, teléfono y web de cada negocio
  • Visita la página de detalle de cada lugar en Google Maps para obtener horarios, rating, servicios y coordenadas
  • Navega al sitio web de cada negocio para extraer emails, teléfonos y perfiles en redes sociales
  • Combina todos los datos por place_id o nombre en un registro final por negocio

Úsalo cuando

  • El usuario menciona extracción de contactos de Google Maps o scraping de negocios en Maps
  • Se pide generar leads de negocios locales o listas de contacto desde Maps
  • Se busca encontrar emails o redes sociales a partir de un listado en Google Maps

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • “Extrae los contactos de las cafeterías en Nueva York desde Google Maps”
    • “Saca emails y redes sociales de los negocios que aparecen en esta búsqueda de Maps”
    • “Genera una lista de leads con teléfono y web de restaurantes en Madrid desde Google Maps”

    SKILL.md

    En inglés

    Google Maps — Contact Extractor

    keyword + location → business list with name/address/phone/website + email/social media/contacts from each business's website

    Language

    All process output to user (progress updates, process notifications) follows the user's language.

    Objective

    Search Google Maps by keyword and location, collect place details from each result, visit each business's website to extract emails and social media profiles, and return a merged dataset replicating Google Maps Email Extractor functionality.

    Prerequisites

    • For search: navigate to https://www.google.com/maps/search/{keyword}/@{lat},{lng},{zoom}z — the search results sidebar (feed) must be visible
    • For place detail: navigate to the individual place URL https://www.google.com/maps/place/?q=place_id:{place_id} — the place sidebar with name, address, phone must be visible
    • For website contact extraction: navigate to the business's website homepage
    • No login required for Google Maps or most business websites

    Pre-execution Checks

    1. Tool Readiness

    If browser-act has been confirmed available in the current session → skip this step.

    Invoke browser-act via Skill tool to load usage. If installation or configuration issues arise, follow its guidance to resolve then retry.

    Capability Components

    This Skill's operational boundary = what the user can manually do in their browser. It only reads data already displayed to the user on the page, never bypassing authentication or access controls. JS code is encapsulated in Python files under the scripts/ directory, invoked via eval "$(python scripts/xxx.py {params})". It is recommended to use the bash tool for execution. Working directory: all python scripts/ commands must be run from the Skill's root directory (the directory containing SKILL.md and scripts/). Use cd {skill-directory} before running batch scripts, or use absolute paths: python {absolute-path-to-scripts}/xxx.py.

    DOM: Search results list — extract business cards from Google Maps search feed

    Prerequisite: navigate to and wait for Google Maps search results to load, then extract all visible business cards.

    navigate https://www.google.com/maps/search/{keyword}/@{lat},{lng},{zoom}z
    wait stable
    eval "$(python scripts/search-places.py '{keyword}' --max {max_count})"
    

    Parameters:

    • {keyword}: search term, e.g. coffee shops
    • --max: maximum number of places to extract, default 20
    • {lat},{lng}: center coordinates, e.g. 40.7580,-73.9855
    • {zoom}: zoom level, e.g. 14

    Output example:

    {
      "keyword": "coffee shops",
      "count": 20,
      "places": [
        {
          "name": "Blue Dove Coffee",
          "rating": 4.8,
          "review_count": "292",
          "category": "Coffee shop",
          "price_range": null,
          "phone": null,
          "open_status": "Closed · Opens 7 AM",
          "place_id": "0xa5922b78cc420fb1:0x535506dc9cdb2cec",
          "lat": 40.7368708,
          "lng": -73.9909297,
          "maps_url": "https://www.google.com/maps/place/Blue+Dove+Coffee/data=..."
        }
      ]
    }
    

    Pagination: Google Maps loads ~20 results per view. Scroll down in the results panel to trigger loading of additional results, then re-run the extraction script. Repeat until desired count is reached.

    scroll down --amount 3000
    wait stable
    eval "$(python scripts/search-places.py '{keyword}' --max {total_count})"
    

    DOM: Place detail — extract full business info from a Google Maps place page

    Prerequisite: navigate to the place page and wait for the sidebar to load with name, address, and phone visible.

    navigate https://www.google.com/maps/place/?q=place_id:{place_id}
    wait stable
    wait --selector "h1" --state visible --timeout 15000
    eval "$(python scripts/place-detail.py)"
    

    Alternatively, navigate directly using the maps_url returned from the search results component.

    Output example:

    {
      "place_id": "0xa5922b78cc420fb1:0x535506dc9cdb2cec",
      "name": "Blue Dove Coffee",
      "rating": 4.8,
      "review_count": 292,
      "category": "Coffee shop",
      "address": "33 Union Square W, New York, NY 10003",
      "located_in": null,
      "phone": "(646) 939-0937",
      "website": "https://www.bluedovecoffee.com/",
      "menu_url": "https://order.dripos.com/Blue-Dove-Coffee",
      "price_range": "$1–10",
      "coordinates": { "lat": 40.7368708, "lng": -73.9909297 },
      "hours": [
        "Monday7 AM–5 PM",
        "Tuesday7 AM–5 PM",
        "Wednesday7 AM–5 PM",
        "Thursday7 AM–5 PM",
        "Friday7 AM–5 PM",
        "Saturday7 AM–5 PM",
        "Sunday7 AM–4 PM"
      ],
      "service_options": ["Serves dine-in", "Offers takeout", "Offers delivery"],
      "amenities": ["Has wheelchair accessible entrance", "Accepts credit cards", "Accepts NFC mobile payments"],
      "maps_url": "https://www.google.com/maps/place/..."
    }
    

    DOM: Website contacts — extract emails, phones, social media from a business website

    Prerequisite: navigate to the business website homepage.

    navigate {website_url}
    wait stable
    eval "$(python scripts/extract-contacts.py --depth shallow)"
    

    For deeper extraction (also scans contact/about subpages), use --depth deep. After running with --depth deep, check contact_subpages in the output, then navigate to each and re-run:

    navigate {subpage_url}
    wait stable
    eval "$(python scripts/extract-contacts.py --depth shallow)"
    

    Parameters:

    • --depth: shallow (homepage only, default) or deep (also discovers and lists contact/about subpage URLs)

    Output example:

    {
      "source_url": "https://www.bluedovecoffee.com/",
      "emails": ["support@bluedovecoffee.com", "careers@bluedovecoffee.com", "orders@bluedovecoffee.com"],
      "phone_numbers": [],
      "social_media": {
        "facebook": ["https://www.facebook.com/people/Blue-Dove-Coffee/100094867009022"],
        "instagram": ["https://www.instagram.com/bluedovecoffee"],
        "tiktok": ["https://www.tiktok.com/@bluedovecoffee"]
      },
      "contact_subpages": []
    }
    

    Composite: Full pipeline — search + place details + website contacts

    Complete flow replicating Google Maps Email Extractor:

    1. Navigate to Google Maps search:

      navigate https://www.google.com/maps/search/{keyword}/@{lat},{lng},{zoom}z
      wait stable
      eval "$(python scripts/search-places.py '{keyword}' --max {max_count})"
      

      Save list of places (especially name, maps_url, place_id).

    2. For each place: navigate to place detail page and extract full info:

      navigate {maps_url}
      wait stable
      wait --selector "h1" --state visible --timeout 15000
      eval "$(python scripts/place-detail.py)"
      

      Collect website, phone, address, hours, rating, etc.

    3. For each place with a website value: extract contacts from the website:

      navigate {website}
      wait stable
      eval "$(python scripts/extract-contacts.py --depth deep)"
      

      For each URL in contact_subpages, navigate and extract again to find additional emails.

    4. Merge results: join by place_id or name. Final record per business:

      {
        "name": "Blue Dove Coffee",
        "address": "33 Union Square W, New York, NY 10003",
        "phone": "(646) 939-0937",
        "website": "https://www.bluedovecoffee.com/",
        "rating": 4.8,
        "review_count": 292,
        "category": "Coffee shop",
        "coordinates": { "lat": 40.7368708, "lng": -73.9909297 },
        "hours": ["Monday7 AM–5 PM", "..."],
        "service_options": ["Serves dine-in", "Offers takeout"],
        "emails": ["support@bluedovecoffee.com"],
        "social_media": {
          "instagram": ["https://www.instagram.com/bluedovecoffee"],
          "tiktok": ["https://www.tiktok.com/@bluedovecoffee"]
        }
      }
      

    Pagination

    DOM Pagination: Google Maps search loads ~20 results initially. Scroll down in the sidebar:

    scroll down --amount 3000
    wait stable
    eval "$(python scripts/search-places.py '{keyword}' --max {total_count})"
    

    Repeat until the desired number of results is reached. Termination: Google Maps typically shows up to ~120 results per search; the sidebar will show "You've reached the end of the results" or stop loading new items.

    Success Criteria

    • places.count >= 1 from search results extraction
    • Place detail returns name != null AND (address != null OR phone != null)
    • Website contact extraction returns emails.length + phone_numbers.length + Object.keys(social_media).length >= 0 (no contacts = valid result for businesses without public contact info)

    Known Limitations

    • Google Maps search results are limited to approximately 120 businesses per search query; to get more, use more specific sub-area searches
    • Phone numbers on the Google Maps search list card are not always shown; place-detail.py on the individual place page is more reliable
    • Website contact extraction depends on the business's website structure; sites using image-based emails or obfuscated text will return no emails
    • Some businesses do not have a website listed on Google Maps; those cannot be enriched with contact data
    • Google Maps may throttle requests if too many place pages are navigated in rapid succession; add 1–2 second delays between place navigations in batch scripts

    Execution Efficiency

    • Batch orchestration: Write a bash script that loops through the pipeline steps in a single session. Add a 1–2 second sleep between each place detail navigation to avoid triggering anti-scraping. Example:
      for place_url in "${place_urls[@]}"; do
        browser-act --session gmaps-s1 navigate "$place_url"
        browser-act --session gmaps-s1 wait stable
        browser-act --session gmaps-s1 eval "$(python scripts/place-detail.py)"
        sleep 1.5
      done
      
    • Test before batch execution: Test with 2–3 places before running the full batch
    • Error resumption: Save each place's result to a JSON file immediately after extraction; on failure, skip already-saved places by checking if the file exists
    • Multiple sessions for throughput: Open 2–3 parallel stealth browser sessions and distribute places across them; each session has an independent fingerprint

    Experience Notes

    Path: {working-directory}/browser-act-skill-forge-memories/google-maps-contact-extract.memory.md

    Before execution: If the file exists, read it first — it records unexpected situations encountered during past executions (e.g., a strategy has become ineffective); adjust strategy order accordingly.

    After execution: If an unexpected situation is encountered (strategy became ineffective, page redesigned, anti-scraping upgraded, better path discovered), append a line: {YYYY-MM-DD}: {what happened} → {conclusion}

    Normal execution does not write to the file.

    Reproducido de browser-act/skills bajo licencia MIT. Leer esta página en markdown.

    Archivos

    4 archivos en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Antes de instalar

    Requiere la herramienta browser-act disponible en la sesión; no se necesita login en Google Maps ni en la mayoría de sitios web.

    Necesita en el PATH:python

    Detalles

    Licencia
    MIT
    Recursos incluidos
    scripts en python
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de browser-act/skills

    Este repo incluye 102 skills. Si instalas uno, normalmente ya tienes los demás. Ver el pack skills entero y su comando de instalación

    Forja paquetes Skill reutilizables (SKILL.md + scripts) a partir de la exploración de sitios web vía browser-act, evitando volver a explorar más tarde.

    Costo de contexto al activarse
    4.9k tok
    Tamaño del paquete
    4 archivos
    Última actualización
    hace 2 meses
    Oficialautomatizacion

    Extrae datos completos de producto mayorista de páginas de detalle en 1688.com: título, precios por escalones, variantes SKU, imágenes, vendedor, puntuaciones de tienda, protección al comprador, atributos, cupones y estadísticas de reseñas.

    Costo de contexto al activarse
    3.4k tok
    Tamaño del paquete
    5 archivos
    Última actualización
    hace 2 meses
    Oficialdatos analitica

    CLI de automatización de navegador para agentes de IA: nunca ejecutes comandos browser-act directamente vía Bash, invoca siempre este skill primero.

    Costo de contexto al activarse
    939 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 2 meses
    Oficialautomatizacion

    Scraper de listados vendidos en eBay en 8 marketplaces (.com/.co.uk/.de/.fr/.it/.es/.ca/.com.au) con filtros de keyword, categoría, precio, condición, ubicación y orden, que devuelve ventas reales paginadas.

    Costo de contexto al activarse
    4.8k tok
    Tamaño del paquete
    4 archivos
    Última actualización
    hace 2 meses
    Oficialdatos analitica

    Descubre cuentas de usuario de Threads por palabra clave, extrayendo datos de perfil como username, nombre visible, verificación, biografía y número de seguidores.

    Costo de contexto al activarse
    1.8k tok
    Tamaño del paquete
    3 archivos
    Última actualización
    hace 2 meses
    Oficialdatos analitica

    Extrae posts públicos del perfil de un usuario de Threads, obteniendo texto, métricas de interacción e info de medios a partir del JSON incrustado en el SSR.

    Costo de contexto al activarse
    2.3k tok
    Tamaño del paquete
    3 archivos
    Última actualización
    hace 2 meses
    Oficialdatos analitica

    Skills relacionados

    Extrae datos completos de producto mayorista de páginas de detalle en 1688.com: título, precios por escalones, variantes SKU, imágenes, vendedor, puntuaciones de tienda, protección al comprador, atributos, cupones y estadísticas de reseñas.

    Costo de contexto al activarse
    3.4k tok
    Tamaño del paquete
    5 archivos
    Última actualización
    hace 2 meses
    Oficialdatos analitica

    Obtiene el detalle completo de un listing de Airbnb por su ID numérico vía la API interna GraphQL: título, tipo de habitación, descripción, amenities, fotos, coordenadas, ciudad, reglas, ratings y dormitorios.

    Costo de contexto al activarse
    1.4k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 2 meses
    Oficialdatos analitica

    Extrae detalles estructurados de un producto de Amazon (título, precio, calificaciones, marca, descripción) a partir de su ASIN mediante la API de BrowserAct.

    Costo de contexto al activarse
    1.5k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 5 meses
    Oficialdatos analitica