Domain trust checker for a 2,000-row data frame
Try one domain in the box, then score a whole column in a single call. The threshold table is ours to suggest and yours to change.
CranSEO research team ·
Check one domain first
Free, no key. Enter a domain and see its DR and referring-domain count before you script anything.
The whole column in one request
Send up to 2,000 domains to bulk_dr, which costs 1 credit per call. We join with a comma-separated string here; run a three-domain test call first to confirm the output shape.
library(httr2)
library(dplyr)
domains <- readr::read_csv("links_export.csv")$domain |> unique()
chunk <- head(domains, 2000)
scores <- request("https://cranseo.com/api.php") |>
req_url_query(action = "bulk_dr",
domains = paste(chunk, collapse = ","),
key = Sys.getenv("CRANSEO_KEY")) |>
req_perform() |>
resp_body_json()
glimpse(scores)Threshold table: what a DR band tends to mean
| DR band | Label | What to do with the row |
|---|---|---|
| 0 to 9 | Thin | Keep for volume counts, ignore for quality arguments |
| 10 to 29 | Small | Typical for new or local sites; inspect the anchor |
| 30 to 59 | Established | Usually worth a manual look in a client report |
| 60 to 79 | Strong | Cite by name, and check for topical fit |
| 80 to 100 | Very large | Rare; confirm the link is editorial, not a profile or comment |
Why the log scale changes your thresholds
DR rises with the logarithm of referring domains. The step from 10 to 20 takes far fewer new linking sites than the step from 70 to 80.
So bands should not be equal widths in your head. A site at DR 45 is not halfway between a local blog and the New York Times, and a histogram of raw values will mislead you.
Use cut() with the table above, then count rows per band rather than averaging DR. Averages on a log scale hide exactly the outliers you were hired to find.
Three ways to use the labels
Pick one use and stick to it.
Three uses. Filter: keep only rows at DR 30 and above before a manual review, and you cut a 2,000-row list down to something a person can read in an afternoon. Rank: sort descending and take the top 50 as the examples for a client slide. Audit: count rows per band and compare this month with last month, using the dated files from the runbook.
None of these measure quality. Not alone. A DR 70 site can link to you from a sponsored page, and a DR 12 local blog can be the most relevant mention you have. Treat the number as a sorting aid and look at the anchor before you decide, which the action glossary explains how to pull.
If your list started life as a Search Console export, the join walk-through shows the cleaning steps that stop keys from missing, and the pricing page shows what a thousand such calls would cost.
A note on sample size
Small samples lie. Sorry, but they do, and the effect is stronger when you split by band.
Mind the count. With only 40 domains, one outlier moves a band count by a visible margin. Score the whole export, not a convenience sample, since a call for up to 2,000 domains costs the same 1 credit as a call for two. The cheapest way to get a stable picture is to ask for everything and let cut() do the sorting afterwards.
Before you trust the output
- Deduplicate domains and strip www before the call, every time
- Log the credits field of the response
- Store the snapshot date next to the scores
- Keep the threshold table in version control
- Say in the report that DR is our own metric, not Moz DA