seotools.pro Get started free

Link Building Campaign Report Template

The campaign ended. The client asks what they got for the money, and the report shows a list of links and a ranking chart nobody can explain.

This report starts with facts you can check: which placements were approved, which went live, what each cost and what state it is in today.

Then it shows what the links did that you can measure, like GA4 referral sessions and leads, and says plainly what you can't prove.

Inside: a fill-in report, status rules, a cost summary, a GA4 referral guide, an attribution limits sheet, a CSV header and a fictional example.

Format
Editable Word .docx
Length
7 variants · ~7 pages
Price
100% free
Setup
Copy or download

Get the editable Word doc in one click.

Free · No signup · Instant download

Works withSemrushSe Ranking
UOutreach & Link Building

Link Building Campaign Report Template

Link building campaign report

One row per approved placement. Report every row, not only the live ones. Rejected and lost rows stay in the report with a reason.

Campaign: [campaign or client] - Period: [start date] to [end date] - Report owner: [name] - Sent: [YYYY-MM-DD]

PlacementTarget pageStatusTotal costReferral sessionsOwner
[publisher + live URL][your page URL][approved / in progress / live / fix requested / lost / rejected][currency + total, all fees in][GA4 sessions + date range][name]
[placement][target][status][cost][sessions][name]
[placement][target][status][cost][sessions][name]

Campaign summary (top of the report)

  • Placements: approved [n] - live [n] - in progress [n] - lost or rejected [n]
  • Spend this period: [currency + total] - Cost per live placement: [total spend divided by live placements]
  • Referral sessions from live placements: [n] from [date range]
  • Key events from those sessions: [n + event names]
  • Qualified leads traced to a placement: [n, or none confirmed]
  • What this report can't claim: [one line, see the Attribution Limits variant]

Per-row detail (fill for every placement)

  • Approved on: [date, by whom] - Live on: [date first seen live]
  • Link check: target [matches / wrong], anchor [text], rel [none / sponsored / nofollow], page indexable [yes / no], checked [date]
  • Cost breakdown: [placement + writing + other fees]
  • Referral outcome: [sessions, key events, leads, date range]
  • Target page ranking note: [query, position before and after, dates]
  • Other changes to the target page: [content update, new internal links, none]
  • Attribution note: [what this row shows and what it doesn't]

Next action

  • Link builder: [name] - action: re-check every live and fix-requested row by [date]
  • Analyst: [name] - action: pull GA4 referral sessions and key events per publisher by [date]
  • Account owner: [name] - action: write the summary and attribution note by [date]
  • Budget owner: [name] - action: confirm spend matches the budget tracker by [date]

Completion check

  • Every approved placement has a row, including lost and rejected ones.
  • Every live row was re-checked in this period, with the date written down.
  • Spend in the report equals spend in the budget tracker, in one currency.
  • Referral numbers name the GA4 property, the date range and the filter used.
  • No row credits a ranking change to a link without noting other changes.
  • Each next action has one owner and one date.

This report covers one link campaign. Paste its summary into the link section of the Monthly SEO Report Template, which covers all SEO work.

Download free template

Why it works

Every link campaign report shows which placements went live, what they cost, the referral visits and leads they sent, and what the links can't prove.

  • Dated link checks and kept lost rows make the live count something the client can verify.
  • GA4 referral sessions per publisher give a direct outcome that doesn't depend on guessing ranking causes.
  • A written attribution note stops ranking moves being credited to links when the page also changed.

7 ready-to-use variants

Copy all

Link Building Campaign Report (fill-in)

When to use: One row per approved placement with status, cost, referral sessions and owner, plus a campaign summary, next actions and a completion check.

Link building campaign report

One row per approved placement. Report every row, not only the live ones. Rejected and lost rows stay in the report with a reason.

Campaign: [campaign or client] - Period: [start date] to [end date] - Report owner: [name] - Sent: [YYYY-MM-DD]

PlacementTarget pageStatusTotal costReferral sessionsOwner
[publisher + live URL][your page URL][approved / in progress / live / fix requested / lost / rejected][currency + total, all fees in][GA4 sessions + date range][name]
[placement][target][status][cost][sessions][name]
[placement][target][status][cost][sessions][name]

Campaign summary (top of the report)

  • Placements: approved [n] - live [n] - in progress [n] - lost or rejected [n]
  • Spend this period: [currency + total] - Cost per live placement: [total spend divided by live placements]
  • Referral sessions from live placements: [n] from [date range]
  • Key events from those sessions: [n + event names]
  • Qualified leads traced to a placement: [n, or none confirmed]
  • What this report can't claim: [one line, see the Attribution Limits variant]

Per-row detail (fill for every placement)

  • Approved on: [date, by whom] - Live on: [date first seen live]
  • Link check: target [matches / wrong], anchor [text], rel [none / sponsored / nofollow], page indexable [yes / no], checked [date]
  • Cost breakdown: [placement + writing + other fees]
  • Referral outcome: [sessions, key events, leads, date range]
  • Target page ranking note: [query, position before and after, dates]
  • Other changes to the target page: [content update, new internal links, none]
  • Attribution note: [what this row shows and what it doesn't]

Next action

  • Link builder: [name] - action: re-check every live and fix-requested row by [date]
  • Analyst: [name] - action: pull GA4 referral sessions and key events per publisher by [date]
  • Account owner: [name] - action: write the summary and attribution note by [date]
  • Budget owner: [name] - action: confirm spend matches the budget tracker by [date]

Completion check

  • Every approved placement has a row, including lost and rejected ones.
  • Every live row was re-checked in this period, with the date written down.
  • Spend in the report equals spend in the budget tracker, in one currency.
  • Referral numbers name the GA4 property, the date range and the filter used.
  • No row credits a ranking change to a link without noting other changes.
  • Each next action has one owner and one date.

This report covers one link campaign. Paste its summary into the link section of the Monthly SEO Report Template, which covers all SEO work.

Placement Status Rules

When to use: Define what approved, live, lost and rejected mean, so the counts in the report can be checked by anyone.

Placement status rules

A report is only as honest as its status column. Agree these rules before the campaign starts and use them in every report.

StatusMeansCounts as live?
ApprovedPublisher, page, anchor, rel and cost signed off. Not published yetNo
In progressDraft written or sent, waiting for the publisherNo
LiveURL loads, link is in the HTML, target and rel match the agreementYes
Fix requestedPublished, but wrong target, wrong anchor or missing relNo, until fixed
LostWas live, now removed, changed or the page is goneNo. Note the date lost
RejectedDropped before publishing, with a reasonNo

Rules

  • A link is live on the day you checked it, not on the day the publisher said so.
  • Paid placements count as live only with rel="sponsored" or rel="nofollow" on the link.
  • Lost rows stay in the report. Hiding them makes the next report look worse.
  • A replaced link gets a new row that points to the old row ID.

Google's spam policies list buying or selling links for ranking as link spam. Paid links qualified with rel="nofollow" or rel="sponsored" are fine. Checked 12 November 2026.

Check each live URL with the Backlink Delivery QA Checklist Template, then move it to the Backlink Tracker Template for monthly re-checks.

Cost Summary for the Report

When to use: Show spend per placement and per live link without turning the report into an invoice log.

Cost summary for the report

The report shows totals and cost per live placement. Invoices, payment dates and currencies live in the budget tracker. The report quotes it.

Cost fields

  • Spend this period: [currency + total] from [budget tracker tab or file]
  • Spend to date: [currency + total] of [approved budget]
  • Live placements to date: [n]
  • Cost per live placement: [spend to date divided by live placements]
  • Paid for but not live: [rows + amount + replacement terms]
  • Non-cash cost: [team hours, content produced for outreach]

How to read cost per placement

  • Use live placements, not approved ones. Paying for a link that never went live is a cost too.
  • Lost links still count in spend. Write whether the vendor replaced them.
  • Earned links have a cost as well: the hours and the content behind the outreach.
  • Don't compare cost per link across campaigns with different goals or link types.

Track every fee, currency and payment in the Link Building Budget Tracker Template. Score vendors before you buy with the Link Building Vendor Scorecard.

Referral Outcomes in GA4

When to use: Pull sessions, key events and leads from each publisher in GA4, the one link outcome you can measure directly.

Referral outcomes in GA4

A click from a placement to your site is the most direct thing a link does. GA4 records it with the publisher as the session source.

How to pull it

  1. Open Reports, then Acquisition, then Traffic acquisition.
  2. Change the main dimension to Session source / medium.
  3. Filter Session source to each publisher domain in the report.
  4. Set the date range from the day each link went live.
  5. Read sessions, engaged sessions and key events per row.

What Google's docs say (checked 12 November 2026)

  • Session source / medium is the source and medium of a new session.
  • The Referral channel covers visits via non-ad links on other sites or apps. The rule is medium referral, app or link.
  • Visits from AI assistants like ChatGPT now have their own AI Assistant channel, not Referral.

Sources: GA4 traffic acquisition report and GA4 default channel group.

Limits of referral data

  • Visits with no referrer, such as some in-app browsers or copied links, can land in Direct.
  • Zero sessions does not mean the link is dead. Check the link itself.
  • Nofollow and sponsored links still send clicks. Report their referrals too.

From sessions to leads

Match leads to referral sessions by landing page and date, then log the lead source in your CRM. A CRM like crmsoftware.pro keeps the source next to the deal stage.

Attribution Limits Sheet

When to use: Decide what the report can claim, what it can only suggest, and how to word each one for the client.

Attribution limits sheet

Links rarely map one to one to rankings. Many things move a page at once. Say what you can show, and label the rest as a possible link effect.

ClaimCan you show it?How to word it
The link is live and correctYes, with a dated checkLive on [date], target and rel checked
The link sent visitsYes, GA4 session source[n] sessions from [publisher], [dates]
Those visits became leadsYes, if source is in your CRM[n] qualified leads with this source
The link raised a rankingNo, only a timelinePosition moved after the link went live. Other changes: [list]
The link raised organic trafficNo, only a timelineOrganic clicks to the page changed. Possible causes: [list]
Authority went upOnly as a third-party estimate[Tool] score changed. It is not a Google metric

Before you write a ranking note

  • List content updates, internal links and technical fixes on the target page in the same period.
  • Note any confirmed Google update dates in the period.
  • Compare against a similar page that got no new links, if you have one.

Data source limits

  • Google's Search Console Links report shows a sample of links, not all of them, and does not say if a link is nofollow. Checked 12 November 2026.
  • Third-party backlink tools find links on their own crawl schedule. Some links show up late or never.

Check whether a target page is in Google's top 10, on demand, in the Rank Tracker. See your domain's strongest links, anchors and first-seen dates in the Backlink Analyzer.

Want a second pair of eyes on what your campaign can claim? Book a free consultation with Anatolii Ulitovskyi, or compare plans on the pricing page.

Spreadsheet Header (CSV)

When to use: A paste-ready header row and allowed values to keep the campaign report in Google Sheets or Excel.

Paste-ready spreadsheet header

Paste this row into cell A1 of Google Sheets or Excel, then split text to columns by comma. One row per approved placement.

row_id,campaign,publisher_domain,live_url,target_url,anchor_text,link_type,rel_found,approved_date,approved_by,live_date,last_checked,status,status_reason,total_cost,currency,paid_or_earned,ga4_property,referral_sessions,engaged_sessions,key_events,qualified_leads,date_range,ranking_query,position_before,position_after,other_page_changes,attribution_note,owner,next_action,next_action_due,replaces_row_id

Allowed values

  • link_type: guest_article, sponsored_article, editorial_mention, resource_list, link_insertion, digital_pr
  • rel_found: none, sponsored, nofollow, ugc, sponsored_nofollow
  • status: approved, in_progress, live, fix_requested, lost, rejected
  • paid_or_earned: paid, earned, exchanged

Sheet tips

  • Flag rows where paid_or_earned is paid and rel_found is none.
  • Flag live rows where last_checked is older than 30 days.
  • Sum total_cost per currency before you convert. Write the rate and date.
  • Keep date_range next to every session number, so nobody compares different periods.

Build next quarter's prospect list from rivals' links with the link gap in Competitor Analysis.

Worked Example (fictional paddle gear shop)

When to use: A filled report for an invented sea kayak gear shop: four placements, one lost, referral sessions and an honest attribution note.

Worked example: Kelpmoor paddle gear, Q3 campaign

Example only. Kelpmoor and the agency Wrenhaze are invented. The publishers, URLs, costs, sessions and dates are made up to show a filled-in report.

Campaign: Kelpmoor Q3 links - Period: 1 Jul to 30 Sep 2026 - Report owner: Wrenhaze account lead - Sent: 6 Oct 2026

PlacementTarget pageStatusTotal costReferral sessionsOwner
saltmarsh-paddlers.example/guides/first-sea-kayak/kelpmoor.example/guides/choosing-a-spray-deck/Live, earned, checked 2 OctEUR 0 (staff time only)212 (14 Jul to 30 Sep)Link builder
coastrowing-weekly.example/kit/drybags-tested/kelpmoor.example/drybags/Live, rel="sponsored", checked 2 OctEUR 38041 (3 Aug to 30 Sep)Link builder
harbourtrails.example/blog/winter-paddling/kelpmoor.example/guides/cold-water-layers/Lost on 19 Sep, page removedEUR 29017 (22 Jul to 18 Sep)Account lead
gearlistdeals.example/outdoor/kelpmoor.example/Rejected: no rel on paid linksEUR 0-Link builder

Summary as sent

  • Placements: 4 approved, 2 live, 1 lost, 1 rejected.
  • Spend: EUR 670. Cost per live placement: EUR 335. The lost row is waiting for a replacement under the vendor's terms.
  • Referral sessions: 270 across the three placements that went live, GA4 property "kelpmoor.example".
  • Key events: 3 purchases from those sessions.
  • Ranking note: the spray deck guide was not in Google's top 10 for "spray deck sizing" in July and was in the top 10 on 1 Oct. The guide was also updated on 20 Aug, so we can't credit the link alone.

Why this works

  • The lost and rejected rows are in the report, with dates and reasons.
  • Every session number has a date range and a property name.
  • The ranking move is reported as a timeline with the other change named.

How to use this template

  1. Agree the status rules and the reporting period with the client before the campaign starts.
  2. Add one row per approved placement, including the ones that never went live.
  3. Re-check every live link in the period and write the date of each check.
  4. Copy spend from the budget tracker and work out cost per live placement.
  5. Pull GA4 referral sessions and key events per publisher, with the date range.
  6. Write the summary and one attribution note that says what you can't prove.
  7. Assign each next action to one owner with a date, then send the report.

Pro tips

  • Lead the report with live placements and referral outcomes. Put third-party scores in an appendix.
  • Keep lost and rejected rows. They explain spend and stop the same mistakes next quarter.
  • Write the GA4 date range next to every session number. Links go live on different days.
  • When a ranking moves, list every other change on that page in the same period.
  • Send the report before a call and walk through it. Questions about attribution are easier live.

Frequently asked questions

What goes in a link building campaign report?

Approved and live placements, their status, cost, referral sessions and leads from GA4, a ranking note per target page, and a plain note on what the links can't prove.

How is it different from a monthly SEO report?

A monthly SEO report covers all SEO work. This report covers one link campaign, placement by placement. Its summary can feed the link section of the monthly report.

Can I prove a link improved rankings?

Not on its own. Rankings move for many reasons. You can show a timeline: when the link went live, how the position changed, and what else changed on the page.

How do I measure referral traffic from a link?

In GA4, open Traffic acquisition, set the dimension to Session source / medium and filter by the publisher domain. Use a date range that starts when the link went live.

Should paid placements be in the report?

Yes, with their cost and rel value. Google says paid links should carry rel="sponsored" or rel="nofollow". Flag any paid row without it.