Runbook
A monthly SEO backlink check for clients, built in Sheets
Clients want one tab that says what changed since last month. You want a report that costs almost nothing to produce and survives a holiday. Both are possible.
What a one-page report actually needs
Most client reports fail by being long. Nobody reads page nine. A good seo backlink check fits on one tab and answers three questions: did referring domains go up, which pages gained or lost them, and what should we do next.
Our index refreshes about once a month, so a monthly rhythm matches it, while weekly runs would mostly return the same rows and cost a little for nothing. Cheap, but pointless. Pick the third day of the month and move on.
Write the snapshot date at the top of the tab, because a report without a date invites arguments about whether a link was there yesterday. One cell. Never skip it.
The sheet can be built from the triage bands and the join steps, so none of this is new machinery, and a competent analyst can finish it in under an hour. No new tools.
The tab, section by section
- Headline: referring domains this month, last month, and the change.
- Top 10 pages by referring domains, with the same pages from last month beside them.
- New and lost domains, from a diff of two
refdomainspulls. - Anchor mix: branded, URL, generic, and everything else, in four numbers.
- Search Console clicks for the same 10 pages, so links and traffic sit together.
- A footer with the snapshot month and the sources, in one sentence.
Cost per client, from the credit price
| Section | API action | Credits | Dollars |
|---|---|---|---|
| Referring domains | refdomains | 2 | $0.0002 |
| Top pages | toppages | 2 | $0.0002 |
| Anchors | anchors | 2 | $0.0002 |
| DR against peers (up to 20 domains) | compare | 1 | $0.0001 |
| Client total, with one compare | 7 | $0.0007 |
Words to put under the numbers
Numbers alone start arguments. Add one sentence per section saying what it means, written for someone who has never opened Search Console, because plain wording beats a chart almost every time. Keep it short.
For the headline, say what moved and by how much. Something like: referring domains rose from 212 to 219 between the October and November snapshots, which is only an example of tone, and your own figures replace it. Keep it to two lines.
For lost domains, resist alarm. A domain missing from one monthly pass may have been missed by the crawler, or the page may have moved. Re-check the list the next month before you tell a client that anything was lost.
For anchors, group the rows instead of listing them. Branded, bare URL, generic such as click here, and the rest is enough, since clients rarely want 400 lines of anchor text but do want to know whether the exact-match share looks odd. Four buckets.
The footer carries the honest part. Name the snapshot month, say the index is our own and refreshes roughly monthly, and note that Search Console is the source for clicks, because two sentences in small type save a lot of emails. Always include them.
Schedule the pull once
Add this beside the pull function from the join walkthrough. Time-driven triggers are part of Apps Script.
function scheduleMonthly() {
ScriptApp.newTrigger('pullTopPages')
.timeBased()
.onMonthDay(3)
.atHour(6)
.create();
}
// Run scheduleMonthly() once by hand. Then rename the tab:
// links -> links-YYYY-MM before the next run overwrites it.A fair warning
This is a trend report, not a monitor
It tells a client where the profile stands once a month. It will not warn anyone the day a link disappears. For that, use alerts from a daily crawler such as Ahrefs or Semrush, and keep this sheet for the cheap monthly picture.