# Formato de respuesta de la API SERP: cada bloque y campo del JSON

> La respuesta de la API SERP de SerpCrypto, campo por campo: search_metadata, organic_results, ai_overview, people_also_ask, paquete local, anuncios y arrays.

- URL: https://serpcrypto.com/es/docs/response/
- Última actualización: 2026-10-22
- Editor: SerpCrypto (https://serpcrypto.com)

Un marco para cada motor y luego un bloque por cada parte de la página de resultados. Esta página enumera cada bloque, sus campos y sus tipos. En los ejemplos, los ID, recuentos, precios y resultados son ilustrativos.

**Respuesta rápida — ¿Qué contiene una respuesta de la API SERP de SerpCrypto?**

Cada respuesta de **SerpCrypto** es un objeto JSON: `search_metadata` (estado, motor, créditos usados), `search_parameters` (los ajustes aplicados), `search_information` y luego un bloque por cada parte de la página de resultados, como `organic_results`, `ai_overview`, `people_also_ask` o `local_results`. Las partes ausentes simplemente no aparecen. Una página cuesta 1 crédito, desde 0,30 US$/1K búsquedas; se paga con criptomonedas, sin KYC.

## ¿Cómo es una respuesta completa de Google?

El ejemplo de abajo es una búsqueda de Google de `standing desk` en el Reino Unido, recortada a un elemento por array. Una respuesta real tiene unos diez resultados orgánicos y todos los demás bloques que mostró la página para esa consulta, ubicación y dispositivo.

*engine=google, gl=gb: valores recortados e ilustrativos*

```json
{
  "search_metadata": {
    "id": "srch_2b81d0c6fa47",
    "status": "success",
    "engine": "google",
    "created_at": "2026-10-22T10:02:31Z",
    "credits_used": 1
  },
  "search_parameters": {
    "engine": "google",
    "q": "standing desk",
    "gl": "gb",
    "hl": "en",
    "google_domain": "google.co.uk",
    "device": "desktop",
    "page": 1
  },
  "search_information": { "total_results": 52400000, "query_displayed": "standing desk" },
  "ai_overview": {
    "text": "A standing desk lets you work while standing or sitting…",
    "references": [
      { "index": 1, "title": "How to choose a standing desk", "link": "https://www.example.co.uk/guide", "source": "Example Guide" }
    ]
  },
  "ads": [
    { "position": 1, "block": "top", "title": "Electric Standing Desks", "link": "https://shop.example.com/desks", "displayed_link": "shop.example.com", "description": "Free delivery on…" }
  ],
  "organic_results": [
    {
      "position": 1,
      "title": "Best standing desks 2026, tested",
      "link": "https://www.example.co.uk/best-standing-desks",
      "displayed_link": "www.example.co.uk › reviews",
      "snippet": "We tested 14 electric and manual desks…",
      "date": "12 Oct 2026",
      "sitelinks": [ { "title": "Budget picks", "link": "https://www.example.co.uk/best-standing-desks#budget" } ]
    }
  ],
  "people_also_ask": [
    { "question": "Is it healthy to stand all day at a desk?", "snippet": "…", "title": "Standing at work", "link": "https://www.example.org/standing" }
  ],
  "shopping_results": [
    { "position": 1, "title": "Example Desk Pro 140 cm", "price": "£299.00", "source": "Example Store", "link": "https://shop.example.com/desk-pro" }
  ],
  "related_searches": [ { "query": "standing desk electric" }, { "query": "standing desk converter" } ],
  "pagination": { "current": 1, "next_page": 2 }
}
```

## ¿Por qué faltan algunos bloques en mi respuesta?

Porque la página de resultados no los mostró. Google decide para cada consulta, lugar y dispositivo si muestra anuncios, un AI Overview, un paquete local o noticias destacadas. SerpCrypto devuelve lo que mostró la página y omite el resto, en lugar de enviar placeholders vacíos.

Lee cada bloque con un valor por defecto, como en las líneas de Python de abajo. La misma regla se aplica dentro de un bloque: los campos opcionales como `date` o `sitelinks` solo aparecen en los resultados que los tienen.

*Python: leer bloques opcionales de forma segura*

```python
data = response.json()

# A block is present only when the results page shows it: read with a default.
overview = data.get("ai_overview") or {}
organic = data.get("organic_results", [])
questions = [item["question"] for item in data.get("people_also_ask", [])]

if overview:
    print("AI Overview sources:", [ref["link"] for ref in overview.get("references", [])])
print(len(organic), "organic results,", len(questions), "questions")
```

## ¿Qué hay en search_metadata?

| Campo | Tipo | Descripción |
| --- | --- | --- |
| `id` | string | Identificador de la búsqueda. Cítalo cuando contactes con soporte. |
| `status` | string | `success` en una respuesta 200. |
| `engine` | string | El motor que ejecutó la búsqueda. |
| `created_at` | string | Fecha y hora de la búsqueda, ISO 8601 en UTC. |
| `credits_used` | integer | Créditos consumidos por esta búsqueda: 1 si tiene éxito. |

## ¿Qué son search_parameters y search_information?

Guarda `search_parameters` junto con tus resultados: registra exactamente de qué país, idioma, lugar y dispositivo proviene un ranking.

| Campo | Tipo | Descripción |
| --- | --- | --- |
| `search_parameters` | object | Los parámetros aplicados, con los valores por defecto rellenados: `engine`, `q`, `gl`, `hl`, `location`, `google_domain`, `device`, `page` y los demás que enviaste. |
| `search_information.total_results` | integer | El número de resultados que mostró el motor, cuando mostró alguno. Es una estimación, no una cifra exacta. |
| `search_information.query_displayed` | string | La consulta tal como la mostró la página de resultados. |

## ¿Qué campos tiene organic_results?

Los resultados orgánicos son los resultados web no pagados. En Bing, `organic_results` tiene la misma forma.

| Campo | Tipo | Descripción |
| --- | --- | --- |
| `position` | integer | Orden del resultado en este bloque de esta página, empezando por 1. |
| `title` | string | El título del enlace azul. |
| `link` | string | La URL del resultado. |
| `displayed_link` | string | La URL o ruta de navegación tal como aparece bajo el título. |
| `snippet` | string | El texto que aparece bajo el título. |
| `date` | string | Fecha que aparece junto al snippet, tal como está escrita en la página. Opcional. |
| `sitelinks` | array | Enlaces adicionales que aparecen bajo el resultado, cada uno con `title` y `link`. Opcional. |

## ¿Cómo se devuelve el AI Overview?

`ai_overview` solo está presente cuando Google muestra un AI Overview para esa consulta y ese lugar. Muchas consultas no tienen ninguno.

| Campo | Tipo | Descripción |
| --- | --- | --- |
| `ai_overview.text` | string | El texto del AI Overview tal como aparece en la página. |
| `ai_overview.references[].index` | integer | Orden de la fuente en el overview. |
| `ai_overview.references[].title` | string | Título de la página citada. |
| `ai_overview.references[].link` | string | URL de la página citada. |
| `ai_overview.references[].source` | string | Nombre del sitio, tal como aparece. |

## ¿Qué contienen ads y people_also_ask?

| Campo | Tipo | Descripción |
| --- | --- | --- |
| `ads[].position` | integer | Orden dentro de su bloque. |
| `ads[].block` | string | `top` o `bottom` de la página. |
| `ads[].title`, `link`, `displayed_link` | string | Titular, URL de destino y URL mostrada del anuncio. |
| `ads[].description` | string | Texto del anuncio. |
| `people_also_ask[].question` | string | La pregunta tal como se muestra. |
| `people_also_ask[].snippet` | string | El texto de la respuesta que se muestra al abrir la pregunta. |
| `people_also_ask[].title`, `link` | string | Título y URL de la página de la que procede la respuesta. |

## ¿Qué otros bloques de Google pueden aparecer?

| Bloque | Campos | Qué es |
| --- | --- | --- |
| `local_results` | `position`, `title`, `address`, `rating`, `reviews`, `type` | El local pack: negocios en un mapa para consultas con intención de lugar. |
| `knowledge_graph` | `title`, `type`, `description`, `source.name`, `source.link` | El panel de conocimiento sobre una persona, lugar, empresa o cosa. |
| `top_stories` | `title`, `link`, `source`, `date` | Artículos de noticias mostrados en un carrusel. |
| `inline_videos` | `title`, `link`, `source`, `duration` | Resultados de vídeo mostrados dentro de los resultados web. |
| `shopping_results` | `position`, `title`, `price`, `source`, `link` | Fichas de producto mostradas dentro de los resultados web. |
| `related_searches` | `query` | Búsquedas sugeridas al final de la página. |
| `pagination` | `current`, `next_page` | Número de página actual y el siguiente, cuando lo hay. |

## ¿Qué devuelven los otros motores?

Cada vertical mantiene el mismo marco y añade su propio array. En Google Maps, `local_results` es más completo que el local pack de una búsqueda web.

| `engine` | Array principal | Campos |
| --- | --- | --- |
| `google_news` | `news_results` | `position`, `title`, `link`, `source`, `date`, `snippet`, `thumbnail` |
| `google_images` | `images_results` | `position`, `title`, `original`, `original_width`, `original_height`, `thumbnail`, `source`, `link` |
| `google_maps` | `local_results` | `position`, `title`, `place_id`, `address`, `phone`, `website`, `rating`, `reviews`, `type`, `hours`, `gps_coordinates.latitude`, `gps_coordinates.longitude` |
| `google_shopping` | `shopping_results` | `position`, `title`, `price`, `extracted_price`, `currency`, `source`, `link`, `delivery`, `rating`, `reviews` |
| `bing` | `organic_results`, `related_searches` | Los mismos campos que los resultados orgánicos de Google |

## ¿Cómo se escriben los precios, las valoraciones y las fechas?

Los valores conservan la forma que usó la página siempre que la página los escribiera como texto. `price` es una string con su símbolo de moneda, como `£299.00`, y Google Shopping añade `extracted_price` como número y `currency` como código. `rating` es un número y `reviews` un entero. Las fechas como `date` se quedan tal como están escritas en la página, por ejemplo `12 Oct 2026` o `3 days ago`, así que conviértelas en tu propio código si necesitas un timestamp.

## ¿Cómo construyo un ranking global entre varias páginas?

Guarda el número de página con cada resultado. `position` da el orden dentro de su bloque en una página, y `search_parameters.page` te dice de qué página se trata. Unos 10 resultados orgánicos por página, tal como Google los sirve desde que dejó de respetar num=100 en septiembre de 2025; cada página adicional es un crédito más.

Para el rank tracking, la mayoría de los equipos guardan `link`, `position`, `page`, `gl`, `location`, `device` y `created_at` por keyword y día. Con eso basta para graficar un ranking y explicar un cambio por lugar o dispositivo. Consulta [rank tracking](https://serpcrypto.com/es/use-cases/rank-tracking/) para ver el método completo.

## Preguntas sobre el formato de respuesta

### ¿El nombre de los campos es estable?

Sí, dentro de la versión 1. Se pueden añadir bloques o campos nuevos, así que ignora las claves que no conozcas. Eliminar o renombrar un campo vendría con una nueva versión en la ruta, como `/api/v2/`.

### ¿Puedo obtener el HTML crudo de la página?

No. La versión 1 solo devuelve JSON procesado. Los bloques procesados cubren lo que necesitan la mayoría de las herramientas: resultados, anuncios, preguntas, el AI Overview, el local pack y el knowledge panel.

### ¿Por qué total_results difiere de lo que conté?

Es la estimación que muestra el motor, no un recuento de los resultados por los que puedes paginar. Las páginas se acaban mucho antes de ese número; usa `pagination.next_page` para saber si existe otra página.

### ¿Una respuesta sin resultados orgánicos cuesta un crédito?

Sí, si la búsqueda se completó: una página vacía sigue siendo un resultado. Solo los errores son gratis. 1 crédito = 1 consulta correcta, que devuelve una página de resultados en cualquier motor compatible. Una consulta fallida no se cobra.

---

SerpCrypto: SerpCrypto es una API SERP para desarrolladores y agentes de IA que devuelve resultados de Google y Bing como JSON, pagada con criptomonedas sin subir ningún documento de identidad. Los créditos de búsqueda prepagados desde 0,30 US$/1K búsquedas nunca caducan. Sin KYC: ni identificación, ni selfie, ni documentos. Paga con criptomonedas.
