# SERP API con curl y jq: recetas de una línea

> Recetas de una línea para la SERP API de SerpCrypto: los 10 primeros enlaces, People Also Ask, fuentes de AI Overview y paquete local.

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

La forma más rápida de ver qué devuelve la API es un terminal. Estas recetas imprimen exactamente una cosa cada una: enlaces, preguntas, fuentes o negocios locales. Funcionan en bash y zsh; una versión para PowerShell cierra la página.

**Respuesta rápida — ¿Cómo consulto una SERP API con curl?**

Ejecuta `curl -sG "https://serpcrypto.com/api/v1/search" -H "Authorization: Bearer $KEY" --data-urlencode "q=your query"` y pasa el JSON a `jq`. Con **SerpCrypto**, cada búsqueda correcta cuesta 1 crédito, desde 0,30 US$/1K búsquedas, y los errores son gratis. `-G` convierte los data flags en una query string. Los créditos se pagan con criptomonedas, sin KYC.

## ¿Qué flags de curl importan aquí?

Define la clave una vez por shell con `export SERPCRYPTO_API_KEY=…`. Instala `jq` desde tu gestor de paquetes si no lo tienes.

| Flag | Por qué |
| --- | --- |
| `-s` | Silencioso: ninguna barra de progreso mezclada con el JSON. |
| `-G` | Envía los valores de `-d` y `--data-urlencode` como query string en una petición GET. |
| `--data-urlencode` | Codifica espacios, comillas y acentos en `q` y `location`. |
| `-H "Authorization: Bearer …"` | Tu clave API. Guárdala en una variable de entorno. |
| `-w '%{http_code}'` | Imprime el código de estado HTTP; es útil cuando falla una llamada. |

## ¿Cómo imprimo los 10 primeros enlaces de una palabra clave?

Pide los resultados orgánicos y deja que `jq` imprima la posición y el enlace de cada uno, separados por un tabulador. La forma `[]?` no imprime nada en lugar de fallar cuando falta un bloque, lo que mantiene los scripts silenciosos en páginas poco habituales.

*Los 10 primeros enlaces*

```bash
# Top 10 organic links, one per line
curl -sG "https://serpcrypto.com/api/v1/search" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
  --data-urlencode "q=kubernetes cost monitoring" -d gl=us -d hl=en \
  | jq -r '.organic_results[]? | "\(.position)\t\(.link)"'
```

## ¿Cómo listo las preguntas de People Also Ask?

Lee `people_also_ask[].question`. Las preguntas siguen el idioma de `hl` y cambian según el país de `gl`, así que ejecuta la misma consulta en cada mercado para el que escribes. Los equipos de contenido pegan esta lista directamente en un brief.

*People Also Ask*

```bash
# People Also Ask questions, ready for a content brief
curl -sG "https://serpcrypto.com/api/v1/search" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
  --data-urlencode "q=how to brew cold brew" -d gl=gb -d hl=en \
  | jq -r '.people_also_ask[]?.question'
```

## ¿Cómo veo qué fuentes cita un AI Overview?

Lee `ai_overview.references`. El bloque solo existe cuando Google muestra un AI Overview para esa consulta y ese lugar, así que la receta imprime un mensaje claro en caso contrario. Seguir estas fuentes a lo largo del tiempo muestra si tus páginas se citan en las respuestas generadas de Google.

*Fuentes de AI Overview*

```bash
# Sources cited by the AI Overview, if the page shows one
curl -sG "https://serpcrypto.com/api/v1/search" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
  --data-urlencode "q=what is a heat pump" -d gl=us -d hl=en \
  | jq -r 'if .ai_overview then .ai_overview.references[] | "\(.index)\t\(.source)\t\(.link)" else "no AI Overview for this query" end'
```

## ¿Cómo obtengo el local pack y la lista de Maps?

Una búsqueda web con `location` devuelve el local pack que aparece en la página de resultados, normalmente unos pocos negocios. `engine=google_maps` devuelve la lista más larga de Maps con dirección, valoración y número de reseñas, que `@tsv` convierte en filas para una hoja de cálculo. Ambas cuestan 1 crédito cada una.

*Local pack y luego Google Maps*

```bash
# Local pack in a city, then the full Maps list for the same query
curl -sG "https://serpcrypto.com/api/v1/search" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
  --data-urlencode "q=vegan restaurant" \
  --data-urlencode "location=Toronto, Ontario, Canada" -d gl=ca -d hl=en \
  | jq -r '.local_results[]? | "\(.position)\t\(.title)\t\(.rating // "-")"'

curl -sG "https://serpcrypto.com/api/v1/search" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
  -d engine=google_maps --data-urlencode "q=vegan restaurant Toronto" -d gl=ca -d hl=en \
  | jq -r '.local_results[]? | [.title, .address, .rating, .reviews] | @tsv'
```

## ¿Cómo veo el error cuando falla una llamada?

Añade `-w '\nHTTP %{http_code}\n'` para imprimir el estado después del cuerpo. El cuerpo de un error es un JSON pequeño con `code` y `message`; la [página de errores](https://serpcrypto.com/es/docs/errors/)] lista los seis códigos. El segundo comando lee tus créditos, lo cual es gratis.

*Código de estado y créditos*

```bash
# Print the body, then the HTTP status on its own line
curl -sG "https://serpcrypto.com/api/v1/search" \
  -H "Authorization: Bearer $SERPCRYPTO_API_KEY" \
  --data-urlencode "q=test" -w '\nHTTP %{http_code}\n'

# Credits left (free call)
curl -s "https://serpcrypto.com/api/v1/credits" -H "Authorization: Bearer $SERPCRYPTO_API_KEY" | jq .
```

## ¿Cuál es el equivalente en PowerShell para Windows?

`Invoke-RestMethod` envía la solicitud y convierte el JSON en objetos, así que no necesitas `jq`. Pasa los parámetros como una tabla hash en `-Body`: con una solicitud GET, PowerShell los codifica en la cadena de consulta. Después, `Format-Table` imprime posiciones, títulos y enlaces.

*PowerShell*

```powershell
# Windows PowerShell 5.1 or PowerShell 7
$headers = @{ Authorization = "Bearer $env:SERPCRYPTO_API_KEY" }
$query = @{ q = "kubernetes cost monitoring"; gl = "us"; hl = "en" }
$data = Invoke-RestMethod -Uri "https://serpcrypto.com/api/v1/search" -Headers $headers -Body $query -Method Get
$data.organic_results | Select-Object position, title, link | Format-Table -AutoSize
```

## ¿Cuándo debería pasar de curl a código?

En cuanto repites un comando con una lista de palabras clave. Un bucle de shell sirve para unas cuantas docenas de búsquedas, pero los reintentos, el paralelismo y el almacenamiento son más fáciles en [Python](https://serpcrypto.com/es/docs/python/) o [Node.js](https://serpcrypto.com/es/docs/node/). Las solicitudes son las mismas, así que una receta probada aquí se traslada sin cambios. Cada búsqueda sigue costando 1 crédito, a 0,75 US$/1K búsquedas en el pack de 10.000 búsquedas.

## Preguntas sobre curl

### ¿Por qué mi consulta devuelve un error 400 en curl?

Normalmente porque `q` se envió con `-d` y contiene un carácter que necesita codificación. Usa `--data-urlencode "q=…"` para la consulta y para `location`; los códigos simples como `gl=us` pueden quedarse con `-d`.

### ¿Puedo guardar el JSON completo en un archivo?

Sí: añade `-o result.json` en lugar de canalizar a `jq`. Guardar las respuestas sin procesar te permite volver a analizarlas más tarde sin pagar de nuevo la búsqueda.

### ¿curl en Windows funciona igual?

Windows 10 y 11 incluyen `curl.exe`, y los flags son los mismos. Las comillas cambian en `cmd.exe`, así que PowerShell con `Invoke-RestMethod` suele ser más sencillo ahí.

---

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.
