Domain Authority
A 0 to 100 authority score for a domain, with every input shown: its Common Crawl web graph harmonic centrality and PageRank positions and its Majestic Million rank and referring subnets. Only domains inside the top of the open rank lists are scored; an unranked domain is not proof of low authority. It is a link-graph score, not Moz or Semrush authority.
POST https://YOUR_API_HOST/v1/domain-authority
Credits and caching
- Success billing. 10 credits per domain found in the rank data (an unranked domain is free). You are charged only when the lookup finds something; a not-found result is free.
- Results are cached per account for 7 days. Repeating the same lookup in that window is free and returns
cache_hit: true. - Invalid input, rate limits and errors are never charged.
- Read the billing rules for the full picture.
Request
Send a JSON body with Authorization: Bearer <key>. The body can be up to 64 KB.
| Field | Type | Required | Notes |
|---|---|---|---|
domain | string | yes | Up to 253 characters. |
Example request
curl -X POST https://YOUR_API_HOST/v1/domain-authority \
-H "Authorization: Bearer $LOOKVALID_API_KEY" \
-H "Content-Type: application/json" \
-d '{"domain":"wikipedia.org"}'
const response = await fetch("https://YOUR_API_HOST/v1/domain-authority", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.LOOKVALID_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
"domain": "wikipedia.org"
}),
});
const result = await response.json();
if (!response.ok) throw new Error(`${result.error.code}: ${result.error.fix}`);
console.log(result.found, result.data, result.credits_charged);
import os
import requests
response = requests.post(
"https://YOUR_API_HOST/v1/domain-authority",
headers={"Authorization": f"Bearer {os.environ['LOOKVALID_API_KEY']}"},
json={
"domain": "wikipedia.org",
},
timeout=30,
)
result = response.json()
if not response.ok:
raise RuntimeError(f"{result['error']['code']}: {result['error']['fix']}")
print(result["found"], result["data"], result["credits_charged"])
Response
The status is 200 whether or not anything was found. Check found. Every response also carries the X-Request-Id, X-Credits-Charged, X-Credits-Remaining and X-RateLimit-* headers.
Envelope
| Field | Type | Notes |
|---|---|---|
request_id | string | - |
product | "domain-authority" | - |
found | boolean | False means the lookup ran and found nothing; it is free. |
reason | string or null | Why nothing was found; null when found. |
sources | array of string | Where the data came from, including any attribution the licence requires. |
credits_charged | integer | 0 for a cache hit, a not-found result or an error. |
credits_remaining | integer | - |
cache_hit | boolean | True when the account already paid for this lookup within the cache window. |
cache | object | - |
The data object
Present when found is true, otherwise null.
| Field | Type | Notes |
|---|---|---|
domain | string | - |
matched_domain | string | The domain the ranks belong to; a parent of the input when the input is a subdomain |
authority_score | integer | Minimum 0. Maximum 100. |
signals | object | - |
signals.common_crawl | object | - |
signals.common_crawl.in_index | boolean | - |
signals.common_crawl.release | string or null | - |
signals.common_crawl.harmonic_position | integer or null | - |
signals.common_crawl.harmonic_value | number or null | - |
signals.common_crawl.pagerank_position | integer or null | - |
signals.common_crawl.pagerank_value | number or null | - |
signals.common_crawl.hosts_in_domain | integer or null | - |
signals.common_crawl.domains_in_release | integer or null | - |
signals.common_crawl.harmonic_signal | number | - |
signals.common_crawl.pagerank_signal | number | - |
signals.majestic | object | - |
signals.majestic.in_index | boolean | - |
signals.majestic.rank | integer or null | - |
signals.majestic.referring_subnets | integer or null | - |
signals.majestic.referring_ips | integer or null | - |
signals.majestic.list_size | integer or null | - |
signals.majestic.signal | number | - |
formula | string | - |
weights | object | - |
weights.common_crawl_harmonic | number | - |
weights.common_crawl_pagerank | number | - |
weights.majestic | number | - |
notes | string | - |
Captured example (2026-10-18)
A real run of this lookup on 2026-10-18, using the request above, which is a public input. The envelope fields are left out.
{
"product": "domain-authority",
"found": true,
"data": {
"domain": "wikipedia.org",
"matched_domain": "wikipedia.org",
"authority_score": 83,
"signals": {
"common_crawl": {
"in_index": true,
"release": "cc-main-2026-jul-aug-sep",
"harmonic_position": 14,
"harmonic_value": 21064202,
"pagerank_position": 35,
"pagerank_value": 0.0008494547219015658,
"hosts_in_domain": 2050,
"domains_in_release": 133241980,
"harmonic_signal": 85.9,
"pagerank_signal": 81
},
"majestic": {
"in_index": true,
"rank": 12,
"referring_subnets": 227466,
"referring_ips": 698536,
"list_size": 1000000,
"signal": 82
}
},
"formula": "authority_score = round(0.4 * harmonic + 0.2 * pagerank + 0.4 * majestic). Each signal = 100 * (1 - log10(position) / log10(list size)), so position 1 is 100 and the last position of the full list is 0. A list that does not hold the domain contributes 0. harmonic and pagerank are the Common Crawl web graph positions among all domains in the release; majestic is the Majestic Million global rank.",
"weights": {
"common_crawl_harmonic": 0.4,
"common_crawl_pagerank": 0.2,
"majestic": 0.4
},
"notes": "Scores come from open link-graph and popularity lists, not from Moz or Semrush, so they will not match those tools. Only the best-ranked domains of each list are indexed; a domain that is not found is not proof of low authority."
},
"sources": [
"Common Crawl Web Graph (commoncrawl.org)",
"Majestic Million (majestic.com/reports/majestic-million), licensed CC BY 3.0"
]
}
Errors
400invalid_input: The request input is invalid.401unauthorized: The API key is missing, malformed, revoked or unknown.402insufficient_credits: The account does not have enough credits for this lookup. Error code: insufficient_credits. During a trial whose allowance is used up the code is trial_allowance_exhausted: nothing is charged and the customer starts the plan from the billing page.405method_not_allowed: This endpoint does not accept that HTTP method.413payload_too_large: The request body is too large.429rate_limited: Too many requests for this API key.500internal_error: An unexpected error occurred.503provider_unavailable: The data source for this product is unavailable right now.