Skip to content

Sheets + Apps Script

Backlink track in Sheets: one column, 2,000 domains

Paste domains in column A and read DR in column B. The formula works offline, and the script fetches the real numbers in a single call.

The offline formula first

If you already know a domain's referring-domain count, you do not need an API at all. Put the count in B2 and the DR follows from the public formula.

=ROUND(100*LN(B2+1)/LN(20000000)) gives it. That is the same log scale the index uses, so 1,000 referring domains lands near 41 and 100,000 near 68. Treat the result as our own metric, never as Ahrefs DR or Moz DA. Fill the sheet down with the fill handle and every row recalculates in a blink.

Threshold table: what the DR number means for a donor

Values from the formula above, rounded. The flags are our rule of thumb for a sheet, not a Google signal.
Ref domainsDRFlag in the sheetAction
1014RedSkip unless the page is very relevant
10027AmberCheck traffic and topic by hand
1,00041GreenFine for most placements
10,00055Green+Worth a proper outreach
100,00068TopRare, expect it to be hard
1,000,00082TopMedia-grade, not a cold-email target

Wire up the script

  1. 1

    Open the editor

    In the sheet choose Extensions, then Apps Script. Delete the stub function.

  2. 2

    Paste the code below

    Put your key in the script properties rather than in the code, so a shared sheet does not leak it.

  3. 3

    Run once and read the log

    The first run prints the raw JSON. Look at its shape and map the right field into column B before you scale up.

  4. 4

    Add a menu or a trigger

    Run it by hand when you add rows, or set a monthly trigger that matches the index refresh.

Apps Script, one call for the whole column

Costs 1 credit per run for up to 2,000 domains.

javascript
function fetchDr() {
  const sh = SpreadsheetApp.getActiveSheet();
  const last = sh.getLastRow();
  const domains = sh.getRange(2, 1, last - 1, 1).getValues().flat().filter(String);
  const key = PropertiesService.getScriptProperties().getProperty('QL_KEY');
  const url = 'https://quicklinky.com/api.php?action=bulk_dr&domains=' +
    encodeURIComponent(domains.join(',')) + '&key=' + key;
  const res = UrlFetchApp.fetch(url, {muteHttpExceptions: true});
  Logger.log(res.getResponseCode() + ' ' + res.getContentText().slice(0, 600));
}

A column of 2,000 in one breath

Here is the shape of a good backlink track sheet. Column A holds bare domains, column B the DR, column C the date of the pull, and column D a flag from the table above. One monthly run refreshes the lot.

Why monthly? The index is rebuilt about once a month, so weekly pulls mostly return the same numbers. Fine. Spend the spare weeks on reading the red rows instead.

If you track more than 2,000 domains, split the list in blocks of 2,000. Ten blocks are ten credits, which is $0.001.

Sheet hygiene

  • Strip protocols and paths: use the bare host such as example.com
  • Keep each run under 2,000 domains, because that is the per-call cap
  • Stamp the pull date in a cell, since the index moves monthly
  • Never paste the key into a cell of a sheet you share

Sheet questions

Can I use IMPORTDATA or IMPORTXML instead?
Not reliably. IMPORTDATA expects CSV and the API returns JSON, and a key in a cell formula would be visible to every editor. Apps Script keeps the key in script properties, which is the safer route.
How many credits does a monthly refresh of 500 domains take?
One credit, or $0.0001, because bulk_dr bills per call and accepts up to 2,000 domains. The cost page has the rest of the arithmetic.
Does it work in Excel?
The DR formula does, since LN and ROUND exist there too. The Apps Script part does not. In Excel, use Power Query or the curl lines and paste the results.