# Attribution and terms (https://bklink.uk/docs/api/attribution-and-terms)
Using the BV API means accepting these terms. They apply to free and partner keys alike, and to figures from lookups, batches and bulk jobs.
## 1. Attribution [#1-attribution]
Wherever you show a BV from this API, show the words **BV by mxverify** beside it, as a working link to that site's `report_url`. Every `valued` and `unrated` result carries both in `attribution`.
```html
BV $183 per link · BV by mxverify
```
- Any working link is fine. You may mark it `rel="nofollow"`.
- One attribution per figure, next to the figure. In a table of many sites, each row's figure has its own "BV by mxverify" link to that site's report.
- Do not remove, hide or shorten the words.
## 2. What BV is [#2-what-bv-is]
BV is the ranking benefit of one new followed link, from a published model ([methodology](https://mxverify.uk/methodology)). It is **not a price**, not a promise of results, and not a statement about any site's quality. Do not present it as any of these: no "price", "cost" or "appraised value" labels, and no implying a site charges or should charge it.
## 3. Caching [#caching]
You may keep answers for up to **30 days**, then look them up again. BV moves as a site's traffic and authority are re-read and as the model changes; a figure older than 30 days may be misleading. Show the figure as it was answered; do not modify it.
## 4. No resale or bulk redistribution [#4-no-resale-or-bulk-redistribution]
Show BV in your own product, to your own users. Do not sell, license or redistribute BV figures in bulk, for example as a downloadable dataset or a data feed.
## 5. Fair use [#5-fair-use]
Stay within your key's limits, and do not spread one use across several keys or accounts to get past them. A key used against these terms may be revoked.
## 6. As it is [#6-as-it-is]
Figures move when a site's record or the model changes, and the service may change or stop. The free tier is provided without warranty. Partner usage is charged as described in [Partner tier](/api/partner-tier); questions about a charge go to [support@bklink.uk](mailto:support@bklink.uk).
# Authentication (https://bklink.uk/docs/api/authentication)
Every request needs a key. Make one at [bklink.uk/api-keys](https://bklink.uk/api-keys) (see [API keys](/bklink/api-keys)).
Send it in either header:
```http
Authorization: Bearer mxk_your_key
```
```http
X-API-Key: mxk_your_key
```
A request with no key answers `401` with `"error": "missing_key"`; one with a key that does not exist or was revoked answers `401` with `"error": "invalid_key"`. Both carry `WWW-Authenticate: Bearer realm="mxverify BV API"`.
## Keys in the browser [#keys-in-the-browser]
CORS is open (`Access-Control-Allow-Origin: *`), so a free key works from a browser. But a key in a public page can be read and used by anyone who views it, and its daily limits are shared with them.
A partner key's usage beyond the free allowance is charged to your wallet. Call the API from your server, cache the answers (see [terms](/api/attribution-and-terms)), and never put a partner key in client-side code.
## Rotating and revoking [#rotating-and-revoking]
You can hold up to 5 live keys. To rotate, make a new key, deploy it, then revoke the old one. A revoked key stops working within about a minute. A new key starts working within about a minute of being made.
# Bulk valuation jobs (https://bklink.uk/docs/api/bulk-jobs)
A bulk job takes a list of up to 1,000 sites and works through it in the background: sites mxverify already values are answered at once, and sites it has never valued are valued as the job reaches them. **Partner keys only.**
## Start a job [#start-a-job]
```http
POST /api/v1/bv/valuations
Content-Type: application/json
{"targets": ["site-one.com", "site-two.com", "..."]}
```
```bash
curl https://mxverify.uk/api/v1/bv/valuations \
-H "Authorization: Bearer mxk_partner_key" \
-H "Content-Type: application/json" \
-d @targets.json
```
The answer is `202`, with a `Location` header:
```json
{
"id": "4f1c2b9a8d7e4c3fa1b2c3d4e5f60718",
"status": "running",
"total": 1000,
"done": 3,
"status_url": "https://mxverify.uk/api/v1/bv/valuations/4f1c2b9a8d7e4c3fa1b2c3d4e5f60718"
}
```
- Every target is a **lookup**, taken from the key's day when the job starts (so `done` already counts targets that are not website addresses).
- If the key's lookups for the day are used, or a partner balance does not cover them, the job is refused with `429` before it starts.
- A key can run **3 jobs at once**.
## Read a job [#read-a-job]
```http
GET /api/v1/bv/valuations/{id}
```
```json
{
"id": "4f1c2b9a8d7e4c3fa1b2c3d4e5f60718",
"status": "running",
"total": 1000,
"done": 420,
"created_at": "2026-10-25T12:00:00.000Z",
"results": [
{ "target": "site-one.com", "status": "valued", "bv": { "usd": 64.5, "per": "followed link", "level": "B", "caps": "", "version": "2.8", "audited": false }, "report_url": "https://mxverify.uk/publications/site-one.com", "attribution": { "text": "BV by mxverify", "url": "https://mxverify.uk/publications/site-one.com", "required": true } },
{ "target": "site-two.com", "status": "pending", "bv": null }
]
}
```
- `results` has one entry per target, in the order sent, each a [result object](/api/responses) or `pending`.
- While `status` is `running`, the answer carries `Retry-After: 30`. Read it no more often than that.
- When every site is answered, `status` is `done` and `finished_at` is set.
- Reading a job is free: it is not a lookup.
- A job belongs to the key that made it, and is kept for **a week**.
## How sites are valued in a job [#how-sites-are-valued-in-a-job]
Each site a job reaches is handled exactly as a lookup would handle it, **at that moment**:
- a site with a report: its figure;
- a site never valued: valued now, from the free allowance first and then, for a partner, paid from the balance;
- past the key's valuation limit, or with no balance left: `not_valued`, with the reason;
- a site another caller is valuing at the same moment: `not_valued` ("being valued now"); look it up in a minute.
If the key is revoked while the job runs, the remaining sites answer `not_valued`. If the account's partner access is paused, the job carries on at the free limits.
## Pace [#pace]
Jobs share mxverify's work queue and advance a few sites at a time, so a 1,000-site job with many new sites takes tens of minutes. Known sites go fastest. Once a job is done, keep the answers and refresh them with ordinary lookups; see [caching](/api/attribution-and-terms#caching).
# Changelog (https://bklink.uk/docs/api/changelog)
## 2026-10-25 [#2026-10-25]
- **OpenAPI 3.1 description** at [bklink.uk/docs/openapi.json](https://bklink.uk/docs/openapi.json), for Postman and client generators. See [OpenAPI and Postman](/api/openapi).
- **Partner tier.** Volume limits (50,000 lookups and 5,000 new valuations a key a day), paid beyond the free allowance at $0.001 a lookup and $0.02 a site valued, charged nightly to the bklink wallet. Apply on [bklink.uk/api-keys](https://bklink.uk/api-keys). See [Partner tier](/api/partner-tier).
- **Bulk valuation jobs** for partner keys: `POST /api/v1/bv/valuations` with up to 1,000 sites, `GET /api/v1/bv/valuations/{id}` for progress. See [Bulk jobs](/api/bulk-jobs).
- New errors: `funds_needed` (429), `partner_only` (403), `too_many_jobs` (429), `not_found` (404, jobs), `unavailable` (503, jobs).
- Terms: answers may be cached up to 30 days; no resale or bulk redistribution of BV. Attribution may be any working link, including `rel="nofollow"`.
- `bv.caps` is plain words (`"nofollow"`), not the badge's ` · nofollow`.
## 2026-10-25 (launch) [#2026-10-25-launch]
- `GET /api/v1/bv/{domain}` and `POST /api/v1/bv` (up to 100 targets), with a free key: 1,000 lookups and 25 new valuations a key a day. Sites never valued are valued on demand.
# Errors and limits (https://bklink.uk/docs/api/errors-and-limits)
## Limits [#limits]
Limits are per key, per UTC day.
| | Free key | Partner key |
|---|---|---|
| Lookups (each target is one) | 1,000 | 50,000, or your account's own limit |
| New sites valued | 25 | 5,000, or your account's own limit |
| Targets per batch request | 100 | 100 |
| Targets per bulk job | — | 1,000 |
| Bulk jobs running at once | — | 3 |
| Live keys per account | 5 | 5 |
New valuations on every key also share a daily capacity across the service. Counting is approximate by a few calls in a busy minute.
A partner key's lookups and valuations beyond the free allowance run only while its account's wallet covers them; otherwise the key answers at the free limits. See [Partner tier](/api/partner-tier).
## Headers [#headers]
Every successful lookup carries:
- `X-RateLimit-Limit`: the key's lookups a day.
- `X-RateLimit-Remaining`: lookups left today.
A `429` and a `valuing` answer carry `Retry-After` (seconds). For a daily limit, it is the time to the next UTC midnight.
## Errors [#errors]
Errors answer a JSON body `{"error": "", "message": "", "docs": "https://mxverify.uk/api"}`.
| HTTP | `error` | When |
|---|---|---|
| 400 | `bad_request` | The body is not `{"targets": [...]}` with at least one target. |
| 400 | `too_many_targets` | More than 100 targets in a batch, or 1,000 in a job. |
| 401 | `missing_key` | No key was sent. |
| 401 | `invalid_key` | The key does not exist or was revoked. |
| 403 | `partner_only` | A bulk job was asked for with a free key. |
| 404 | `not_found` | No such job for this key (jobs are kept a week). |
| 405 | `method_not_allowed` | The wrong method for the path. The `Allow` header names the right one. |
| 429 | `daily_limit` | The key's lookups for the day are used. |
| 429 | `funds_needed` | A partner key's free lookups are used and its wallet does not cover more. |
| 429 | `too_many_jobs` | Three of the key's jobs are already running. |
| 503 | `unavailable` | A job could not be started just now. Try again in a minute. |
## Handling them [#handling-them]
- On `429`, wait for `Retry-After` before trying again.
- On `202` or `valuing`, ask again after `retry_after`; do not loop faster.
- Treat `unrated` and `not_found` as "no figure", and cache them like any other answer.
# Examples (https://bklink.uk/docs/api/examples)
Every example reads the key from an environment variable. Run them on a server.
## JavaScript (Node 18+) [#javascript-node-18]
```js
const res = await fetch(`https://mxverify.uk/api/v1/bv/${encodeURIComponent(domain)}`, {
headers: { Authorization: `Bearer ${process.env.MXVERIFY_KEY}` },
});
const answer = await res.json();
if (answer.status === "valued") {
const usd = Math.round(answer.bv.usd);
html = `BV $${usd} per link · ${answer.attribution.text}`;
} else if (answer.status === "valuing") {
// Ask again after answer.retry_after seconds.
}
```
```js
const THIRTY_DAYS = 30 * 24 * 3600 * 1000;
async function bvFor(domains, cache) {
const stale = domains.filter((d) => !cache.has(d) || Date.now() - cache.get(d).at > THIRTY_DAYS);
for (let i = 0; i < stale.length; i += 100) {
const res = await fetch("https://mxverify.uk/api/v1/bv", {
method: "POST",
headers: { Authorization: `Bearer ${process.env.MXVERIFY_KEY}`, "Content-Type": "application/json" },
body: JSON.stringify({ targets: stale.slice(i, i + 100) }),
});
if (res.status === 429) {
throw new Error(`Daily limit: retry after ${res.headers.get("retry-after")} s`);
}
const { results } = await res.json();
// Keep final answers; leave "valuing" and "not_valued" to be asked again later.
for (const r of results) {
if (!["valuing", "not_valued"].includes(r.status)) cache.set(r.target, { at: Date.now(), answer: r });
}
}
return domains.map((d) => cache.get(d)?.answer ?? null);
}
```
## Python [#python]
```python
import os, requests
r = requests.post(
"https://mxverify.uk/api/v1/bv",
headers={"Authorization": f"Bearer {os.environ['MXVERIFY_KEY']}"},
json={"targets": ["google.com", "alistapart.com"]},
timeout=30,
)
r.raise_for_status()
for result in r.json()["results"]:
if result["status"] == "valued":
print(result["target"], result["bv"]["usd"], result["attribution"]["url"])
else:
print(result["target"], result["status"], result.get("reason", ""))
```
## PHP [#php]
```php
['Authorization: Bearer ' . getenv('MXVERIFY_KEY')],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 30,
]);
$answer = json_decode(curl_exec($ch), true);
curl_close($ch);
if (($answer['status'] ?? '') === 'valued') {
printf(
'BV $%d per link · %s',
round($answer['bv']['usd']),
htmlspecialchars($answer['attribution']['url']),
htmlspecialchars($answer['attribution']['text'])
);
}
```
## A bulk job, start to finish (partner keys) [#a-bulk-job-start-to-finish-partner-keys]
```js
const headers = { Authorization: `Bearer ${process.env.MXVERIFY_PARTNER_KEY}`, "Content-Type": "application/json" };
const start = await fetch("https://mxverify.uk/api/v1/bv/valuations", {
method: "POST", headers, body: JSON.stringify({ targets: domains.slice(0, 1000) }),
});
const job = await start.json();
let view;
do {
await new Promise((r) => setTimeout(r, 30_000));
view = await (await fetch(job.status_url, { headers })).json();
} while (view.status === "running");
for (const r of view.results) save(r.target, r); // then refresh with lookups within 30 days
```
# BV API (https://bklink.uk/docs/api)
The BV API returns the same figure a site's [mxverify report](/mxverify/site-reports) and [badge](/mxverify/badges) show, as JSON, so you can show it in your own product.
- **Base URL:** `https://mxverify.uk/api/v1/bv`
- **Authentication:** a free key from [bklink.uk/api-keys](https://bklink.uk/api-keys), sent as `Authorization: Bearer `
- **Format:** JSON over HTTPS. CORS is open.
- **Postman:** [the public collection](https://www.postman.com/bklink1/bklink-s-workspace), and the [OpenAPI description](/api/openapi).
- **Attribution required:** wherever you show a BV, show "BV by mxverify" linked to the site's report. See [Attribution and terms](/api/attribution-and-terms).
## Quickstart [#quickstart]
### Get a key [#get-a-key]
Sign in at [bklink.uk](https://bklink.uk/sign-up), open **API keys**, and make one. It is shown once: copy it.
### Look up a site [#look-up-a-site]
```bash
curl https://mxverify.uk/api/v1/bv/google.com \
-H "Authorization: Bearer mxk_your_key"
```
```json
{
"target": "google.com",
"status": "valued",
"bv": {
"usd": 182.92,
"per": "followed link",
"level": "C",
"caps": "",
"version": "2.8",
"audited": false
},
"report_url": "https://mxverify.uk/publications/google.com",
"attribution": {
"text": "BV by mxverify",
"url": "https://mxverify.uk/publications/google.com",
"required": true
}
}
```
### Show it, with the attribution [#show-it-with-the-attribution]
```html
BV $183 per link · BV by mxverify
```
## What you can call [#what-you-can-call]
| Endpoint | What it does | Who |
|---|---|---|
| `GET /api/v1/bv/{domain}` | One site | Every key |
| `POST /api/v1/bv` | Up to 100 sites in one request | Every key |
| `POST /api/v1/bv/valuations` | A bulk valuation job of up to 1,000 sites | [Partner keys](/api/partner-tier) |
| `GET /api/v1/bv/valuations/{id}` | A job's progress and answers | Partner keys |
## Free and partner keys [#free-and-partner-keys]
| | Free key | Partner key |
|---|---|---|
| Lookups a day, per key | 1,000 | 50,000 (or your account's own limit) |
| New sites valued a day, per key | 25 | 5,000 (or your account's own limit) |
| Price | Free | The free allowance, then $0.001 a lookup and $0.02 a site valued |
| Bulk jobs | No | Yes |
A site mxverify already values costs nothing to look up beyond the lookup itself. A site it has never valued is valued on demand. See [Partner tier](/api/partner-tier).
# Lookups (https://bklink.uk/docs/api/lookups)
## One site [#one-site]
```http
GET /api/v1/bv/{domain}
```
```bash
curl https://mxverify.uk/api/v1/bv/google.com \
-H "Authorization: Bearer mxk_your_key"
```
`{domain}` is a website address. A full URL or a `www.` form is accepted and reduced to the site (`https://www.google.com/search` is `google.com`); a subdomain is its own site. Reserved names that are never real sites, such as `example.com` or anything ending `.test`, answer `invalid`. The answer is one [result object](/api/responses).
The HTTP status follows the result:
| HTTP | When |
|---|---|
| `200` | `valued`, `unrated`, `not_valued`, `not_found` |
| `202` | `valuing`: the site is being valued now; ask again after `retry_after` seconds |
| `400` | `invalid`: the target is not a website address |
## Many sites [#many-sites]
```http
POST /api/v1/bv
Content-Type: application/json
{"targets": ["google.com", "newly-launched-site.com"]}
```
```bash
curl https://mxverify.uk/api/v1/bv \
-H "Authorization: Bearer mxk_your_key" \
-H "Content-Type: application/json" \
-d '{"targets": ["google.com", "newly-launched-site.com"]}'
```
Up to **100 targets** a request. The answer is `200` with one result per target, in the order sent:
```json
{
"results": [
{ "target": "google.com", "status": "valued", "bv": { "usd": 182.92, "per": "followed link", "level": "C", "caps": "", "version": "2.8", "audited": false }, "report_url": "https://mxverify.uk/publications/google.com", "attribution": { "text": "BV by mxverify", "url": "https://mxverify.uk/publications/google.com", "required": true } },
{ "target": "newly-launched-site.com", "status": "valuing", "bv": null, "retry_after": 120 }
]
}
```
Each target counts as one lookup. The figures in these examples are illustrative.
## Sites mxverify has never valued [#sites-mxverify-has-never-valued]
A site with no report is valued **on demand**: the first lookup answers `valuing` with `retry_after` (about two minutes), and a lookup after that has the figure. New valuations count against your key's daily valuation limit. Nothing is valued while you wait on the request, so a lookup always answers quickly.
For hundreds or thousands of new sites, a partner key can use a [bulk job](/api/bulk-jobs) instead of polling.
## Freshness [#freshness]
An answer is the figure the site's report shows, kept up to six hours at the edge. A site's figures are re-read at most every 30 days, and move when the BV model changes; `bv.version` names the model.
# OpenAPI and Postman (https://bklink.uk/docs/api/openapi)
The whole API — endpoints, parameters, result objects, errors and authentication — is described in one OpenAPI 3.1 file:
**[bklink.uk/docs/openapi.json](https://bklink.uk/docs/openapi.json)**
It is checked against the live API's answers when it changes.
## Postman [#postman]
The collection is in bklink's public Postman workspace: **[postman.com/bklink1/bklink-s-workspace](https://www.postman.com/bklink1/bklink-s-workspace)**.
1. Fork the **mxverify BV API** collection into your own workspace.
2. Make an environment with a variable `bearerToken` (type *secret*) set to your key from [bklink.uk/api-keys](https://bklink.uk/api-keys). The collection sends it as `Authorization: Bearer {{bearerToken}}`; `baseUrl` is already `https://mxverify.uk`.
3. Send **Look up one site**.
To build the collection yourself instead, choose **Import** in Postman and paste `https://bklink.uk/docs/openapi.json`.
## Generate a client [#generate-a-client]
Any OpenAPI 3.1 generator works. For example, TypeScript types:
```bash
npx openapi-typescript https://bklink.uk/docs/openapi.json -o mxverify-bv.d.ts
```
## Versions [#versions]
The file's `info.version` follows the API: 1.x for `/api/v1`. Changes are listed in the [changelog](/api/changelog).
# Partner tier (https://bklink.uk/docs/api/partner-tier)
The partner tier is for products that show BV across many sites: link marketplaces, outreach tools, SEO platforms. It uses the same API and the same answers; what changes is how much a key may do, and that the volume beyond the free allowance is paid for.
## What a partner key gets [#what-a-partner-key-gets]
| | Free allowance (every key) | Partner key, beyond the allowance |
|---|---|---|
| Lookups a day | 1,000 | up to 50,000 a key, at **$0.001** each |
| New sites valued a day | 25 | up to 5,000 a key, at **$0.02** each |
| [Bulk jobs](/api/bulk-jobs) | — | up to 1,000 sites a job |
The limits are a starting point; an account can ask for its own. A partner key keeps the free allowance: only what goes past it is charged.
- **Lookups** are charged per target answered, as with any key.
- **Valuations** are charged only for **sites actually valued**: a name that turns out to have no website is not charged.
- A site mxverify already values is a lookup, never a valuation.
## Applying [#applying]
Apply on [bklink.uk/api-keys](https://bklink.uk/api-keys): say what you will build and where. Applications are reviewed by hand, and you are emailed when yours is approved, with your limits and prices. Once approved, every key on the account is a partner key within about a minute, including keys made later.
## How you pay [#how-you-pay]
Partner usage is paid from your **bklink wallet**, the same prepaid balance bklink's audits use. Top up by card on [bklink.uk/wallet](https://bklink.uk/wallet).
- **Charged nightly**, once per key per UTC day, for the day before. Each day appears on the wallet page as **BV API usage**, and on the API keys page with its lookups, sites valued and amount.
- **Paid calls run while the wallet covers them.** The API keeps a running count of the day's paid usage against your balance. When the balance is used, your keys carry on at the free limits; they are never cut off.
- **A day the wallet cannot cover** is left owed. While anything is owed, your keys run at the free limits. Top up and the owed days are charged at once; paid limits return within a few minutes.
- **Low balance.** You are emailed when the balance would cover less than about three days at your recent rate, or when a day could not be charged, at most every three days.
- Unspent balance is refundable under bklink's [refund policy](https://bklink.uk/legal/refunds).
## Worked example [#worked-example]
A marketplace looks up 20,000 sites on one key in a day, 400 of which mxverify had never valued, and 380 of those turn out to be real websites:
| | Count | Free | Charged | Amount |
|---|---|---|---|---|
| Lookups | 20,000 | 1,000 | 19,000 × $0.001 | $19.00 |
| Sites valued | 380 | 25 | 355 × $0.02 | $7.10 |
| **That night's charge** | | | | **$26.10** |
The next day, the same 20,000 lookups cost $19.00: the 380 sites are valued now.
## Reports for the sites you value [#reports-for-the-sites-you-value]
Every site you value has a public mxverify report at its `report_url`, so your "BV by mxverify" links always work. A site valued only through partner keys is not added to mxverify's directories, lists or sitemap, and its report asks search engines not to index it. If anyone checks the site on mxverify, or it is audited, it becomes an ordinary report.
## Rules that stay the same [#rules-that-stay-the-same]
- [Attribution](/api/attribution-and-terms) on every figure you show.
- BV is never presented as a price.
- Answers may be cached up to 30 days; BV may not be resold or redistributed in bulk.
- Partner keys belong on your server, not in client-side code. See [Authentication](/api/authentication).
# Result objects (https://bklink.uk/docs/api/responses)
## Fields [#fields]
| Field | Type | Meaning |
|---|---|---|
| `target` | string | What you sent, as sent (trimmed to 300 characters). |
| `status` | string | One of the statuses below. |
| `bv` | object or null | The figure, when `status` is `valued`; otherwise `null`. |
| `bv.usd` | number | The value of one new followed link from the site, in US dollars, to the cent. |
| `bv.per` | string | Always `"followed link"`: the unit of `usd`. |
| `bv.level` | string or null | The level the link is priced at: `A` editorial, `B` guest or sponsored, `C` neutralised, `D` link network. See [The BV score](/mxverify/bv-score). |
| `bv.caps` | string | What lowered the level, in plain words, for example `"nofollow"` or `"nofollow, high-risk niche"`; `""` for none. |
| `bv.version` | string | The BV model the figure was worked out under, for example `"2.8"`. |
| `bv.audited` | boolean | Links placed on the site have been checked by bklink audits. |
| `report_url` | string | The site's mxverify report. Present for `valued` and `unrated`, and as the checker page when a valuation was refused. |
| `attribution` | object | `{"text": "BV by mxverify", "url": , "required": true}`: what to show beside the figure. Present for `valued` and `unrated`. |
| `retry_after` | number | Seconds until it is worth asking again. Present for `valuing` and some `not_valued`. |
| `reason` | string | Why, in plain words, for `unrated`, `not_valued`, `not_found` and `invalid`. |
## Statuses [#statuses]
| status | Meaning | What to show |
|---|---|---|
| `valued` | The site's BV is in `bv`. | The figure, with "BV by mxverify". |
| `unrated` | No authority rating is on record for the site, so a link from it is not valued. | Nothing. Never show $0. |
| `valuing` | mxverify had never valued the site and is valuing it now. | Ask again after `retry_after` seconds. |
| `not_valued` | A new site could not be valued now: your key's daily limit, the day's capacity, your partner balance, or a moment's failure. `reason` says which. | Ask again after `retry_after`. |
| `not_found` | No website was found at the address when it was valued. This answer holds for a day. | Nothing. |
| `invalid` | The target is not a website address. | Fix the input. |
| `pending` | Bulk jobs only: the job has not reached this site yet. | Read the job again later. |
## Rounding [#rounding]
`bv.usd` is to the cent. mxverify's own pages round figures over $10 to whole dollars; you may round the same way.
# API keys (https://bklink.uk/docs/bklink/api-keys)
Keys for the [BV API](/api) are made on [bklink.uk/api-keys](https://bklink.uk/api-keys) while signed in.
- **Make a key.** Give it a name (optional) so you can tell keys apart. The key is shown **once**, when it is made: copy it then. Only a fingerprint of it is kept, so it cannot be shown again.
- **Up to 5 live keys** per account. Revoke one to make another.
- **Revoke a key** at any time. Anything using it stops working within about a minute.
- **Partner tier.** The same page has the application for the [partner tier](/api/partner-tier), and, once approved, each day's paid usage and what it was charged.
Keys start with `mxk_` followed by 40 letters and digits. Treat a key like a password; see [Authentication](/api/authentication).
# Running an audit (https://bklink.uk/docs/bklink/audits)
An audit is one list of placements, checked and valued together. It belongs to a campaign inside a project.
## Inputs [#inputs]
You can start an audit in three ways:
- **Upload a CSV or PDF of placements**, such as the report a vendor or PR distributor sent you.
- **Drop in a vendor spreadsheet.**
- **Scan a domain.** bklink finds the backlinks already pointing at a site so you can audit them. A scan is priced per 1,000 backlinks found, and a scan answered from a recent scan of the same domain is not charged again.
One audit covers up to 5,000 links.
### One campaign per vendor list [#one-campaign-per-vendor-list]
Each list a vendor or PR distributor delivers should be its own campaign, so every vendor's placements get their own report and verdict. Links are not attributed to a seller automatically: the campaign you create is the grouping.
## What is checked for every link [#what-is-checked-for-every-link]
| Check | How |
|---|---|
| The link is on the page | The linking page is fetched live and its links read. |
| Follow state | Followed, nofollow, sponsored or ugc, as the page marks it. |
| The page is alive | The HTTP status; dead pages and pages that are gone are named. |
| Where the publication runs | Its address (A record), hosting network (ASN) and country. |
| Shared servers | Publications sharing one address are grouped. Where ten or more distinct domains share one, the server is checked for footprints of one owner before it is called a network. |
| Syndicated copies | Copies of one article republished on many sites are recognised, and every copy but the declared original keeps a small share of its value. |
| Value | Each link's BV. See [How bklink values links](/bklink/valuation). |
## Networks, not just shared hosting [#networks-not-just-shared-hosting]
Shared hosting is ordinary, so a shared address alone is not a verdict. A server is called a network only when footprints of one owner agree: private nameservers, registrations inside one 90-day window, one registrar, one theme, identical purchases. CDN addresses, which front unrelated sites, are never grouped. Links placed across one network are one relationship, not many.
## Time [#time]
The median audit finishes in about two minutes for roughly 100 links. Lists of over a thousand take up to half an hour. You can leave the page; the report fills in as it runs, and you are emailed when it completes.
## Price [#price]
$1.00 for up to 400 links. A longer list costs more, following how many links it holds and how many sites they are on, but never more than $6.32. The price is shown before the audit runs. See [Wallet and pricing](/bklink/wallet-and-pricing).
# Disavow files (https://bklink.uk/docs/bklink/disavow)
From an audit, bklink builds a disavow list you can defend and writes the file Google's disavow links tool expects. Building and downloading it is free with any audit. bklink never uploads anything for you.
Google's guidance is that in most cases it can work out which links to trust, and that most sites will not need the tool. It is for a site with many spammy, artificial or low-quality links that have caused a manual action, or are likely to. Disavowing links that were helping you removes their value.
## How it works [#how-it-works]
1. **Audit the links.** Upload a vendor's placement list or scan your domain. See [Running an audit](/bklink/audits).
2. **Review the suggestions.** bklink puts forward only domains with one of the four signals below, each with its evidence and the argument against acting on it. Nothing goes on the list until you add it.
3. **Add your own.** Add any domain or URL by hand, with a note. A removed entry is kept in the list's history with your reason.
4. **Download the file.** A complete, sorted `.txt` with duplicates and entries already covered by a `domain:` line removed, and a comment recording why each entry is there.
5. **Upload it yourself** in Google Search Console's disavow links tool. A new upload replaces the old list; Google says it can take a few weeks to take effect.
bklink refuses to export an empty file, because uploading one would wipe every disavow Google already holds for the property.
## The four signals behind a suggestion [#the-four-signals-behind-a-suggestion]
Each is a fact the audit established, not a score, and each suggestion is made only for a link proved live and followed.
| Signal | Evidence | The case against |
|---|---|---|
| Private network hosting | The domain shares one server with at least 10 distinct domains, on an identified host that is not a CDN. Five or more suggestions on one address are shown as one finding. | Busy shared hosting looks the same from outside. Open a few of the sites first. |
| Brand look-alike domain | The domain trades on a major publisher's name without being that publisher. | A name match is a string test, not an investigation. |
| Spam score of 60 or more | On links found by scanning your domain, the backlink index's own spam score. It is not a toxicity score, and not Ahrefs DR or Moz DA. | It is a vendor's opinion, and Google may already ignore the link. |
| A repeated commercial anchor | The same anchor from 5 or more unrelated domains. Generic anchors, your brand, bare URLs and syndicated press-release copies never count. | One outreach template can produce the same anchor honestly. |
## Never suggested [#never-suggested]
Nofollow and sponsored links, links that are not on the page, pages that could not be loaded, dead pages (404, 410, 5xx) and a search engine's own domains. You can still add any of these by hand.
## Google's file format [#googles-file-format]
- A `.txt` file, UTF-8 or 7-bit ASCII, one entry per line.
- `domain:example.com` disavows the domain and all its subdomains; a full URL disavows that one page.
- Lines starting with `#` are comments, which Google ignores.
- At most 2,048 characters per URL, 100,000 lines (blank and comment lines included) and 2 MB per file.
Every file is checked against these limits before it is offered. The full guide is at [bklink.uk/disavow-tool](https://bklink.uk/disavow-tool).
# Getting started (https://bklink.uk/docs/bklink/getting-started)
### Create an account [#create-an-account]
Sign up at [bklink.uk/sign-up](https://bklink.uk/sign-up) with Google or your email. No card is needed. New accounts start with free credit (currently $1.00), enough for one audit of up to 400 links.
### Name a project [#name-a-project]
A project is the site you placed links for. The next screen is the upload.
### Add the placements [#add-the-placements]
Upload what the vendor delivered — a CSV, a spreadsheet or a vendor's PDF report — or scan a domain for the backlinks already pointing at it. Audit each vendor's list as its own campaign, so each vendor gets its own report and verdict. See [Running an audit](/bklink/audits).
### Confirm the price and run [#confirm-the-price-and-run]
The exact price is shown before the audit runs and deducted from your wallet when it does. The median audit finishes in about two minutes for roughly 100 links; lists of over a thousand take up to half an hour. The report fills in while it runs.
### Read and share the report [#read-and-share-the-report]
The report shows each link's state, the servers the publications share, and the value of each placement. Export it as a PDF, send a share link, or build a disavow file from it. See [Reading a report](/bklink/reports).
When the credit runs out, top up the wallet from $10 by card. There is no subscription, and unspent balance is refundable. See [Wallet and pricing](/bklink/wallet-and-pricing).
# Google index checker (https://bklink.uk/docs/bklink/index-checker)
The index checker asks Google about every page you give it and sorts the result.
## How it works [#how-it-works]
1. **Paste URLs or read a sitemap.** Up to 5,000 URLs at once: a list, a CSV, or the sitemap your robots.txt names. The exact count and price are shown before anything runs.
2. **A live search per URL.** bklink searches Google for each exact address, the same `site:` search you would type, run live rather than read from a stored index.
3. **Every page lands in one group:**
- **In Google**: listed at its own address.
- **Likely**: it loads, has 800 or more words, and its site is in Google.
- **Possible**: it loads and its site is in Google, but it is shorter or reads as a templated listing.
- **Unlikely to be indexed**, with the reason.
4. **Open a group** to see each URL's HTTP status, word count, how many pages Google lists for its site, and a link that repeats the Google search yourself.
Large checks run in the background, and you are emailed when they finish.
## Reasons a page is unlikely to be indexed [#reasons-a-page-is-unlikely-to-be-indexed]
The checker reads every page first and names, free, the ones that cannot be indexed as they stand: gone (404 or 410), unreachable, redirects elsewhere, says noindex, names another canonical, blocked by robots.txt, too thin, or on a site Google lists nothing of.
## Price [#price]
$0.01 a URL, charged before the check runs. Nothing is charged while checks are paused. To send pages to Google, see the [link indexer](/bklink/link-indexer).
# bklink overview (https://bklink.uk/docs/bklink)
bklink checks the backlinks you paid for or placed. For every placement it records:
- **Whether the link is there and followed.** Each linking page is fetched live when the audit runs, not read from a crawler's index. A link can be followed, nofollow or sponsored, removed, or on a dead page.
- **Where the publication really runs.** Every publication is resolved to its server's address, hosting network and country. Ten or more distinct domains on one address are checked for footprints of one owner before the group is called a network.
- **What the placement is worth.** Each link is valued with BV, the model mxverify publishes. See [How bklink values links](/bklink/valuation).
## Who it is for [#who-it-is-for]
- SEO and digital PR agencies that buy guest posts and press-release placements for clients and need to prove what was delivered.
- In-house teams auditing link vendors before renewing them.
- Founders who ran a press-release package and want to know what it produced.
- Link vendors who want an independent report for their own clients.
- Consultants cleaning up a link profile who need a disavow list backed by evidence.
## What it is not [#what-it-is-not]
- Not a rank tracker, keyword tool or link-building marketplace.
- **Valuations are estimates, not appraisals.** They describe what a link is worth to rankings under a published model, not what a search engine thinks or what anyone will pay.
- **Domain Rating is Ahrefs'.** On bklink, DR means Ahrefs Domain Rating from the Ahrefs API, and no other score is ever labelled DR.
## The parts of bklink [#the-parts-of-bklink]
# Link indexer (https://bklink.uk/docs/bklink/link-indexer)
The link indexer sends pages to Google's indexing pipeline within minutes: your own pages, or the pages your backlinks sit on.
## Pages are read before you pay [#pages-are-read-before-you-pay]
Before it charges, bklink reads every page. A page that is dead, redirects, says noindex, names another canonical, is blocked by robots.txt, has under 300 words, or sits on a site Google lists nothing of is refused and named, with the reason. An indexer cannot override a page that tells Google not to index it.
## What it does not promise [#what-it-does-not-promise]
Google decides whether and when to index a page. Indexing is **not guaranteed**, and a URL is **not refunded once sent**. If the indexer does not accept a batch, nothing is charged. Each sent URL comes with a link to check it in Google yourself.
## Price [#price]
$0.15 a URL. The usual path is to run the [index checker](/bklink/index-checker) first, then send the groups it marks likely or possible.
# Status re-checks (https://bklink.uk/docs/bklink/re-checks)
A re-check fetches every URL in an existing report again and re-prices the report around what is still live. Each change is dated: a link that was followed at delivery and is now nofollow, removed, or on a dead page shows when it changed.
That dated record is what you show a vendor when you ask for a replacement.
- **Price:** $1.00 per report, whatever its size.
- **When to run one:** after a vendor's guarantee period, before renewing a vendor, or before reporting results to a client.
# Reading a report (https://bklink.uk/docs/bklink/reports)
A report answers three questions about a list of placements: what you actually received, where it runs, and what it is worth.
## Link states [#link-states]
Every link is in one state, read from the page at the time of the check:
- **Followed**: the link is on the page and passes ranking credit as marked.
- **Nofollow, sponsored or ugc**: the link is there but marked as passing no credit. Search engines treat these marks as hints; BV counts them as passing none.
- **Removed**: the page loads but the link is no longer on it.
- **Dead page**: the page answers an error or no longer exists.
- **Could not verify**: the page could not be read reliably. Such links are left out of the value and listed after the verified ones.
## Servers and networks [#servers-and-networks]
Publications are grouped by the server they run on. A group of ten or more distinct domains on one address is examined for footprints of one owner; when they agree, the group is named a network and its links are valued at level D. A shared address alone is not treated as a network.
## Value [#value]
Each link carries its BV: the dollar value of the link to rankings under the published model. The report totals them and shows, link by link, what lowered a value (nofollow, a network, a syndicated copy, a second link from the same site). See [How bklink values links](/bklink/valuation).
A valuation is an estimate, not an appraisal. It is not a prediction of rankings, and not what a vendor will charge.
## Changes over time [#changes-over-time]
A [status re-check](/bklink/re-checks) runs the live checks again and dates every change, so a link stripped to nofollow or removed after delivery shows when it happened.
## What a report cannot tell you [#what-a-report-cannot-tell-you]
- Whether a search engine has counted a link. A followed link on an indexed page is the precondition, not proof.
- Who owns a server. Footprints of one owner are evidence of common control, not a statement about any person.
- What a link will do for one site's rankings.
# PDFs, share links and white-label reports (https://bklink.uk/docs/bklink/sharing-and-white-label)
## PDF and share link (free) [#pdf-and-share-link-free]
Any report can be exported as a PDF or sent as a share link. The report you send is the same evidence you audited. A share link's address is its credential: anyone with it can open the report, so send it only to the people it is for.
## White-label PDF [#white-label-pdf]
A white-label PDF has no bklink name, logo or links, and carries your agency's name if you add one.
- **Price:** $1.00 once per report. Every later white-label export of that report is free, with any filters.
- **Filters:** the PDF follows the filters you set on the report. The summary still describes the whole audit, and says so.
- **Credits that stay:** credits that data licences require, such as Ahrefs' for Domain Rating, remain on the page.
# How bklink values links (https://bklink.uk/docs/bklink/valuation)
bklink values every link with **BV**, the same model mxverify publishes. In an audit each link is valued in full context: the target it points to, the other links from the same site, and copies of the same article.
The full model, with every rate, multiplier and worked example, is published at [bklink.uk/methodology](https://bklink.uk/methodology#bv) and read from the same code that prices reports. This page summarises it.
## The three factors [#the-three-factors]
1. **Site Strength** (0 to 100): half the linking site's Ahrefs Domain Rating, half its estimated organic traffic on a log scale. It sets the most a link from the site can be worth. Traffic that was never measured counts as none until it is fetched. A site Ahrefs does not rate is valued at $0.
2. **Link level** (A to D): how likely search engines are to count the link.
- **A** editorial citation: kept in full.
- **B** guest, sponsored or placed post, or a directory listing.
- **C** press release, syndicated copy, profile, forum post, footer or sidebar link, and **any nofollow link**.
- **D** a site on one owner's link network.
3. **Relevance** of the linking page to the target, from unrelated to same topic.
## Discounts within one audit [#discounts-within-one-audit]
- **Repeated links from one site.** A second link from the same site (a domain with its subdomains) keeps 20%, a third 10%, and each one after that half the one before, so one site is worth at most 1.4 times its best link.
- **Syndicated copies.** Every copy of a republished article other than the declared original keeps 5%.
- **Worth $0:** a missing link, a dead or non-indexable page, a site Ahrefs does not rate, or a link from the target's own site.
## Caps [#caps]
- **Nofollow** caps a link at level C.
- **High-risk niche**: a site likely to be adult, gambling, pharmacy, CBD, payday loans, counterfeit goods or piracy is valued for a buyer outside the niche, at most level C.
- **Not in Google**: a site Google lists no page of (two `site:` searches at least 7 days apart found none, and nothing on record shows Google indexing it) is at most level C.
## What BV is not [#what-bv-is-not]
BV is the ranking benefit a link carries, in dollars. It is not a price anyone charges, not what a link will do for one site, and not a statement about a site's quality.
# Wallet and pricing (https://bklink.uk/docs/bklink/wallet-and-pricing)
bklink has no subscription. You top up a prepaid wallet, and each action deducts its price when it runs. Nothing renews.
[bklink.uk/pricing](https://bklink.uk/pricing) is read from the same code the wallet charges with, so it is always current. The table below is as of October 2026.
| Action | Price |
|---|---|
| Backlink audit | $1.00 up to 400 links; more for a longer list, never more than $6.32. Up to 5,000 links an audit. |
| Scan a domain for backlinks | Per 1,000 backlinks found; free when answered from a recent scan of the same domain. |
| Status re-check | $1.00 per report |
| Disavow list and file | Free |
| PDF and share link | Free |
| White-label PDF | $1.00 once per report |
| Google index check | $0.01 per URL |
| Instant indexing | $0.15 per URL |
| [BV API](/api) | Free key: 1,000 lookups and 25 new valuations a day. [Partner tier](/api/partner-tier): $0.001 per lookup and $0.02 per site valued beyond that. |
## Top-ups [#top-ups]
- **Minimum top-up:** $10, by card through Stripe.
- **Card fees at cost:** card processing is deducted at cost (about 2.9% plus $0.30 for a US card), so a $10 top-up adds a little under $10. The exact amount is shown before you pay and on the receipt.
- **New accounts** start with free credit and need no card.
## Holds and charges [#holds-and-charges]
An action that runs over time, such as an audit, reserves its price when it starts and settles when it finishes. A run abandoned part-way has its reservation released automatically. Your wallet page lists every charge with what it was for.
## Refunds [#refunds]
Unspent balance is refundable at any time under the [refund policy](https://bklink.uk/legal/refunds). Instant indexing is not refunded once a URL is sent.
# bklink and mxverify documentation (https://bklink.uk/docs)
Two products, one model of what a backlink is worth.
- **[bklink](/bklink)** audits backlinks you placed or bought. It fetches every linking page live, checks the link is still there and followed, resolves every publication to the server it runs on so networks show up, and values each placement.
- **[mxverify](/mxverify)** is a free backlink value checker. Enter any website and get its **BV score**: the dollar value of one new followed link from it, in a public site report that names the source of every figure.
- **[The BV API](/api)** returns any site's BV score as JSON, so you can show it on your own pages. A key is free.
## Who runs this [#who-runs-this]
bklink and mxverify are operated by Immortal Reality PA LLC (Pittsburgh, Pennsylvania, United States). Questions and corrections: [support@bklink.uk](mailto:support@bklink.uk).
These docs describe how the products work. Where a figure or rule is published on the products themselves (prices, the valuation model), that page is the authority and is linked from here; these docs are updated when it changes.
# BV badges (https://bklink.uk/docs/mxverify/badges)
Every valued site has a BV badge: an image of its current BV score, linked to its mxverify report. The embed is plain HTML, an `` around an `
`. No script runs on your page.
## Embed [#embed]
Replace `example.com` with the site's domain:
```html
```
On a dark background use the dark badge: `https://mxverify.uk/badge/dark/example.com.svg`.
Each report has a **Badge** button with the embed for that site, ready to copy.
## Behaviour [#behaviour]
- **Size:** 236 × 60 pixels, SVG.
- **Freshness:** the badge shows the same figure as the report, and is cached for up to six hours.
- **No figure:** a site with no report, or no figure to show, gets a neutral badge rather than a broken image.
- **The link** points to the site's report, so readers can see how the figure was worked out.
To show BV in your own design instead of an image, use the [BV API](/api); its [terms](/api/attribution-and-terms) ask for a "BV by mxverify" link beside the figure.
# The BV score (https://bklink.uk/docs/mxverify/bv-score)
**BV** (backlink value) is what a link is worth to rankings, in US dollars. A site's **BV score** is the value of one new followed link from it: what its links are typically worth before anything about your own site is known.
The live model, with its current version, every rate and threshold, is on [mxverify.uk/backlink-value](https://mxverify.uk/backlink-value) and [mxverify.uk/methodology](https://mxverify.uk/methodology). This page explains how to read it.
## Three factors [#three-factors]
### Site Strength (0 to 100) [#site-strength-0-to-100]
Half the site's authority rating (Ahrefs Domain Rating), half its estimated monthly organic traffic on a log scale. It sets the ceiling: the most a followed editorial link from the site can be worth, halving for every fixed number of points below 100. mxverify shows strength in steps of 5. A site with no authority rating on record is not valued.
### Link level (A to D) [#link-level-a-to-d]
How much of the ceiling the kind of link the site gives keeps:
| Level | Kind of link | Multiplier |
|---|---|---|
| A | Editorial citation: linked because it is useful to readers | ×1 |
| B | Guest, sponsored or placed post; product or tool directory listing | ×0.5 |
| C | Press release, syndicated copy, profile, forum post, footer or sidebar link, and any nofollow link | ×0.1 |
| D | A site on one owner's link network | ×0.05 |
Where bklink has audited links on the site, those links are read to decide the level. Otherwise mxverify reads the site's homepage and up to ten articles and asks a calibrated model what kind of site it is and what kind of link it gives.
### Relevance [#relevance]
How close the linking site is to the site the link points to, from ×0.5 (unrelated) to ×1.25 (same topic). A report cannot know your site, so the score is worked out at ×1 and both ends of the range are printed beside it. In a bklink audit relevance is read link by link.
## Caps [#caps]
Two caps can lower the level a site is priced at, and a report names them after the level, for example "level B · nofollow":
- **nofollow**: a share of the site's links carry nofollow, sponsored or ugc, which BV counts as passing no ranking credit.
- **high-risk niche**: the site is likely adult, gambling, pharmacy or similar. Its links are valued for a buyer outside the niche; the report also gives the figure for a buyer inside it.
A site Google lists no page of is also capped at level C unless something on record shows Google indexing it.
## Unrated sites [#unrated-sites]
A site with no authority rating on record is **unrated**: a link from it is not valued. A report shows no figure rather than $0, and the BV API answers `unrated`.
## What BV is not [#what-bv-is-not]
- **Not a Domain Rating.** Domain Rating is Ahrefs' 0 to 100 score of a site's backlinks, and one input here. BV is a dollar value.
- **Not a price.** It says what a link is worth, not what a publication charges.
- **Not a guarantee.** A footer link, a nofollow link or a syndicated copy on the same site is worth a fraction of the figure.
- **Not a verdict on a site.** It is a model of ranking value, worked out the same way for every site.
## Versions [#versions]
BV has a version (for example 2.8). Figures move when a site's record is re-read (each figure at most every 30 days) or when the model changes. Every API answer carries the version it was worked out under.
# For AI agents and citations (https://bklink.uk/docs/mxverify/for-ai-agents)
## Markdown copies [#markdown-copies]
Every mxverify page has a markdown copy:
- Append `.md` to its address: `https://mxverify.uk/methodology.md`.
- When the address ends in a domain or an IP address, or would with `.md`, append `/index.html.md` instead: `https://mxverify.uk/publications/google.com/index.html.md`.
- Or request any page with the header `Accept: text/markdown`.
## llms.txt [#llmstxt]
- [mxverify.uk/llms.txt](https://mxverify.uk/llms.txt): what mxverify is, how BV is worked out, how to cite, and where every section's markdown copy is.
- [bklink.uk/llms.txt](https://bklink.uk/llms.txt): the same for bklink.
- These docs: [bklink.uk/docs/llms.txt](https://bklink.uk/docs/llms.txt) (an index) and [bklink.uk/docs/llms-full.txt](https://bklink.uk/docs/llms-full.txt) (every page in one file). Each docs page also has a markdown copy from its **Copy Markdown** button.
## How to cite [#how-to-cite]
- Cite a site report by its address, for example: mxverify, "google.com site report", `https://mxverify.uk/publications/google.com`.
- Each report shows when it was last updated and names the source and date of each figure.
- Cite how a figure is worked out from the methodology: `https://mxverify.uk/methodology`.
## Programmatic access [#programmatic-access]
For figures in your own product, use the [BV API](/api) rather than scraping reports: it returns the same figure as the report, as JSON, with the attribution its terms require.
# mxverify overview (https://bklink.uk/docs/mxverify)
[mxverify.uk](https://mxverify.uk) answers one question about any website: **what is one new followed link from it worth?** The answer is its **BV score**, in US dollars, in a public site report that names the source and date of every figure.
mxverify is published by bklink and uses the same BV model bklink uses to value every link it audits.
## What you can do [#what-you-can-do]
- **Check a site.** Enter a website on [mxverify.uk](https://mxverify.uk). A site mxverify has not valued before is valued on the spot.
- **Read its report.** Every valued site has a report at `https://mxverify.uk/publications/`: the BV score, the link level, how its audited links behaved, how it links out, traffic, server and network, page speed, and similar sites. See [Site reports](/mxverify/site-reports).
- **Show the BV on your own site** with a [badge](/mxverify/badges), or programmatically with the [BV API](/api).
- **Browse the directories**: publications A to Z, sites by value of a link, shared servers and networks, top lists, and keyword pages.
## Principles [#principles]
- **BV is what a link is worth, not a price.** Publications charge what they like; BV exists to show whether a price is worth paying.
- **No site pays to be listed, valued or left out.**
- **Every figure has a source.** Each report says where each figure came from and when it was read. Figures are re-read at most every 30 days.
# Site reports (https://bklink.uk/docs/mxverify/site-reports)
Every valued site has a public report at `https://mxverify.uk/publications/`. Every report shows the same parts in the same order; its first fold, "How to use this report", applies the guide to that site's own figures.
| Part | What it shows |
|---|---|
| BV score | What one new followed link from the site is worth, the level it is priced at, any caps, and the relevance range. |
| How its links behaved | For audited sites: links placed on the site and checked by bklink audits — still there or removed, followed or nofollow. The only measured figures about placed links. |
| How it links out | From a reading of the homepage and up to ten articles: the share of outbound links marked nofollow, sponsored or ugc. Graded strong, fair or thin. |
| Links to the site | Counts from a third-party backlink index: linking websites, links, nofollow share, linking IP addresses, and the index's spam score of the linking pages. None of these moves BV. |
| Traffic estimate | Modelled monthly traffic from a third-party source, and the top search keywords. An estimate to compare, not a measurement. BV uses only organic search traffic. |
| AI assistant visits | Visits from people who clicked through from an AI assistant's answer. Not a count of citations. |
| Server and network | The address the site serves from and the publications sharing it; network verdicts where footprints of one owner agree. |
| Page speed | Real-user Chrome data over 28 days (Chrome UX Report): LCP, INP, CLS and the Core Web Vitals verdict. |
| Domain and hosting | Registration date, expiry and status from the public registration record; the content category. |
| Similar sites | Up to six sites on the same subject, never ones on the same server or owned alike. Not a recommendation. |
## Using a report to judge a placement [#using-a-report-to-judge-a-placement]
- **Price check.** Take the figure for the level of link on offer and how close the site is to yours. A quote far above the same-topic figure pays for something BV does not measure, such as the site's readers or the vendor's margin.
- **Ask for the level.** An editorial link is level A; a sponsored or guest post is level B at best; any nofollow link is level C.
- **Qualify the site.** Read the level, caps, audited shares, the reading's nofollow share, the server and the spam score together. None of them alone is a verdict.
- **Check the link once it is placed** with a [bklink audit](/bklink/audits). Its results join the site's report.
## Limitations [#limitations]
- BV is a model, not a price, and does not predict what one link will do for one site.
- Traffic, links to the site and AI visits are third-party estimates and can be far off for a small site.
- A reading is a sample of a site, not every page.
- A report is evidence to weigh, not an endorsement of the site or a check of who runs it.
The full guide is at [mxverify.uk/guide](https://mxverify.uk/guide). To report an error in a report, write to [support@bklink.uk](mailto:support@bklink.uk) with the report's address.