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
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]
| Placement | Target page | Status | Total cost | Referral sessions | Owner |
|---|---|---|---|---|---|
| [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.
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 allLink 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]
| Placement | Target page | Status | Total cost | Referral sessions | Owner |
|---|---|---|---|---|---|
| [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.
| Status | Means | Counts as live? |
|---|---|---|
| Approved | Publisher, page, anchor, rel and cost signed off. Not published yet | No |
| In progress | Draft written or sent, waiting for the publisher | No |
| Live | URL loads, link is in the HTML, target and rel match the agreement | Yes |
| Fix requested | Published, but wrong target, wrong anchor or missing rel | No, until fixed |
| Lost | Was live, now removed, changed or the page is gone | No. Note the date lost |
| Rejected | Dropped before publishing, with a reason | No |
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
- Open Reports, then Acquisition, then Traffic acquisition.
- Change the main dimension to Session source / medium.
- Filter Session source to each publisher domain in the report.
- Set the date range from the day each link went live.
- 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.
| Claim | Can you show it? | How to word it |
|---|---|---|
| The link is live and correct | Yes, with a dated check | Live on [date], target and rel checked |
| The link sent visits | Yes, GA4 session source | [n] sessions from [publisher], [dates] |
| Those visits became leads | Yes, if source is in your CRM | [n] qualified leads with this source |
| The link raised a ranking | No, only a timeline | Position moved after the link went live. Other changes: [list] |
| The link raised organic traffic | No, only a timeline | Organic clicks to the page changed. Possible causes: [list] |
| Authority went up | Only 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_idAllowed 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
| Placement | Target page | Status | Total cost | Referral sessions | Owner |
|---|---|---|---|---|---|
| saltmarsh-paddlers.example/guides/first-sea-kayak/ | kelpmoor.example/guides/choosing-a-spray-deck/ | Live, earned, checked 2 Oct | EUR 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 Oct | EUR 380 | 41 (3 Aug to 30 Sep) | Link builder |
| harbourtrails.example/blog/winter-paddling/ | kelpmoor.example/guides/cold-water-layers/ | Lost on 19 Sep, page removed | EUR 290 | 17 (22 Jul to 18 Sep) | Account lead |
| gearlistdeals.example/outdoor/ | kelpmoor.example/ | Rejected: no rel on paid links | EUR 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
- Agree the status rules and the reporting period with the client before the campaign starts.
- Add one row per approved placement, including the ones that never went live.
- Re-check every live link in the period and write the date of each check.
- Copy spend from the budget tracker and work out cost per live placement.
- Pull GA4 referral sessions and key events per publisher, with the date range.
- Write the summary and one attribution note that says what you can't prove.
- 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.