Run a Backlink Audit
Step-by-step guide to running an AI-powered backlink audit using CSV upload or Google Search Console import.
A backlink audit is the entry point of every TraceLinker workflow. This guide covers running one end to end, including the trade-offs between CSV upload and GSC import, deduplication, and what to do with the results.
When to run an audit
- Onboarding a new client - import their backlink list from Ahrefs/Semrush export or GSC, get an AI scored profile in one screen.
- Vetting a backlink supplier - paste the CSV they delivered, see which placements are real, valuable, and not toxic.
- Refreshing a profile - rerun an audit on the same CSV monthly to track which placements changed or died.
- Pre-disavow review - audit a profile to identify the toxic candidates before generating the disavow file.
Quotas
| Plan | Audits / month | Max items per audit |
|---|---|---|
| Free | 1 | 100 |
| Pro | 5 | 1,000 |
| Agency | 50 | 10,000 |
If you hit the audit count cap mid-month, you'll see a 402 error with an upgrade prompt. Items per audit is a hard limit per submission - splitting a 5,000-link list across two Pro audits is fine, but exceeds the per-audit cap.
Method 1 - CSV upload
The most flexible input. Works with exports from any tool (Ahrefs, Semrush, Linkody, Monitor Backlinks, GSC manual export, your own scrape).
Open the New Audit form
From the dashboard, click Audits in the sidebar, then + New Audit in the top right.

Choose CSV upload
The form has two tabs: CSV and Google Search Console. CSV is the default.

Prepare your CSV
The required columns are:
source_url,target_url,anchor_textsource_url is where the link lives. target_url is where it points (your domain or a specific page). anchor_text is optional - we extract it from the page if missing.
Extra columns (like Ahrefs Domain Rating, URL Rating, External Backlinks) are ignored, so you can paste any export verbatim. See the CSV Format reference for converting common exports.
Set the target domain
Above the CSV box, enter the target domain (e.g. yoursite.com). This is what we use to filter links during audit - any source URL we crawl will only contribute discovered backlinks if at least one anchor on the page points at this domain (or a subdomain or path under it).
Paste or upload
Either paste your CSV directly into the textarea, or drag a .csv file onto the upload zone. The form previews a row count before you submit.
Click Start audit
The form does an immediate insert into the backlink_audits table with status queued, then redirects you to the detail page. The audit runs server-side and is unaffected by you closing the tab.
Method 2 - Google Search Console import
Faster for sites where GSC has good link coverage. Requires GSC connected first - see GSC Integration.
Switch to the GSC tab
In the New Audit form, click the Google Search Console tab.

Pick a verified property
The dropdown shows every Search Console property your connected Google account has access to. Pick the one matching your target domain.
Choose a date range
GSC stores 16 months of link data. Default is the most recent 90 days, which covers active changes without pulling ancient links.
Click Pull from GSC
We call the GSC API, page through results (max 1,000 per request, paginated), and turn each row into an audit input. After import, the rest of the flow is identical to CSV - you land on the audit detail page with progress streaming.
GSC vs CSV trade-offs:
| GSC | CSV | |
|---|---|---|
| Coverage | Only what Google indexes | Whatever your tool found |
| Anchor text | Sometimes missing | Usually included |
| Timing | Lags 2-3 days | As fresh as your export |
| Setup | One-time OAuth | None |
| Cost | Free | Free |
Best practice: GSC for routine refreshes, CSV when migrating from another tool or getting a one-time supplier delivery.
Watching the audit run
Once submitted, you land on the detail page at /dashboard/audits/{id}. The page polls every 2 seconds while the audit is running.
📸 Audit detail page mid-run with progress bar at 47% and recent rows
What you see while running:
- Progress bar - percentage complete (
processed / total). - Status banner -
queued,processing,done, orfailedwith an error message. - Recent rows - the last 5 scored links stream in live so you can sanity-check early.
- Cancel button - stops processing and marks the audit as
cancelled.
Average runtime: about 5 seconds per link including crawl + AI score. A 100-link audit is roughly 1 minute. A 1,000-link audit is closer to 8 minutes.
You don't have to wait. Close the tab, do other work. An email arrives when it finishes (default setting).
Reading the results table
Once status flips to done, the table fills with one row per discovered backlink:
📸 Audit detail completed with full results table
| Column | What it shows |
|---|---|
| Source URL | The page on which the link was found. Click to open in a new tab. |
| Target | The page on your site the link points at. |
| Anchor | Anchor text. Long anchors are truncated with a tooltip. |
| Status | alive (link found), changed (target changed since last seen), dead (no anchor found). |
| Score | 1-100 with a colour band: red below 30, amber 30-69, green ≥70. |
| Reasoning | One sentence explaining the score. Click the row to see the full thing. |
| Toxicity | safe / caution / toxic badge. |
| Actions | Number of AI-suggested actions (3-5 per row). Click to expand. |
Sortable columns: Score, Toxicity, Status. Filterable: by status, score range, toxicity flag.
Acting on results
Top of the page has bulk-action buttons:
📸 Bulk action toolbar above results table
- Move to monitoring - takes selected rows (default: rows scoring 70+) and adds them to your monitored links list.
- Download disavow.txt - generates a Google-ready file from rows where
is_toxic = true. See Disavow Toxic Links. - Compose outreach - opens the outreach modal for selected low-score rows. See Reclaim Lost Links.
- Export CSV - downloads the full results table for sharing or archive.
Rerunning an audit
You can rerun any audit from the detail page (button next to Export). A rerun creates a new audit row pointing at the same input, then crawls and scores everything fresh. Because the originals are kept, you can compare snapshots over time.
This is the easiest way to spot:
- Links that decayed (score dropped, status flipped).
- Links that went dead but you missed because they weren't in monitoring.
- New links Google indexed that weren't in last month's GSC pull.
Troubleshooting
"No backlinks discovered" The audit ran but no source URL contained a link to your target domain. Check:
- Is
target_urlcorrect? Common typo: missing protocol, wrong subdomain. - Are the source URLs reachable? If they all 404, you'll see them as
deadrows but no scores.
Audit stuck at "queued" for more than a minute The worker may be backlogged on the free shared tier. Refresh - if still queued after 3 minutes, file a bug. Pro and Agency get higher worker priority.
"Failed: rate limited by source"
Some target sites block rapid crawls (Cloudflare bot challenge). The audit completed everything it could; the blocked rows show status=failed. You can retry just those rows via the row dropdown.
Score column shows "—" The DeepSeek API call failed for that row (rate limit, timeout). Click Rescore in the row dropdown to retry that single row.
Next
- Set Up Monitoring - what to do with the rows scoring 70+.
- Disavow Toxic Links - what to do with the rows flagged toxic.
- AI Scoring Methodology - what the score really means.
- CSV Format - converting Ahrefs/Semrush exports.