CSV Format
The exact CSV format TraceLinker expects, plus converters for Ahrefs, Semrush, Moz, and Linkody exports.
This page is the canonical CSV format reference for audit and competitor uploads, plus how to convert exports from common SEO tools.
Required columns
The minimum CSV schema is three columns:
source_url,target_url,anchor_text
https://example.com/blog/post,https://yoursite.com/landing,best widget| Column | Required | Notes |
|---|---|---|
| source_url | Yes | Full URL of the page hosting the link. Include protocol (http:// or https://). |
| target_url | Yes | Full URL the link should point at. |
| anchor_text | No | Anchor text. If empty, we extract from the page during crawl. |
Extra columns are ignored, so paste any export verbatim. The header row is required - we use the column names, not positions.
Optional columns
If you provide these, we use them. Otherwise we extract from the source page.
| Column | What it does |
|---|---|
| rel | Pre-set the rel attribute (dofollow, nofollow, sponsored, ugc). Skips re-detection. |
| first_seen | ISO date the link was first observed (for monitoring history). |
| last_seen | ISO date the link was last observed. |
| dr | External Domain Rating (Ahrefs-style). Ignored by AI scoring; useful for your own filtering. |
| note | Free-text notes you want stored on the row. |
Encoding
- UTF-8 without BOM.
- Comma-separated, double-quote-wrapped strings if values contain commas.
- Excel sometimes saves as UTF-8-with-BOM or as Windows-1252. Resave from a fresh editor if upload fails.
- Line endings: LF or CRLF, both work.
Limits
- Free: 100 rows per audit.
- Pro: 1,000 rows per audit.
- Agency: 10,000 rows per audit.
If your file exceeds the per-audit cap, split into multiple audits (each counts against your monthly audit cap).
Converting an Ahrefs export
Ahrefs Site Explorer → Backlinks tab → Export. The export contains many columns; map these:
| Ahrefs column | Map to |
|---|---|
Referring page URL | source_url |
Target URL (or Linked Domain + Linked URL) | target_url |
Anchor | anchor_text |
Type | optional rel (Nofollow → nofollow, otherwise dofollow) |
Domain rating | optional dr |
Quick awk conversion:
awk -F'\t' 'BEGIN { OFS="," }
NR==1 { print "source_url,target_url,anchor_text"; next }
{ gsub(/"/, "", $0); print $5, $7, $11 }
' ahrefs-export.tsv > rbm-input.csvAdjust column indexes based on which Ahrefs export profile you're using. Ahrefs has changed their column order multiple times.
Converting a Semrush export
Semrush Backlink Analytics → Backlinks → Export. Map:
| Semrush column | Map to |
|---|---|
Source URL | source_url |
Target URL | target_url |
Anchor text | anchor_text |
Type | optional rel |
Source page authority score | optional dr |
Semrush exports as .xlsx by default; export as CSV for simpler processing, or open in Excel/Sheets and save as CSV.
Converting a Moz export
Moz Link Explorer → Inbound Links → Export. Map:
| Moz column | Map to |
|---|---|
Source URL | source_url |
Target URL | target_url |
Anchor text | anchor_text |
Rel | optional rel |
Domain authority | optional dr |
Converting a Linkody export
Linkody Backlinks → Export CSV. Map:
| Linkody column | Map to |
|---|---|
Source URL | source_url |
Target URL | target_url |
Anchor | anchor_text |
Status | ignored (we re-fetch status) |
Converting a GSC export
If you exported manually instead of using the GSC integration: GSC → Links → Top linking sites → Export → "More sample links." For each linking site you have to drill in to get URLs - it's tedious. Use the GSC Integration instead - one-click pull, no manual export.
If you do export manually:
source_url,target_url,anchor_text
{source URL from "Sample link"},{your-domain},{leave empty}GSC doesn't expose anchor text in exports, so leave the column empty - we extract during crawl.
Common errors
"Missing source_url column."
The header row doesn't include source_url. Check column names - typos like sourceurl or Source_URL won't match. Headers are case-sensitive.
"Row 47: source_url is invalid."
Either missing protocol (example.com/post instead of https://example.com/post) or malformed. Check that row.
"Row 102: target_url domain doesn't match audit target."
If you set the audit target to yoursite.com, every target_url should be on yoursite.com. Rows where target is on another domain are skipped with a warning. This is intentional - prevents accidentally auditing competitor links you got via export.
"File too large." Exceeds your plan's per-audit cap. Split.
"Encoding error." Save as UTF-8 without BOM. Excel default UTF-8 includes BOM; use "CSV UTF-8 (Comma delimited)" in Excel's save-as menu.
Validating before upload
You can preview the parse before submitting. The New Audit form shows a row count and a sample of the first 5 parsed rows after you paste/upload. Check that source/target/anchor look right before clicking Start.
For larger files, run a head -5 your-file.csv locally to inspect the header and a few rows.
Sample CSV
source_url,target_url,anchor_text,rel,dr
https://blog.acme.com/best-tools-2024,https://yoursite.com/widgets,best widget tool,dofollow,68
https://newsletter.example.io/issue-12,https://yoursite.com/,Example Inc,dofollow,42
https://forum.example.com/thread/123,https://yoursite.com/blog/setup-guide,setup guide,nofollow,23
https://corp.example.org/partners,https://yoursite.com/,acme widgets,dofollow,55Save as rbm-sample.csv, paste-upload to test the round trip.
Next
- Run a Backlink Audit - the workflow that consumes this CSV.
- Glossary - terms used in this page.