herramienta gratuita · getdr

getdr: comprobador masivo del DR de Ahrefs

Versión 0.1.0Licencia MITFunciona en Linux · macOS · WindowsPrecio gratis

01 Qué hace

getdr consulta el Domain Rating (DR) de Ahrefs de un dominio, una lista, un archivo o stdin. Es un único binario estático para Linux, macOS y Windows, de código abierto con licencia MIT. El DR sale del endpoint gratuito oficial de Ahrefs, así que las consultas no cuestan nada ni gastan unidades de API. Solo necesitas una clave de API gratuita de Ahrefs.

  █  █ ▄▀▀▄     domain     saas.com
  █  █ █  █     rating     49 ▐█████████▌░░░░░░░░░░  /100
  ▀▀▀█  ▀▀█     trend      ▁▅█  +4 since Sep 17
     █    █     checked    2026-10-28 · 12 min ago, cached
     █  ▄▄▀     version    dr3

  Domain Rating by Ahrefs · getdr by Index Pages

Cada consulta se guarda con su fecha en una caché SQLite local. Repetirla no cuesta ninguna petición, y la tarjeta muestra cuánto se ha movido el DR desde la comprobación anterior. Con getdr serve, el mismo binario se convierte en una pequeña API HTTP: una máquina guarda la clave y la caché, y todos los scripts, portátiles y agentes de tu red le preguntan a ella.

getdr tiene tres partes, y las tres devuelven el mismo registro JSON:

  • getdr – la herramienta de línea de comandos y la API de getdr serve.
  • getdr-mcp – un servidor MCP con una sola herramienta, get_dr, para Claude, Cursor y otros clientes MCP.
  • getdr-skill – una skill para agentes. Su script de bash funciona incluso donde el binario no está instalado.

02 Instalación

Con Go 1.24 o posterior:

go install -trimpath github.com/index-pages/getdr@latest

El binario queda en $(go env GOPATH)/bin; asegúrate de que ese directorio esté en tu PATH.

Sin Go, descarga un archivo de GitHub Releases. Cada versión trae compilaciones para Linux, macOS y Windows en amd64 y arm64, además de checksums.txt:

tar -xzf getdr_0.1.0_linux_amd64.tar.gz
sha256sum -c --ignore-missing checksums.txt
sudo install getdr /usr/local/bin/
getdr -V

El binario es estático: no usa cgo, lleva SQLite compilado dentro y no hay que instalar nada más. Para compilarlo tú mismo:

git clone https://github.com/index-pages/getdr
cd getdr
CGO_ENABLED=0 go build -trimpath -ldflags "-s -w" -o getdr .

Para getdr serve hay un Dockerfile. La imagen se construye FROM scratch y solo contiene el binario y un bundle de certificados CA. Se ejecuta con un usuario sin privilegios y guarda la caché en /data:

docker build -t getdr .
docker run -d -p 8080:8080 -e GETDR_KEY=your-key -v getdr-data:/data getdr

Hay paquetes previstos para Homebrew, npm y PyPI, pero todavía no están publicados.

03 Clave gratuita de Ahrefs

Las peticiones al endpoint de Domain Rating de Ahrefs son gratuitas y no gastan unidades de API. Aun así, cada petición tiene que llevar una clave de API, que también es gratuita:

getdr busca la clave en cuatro sitios y usa la primera que encuentra:

DóndeEjemplo
opcióngetdr --key KEY saas.com
GETDR_KEYexport GETDR_KEY=KEY
AHREFS_KEYexport AHREFS_KEY=KEY
archivo de configuraciónkey = "KEY" en ~/.config/getdr/config.toml

Comprueba que funciona con getdr key check. getdr config show indica de qué fuente salió la clave y muestra solo sus 4 últimos caracteres. La clave solo hace falta cuando hay que traer datos: los valores que siguen vigentes en la caché se muestran sin ella.

El código de salida 3 siempre indica un problema con la clave. Si el mensaje es "no Ahrefs API key", ninguna de las fuentes anteriores tiene clave. Si es "rejected by Ahrefs (HTTP 401)", la clave es incorrecta o está revocada, así que crea otra. Con --api, el servidor getdr no tiene clave o Ahrefs la ha rechazado, y hay que arreglarlo en el servidor.

Ahrefs no publica ningún límite de peticiones para este endpoint. En la práctica pasan unas 40–60 peticiones por minuto. getdr agrupa hasta 1000 objetivos en una sola petición, no envía más de rpm peticiones por minuto (40 por defecto) y reintenta las respuestas 429 y 5xx con espera exponencial.

Para usar una sola clave en varias máquinas, ejecuta getdr serve en una de ellas y apunta las demás hacia ella con api (consulta API HTTP). Así los clientes no necesitan ninguna clave.

04 Uso

ComandoQué obtienes
getdr saas.comLa tarjeta, en el terminal.
getdr https://www.example.com/pageUna URL se reduce a su host.
getdr a.com b.com c.comVarios objetivos, ordenados por DR.
getdr -f domains.txtUn objetivo por línea; se admiten comentarios con #.
cat domains.txt | getdr > dr.tsvEn una tubería: dominio y DR separados por tabulador.
getdr -f domains.txt --format jsonNDJSON, un objeto por línea.
getdr -b a.com b.comSolo los valores.
getdr -f domains.txt --min 30 -qDeja solo DR 30 o superior; código de salida 1 si algún objetivo queda fuera.
getdr saas.com --version dr4La nueva fórmula de DR.
getdr saas.com --freshIgnora la caché y vuelve a consultar.

Los objetivos se normalizan antes de enviar nada. De una URL queda solo el host, se quita www., todo pasa a minúsculas, las etiquetas punycode (xn--…) se decodifican a Unicode y se eliminan los duplicados. Por eso xn--e1afmkfd.xn--p1ai y ПРИМЕР.РФ se consultan los dos como пример.рф. --raw envía los objetivos tal como están escritos.

Una línea mala no estropea la lista. Las entradas sin host, con espacios en blanco o con caracteres de control se rechazan antes del envío. Cuando Ahrefs rechaza un objetivo (localhost, a..com), getdr lo saca del lote y reenvía el resto. Por cada uno de esos objetivos aparece getdr: invalid target: X en stderr y un resultado vacío, la ejecución termina con código de salida 2 y no se guarda nada de él en la caché.

-f, --file FILE        read targets from FILE ("-" for stdin)
-o, --out FILE         write the result to FILE instead of stdout
    --format F         card, tsv, csv or json
-b, --bare             only the DR values
    --fields LIST      domain,dr,version,checked_at,delta,cached
    --sort             sort by DR (card always sorts)
    --all              card: show all rows
    --min N, --max N   filter by DR; exit 1 if any target fails
    --raw              no target normalization
    --version V        dr3 (default) or dr4
    --fresh            refetch and update the cache
    --no-cache         neither read nor write the cache
    --ttl DUR          cache TTL for this run (7d, 12h, 30m)
    --api URL          use a getdr server instead of Ahrefs
    --key KEY          Ahrefs API key
    --config PATH      config file
    --listen ADDR      serve: listen address
    --token T          serve: required token; with --api: token to send
-q, --quiet            no progress, attribution or warnings on stderr
-v, --verbose          cache hits, API calls and batches on stderr
-V                     print the getdr version

Comandos: getdr serve, getdr cache stats | clear | purge, getdr config show, getdr key check.

Código de salidaSignificado
0Todo comprobado.
1Algún objetivo queda fuera de --min / --max.
2Un error, objetivos no válidos u objetivos que no obtuvieron respuesta (tiempo de espera agotado, límite de peticiones).
3Falta la clave de API de Ahrefs o ha sido rechazada.

05 Salida

En el terminal, getdr muestra la tarjeta. Cuando stdout es una tubería o un archivo, cambia a tsv. --format y -b se imponen en ambos casos.

FormatoQué obtienes
cardUn número grande, una barra, la tendencia y un resumen, para leerlo una persona. El color depende del DR: 0–19 gris, 20–39 amarillo, 40–69 verde, 70+ azul.
tsvdomain<TAB>dr, sin cabecera; el DR queda vacío cuando no hay datos.
csvLas mismas columnas, con una fila de cabecera.
jsonNDJSON, un registro por objetivo.
-bSolo los valores de DR, uno por línea, con una línea vacía cuando no hay datos.

--fields elige las columnas de tsv y csv entre domain,dr,version,checked_at,delta,cached; por defecto son domain,dr. Un registro json siempre va completo, y delta se añade si lo incluyes en la lista. El registro JSON es el mismo en la CLI, el servidor, la herramienta MCP y la skill:

{"target":"saas.com","dr":49,"version":"dr3","checked_at":"2026-10-28T12:00:00Z","cached":true}
CampoSignificado
targetEl objetivo normalizado, o tal como se escribió si se usa --raw.
drDomain Rating, 0–100. null si el objetivo no era válido, si Ahrefs no respondió o (rara vez) si Ahrefs no tiene datos.
versiondr3 o dr4. Las dos fórmulas dan valores que no se pueden comparar entre sí.
checked_atCuándo se midió el valor, en RFC 3339 y UTC. null si el objetivo no es válido o no hubo respuesta.
cachedtrue si el valor salió de la caché.

Ahrefs responde 0 para los dominios que no conoce, así que 0 es un valor normal. Un DR null con fecha null significa que el objetivo no era válido o que esta vez no hubo respuesta. Un DR null con fecha significa que Ahrefs ha dicho de forma explícita que no tiene datos.

La tarjeta respeta NO_COLOR. Con TERM=dumb o con un locale sin UTF-8 pasa a ASCII simple, sin dígitos grandes ni barras. Si la lista tiene más de 200 filas, se muestran las 200 primeras; --all las muestra todas.

06 Configuración

Cada ajuste se toma del primer sitio donde aparece: una opción de la línea de comandos, después una variable de entorno GETDR_*, después el archivo de configuración y, por último, el valor por defecto integrado. La clave también se lee de AHREFS_KEY, que tiene menos prioridad que GETDR_KEY. Una variable de entorno vacía cuenta como no definida.

getdr usa el primer archivo de configuración que encuentra: --config PATH, después $GETDR_CONFIG, después $XDG_CONFIG_HOME/getdr/config.toml (~/.config/getdr/config.toml si XDG_CONFIG_HOME no está definida) y, por último, /etc/getdr/config.toml. Un archivo indicado con --config o GETDR_CONFIG tiene que existir. Un ajuste desconocido da error, así que una errata no pasa desapercibida. ~/ al principio de una ruta se expande.

key = ""
api = ""
version = "dr3"

[cache]
path = "~/.cache/getdr/cache.db"
ttl = "7d"
ttl_none = "1d"
max_age = "30d"

[ahrefs]
batch = 1000
rpm = 40
timeout = "30s"
retries = 3

[serve]
listen = "127.0.0.1:8080"
token = ""
max_targets = 10000
AjusteVariableOpciónPor defectoSignificado
keyGETDR_KEY, AHREFS_KEY--key–Clave de API de Ahrefs.
apiGETDR_API--api–URL de un servidor getdr. Si está definida, la CLI le pregunta a él en lugar de a Ahrefs.
versionGETDR_VERSION--versiondr3Versión de DR, dr3 o dr4.
cache.pathGETDR_CACHE_PATH–~/.cache/getdr/cache.dbArchivo de caché SQLite; $XDG_CACHE_HOME/getdr/ si esa variable está definida.
cache.ttlGETDR_CACHE_TTL--ttl7dCuánto tiempo sigue vigente un valor.
cache.ttl_noneGETDR_CACHE_TTL_NONE–1dCuánto tiempo sigue vigente un "sin datos".
cache.max_ageGETDR_CACHE_MAX_AGE–30dVentana de la tendencia; cache purge borra las comprobaciones más antiguas.
ahrefs.batchGETDR_AHREFS_BATCH–1000Objetivos por petición a Ahrefs, 1–1000.
ahrefs.rpmGETDR_AHREFS_RPM–40Peticiones a Ahrefs por minuto.
ahrefs.timeoutGETDR_AHREFS_TIMEOUT–30sTiempo de espera de una petición a Ahrefs.
ahrefs.retriesGETDR_AHREFS_RETRIES–3Reintentos ante 429, 5xx y errores de red.
serve.listenGETDR_SERVE_LISTEN--listen127.0.0.1:8080Dirección en la que escucha getdr serve.
serve.tokenGETDR_SERVE_TOKEN--token–Token Bearer que exige el servidor. La CLI lo envía cuando api está definida.
serve.max_targetsGETDR_SERVE_MAX_TARGETS–10000Objetivos por POST /dr.

Las duraciones admiten días con el sufijo d (7d, 1.5d) y duraciones de Go (36h, 90m, 30s). getdr config show muestra todos los valores ya combinados y de dónde salió cada uno. Los secretos (key, serve.token) solo enseñan sus 4 últimos caracteres.

Otras variables de entorno que lee getdr:

  • NO_COLOR desactiva los colores de la tarjeta.
  • TERM=dumb, o un locale sin UTF-8 en LC_ALL, LC_CTYPE o LANG, da una tarjeta en ASCII simple.
  • COLUMNS fija el ancho de la tarjeta cuando el terminal no lo indica.
  • HOME, XDG_CONFIG_HOME y XDG_CACHE_HOME determinan dónde van los archivos por defecto.
  • Se respetan HTTP_PROXY, HTTPS_PROXY y NO_PROXY. Si sales por un proxy y usas como api un servidor getdr de tu red local, añade ese servidor a NO_PROXY.

07 Caché e historial

Cada comprobación se guarda en su propia fila (dominio, versión, DR, fecha). De ese historial sale la tendencia que dibuja la tarjeta y con él se calcula delta. Un valor se considera vigente mientras la última comprobación tenga menos antigüedad que ttl, o que ttl_none en el caso de "sin datos"; pasado ese plazo, getdr vuelve a consultarlo. Los valores dr3 y dr4 se guardan por separado. Los objetivos que no obtuvieron respuesta no entran en la caché.

getdr cache purge borra las comprobaciones más antiguas que max_age y siempre conserva la última de cada dominio. getdr cache stats muestra la ruta y el tamaño del archivo, cuántas comprobaciones y dominios contiene, y la comprobación más antigua y la más reciente. getdr cache clear borra todas las comprobaciones. La CLI y el servidor pueden trabajar a la vez con el mismo archivo de caché.

08 API HTTP

getdr serve es una pequeña API HTTP delante de Ahrefs, con caché compartida. Arráncala una vez con una clave de Ahrefs y apunta hacia ella las CLI, los scripts y los agentes. No necesitan clave propia, y las consultas repetidas salen de la caché.

GETDR_KEY=your-key getdr serve --listen 0.0.0.0:8080 --token s3cret
curl -H 'Authorization: Bearer s3cret' 'http://lan-host:8080/dr?target=saas.com'

Todas las respuestas llevan la cabecera Server: getdr/<version> (index-pages.com). Los errores van en JSON: {"error":"…"}. Si hay un token configurado, /dr y /stats exigen Authorization: Bearer <token> y sin él responden 401. /, /healthz y /teapot siempre están abiertos.

MétodoRutaQué hace
GET/dr?target=x.comUn registro de resultado. Opcionales: version=dr3, fresh=1 (ignorar la caché), raw=1 (sin normalización).
POST/drMuchos objetivos en una sola petición; la respuesta llega como {"results":[…]}.
GET/healthz200 ok, en texto plano.
GET/statsTamaño de la caché, tasa de aciertos y peticiones a Ahrefs en la última hora.
GET/Nombre, versión y enlaces a esta documentación.

POST /dr acepta exactamente cuatro campos:

{"targets":["saas.com","https://www.example.com/page"],"version":"dr3","fresh":false,"raw":false}
{"results":[
  {"target":"saas.com","dr":49,"version":"dr3","checked_at":"2026-10-28T12:00:00Z","cached":true},
  {"target":"example.com","dr":93,"version":"dr3","checked_at":"2026-10-28T12:03:11Z","cached":false}
]}

Los objetivos se normalizan y se deduplican, y los resultados siguen su orden. El servidor reparte el trabajo en lotes de Ahrefs de hasta 1000 y respeta el límite de peticiones. Un cliente puede pedir fresh, pero no puede cambiar el TTL del servidor. Los objetivos no válidos nunca hacen fallar la petición: vuelven dentro de un 200 normal, con dr y checked_at a null.

HTTPCuándo
400Falta target, version no válida, JSON no válido, un campo desconocido o datos después del objeto JSON, ningún objetivo válido.
401Se exige un token y falta o es incorrecto.
404Ruta desconocida.
405Método incorrecto, incluido HEAD /dr, que nunca lanza una consulta.
413Más de max_targets objetivos (10000 por defecto).
503El servidor no tiene clave de Ahrefs, o Ahrefs la ha rechazado.

/stats responde así; lookups cuenta los objetivos desde que arrancó el servidor, rows son las comprobaciones guardadas y domains, los dominios distintos:

{
  "cache": {"size_bytes":45328,"rows":1200,"domains":950,
            "versions":{"dr3":900,"dr4":50},"oldest":"2026-10-01T09:00:00Z","newest":"2026-10-28T12:03:11Z"},
  "lookups": {"hits":1830,"misses":120,"hit_rate":0.9385},
  "ahrefs_requests_last_hour": 3
}

Si varios clientes piden a la vez el mismo dominio y la misma versión, el servidor hace una sola petición a Ahrefs para todos. La CLI se conecta a un servidor así:

getdr --api http://lan-host:8080 --token s3cret -f domains.txt

También funciona con api y serve.token en el archivo de configuración, o con GETDR_API y GETDR_SERVE_TOKEN. La CLI envía un único POST /dr con los objetivos que no cubre su propia caché y le pasa --fresh al servidor. Las variables de proxy también se aplican a esta petición, así que añade a NO_PROXY el servidor de tu red local.

09 Agentes de IA

getdr-mcp es un servidor MCP con una sola herramienta, get_dr. No hace peticiones propias a Ahrefs: le pregunta a un servidor getdr o al binario getdr. Funciona sobre stdio, no tiene dependencias en tiempo de ejecución y necesita Node.js 18 o posterior. Añádelo a Claude Desktop, Claude Code, Cursor u otro cliente MCP:

{
  "mcpServers": {
    "getdr": {
      "command": "npx",
      "args": ["-y", "getdr-mcp"]
    }
  }
}

Así se usa el binario getdr de tu PATH, con su propia configuración, caché y clave. Para usar en su lugar un servidor getdr de tu red, añade "env": {"GETDR_API": "http://lan-host:8080", "GETDR_SERVE_TOKEN": "s3cret"}. getdr-mcp mira primero GETDR_API y después el binario; si no hay ninguno de los dos, la herramienta devuelve un error con instrucciones de configuración.

ArgumentoTipoSignificado
targetsstring[]Obligatorio y no vacío. Dominios o URLs.
version"dr3" | "dr4"Fórmula de DR, dr3 por defecto. Siempre se envía de forma explícita, así que un servidor o una configuración con dr4 no la cambian.
freshbooleanIgnorar la caché y volver a consultar.

La herramienta devuelve un array JSON de registros seguido de la línea de atribución. Los clientes con el protocolo MCP 2025-06-18 o posterior reciben además structuredContent con un outputSchema. Si algunos objetivos no obtuvieron respuesta, el resultado llega igualmente con todos los registros y una nota que nombra esos objetivos.

getdr-skill es una carpeta con un SKILL.md y un script de bash, para cualquier agente que cargue Agent Skills. Para Claude Code:

git clone https://github.com/index-pages/getdr-skill ~/.claude/skills/getdr

El script scripts/dr.sh usa el primer backend disponible: un servidor getdr en GETDR_API, después el binario getdr del PATH y, por último, el endpoint gratuito de Ahrefs directamente con GETDR_KEY o AHREFS_KEY. Si no encuentra ninguno, sale con código 3 y enlaza a cómo conseguir una clave gratuita. Necesita bash, curl y jq 1.6 o posterior; con el binario instalado basta con bash. Por cualquiera de las tres vías, la salida es el mismo NDJSON.

10 Atribución y privacidad

Los datos de Domain Rating proceden de Ahrefs y están sujetos a la Domain Rating License, que exige la atribución "Domain Rating by Ahrefs". getdr la muestra en el pie de la tarjeta y, con los formatos para máquinas, una vez por ejecución en stderr, nunca en stdout (-q la silencia). Mantenla cuando publiques las cifras. getdr no está afiliado a Ahrefs.

getdr solo se conecta a dos sitios: api.ahrefs.com y el servidor getdr que configures en api. No tiene telemetría, ni comprobación de actualizaciones, ni analítica, y rechaza las redirecciones a cualquier otro host. Todas las peticiones llevan este User-Agent:

user agent

getdr/<version> (+https://index-pages.com/getdr)

Puedes comprobarlo en el código fuente: todas las peticiones salientes se hacen en internal/ahrefs y internal/remote. getdr-mcp solo se conecta al servidor de GETDR_API y, si no lo hay, arranca el binario. El script de la skill habla con GETDR_API o con api.ahrefs.com y le pasa las claves a curl en un archivo temporal con permisos 600, nunca en la línea de comandos.

11 Quién lo hace

getdr lo hace Index Pages. Nuestro producto principal es un servicio de indexación de URLs: envía páginas a Google, Bing, Yandex y más de 10 motores más: los índices de los que responden ChatGPT, Claude, Perplexity y AI Overviews. La comprobación de DR te dice qué dominios merecen un enlace, e Index Pages consigue que se indexen las páginas que llevan esos enlaces.

El servicio está en la página principal, y su API REST para scripts y agentes, en la página de la API. Los errores y las ideas para getdr van a los issues de GitHub.