Back to blog

Link Building Ledger: Track “Can Publish” vs “Already Published”

By LincSpider Team · 2026-07-28 · 12 min

Link building ledger with availability and published columns
Link building ledger with availability and published columns

A link building tracker spreadsheet fails the moment it treats every imported domain as “ready to spam.” Raw competitor exports mix Wikipedia, dead forums, closed blogs, and gems you could actually comment on tomorrow. Without two separate statuses—can we publish here? and did we already publish?—you either repeat work or abandon good sources because one attempt failed technically.

This guide builds a link building ledger around availability vs published state. It fits solo operators and small teams who outgrew memory but do not need a $400/month CRM. The pattern works in Google Sheets, Notion tables, or a lightweight internal tool—as long as you respect the gates.

Related: Expand Backlinks from Competitor Link Pages, How to Find Blog Comment Backlink Opportunities, Blog Comment Backlink Checklist.


Why Two Ledgers Beat One Messy Sheet

You are really running two books:

  1. Your sites — domains you promote (client list or your own portfolio).
  2. Source sites — places you might earn a link, plus which of your sites already appear there.

Confusing these creates classic errors:

MistakeSymptom
Treating Ahrefs export count as “links built”Inflated ego, empty queue
One checkbox for “done”Cannot tell “blocked” from “finished”
No per-site rowDuplicate submissions to same blog

Your execution ledger counts what you attempted and logged. Crawler-reported backlinks lag and include junk you never wanted. Keep both numbers—just never merge them into one KPI.

On r/bigseo:

Say you decide to embark on a linkbuilding effort for yourself or a client - what tool(s) do you use to keep track of what you're building to where? Or

The honest answers in that thread are boring in a good way: Sheets, labels, weekly review—not magic software.


Availability vs Published: Two Status Fields

Split status for every source × your site pair:

Availability (can we publish here?)

Answers: “Is this source confirmed as a place we could place a link if we had the skill/time?”

ValueMeaning
AvailableVetted; you can attempt now
UnavailableConfirmed for now—you lack access, closed comments, wrong niche, etc.
Pending reviewImported but not human-opened yet

Unavailable is not “trash forever.” Maybe you cannot pass a captcha today, or the site wants a paid listing you rejected. Mark unavailable so you stop burning cycles—revisit when your capabilities change.

Published (did we already publish?)

Answers: “For this source and this site, have we already submitted our placement?”

ValueMeaning
Not publishedQueue candidate
PublishedAttempt logged (comment sent, directory submitted, email sent)
Approved / liveOptional fourth step when you verify the link or comment visible

Do not merge “unavailable” and “published.” A source can be available globally but published for Site A and not Site B.


Import Staging: Don’t Trust Raw Exports

Competitor CSVs from Semrush, Ahrefs, or Bing exports are discovery inputs, not tasks.

Workflow:

  1. Import to staging tab — all domains/URLs, untouched ego.
  2. Open each candidate — comment form? directory with sane guidelines? login wall?
  3. Promote to source library only after a human says “we can publish here.”

Why? Exports include domains you will never execute on—Wikipedia, government sites, aggregators that ban commercial comments. Skipping staging means your “available” queue fills with shame.

On r/SEO:

Most of the work is manually done using efficient processes. We of course use tools like ahrefs etc to get a glimpse of things like metrics

Ahrefs gives glimpses. Your ledger gives commitments.

Batch tip: when importing multiple competitor files, dedupe on registrable domain first, then URL if you track page-level comments.


Filter Lists and Explore Queue

Two supporting lists save hours:

Filter list (stop revisiting dead ends)

Domains that appear in every export but fail your rules—pure directories you reject, spam pits, wrong language. Store with:

  • Exact match (badfarm.com)
  • Wildcard when whole subdomains are junk (*.spamhost.net)

On re-import, auto-skip filtered domains. Manual one-click filter from staging is enough early on; regex/wildcards when repeat noise grows.

Explore queue (learn now, link later)

Some sites are not link targets today but useful for research—SaaS directories with traffic data, blogs whose content strategy you want to copy. Park them in Explore, not Available. Otherwise Monday’s “publish queue” fills with reading homework.

On r/linkbuilding:

Most free backlink lists and profile links are time sinks. Low DR directories rarely move rankings. It is usually better to invest time in relationship based outreach.

Your ledger should make time sinks visible before they eat Fridays.


Spreadsheet Columns You Can Copy Today

Tab: Sources (master library)

ColumnExampleNotes
source_urlhttps://example.com/blog/seo-tipsCanonical page
source_domainexample.comDedupe key
typeblog_comment / directory / guestRoutes workflow
availabilityavailable / unavailable / pendingGate
vet_notesauthor replies; captchaFuture-you
dr42Optional manual
imported_fromcompetitor-a export 2026-07Traceability

Tab: Execution (site × source)

ColumnExampleNotes
your_sitemysaas.comRow key
source_url(FK to Sources)
publishednot / yes / livePrevents duplicates
date_submitted2026-07-20Cadence tracking
copy_snippetShort comment textQuick resubmit variants
outcomepending / approved / removedLearn patterns

Tab: Staging

Raw imports only. Weekly ritual: review 20–40 rows, promote or filter, never let staging exceed one month of unprocessed rows.

On r/seogrowth:

I'm contemplating the idea of building a backlink tracking tool. However, I'm wondering how much of that functionality is already handled

If your sheet answers that question, you do not need another SaaS layer yet.


Backup Before You Add Features

The source library is an asset. Losing two years of vetted domains because a laptop died is not a rite of passage.

Minimum discipline:

  • Weekly CSV export to cloud storage or a private git repo
  • Version filenames with date (sources-2026-07-25.csv)
  • Document which tab is source of truth if you mirror to Notion

Fancy dashboards without backups are performance art. Agency threads on r/SEO emphasize teams and process at scale—but solo operators still lose everything when they skip export.

Optional: store DR/traffic manually or via API, but pick one and note the refresh date. Half-updated metrics are worse than blank cells.


Weekly Review Ritual (15 Minutes That Save Hours)

Without a cadence, spreadsheets become graveyards. Block 15 minutes every Friday:

  1. Staging drain — promote or filter at least 20 rows; zero is not allowed if imports happened.
  2. Duplicate scan — same source_domain with conflicting availability? Resolve.
  3. Published → live check — spot-verify three random published=yes rows; update outcome column.
  4. Filter list hygiene — one new domain added from repeated pain this week.

Agency operators on r/SEO still run teams and VAs for monotonous steps at scale. Solo you are the team—but the ritual is the same: review beats hoping the sheet stays honest.

When a client or stakeholder asks “how many links this month,” answer from execution tab published dates, not Ahrefs’ lagging graph. That single habit prevents half the arguments about whether link building “worked.”


From Ledger Rows to Chrome Execution

A clean available + not published row is still not a link. Execution needs context on the live page.

Weekly loop:

  1. Filter execution tab: availability=available, published=not, type blog_comment.
  2. Open URLs; confirm form still open.
  3. Draft a comment that adds value—not a URL dump.
  4. Mark published=yes immediately after submit; verify later for live.

LincSpider sits on the browser step: discover related pages from a seed, generate situational drafts, prefill fields—you approve each action. It does not replace your ledger; it reduces friction after your sheet says go. See /en/pricing for credits. Install walkthrough: LincSpider Chrome Extension Guide.

When directories appear in staging, filter with Directory Backlinks: Filter Checklist Before You Pay before you mark them available.


FAQ

Do I need a backlink CRM or a spreadsheet?

Start with a spreadsheet and clear columns. CRMs help large agencies with assignments; most solo operators need discipline, not another login (r/bigseo tracking thread).

What is “availability” vs “published”?

Availability = confirmed we can publish on this source. Published = we already did for a given site. Keep them separate.

Should I import competitor exports directly into my queue?

No. Stage first, human-vet, then promote. Raw exports include high-wall domains and noise.

How often should I back up my source list?

At least weekly if you add rows regularly. Treat loss like losing customer data.

Can LincSpider replace my spreadsheet?

No. LincSpider executes vetted rows in Chrome; your ledger decides what is eligible and what is done.

What if a source becomes unavailable after I published?

Mark availability unavailable for future sites; keep published history for the site that already placed. Notes field explains why.


Wrapping up

Run two statuses, not one checkbox: availability gates quality; published prevents duplicates. Stage imports, maintain filter and explore lists, back up weekly, then execute in the browser. When a row is ready, LincSpider helps you draft and prefill—without auto-posting or replacing your ledger.