Volver al blog

API de raspado local de Google: Convierte el Paquete Local en JSON

Isabella Garcia
Isabella Garcia

Web Data Collection Specialist

10-Jun-2026

Puntos Clave:

  • Una solicitud, un actor. La API Scrapeless Scraper convierte el paquete local de Google en un único POST contra el actor scraper.google.search. Sin navegador que manejar, sin marcado que analizar.
  • tbm: "lcl" es el interruptor. Envía la entrada { "q": "cafeterías en San Francisco", "tbm": "lcl" } y el actor devuelve los listados comerciales respaldados por un mapa en lugar de la SERP web.
  • Campos estructurados, no HTML crudo. La respuesta es un objeto local analizado — local_results.places[] con títulos, calificaciones, conteos de reseñas, direcciones, niveles de precios y miniaturas de fotos — aplanados en el nivel superior.
  • Los filtros también vienen. suggested_searches lleva las fichas "Abierto ahora / Mejor valorado / Barato" como URLs de Google listas para seguir, así puedes pivotar la misma consulta sin reconstruirla.
  • Sin proxy, sin manejo de anti-bot de tu parte. La salida residencial, el geo-enrutamiento y la representación se ejecutan en el servidor; tú envías la consulta y lees JSON.
  • Gratis para empezar. Las nuevas cuentas de Scrapeless incluyen créditos gratuitos de la API Scraper — regístrate en app.scrapeless.com.

Introducción: convierte el paquete local de Google en JSON

El paquete local de Google es el conjunto de listados comerciales que se encuentra en la parte superior de una búsqueda local — las tarjetas respaldadas por un mapa que Google muestra cuando alguien busca "cafeterías en San Francisco" o "fontaneros cerca de mí". Cada tarjeta lleva un nombre, una categoría, una calificación por estrellas, un conteo de reseñas, una dirección y un nivel de precios. Es la superficie sobre la que las búsquedas de intención local realmente hacen clic, lo que la convierte en el conjunto de datos detrás de mucho trabajo práctico:

  • Seguimiento de rango local — ver qué negocios ocupan las posiciones del 1 al N para una consulta en una ciudad dada.
  • Monitoreo competitivo — rastrear la calificación y el conteo de reseñas de un competidor con el tiempo.
  • Listas de leads — extraer los negocios que clasifican para una consulta de categoría más localidad en una tabla estructurada.
  • Muestreo de reseñas y sentimientos — cada tarjeta muestra un fragmento representativo de una reseña que puedes recoger a gran escala.
  • Dimensionamiento de mercado — contar cuántos negocios de un tipo tienen clasificación en una área metropolitana y cómo se agrupan sus calificaciones.

Obtener ese paquete a mano significa renderizar una página de búsqueda pesada en JavaScript, sortear la limitación de tarifas de Google y escribir selectores contra un marcado que cambia. La API Scraper hace las tres cosas en el servidor y te entrega el objeto analizado.


Por qué la API Scraper

Un scraper local tradicional es tres trabajos unidos: superar la capa anti-bot, renderizar la página y analizar las tarjetas. La API Scrapeless Scraper los colapsa en una única llamada. Nombras al actor scraper.google.search, le entregas una consulta y tbm: "lcl", y recibes de vuelta el paquete local analizado.

  • Sin navegador, sin analizador que mantener. El actor renderiza y analiza los resultados locales de Google; recibes campos, no un DOM para recorrer.
  • Salida residencial y geo-enrutamiento están integrados. Envías la cadena de consulta; el actor maneja la capa de red y el renderizado en JavaScript.
  • Una clave, una forma. Un solo x-api-token autentica la llamada, y el paquete local siempre vuelve en la misma forma analizada, así que un cliente escrito una vez se reutiliza a través de consultas y ciudades.

Obtén tu clave API en el plan gratuito en app.scrapeless.com. El paquete local de Google se encuentra dentro de la familia Deep SerpApi junto a otras superficies de búsqueda de Google en el catálogo de precios.


Requisitos Previos

  • Una cuenta Scrapeless y una clave API — regístrate en app.scrapeless.com.
  • curl para la prueba rápida, o Python 3.10+ para el cliente a continuación.
  • Conocimientos básicos de HTTP y JSON.

Almacena tu clave en el entorno para que nunca aterrize en el código:

bash Copy
export SCRAPELESS_API_KEY=your_api_token_here

La solicitud

El paquete local utiliza el endpoint v1 de la API Scraper y el actor de búsqueda de Google. Seleccionar el paquete local es un campo de entrada — tbm configurado a lcl.

  • Endpoint: POST https://api.scrapeless.com/api/v1/scraper/request
  • Autenticación: encabezado x-api-token: $SCRAPELESS_API_KEY
  • Actor: scraper.google.search ( tbm: "lcl" selecciona el paquete local en lugar de la SERP web)

El cuerpo de la solicitud es { "actor": "<nombre>", "input": { … } }:

json Copy
{
  "actor": "scraper.google.search",
  "input": { "q": "cafeterías en San Francisco", "tbm": "lcl" }
}
campo de entrada requerido descripción
q la consulta de búsqueda local — incluye una ciudad o localidad para el paquete más relevante (por ejemplo, cafeterías en San Francisco)
tbm configurado a lcl para seleccionar el paquete local; omítelo o cámbielo para obtener la SERP web en su lugar

Ejemplo

La verificación más rápida es una curl. Publica el actor y la entrada, y imprime el objeto local analizado:

bash Copy
curl -sS -X POST https://api.scrapeless.com/api/v1/scraper/request \
  -H "Content-Type: application/json" \
  -H "x-api-token: $SCRAPELESS_API_KEY" \
  -d '{
    "actor": "scraper.google.search",
    "input": { "q": "cafés en San Francisco", "tbm": "lcl" }
  }'

La misma llamada en Python lee la clave del entorno y devuelve la respuesta analizada:

python Copy
import os
import json
import requests

ENDPOINT = "https://api.scrapeless.com/api/v1/scraper/request"


def scrape_local(query: str) -> dict:
    resp = requests.post(
        ENDPOINT,
        headers={
            "Content-Type": "application/json",
            "x-api-token": os.environ["SCRAPELESS_API_KEY"],
        },
        json={"actor": "scraper.google.search", "input": {"q": query, "tbm": "lcl"}},
        timeout=120,
    )
    resp.raise_for_status()
    return resp.json()


if __name__ == "__main__":
    data = scrape_local("cafés en San Francisco")
    for place in data["local_results"]["places"]:
        print(place["position"], place["title"], place["rating"], place["address"])

scraper.google.search aplana el paquete local analizado a nivel superior; no hay un envoltorio result para desenvolturar. Lee local_results.places[] directamente.

Obtén tu clave API en el plan gratuito: app.scrapeless.com


Lo Que Recibes

El actor devuelve el objeto local analizado directamente, junto con un sobre de metadata que apunta al HTML renderizado almacenado. La ejecución capturada para q: "cafés en San Francisco", tbm: "lcl" regresó con 20 lugares clasificados:

json Copy
// Forma de nivel superior de una ejecución en vivo de scraper.google.search (tbm: "lcl").
// thumbnail base64 y la mayoría de las entradas de places[] recortadas; los valores de los campos son reales.
{
  "local_results": {
    "places": [
      {
        "position": 1,
        "title": "The Coffee Berry SF",
        "type": " Cafetería",
        "rating": 4.9,
        "reviews": 588,
        "reviews_original": "(588)",
        "price": "$",
        "address": "1410 Lombard St",
        "phone": " $1–10 ",
        "hours": "4.9(588) ",
        "extensions": ["El espresso estaba delicioso y el personal fue muy amable y acogedor."],
        "thumbnail": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABA…",
        "place_id": "",
        "place_id_search": "",
        "lsig": "",
        "gps_coordinates": { "latitude": 0, "longitude": 0 }
      },
      {
        "position": 8,
        "title": "Delah Coffee",
        "type": " Cafetería",
        "rating": 4.7,
        "reviews": 1100,
        "reviews_original": "(1.1K)",
        "price": "$",
        "address": "370 4th St",
        "phone": "Recogida en la acera",
        "hours": "Comedor",
        "extensions": ["Comedor", "Recogida en la acera", "Entrega sin contacto"],
        "thumbnail": "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABA…",
        "place_id": "",
        "place_id_search": "",
        "lsig": "",
        "gps_coordinates": { "latitude": 0, "longitude": 0 }
      }
    ]
  },
  "search_information": {
    "query_displayed": "cafés en San Francisco",
    "organic_results_state": "Resultados para la escritura exacta",
    "total_results": 0,
    "time_taken_displayed": ""
  },
  "suggested_searches": [
    {
      "name": "Abrir ahora",
      "q": "Abrir ahora cafés en San Francisco",
      "link": "https://www.google.com/search?…&udm=1&q=cafés+en+San+Francisco+abrir+ahora",
      "uds": "",
      "thumbnail": ""
    }
  ],
  "pagination": {},
  "metadata": {
    "engine": "google.search",
    "rawUrl": "https://api.scrapeless.com/storage/scrapeless.scraper.google.search/…html"
  }
}

Los campos en cada tarjeta de places[]:

campo tipo descripción
position número rango dentro del paquete local, basado en 1
title cadena nombre del negocio
type cadena categoría del negocio, p. ej. Cafetería (el valor sin procesar lleva espacio en blanco al inicio)
rating número calificación en estrellas, p. ej. 4.9
reviews número recuento de reseñas normalizado a un entero, p. ej. 588 (3.4K se convierte en 3400)
reviews_original cadena el recuento de reseñas tal como lo muestra Google, p. ej. (3.4K)
price cadena nivel de precio, p. ej. $
address cadena dirección, p. ej. 1410 Lombard St
phone cadena espacio de carta de texto libre — ver la nota a continuación
hours cadena espacio de carta de texto libre — ver la nota a continuación
extensions cadena[] un fragmento representativo de reseña, o la lista de opciones de servicio para tarjetas que muestran pedidos
thumbnail cadena blob en línea data:image/jpeg;base64,… de la foto del lugar
place_id / place_id_search / lsig cadena identificadores del lugar; vacíos en esta captura
gps_coordinates objeto { latitud, longitud }; 0/0 en esta captura

Las claves de nivel superior alrededor de las tarjetas:

clave lo que contiene
local_results.places[] las tarjetas de negocios clasificadas
search_information el eco de la consulta y el estado del resultado
suggested_searches[] los filtros locales (Abierto ahora / Mejor valorado / Barato / Elegante / Entrega) como URL de Google
pagination enlaces de paginación (vacío para esta consulta)
metadata motor más rawUrl, una copia almacenada del HTML renderizado

Algunas observaciones honestas de la forma capturada:

  • El objeto está aplanado. local_results.places[] es el arreglo que iteras — no hay un envoltorio de resultado, a diferencia de algunos otros actores.
  • reviews y reviews_original llevan la misma cuenta de dos maneras. Uno es un entero para matemáticas, el otro es la cadena de visualización de Google ((3.4K)). Lee lo que tu canal necesita.
  • phone y hours rastrean lo que Google renderiza en cada ranura de tarjeta. Para muchas tarjetas locales, eso es un rango de precios (" $1–10 ") o una bandera de servicio (Recogida en acera, Comedor) en lugar de un número de teléfono literal o horarios de apertura. Trata ambos como texto libre y valida antes de depender de ellos.
  • extensions ramifica por tarjeta. La mayoría de las tarjetas devuelven un solo resumen de reseña; las tarjetas con opciones de pedido devuelven la lista de servicios (Comedor, Recogida en acera, Entrega sin contacto). Verifica cuál obtuviste.
  • Los campos de identificador y coordenadas pueden regresar vacíos. place_id, place_id_search, lsig y gps_coordinates están presentes en el esquema, pero pueden estar vacíos o ser cero por tarjeta — trata los campos ausentes como anulables.
  • metadata.rawUrl es tu vía de escape. Almacena el HTML renderizado si alguna vez necesitas un campo que el objeto analizado no muestra.

Conclusión

Raspar el paquete local de Google se reduce a una decisión y una solicitud: elige al actor scraper.google.search, envía { "q": "<consulta>", "tbm": "lcl" } con tu x-api-token, y lee local_results.places[] de regreso como JSON analizado. La rotación de proxy, el renderizado de JavaScript y el análisis se ejecutan del lado del servidor, por lo que el mismo cliente apunta a cualquier ciudad o categoría cambiando la cadena de consulta. Para el lado de respuestas de IA de la búsqueda de Google, la guía de raspado de visión general de Google AI detalla cómo capturar el bloque de respuestas y sus citas de la misma manera. Coloca la localidad en q, mantén tbm: "lcl" establecido y trata los campos de texto libre e identificador como anulables.

¿Listo para construir tu pipeline de búsqueda local impulsado por IA?

Únete a nuestra comunidad para reclamar un plan gratuito y conectarte con desarrolladores que construyen pipelines de búsqueda local: Discord · Telegram.

Regístrate en app.scrapeless.com para obtener créditos gratuitos de Scraper API y dirija al actor scraper.google.search a las consultas, ciudades y categorías que tu pipeline necesita.

FAQ

P: ¿Es legal raspar Google Local?

El paquete local es un dato visible públicamente. Las reglas varían según la jurisdicción y los términos de servicio de Google, así que revisa los ToS relevantes y consulta con un abogado para tu caso de uso antes de ejecutar a gran escala. Nunca recojas datos personales protegidos por GDPR o CCPA.

P: ¿Necesito un proxy?

No. La salida residencial y la geo-enrutación están integradas en el actor — envías la consulta, el actor maneja la capa de red y el renderizado.

P: ¿Qué hace tbm: "lcl"?

Selecciona el paquete local de Google — los listados de negocios respaldados por el mapa — en lugar del SERP web. Omitirlo o cambiarlo y el mismo actor devuelve los resultados web orgánicos para la consulta.

P: ¿Cuántos lugares regresan?

El actor devuelve las tarjetas que Google clasifica para la consulta; la ejecución capturada para "cafeterías en San Francisco" devolvió 20. El conteo varía según la consulta, categoría y localidad.

P: ¿Cómo apunto a una ciudad diferente?

Coloca la localidad en q. El actor lee la cadena de consulta, por lo tanto, cafeterías en Austin o fontaneros en Chicago devolverá el paquete local para esa área.

P: ¿Dónde está el HTML sin procesar si falta un campo?

metadata.rawUrl almacena una copia de la página renderizada. Úsalo para analizar cualquier campo que el actor no muestre en el objeto analizado.

P: ¿Puedo ejecutar esto sin un agente de IA o SDK?

Sí. Es HTTP simple — curl, Python requests, Node fetch, o cualquier cliente HTTP funciona directamente. No se requiere SDK.

En Scrapeless, solo accedemos a datos disponibles públicamente y cumplimos estrictamente con las leyes, regulaciones y políticas de privacidad del sitio web aplicables. El contenido de este blog es sólo para fines de demostración y no implica ninguna actividad ilegal o infractora. No ofrecemos garantías y renunciamos a toda responsabilidad por el uso de la información de este blog o enlaces de terceros. Antes de realizar cualquier actividad de scraping, consulte a su asesor legal y revise los términos de servicio del sitio web de destino u obtenga los permisos necesarios.

Artículos más populares

Catalogar