Canalizar los resultados de la API de búsqueda a través de herramientas CLI le permite crear potentes scripts de una sola línea y shell sin escribir Python o JavaScript. Al usar curl para llamar a la API de Scavio y jq para analizar la respuesta JSON, puede filtrar, ordenar y transformar datos SERP en canalizaciones estándar de Unix. Este tutorial cubre los patrones esenciales: búsqueda básica hasta la salida estándar, filtrado por posición, extracción de URL para wget y creación de scripts de monitoreo. Cada llamada de búsqueda cuesta $0,005.
Requisitos previos
- curl instalado (estándar en macOS/Linux)
- jq instalado (brew install jq o apt install jq)
- Una clave API de Scavio de scavio.dev
- Conocimiento básico de los tubos de concha
Guia paso a paso
Paso 1: Búsqueda básica desde la línea de comando
Llame a la API con curl y canalice a través de jq para obtener resultados formateados. Primero configure su clave API como una variable de entorno.
export SCAVIO_API_KEY="your_key_here"
# Basic search, pretty-printed:
curl -s -X POST https://api.scavio.dev/api/v1/search \
-H "x-api-key: $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "best python frameworks 2026", "country_code": "us"}' \
| jq '.organic_results[:5][] | {title, link}'Paso 2: Extraiga solo las URL para herramientas posteriores
Extraiga solo las URL de los resultados de búsqueda y canalícelas a otras herramientas como xargs, wget o grep.
# Get URLs only, one per line:
curl -s -X POST https://api.scavio.dev/api/v1/search \
-H "x-api-key: $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d '{"query": "site:github.com python search api", "country_code": "us"}' \
| jq -r '.organic_results[].link'
# Pipe to grep to filter specific domains:
# ... | grep 'github.com' | head -5
# Pipe to xargs to open in browser:
# ... | head -3 | xargs openPaso 3: Cree una función de búsqueda reutilizable para su shell
Agregue una función a su .bashrc o .zshrc para que pueda buscar desde cualquier lugar de su terminal.
# Add to ~/.bashrc or ~/.zshrc:
search() {
curl -s -X POST https://api.scavio.dev/api/v1/search \
-H "x-api-key: $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"query\": \"$*\", \"country_code\": \"us\"}" \
| jq -r '.organic_results[:5][] | "\(.position). \(.title)\n \(.link)\n \(.snippet // "")\n"'
}
# Usage:
# search best crm software 2026
# search site:reddit.com serp api comparisonPaso 4: Búsqueda por lotes a partir de un archivo de consultas
Lea las palabras clave de un archivo y busque cada una, recopilando los resultados en un archivo TSV para importarlos a una hoja de cálculo.
# keywords.txt (one per line):
# best crm 2026
# crm pricing comparison
# hubspot alternative
# Batch search to TSV:
while IFS= read -r query; do
curl -s -X POST https://api.scavio.dev/api/v1/search \
-H "x-api-key: $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"query\": \"$query\", \"country_code\": \"us\"}" \
| jq -r --arg q "$query" \
'.organic_results[:3][] | [$q, (.position|tostring), .title, .link] | @tsv'
sleep 0.5
done < keywords.txt > results.tsv
echo "Results saved to results.tsv"Paso 5: Monitorear una palabra clave y alertar sobre cambios en la clasificación
Cree un script compatible con cron que verifique si su sitio aparece entre los 10 primeros para una palabra clave y envíe una alerta si cae.
#!/bin/bash
# monitor_rank.sh - check ranking and alert on changes
KEYWORD="$1"
TARGET="$2"
POSITION=$(curl -s -X POST https://api.scavio.dev/api/v1/search \
-H "x-api-key: $SCAVIO_API_KEY" \
-H "Content-Type: application/json" \
-d "{\"query\": \"$KEYWORD\", \"country_code\": \"us\"}" \
| jq -r --arg t "$TARGET" \
'[.organic_results[] | select(.link | contains($t))] | .[0].position // "not found"')
echo "$(date -I) | $KEYWORD | Position: $POSITION"
# Usage: ./monitor_rank.sh "best crm 2026" "yoursite.com"
# Add to cron: 0 8 * * * /path/to/monitor_rank.sh "best crm 2026" "yoursite.com" >> /var/log/rank.logEjemplo en Python
import os, requests, subprocess, json
API_KEY = os.environ['SCAVIO_API_KEY']
def search(query: str) -> dict:
resp = requests.post('https://api.scavio.dev/api/v1/search',
headers={'x-api-key': API_KEY, 'Content-Type': 'application/json'},
json={'query': query, 'country_code': 'us'})
return resp.json()
def search_to_tsv(queries: list, output: str = 'results.tsv'):
with open(output, 'w') as f:
f.write('query\tposition\ttitle\turl\n')
for q in queries:
data = search(q)
for r in data.get('organic_results', [])[:3]:
f.write(f'{q}\t{r["position"]}\t{r["title"]}\t{r["link"]}\n')
print(f'Saved {output}')
search_to_tsv(['best crm 2026', 'crm pricing comparison'])Ejemplo en JavaScript
const API_KEY = process.env.SCAVIO_API_KEY;
async function search(query) {
const resp = await fetch('https://api.scavio.dev/api/v1/search', {
method: 'POST',
headers: { 'x-api-key': API_KEY, 'Content-Type': 'application/json' },
body: JSON.stringify({ query, country_code: 'us' })
});
return resp.json();
}
async function main() {
const queries = ['best crm 2026', 'crm pricing comparison'];
for (const q of queries) {
const data = await search(q);
(data.organic_results || []).slice(0, 3).forEach(r => {
console.log(`${q}\t${r.position}\t${r.title}\t${r.link}`);
});
}
}
main().catch(console.error);Salida esperada
1. Top Python Web Frameworks in 2026
https://example.com/python-frameworks
Django, FastAPI, and Flask remain the top choices...
2. FastAPI vs Django: Which Should You Use?
https://example.com/fastapi-django
FastAPI excels at async APIs while Django offers...
2026-05-13 | best crm 2026 | Position: 4
Results saved to results.tsv