Join backlinks with Search Console exports, step by step
Search Console lists who links to you, but not how strong they are. One call per export fills that gap. Every number below is an invented example.
CranSEO research team ·
The setup, and why a join helps
Search Console shows linking sites. It does not rank them.
That is the gap. Export the top linking sites as a CSV, and you have a column of domains but no sense of weight, which makes any report built on it a list rather than an argument.
Our bulk_dr action scores the whole column in one call, so the join is a single left_join() on the domain. Search Console shows only a sample of the links it knows, so treat the export as a floor, not a total.
The join in five steps
Export
Download the linking-sites table from the Links report in Search Console. Read it with readr::read_csv().
Clean
Lowercase, strip www, drop duplicates. Mismatched keys are the usual reason a join silently returns NA.
Score
Send the unique domains to bulk_dr in chunks of 2,000. One call is 1 credit.
Join
left_join(links, scores, by = "domain"). Check the row count before and after.
Flag
Cut into the DR bands from our threshold table and list the rows your export lacks a score for.
Hypothetical result, 8 rows of an invented export
| domain (invented) | Links in export | DR (invented) | Band |
|---|---|---|---|
| example-news.test | 14 | 71 | Strong |
| example-blog.test | 3 | 34 | Established |
| example-shop.test | 2 | 18 | Small |
| example-forum.test | 40 | 9 | Thin |
| example-uni.test | 1 | 62 | Strong |
| example-dir.test | 27 | 4 | Thin |
| example-local.test | 5 | 22 | Small |
| example-wiki.test | 1 | 83 | Very large |
What the example tells you, and what it does not
Look at the forum. Forty links, DR 9. Volume without weight.
In this made-up case two rows with one link each outrank 67 links from thin sites, which is the pattern you should look for in your own data. It reflects how DR works, not a promise about rankings.
Do not read causation into it. Google has said links are one signal among many, and since the March 2024 core update the picture has only grown busier.
Join questions
Why do some rows come back without a score?
Usually the key differs: a trailing slash, a www prefix or different casing. Clean the strings first. If it still fails, the domain may simply be absent from the monthly index we crawled.
Can I use intersect instead?
Yes, for a different question. intersect takes 2 to 10 domains and returns sites linking to several of them, which suits competitor gap analysis rather than scoring your own export.
How many credits does the join cost?
For 5,000 unique domains, three bulk_dr calls cost 3 credits, about $0.0003. The pull is trivial next to the time you spend cleaning the export.
Cleaning rules that save the join
Keys break first. Always.
Lowercase every domain, remove a leading www, drop trailing dots and slashes, and collapse duplicates before the call, because one stray capital letter turns a good match into an NA that you may not notice until a client asks.
Keep the raw export untouched in its own file, write the cleaned table next to it, and record the export date in the file name. The monthly runbook explains why dated files matter, and the bulk scoring page has the request code to reuse.
Finally, count your rows. If the export has 1,200 unique domains and the scored table has 1,150, find the 50 before you chart anything; the glossary lists what the action returns, and the decision tree tells you when another source is the better answer.