# Moz Scraper: Domain Authority (`maximedupre/moz-scraper`) Actor

Analyze public Moz domain data from domains, website URLs, and Moz analysis URLs. Get Domain Authority, Page Authority, spam score, linking root domains, top pages, top linking domains, and link history when available.

- **URL**: https://apify.com/maximedupre/moz-scraper.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** SEO tools, Developer tools, Marketing
- **Features:** Limited permissions
- **Stats:** 64 total users, 19 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.35 / 1,000 domain analyses

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 🔎 Check public Moz domain metrics

Moz Scraper helps SEO specialists, agencies, and analysts compare public Moz domain metrics without a Moz login. Submit domains or URLs to get available Domain Authority, Page Authority, ranking keyword totals, spam score, linking root domains, top pages, top linking domains, and link history in structured rows.

- Compare Domain Authority and Page Authority across a domain list with **[Moz Domain Authority Checker](https://apify.com/maximedupre/moz-scraper/examples/moz-domain-authority-checker)**.
- Review the public spam score for each domain with **[Moz Spam Score Checker](https://apify.com/maximedupre/moz-scraper/examples/moz-spam-score-checker)**.
- Inspect linking root domain counts and visible top linking domains with **[Moz Linking Domains Analysis](https://apify.com/maximedupre/moz-scraper/examples/moz-linking-domains-analysis)**.
- Collect visible top pages and Page Authority values with **[Moz Top Pages Analysis](https://apify.com/maximedupre/moz-scraper/examples/moz-top-pages-analysis)**.
- Export available Moz metrics for audits and recurring reports with **[Moz SEO Reporting](https://apify.com/maximedupre/moz-scraper/examples/moz-seo-reporting)**.

#### 📊 Moz domain metrics

Each successful dataset row is one public Moz analysis for a canonical domain. The row keeps the first eligible submitted value saved for that domain, then lists available authority, keyword, spam, linking-domain, page, and history data. Optional arrays can be empty, and a metric can be `null` when Moz does not expose it.

Rows are saved only for successful public analyses. A missing public report or a source-access failure is not a successful dataset row.

#### 🚀 Run a public Moz domain check

1. Open the Actor input.
2. Add domains, website URLs, or Moz domain-analysis URLs under **Websites or domains**.
3. Leave fast qualification off for full lists. Turn it on when you need a potentially lagging snapshot of headline authority, spam, and linking metrics without deep-dive lists.
4. Run the Actor and open the default dataset.

The Actor normalizes accepted inputs to canonical domains. It saves the first eligible submitted value for a canonical domain and ignores later values that normalize to the same domain.

#### ⚙️ Input

Add one bare domain, website URL, or Moz domain-analysis URL per line. Equivalent targets are normalized to one canonical domain, and the first eligible submitted value is kept. Turn on fast qualification for a potentially lagging snapshot of headline authority, spam, and linking metrics without deep-dive lists.

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `targets` | array of strings | Required. Add one domain, website URL, or Moz domain-analysis URL per line. Equivalent targets are normalized to one canonical domain, and the first eligible submitted value is kept. |
| `fastQualification` | boolean | Optional, defaults to `false`. Returns a potentially lagging snapshot of headline authority, spam, and linking metrics without deep-dive lists. |

**Example input**

This is the public input from a successful Hosted QA default-input run.

```json
{
  "targets": [
    "wikipedia.org"
  ],
  "fastQualification": false
}
```

#### 🧾 Output

The default dataset has one output shape: a successful public Moz domain analysis for each canonical domain. Fast qualification uses the same row shape, but deep-dive arrays can be empty and a metric can be `null` when the source does not expose it.

**Domain analysis fields**

| Field | Type | What it does |
| --- | --- | --- |
| `domain` | string | The canonical domain analyzed by Moz. |
| `submittedTarget` | string | The first eligible domain or URL saved for this canonical-domain analysis. |
| `domainAuthority` | integer or null | The Moz Domain Authority score, or `null` when it is not exposed. |
| `pageAuthority` | integer or null | The Page Authority value for the first visible top page, or `null` when unavailable. |
| `spamScore` | number or null | The public Moz spam score as a percentage, or `null` when unavailable. |
| `linkingRootDomains` | integer or null | The count of unique linking root domains shown by Moz, or `null` when unavailable. |
| `rankingKeywords` | integer or null | The total number of ranking keywords shown by Moz, or `null` when unavailable. |
| `topPages` | array of objects | Visible top pages and their Page Authority values. The array can be empty. |
| `topPages[].pageUrl` | string | The page address shown by Moz. |
| `topPages[].pageAuthority` | integer or null | The Page Authority for that page. |
| `topLinkingDomains` | array of objects | Visible linking domains and their Domain Authority values. The array can be empty. |
| `topLinkingDomains[].domain` | string | A linking domain shown by Moz. |
| `topLinkingDomains[].domainAuthority` | integer or null | The Domain Authority for that linking domain, or `null` when unavailable. |
| `linkingDomainHistory` | array of objects | Public chart points for discovered and lost linking domains. The array can be empty. |
| `linkingDomainHistory[].label` | string | The source-provided chart period label. |
| `linkingDomainHistory[].discovered` | integer or null | The discovered linking-domain value, or `null` when unavailable. |
| `linkingDomainHistory[].lost` | integer or null | The lost-domain value. Moz may show loss as a negative number. |
| `authorityHistory` | array of objects | Archived Domain Authority observations when public source data exposes them. |
| `authorityHistory[].archiveTimestamp` | string | The timestamp or month for an archived public Moz report. |
| `authorityHistory[].domainAuthority` | integer | The Domain Authority score from that archived report. |
| `missingFields` | array of strings | Core metric fields that Moz did not expose for an otherwise successful analysis, when present. |

**Domain analysis row**

This complete genuine row is copied from the latest successful normal run of the current beta build. The run used `fastQualification: false`.

```json
{
  "domain": "example.com",
  "submittedTarget": "example.com",
  "domainAuthority": 93,
  "pageAuthority": 85,
  "linkingRootDomains": 1000000,
  "rankingKeywords": 730,
  "spamScore": 47,
  "topPages": [
    {
      "pageUrl": "example.com/",
      "pageAuthority": 85
    },
    {
      "pageUrl": "www.example.com/",
      "pageAuthority": 85
    },
    {
      "pageUrl": "example.com/privacy.html",
      "pageAuthority": 79
    },
    {
      "pageUrl": "www.example.com/showthread.php?pid=1",
      "pageAuthority": 71
    },
    {
      "pageUrl": "example.com/%7Euser/phpmyadmin",
      "pageAuthority": 70
    },
    {
      "pageUrl": "bamboo.example.com/",
      "pageAuthority": 70
    },
    {
      "pageUrl": "example.com/phpMyAdmin/index.php?server=X&db=database&table=table&target=script",
      "pageAuthority": 70
    }
  ],
  "topLinkingDomains": [
    {
      "domain": "www.google.com",
      "domainAuthority": 100
    },
    {
      "domain": "youtube.com",
      "domainAuthority": 100
    },
    {
      "domain": "www.blogger.com",
      "domainAuthority": 100
    },
    {
      "domain": "linkedin.com",
      "domainAuthority": 99
    },
    {
      "domain": "apple.com",
      "domainAuthority": 99
    },
    {
      "domain": "docs.google.com",
      "domainAuthority": 98
    },
    {
      "domain": "wordpress.org",
      "domainAuthority": 98
    }
  ],
  "linkingDomainHistory": [
    {
      "label": "08/01",
      "discovered": 173,
      "lost": -126
    },
    {
      "label": "08/02",
      "discovered": 734,
      "lost": -132
    },
    {
      "label": "08/03",
      "discovered": 253,
      "lost": -118
    },
    {
      "label": "08/04",
      "discovered": 674,
      "lost": -147
    },
    {
      "label": "08/05",
      "discovered": 7201,
      "lost": -800
    },
    {
      "label": "08/06",
      "discovered": 6216,
      "lost": -937
    },
    {
      "label": "08/07",
      "discovered": 8281,
      "lost": -1745
    },
    {
      "label": "08/08",
      "discovered": 4495,
      "lost": -890
    },
    {
      "label": "08/09",
      "discovered": 3477,
      "lost": -642
    },
    {
      "label": "08/10",
      "discovered": 7585,
      "lost": -1020
    },
    {
      "label": "08/11",
      "discovered": 3216,
      "lost": -733
    },
    {
      "label": "08/12",
      "discovered": 3900,
      "lost": -882
    },
    {
      "label": "08/13",
      "discovered": 3163,
      "lost": -882
    },
    {
      "label": "08/14",
      "discovered": 2518,
      "lost": -564
    },
    {
      "label": "08/15",
      "discovered": 2700,
      "lost": -1068
    },
    {
      "label": "08/16",
      "discovered": 3237,
      "lost": -697
    },
    {
      "label": "08/17",
      "discovered": 2262,
      "lost": -638
    },
    {
      "label": "08/18",
      "discovered": 2516,
      "lost": -653
    },
    {
      "label": "08/19",
      "discovered": 4568,
      "lost": -987
    },
    {
      "label": "08/20",
      "discovered": 6420,
      "lost": -1002
    },
    {
      "label": "08/21",
      "discovered": 6551,
      "lost": -1332
    },
    {
      "label": "08/22",
      "discovered": 4846,
      "lost": -829
    },
    {
      "label": "08/23",
      "discovered": 2723,
      "lost": -1007
    },
    {
      "label": "08/24",
      "discovered": 2444,
      "lost": -948
    },
    {
      "label": "08/25",
      "discovered": 2799,
      "lost": -686
    },
    {
      "label": "08/26",
      "discovered": 2536,
      "lost": -729
    },
    {
      "label": "08/27",
      "discovered": 1701,
      "lost": -818
    },
    {
      "label": "08/28",
      "discovered": 839,
      "lost": -182
    },
    {
      "label": "08/29",
      "discovered": 489,
      "lost": -179
    },
    {
      "label": "08/30",
      "discovered": 4468,
      "lost": -777
    },
    {
      "label": "08/31",
      "discovered": 3962,
      "lost": -901
    },
    {
      "label": "09/01",
      "discovered": 3994,
      "lost": -1045
    },
    {
      "label": "09/02",
      "discovered": 1589,
      "lost": -677
    },
    {
      "label": "09/03",
      "discovered": 2270,
      "lost": -656
    },
    {
      "label": "09/04",
      "discovered": 1961,
      "lost": -703
    },
    {
      "label": "09/05",
      "discovered": 2084,
      "lost": -726
    },
    {
      "label": "09/06",
      "discovered": 660,
      "lost": -297
    },
    {
      "label": "09/07",
      "discovered": 2765,
      "lost": -782
    },
    {
      "label": "09/08",
      "discovered": 2891,
      "lost": -865
    },
    {
      "label": "09/09",
      "discovered": 3153,
      "lost": -667
    },
    {
      "label": "09/10",
      "discovered": 1562,
      "lost": -647
    },
    {
      "label": "09/11",
      "discovered": 1826,
      "lost": -402
    },
    {
      "label": "09/12",
      "discovered": 4686,
      "lost": -636
    },
    {
      "label": "09/13",
      "discovered": 1718,
      "lost": -965
    },
    {
      "label": "09/14",
      "discovered": 1981,
      "lost": -610
    },
    {
      "label": "09/15",
      "discovered": 653,
      "lost": -269
    },
    {
      "label": "09/16",
      "discovered": 3267,
      "lost": -1316
    },
    {
      "label": "09/17",
      "discovered": 3800,
      "lost": -1076
    },
    {
      "label": "09/18",
      "discovered": 3635,
      "lost": -1019
    },
    {
      "label": "09/19",
      "discovered": 3417,
      "lost": -1260
    },
    {
      "label": "09/20",
      "discovered": 2120,
      "lost": -830
    },
    {
      "label": "09/21",
      "discovered": 1513,
      "lost": -852
    },
    {
      "label": "09/22",
      "discovered": 1994,
      "lost": -635
    },
    {
      "label": "09/23",
      "discovered": 709,
      "lost": -749
    },
    {
      "label": "09/24",
      "discovered": 2489,
      "lost": -444
    },
    {
      "label": "09/25",
      "discovered": 2913,
      "lost": -751
    },
    {
      "label": "09/26",
      "discovered": 2648,
      "lost": -981
    },
    {
      "label": "09/27",
      "discovered": 2250,
      "lost": -853
    },
    {
      "label": "09/28",
      "discovered": 2583,
      "lost": -1078
    },
    {
      "label": "09/29",
      "discovered": 2161,
      "lost": -895
    },
    {
      "label": "09/30",
      "discovered": 209,
      "lost": -118
    }
  ]
}
```

Export the dataset as JSON, CSV, Excel, XML, RSS, or HTML, or retrieve these rows through the Apify API.

#### 💳 Pricing

This Actor uses pay-per-event pricing. One successfully saved domain analysis is one paid event. The event is `moz-domain-analysis`; its current price is shown in the Apify pricing panel. There is no separate Actor-start event.

#### 🔌 Integrations

Use the Apify dataset to export rows or the Apify API to read them in reporting and automation workflows. You can also use Apify schedules and webhooks around a run.

https://www.youtube.com/watch?v=bNACk1_S_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### What happens when two inputs normalize to the same domain?

The Actor processes a canonical domain once. It saves the first eligible submitted value and ignores later values that normalize to that domain.

##### What does fast qualification return?

It returns a potentially lagging snapshot of headline authority, spam, and linking metrics without deep-dive lists. The row keeps the same public field shape, so deep-dive arrays can be empty.

##### Why is a domain missing from the dataset?

Only successful public analyses become dataset rows. A missing public report or a source-access failure is not a successful dataset row.

##### What inputs can I submit?

Submit a bare domain, a full website URL, or a Moz domain-analysis URL. The Actor analyzes the normalized canonical domain, not an individual page path.

##### Do I need a Moz account or API key?

No. The Actor reads public Moz domain-analysis data and does not ask for a Moz account, cookies, API key, or Moz Pro subscription.

##### Is this the official Moz API?

No. The Actor reads public Moz domain-analysis pages. It does not access private or account-gated Moz Pro projects, paid API-only datasets, complete link-level backlink inventories, traffic or audience data, SERP rank tracking, or full website crawls.

### 📝 Changelog

**v2.0** (07-09-2026)

- Added optional Domain Authority history from archived public Moz reports.
- Normalized domains and URLs, processed each canonical domain once, and saved the first submitted value.
- Returned focused public metrics with clear source-access outcomes for each domain.

**v1.0**

- Updated output to focused Moz domain metrics, lowered per-domain pricing, and refreshed default examples.

**v0.1**

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~moz-scraper/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [Ahrefs Free Website Stats Scraper](https://apify.com/maximedupre/ahrefs-free-website-stats-scraper) helps compare public Ahrefs domain rating, traffic, and linking-website metrics.
- [SEMrush Free Website Stats Scraper](https://apify.com/maximedupre/semrush-free-website-stats-scraper) adds public SEMrush authority, traffic, referring-domain, and backlink metrics.
- [Seobility SEO Checker](https://apify.com/maximedupre/seobility-seo-checker) runs public on-page SEO checks with scores, issues, and factor evidence.
- [Website URL Crawler & Link Extractor](https://apify.com/maximedupre/website-url-crawler) builds rendered link maps and URL inventories for technical SEO audits.
- [Sitemap Sniffer](https://apify.com/maximedupre/sitemap-sniffer) discovers sitemap files and optional sitemap URL inventories.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `targets` (type: `array`):

Add one domain, website URL, or Moz domain-analysis URL per line, such as wikipedia.org, https://github.com, or https://moz.com/domain-analysis/openai.com. Equivalent targets are normalized to one canonical domain, and the first eligible submitted value is kept.

## `fastQualification` (type: `boolean`):

Use a potentially lagging snapshot for headline authority, spam, and linking metrics. It does not include deep-dive lists such as top pages, top linking domains, or link history.

## Actor input object example

```json
{
  "targets": [
    "wikipedia.org"
  ],
  "fastQualification": false
}
```

# Actor output Schema

## `results` (type: `string`):

Successful Moz domain analyses from the default dataset overview.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "targets": [
        "wikipedia.org"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/moz-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "targets": ["wikipedia.org"] }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/moz-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "targets": [
    "wikipedia.org"
  ]
}' |
apify call maximedupre/moz-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/moz-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/CVFRvddI5KUiDRSpx/builds/wpbLpFFm14eVNa9Fq/openapi.json
