strumento gratuito · getdr

getdr: controllo in blocco del DR di Ahrefs

Versione 0.1.0Licenza MITSistemi Linux · macOS · WindowsPrezzo gratis

01 Cosa fa

getdr controlla il Domain Rating (DR) di Ahrefs per un dominio, una lista, un file o lo stdin. È un unico binario statico per Linux, macOS e Windows, open source con licenza MIT. Il DR arriva dall'endpoint gratuito ufficiale di Ahrefs: i controlli non costano nulla e non consumano unità API, ti basta una chiave API Ahrefs gratuita.

  █  █ ▄▀▀▄     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

Ogni controllo viene salvato con la sua data in una cache SQLite locale. Una ricerca ripetuta non costa nessuna richiesta, e la scheda mostra di quanto si è mosso il DR dall'ultimo controllo. Lancia getdr serve e lo stesso binario diventa una piccola API HTTP: una macchina tiene la chiave e la cache, e ogni script, portatile e agente della tua rete interroga lei.

getdr è fatto di tre parti, e tutte restituiscono lo stesso record JSON:

  • getdr – lo strumento a riga di comando e l'API getdr serve.
  • getdr-mcp – un server MCP con un solo strumento, get_dr, per Claude, Cursor e altri client MCP.
  • getdr-skill – una skill per agenti. Il suo script bash funziona anche dove il binario non è installato.

02 Installazione

Con Go 1.24 o successivo:

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

Il binario finisce in $(go env GOPATH)/bin; controlla che quella directory sia nel tuo PATH.

Senza Go, scarica un archivio da GitHub Releases. Ogni release contiene build per Linux, macOS e Windows, per amd64 e arm64, più il file 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

Il binario è statico: niente cgo, SQLite è compilato dentro, non c'è altro da installare. Per compilarlo da te:

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

Per getdr serve c'è un Dockerfile. L'immagine è costruita FROM scratch e contiene solo il binario e un bundle di CA. Gira come utente non privilegiato e tiene la cache in /data:

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

Sono previsti pacchetti Homebrew, npm e PyPI, ma non sono ancora pubblicati.

03 Chiave Ahrefs gratuita

Le richieste all'endpoint Domain Rating di Ahrefs sono gratuite e non consumano unità API. Ogni richiesta deve però portare una chiave API, e anche la chiave è gratuita:

getdr cerca la chiave in quattro posti e usa la prima che trova:

DoveEsempio
flaggetdr --key KEY saas.com
GETDR_KEYexport GETDR_KEY=KEY
AHREFS_KEYexport AHREFS_KEY=KEY
file di configurazionekey = "KEY" in ~/.config/getdr/config.toml

Verifica che funzioni con getdr key check. getdr config show ti dice da quale fonte arriva la chiave e ne stampa solo gli ultimi 4 caratteri. La chiave serve solo quando c'è qualcosa da scaricare: i valori ancora freschi in cache vengono mostrati anche senza.

Il codice di uscita 3 indica sempre un problema con la chiave. Se il messaggio è "no Ahrefs API key", nessuna delle fonti qui sopra ne contiene una. Se è "rejected by Ahrefs (HTTP 401)", la chiave è sbagliata o revocata, quindi creane una nuova. Con --api vuol dire che il server getdr non ha una chiave o che Ahrefs l'ha rifiutata, e il problema va risolto sul server.

Ahrefs non pubblica un rate limit per questo endpoint. In pratica passano circa 40–60 richieste al minuto. getdr mette fino a 1000 target in una sola richiesta, non invia più di rpm richieste al minuto (40 di default) e ripete con backoff esponenziale le richieste che ricevono 429 o 5xx.

Per usare una sola chiave su più macchine, lancia getdr serve su una di esse e indica alle altre il suo indirizzo con api (vedi API HTTP). Ai client, a quel punto, non serve nessuna chiave.

04 Utilizzo

ComandoCosa ottieni
getdr saas.comLa scheda, in un terminale.
getdr https://www.example.com/pageUn URL viene ridotto al suo host.
getdr a.com b.com c.comPiù target, ordinati per DR.
getdr -f domains.txtUn target per riga; i commenti con # sono ammessi.
cat domains.txt | getdr > dr.tsvIn una pipe: dominio e DR, separati da tab.
getdr -f domains.txt --format jsonNDJSON, un oggetto per riga.
getdr -b a.com b.comSolo i valori.
getdr -f domains.txt --min 30 -qTiene i DR da 30 in su; codice di uscita 1 se qualche target resta fuori.
getdr saas.com --version dr4La nuova formula del DR.
getdr saas.com --freshSalta la cache e scarica di nuovo.

I target vengono normalizzati prima di qualsiasi invio. Un URL diventa il suo host, www. viene tolto, tutto passa in minuscolo, le etichette punycode (xn--…) vengono decodificate in Unicode e i duplicati spariscono. Così xn--e1afmkfd.xn--p1ai e ПРИМЕР.РФ vengono controllati entrambi come пример.рф. Con --raw i target partono esattamente come sono scritti.

Una riga sbagliata non rovina la lista. Un input senza host, con spazi o con caratteri di controllo viene scartato prima dell'invio. Quando Ahrefs rifiuta un target (localhost, a..com), getdr lo toglie dal batch e reinvia il resto. Per ognuno di questi target compare getdr: invalid target: X su stderr e il risultato resta vuoto; l'esecuzione termina con codice di uscita 2 e niente di tutto questo finisce in cache.

-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

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

Codice di uscitaSignificato
0Tutto controllato.
1Un target è fuori da --min / --max.
2Un errore, target non validi o target che non hanno ricevuto risposta (timeout, rate limit).
3La chiave API Ahrefs manca o è stata rifiutata.

05 Output

In un terminale getdr stampa la scheda. Quando stdout è una pipe o un file, passa a tsv. --format e -b hanno la precedenza in entrambi i casi.

FormatoCosa ottieni
cardUn numero grande, una barra, il trend e un riepilogo, pensati per le persone. Il colore segue il DR: 0–19 grigio, 20–39 giallo, 40–69 verde, 70+ blu.
tsvdomain<TAB>dr, senza intestazione; il DR è vuoto quando non ci sono dati.
csvLe stesse colonne, con una riga di intestazione.
jsonNDJSON, un record per target.
-bSolo i valori DR, uno per riga, con una riga vuota dove mancano i dati.

--fields sceglie le colonne di tsv e csv tra domain,dr,version,checked_at,delta,cached; il default è domain,dr. Un record json è sempre completo, e delta si aggiunge quando lo indichi. Il record JSON è lo stesso nella CLI, nel server, nello strumento MCP e nella skill:

{"target":"saas.com","dr":49,"version":"dr3","checked_at":"2026-10-28T12:00:00Z","cached":true}
CampoSignificato
targetIl target normalizzato, oppure il target così come è scritto se usi --raw.
drDomain Rating, 0–100. null quando il target non era valido, Ahrefs non ha risposto oppure (di rado) Ahrefs non ha dati.
versiondr3 o dr4. Le due formule danno valori non confrontabili tra loro.
checked_atQuando è stato misurato il valore, in RFC 3339 UTC. null per un target non valido o rimasto senza risposta.
cachedtrue quando il valore viene dalla cache.

Per i domini che non conosce Ahrefs risponde 0, quindi 0 è un valore normale. Un DR null con una data null significa che il target non era valido o che questa volta non ha avuto risposta. Un DR null accompagnato da una data significa che Ahrefs ha dichiarato esplicitamente di non avere dati.

La scheda rispetta NO_COLOR. Con TERM=dumb o con un locale senza UTF-8 ripiega su ASCII semplice, senza cifre grandi né barre. Una lista di più di 200 righe mostra le prime 200; --all le mostra tutte.

06 Configurazione

Ogni impostazione viene presa dal primo posto che la contiene: un flag da riga di comando, poi una variabile d'ambiente GETDR_*, poi il file di configurazione, infine il default integrato. La chiave si legge anche da AHREFS_KEY, che ha priorità più bassa di GETDR_KEY. Una variabile d'ambiente vuota conta come non impostata.

getdr usa il primo file di configurazione che trova: --config PATH, poi $GETDR_CONFIG, poi $XDG_CONFIG_HOME/getdr/config.toml (~/.config/getdr/config.toml se XDG_CONFIG_HOME non è impostata), poi /etc/getdr/config.toml. Un file indicato con --config o GETDR_CONFIG deve esistere. Un'impostazione sconosciuta è un errore, così un refuso non passa inosservato. ~/ all'inizio di un percorso viene espanso.

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
ImpostazioneEnvFlagDefaultSignificato
keyGETDR_KEY, AHREFS_KEY--key–Chiave API Ahrefs.
apiGETDR_API--api–URL di un server getdr. Se è impostato, la CLI interroga quello invece di Ahrefs.
versionGETDR_VERSION--versiondr3Versione del DR, dr3 o dr4.
cache.pathGETDR_CACHE_PATH–~/.cache/getdr/cache.dbFile della cache SQLite; $XDG_CACHE_HOME/getdr/ se quella variabile è impostata.
cache.ttlGETDR_CACHE_TTL--ttl7dPer quanto tempo un valore resta fresco.
cache.ttl_noneGETDR_CACHE_TTL_NONE–1dPer quanto tempo resta fresco un "nessun dato".
cache.max_ageGETDR_CACHE_MAX_AGE–30dFinestra del trend; cache purge elimina i controlli più vecchi.
ahrefs.batchGETDR_AHREFS_BATCH–1000Target per richiesta ad Ahrefs, 1–1000.
ahrefs.rpmGETDR_AHREFS_RPM–40Richieste ad Ahrefs al minuto.
ahrefs.timeoutGETDR_AHREFS_TIMEOUT–30sTimeout di una singola richiesta ad Ahrefs.
ahrefs.retriesGETDR_AHREFS_RETRIES–3Nuovi tentativi su 429, 5xx ed errori di rete.
serve.listenGETDR_SERVE_LISTEN--listen127.0.0.1:8080Indirizzo su cui ascolta getdr serve.
serve.tokenGETDR_SERVE_TOKEN--token–Token Bearer richiesto dal server. La CLI lo invia quando api è impostato.
serve.max_targetsGETDR_SERVE_MAX_TARGETS–10000Target per POST /dr.

Le durate accettano i giorni con il suffisso d (7d, 1.5d) e le durate di Go (36h, 90m, 30s). getdr config show stampa tutti i valori risultanti e da dove arriva ciascuno. Dei segreti (key, serve.token) mostra solo gli ultimi 4 caratteri.

Altre variabili d'ambiente che getdr legge:

  • NO_COLOR disattiva i colori nella scheda.
  • TERM=dumb, oppure un locale senza UTF-8 in LC_ALL, LC_CTYPE o LANG, dà una scheda in ASCII semplice.
  • COLUMNS fissa la larghezza della scheda quando il terminale non la comunica.
  • HOME, XDG_CONFIG_HOME e XDG_CACHE_HOME determinano dove stanno i file per default.
  • HTTP_PROXY, HTTPS_PROXY e NO_PROXY vengono rispettate. Se passi da un proxy e usi come api un server getdr nella tua LAN, aggiungi quel server a NO_PROXY.

07 Cache e storico

Ogni controllo viene salvato come riga a sé (dominio, versione, DR, data). Da questo storico la scheda disegna il trend e getdr calcola delta. Un valore resta fresco finché l'ultimo controllo è più recente di ttl, o di ttl_none per "nessun dato"; dopo, getdr lo scarica di nuovo. I valori dr3 e dr4 sono tenuti separati. I target rimasti senza risposta non finiscono in cache.

getdr cache purge elimina i controlli più vecchi di max_age e conserva sempre l'ultimo di ogni dominio. getdr cache stats mostra percorso e dimensione del file, quanti controlli e quanti domini contiene, il controllo più vecchio e il più recente. getdr cache clear elimina tutti i controlli. La CLI e il server possono lavorare sullo stesso file di cache nello stesso momento.

08 API HTTP

getdr serve è una piccola API HTTP davanti ad Ahrefs, con una cache condivisa. La avvii una volta con una chiave Ahrefs e poi ci colleghi CLI, script e agenti. A loro non serve una chiave propria, e i controlli ripetuti arrivano dalla cache.

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'

Ogni risposta porta l'header Server: getdr/<version> (index-pages.com). Gli errori sono in JSON: {"error":"…"}. Se è impostato un token, /dr e /stats richiedono Authorization: Bearer <token> e senza di esso rispondono 401. /, /healthz e /teapot sono sempre aperti.

MetodoPercorsoCosa fa
GET/dr?target=x.comUn record di risultato. Facoltativi version=dr3, fresh=1 (salta la cache), raw=1 (nessuna normalizzazione).
POST/drMolti target in una sola richiesta, con risposta {"results":[…]}.
GET/healthz200 ok, testo semplice.
GET/statsDimensione della cache, hit rate, richieste ad Ahrefs nell'ultima ora.
GET/Nome, versione e link a questa documentazione.

POST /dr accetta esattamente quattro campi:

{"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}
]}

I target vengono normalizzati e deduplicati, e i risultati seguono il loro ordine. Il server divide il lavoro in batch Ahrefs fino a 1000 target e rispetta il rate limit. Un client può chiedere fresh, ma non può cambiare il TTL del server. I target non validi non fanno mai fallire la richiesta: tornano dentro un normale 200 con dr e checked_at a null.

HTTPQuando
400Manca target, version non è valida, il JSON non è valido, c'è un campo sconosciuto o ci sono dati dopo l'oggetto JSON, nessun target è valido.
401Il token è richiesto e manca o è sbagliato.
404Percorso sconosciuto.
405Metodo sbagliato, compreso HEAD /dr, che non avvia mai una ricerca.
413Più di max_targets target (10000 di default).
503Il server non ha una chiave Ahrefs, oppure Ahrefs l'ha rifiutata.

/stats risponde così; lookups conta i target dall'avvio del server, rows sono i controlli salvati e domains i domini distinti:

{
  "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
}

Se più client chiedono nello stesso momento lo stesso dominio con la stessa versione, il server fa una sola richiesta ad Ahrefs per tutti. La CLI si collega a un server così:

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

Funziona allo stesso modo con api e serve.token nel file di configurazione, oppure con GETDR_API e GETDR_SERVE_TOKEN. La CLI invia un solo POST /dr per i target che la sua cache non copre e inoltra --fresh. Anche questa richiesta segue le variabili del proxy, quindi aggiungi a NO_PROXY un server che sta nella LAN.

09 Agenti AI

getdr-mcp è un server MCP con un solo strumento, get_dr. Non fa richieste ad Ahrefs per conto suo: interroga un server getdr o il binario getdr. Funziona su stdio, non ha dipendenze a runtime e richiede Node.js 18 o successivo. Aggiungilo a Claude Desktop, Claude Code, Cursor o a un altro client MCP:

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

Con questa configurazione usa il binario getdr nel tuo PATH, con la sua configurazione, la sua cache e la sua chiave. Per usare invece un server getdr della tua rete, aggiungi "env": {"GETDR_API": "http://lan-host:8080", "GETDR_SERVE_TOKEN": "s3cret"}. Il server MCP guarda prima GETDR_API, poi il binario; se non trova nessuno dei due, lo strumento restituisce un errore con le istruzioni per configurarlo.

ArgomentoTipoSignificato
targetsstring[]Obbligatorio, non vuoto. Domini o URL.
version"dr3" | "dr4"Formula del DR, dr3 di default. Viene sempre inviata in modo esplicito, quindi un server o una configurazione impostati su dr4 non la cambiano.
freshbooleanIgnora la cache e scarica di nuovo.

Lo strumento restituisce un array JSON di record seguito dalla riga di attribuzione. I client con protocollo MCP 2025-06-18 o successivo ricevono anche structuredContent con un outputSchema. Se alcuni target non hanno avuto risposta, il risultato arriva comunque, con tutti i record e una nota che elenca quei target.

getdr-skill è una cartella con un SKILL.md e uno script bash, per qualsiasi agente che carichi le Agent Skills. Per Claude Code:

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

Lo script scripts/dr.sh usa il primo backend disponibile: un server getdr in GETDR_API, poi il binario getdr nel PATH, poi direttamente l'endpoint gratuito di Ahrefs con GETDR_KEY o AHREFS_KEY. Se non ne trova nessuno, esce con codice 3 e rimanda a come ottenere una chiave gratuita. Richiede bash, curl e jq 1.6 o successivo; con il binario installato basta bash. Qualunque strada prenda, l'output è lo stesso NDJSON.

10 Attribuzione e privacy

I dati Domain Rating provengono da Ahrefs e sono soggetti alla Domain Rating License, che richiede l'attribuzione "Domain Rating by Ahrefs". getdr la stampa nel piè di pagina della scheda e, con i formati per le macchine, una volta per esecuzione su stderr, mai su stdout (-q la disattiva). Mantienila quando pubblichi i numeri. getdr non è affiliato ad Ahrefs.

getdr si collega solo a due destinazioni: api.ahrefs.com e il server getdr che imposti in api. Non ha telemetria, controlli degli aggiornamenti o analytics, e rifiuta i redirect verso qualsiasi altro host. Ogni richiesta porta questo User-Agent:

user agent

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

Puoi verificarlo nel codice sorgente: tutte le richieste in uscita partono da internal/ahrefs e internal/remote. getdr-mcp si collega solo al server in GETDR_API, altrimenti avvia il binario. Lo script della skill comunica con GETDR_API o con api.ahrefs.com e passa le chiavi a curl in un file temporaneo con permessi 600, mai sulla riga di comando.

11 Chi lo sviluppa

getdr è sviluppato da Index Pages. Il nostro prodotto principale è un servizio di indicizzazione degli URL: spinge le pagine in Google, Bing, Yandex e in più di 10 altri motori, cioè negli indici da cui attingono le risposte di ChatGPT, Claude, Perplexity e AI Overviews. Un controllo del DR ti dice su quali domini conviene avere un link. Index Pages fa indicizzare le pagine che contengono quei link.

Il servizio è descritto nella home page, e la sua API REST per script e agenti nella pagina API. Bug e idee per getdr vanno nelle issue su GitHub.