# MOZ Scraper (`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
- **Stats:** 28 total users, 7 monthly users, 56.1% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.65 / 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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# 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, 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 submitted value saved for that domain, then lists available authority and spam metrics, linking-domain counts, top pages, top linking domains, and history. 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 Domain Authority history off for current metrics. Enable it when you need archived monthly observations because it substantially slows collection.
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 or more bare domains, website URLs, or Moz domain-analysis URLs. The Actor normalizes each accepted value to a canonical domain and processes duplicate domains once.

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `targets` | array of strings | Required. Lists the domains or URLs to analyze. Values are normalized to canonical domains, and repeated canonical domains are processed once. |
| `includeAuthorityHistory` | boolean | Optional, defaults to `false`. Collects archived monthly Domain Authority observations. This substantially slows collection. |

**Example input**

This example is the public input from a successful current-beta run.

```json
{
  "targets": [
    "https://moz.com/domain-analysis/openai.com"
  ],
  "includeAuthorityHistory": false
}
```

#### 🧾 Output

The default dataset has one output shape: a successful public Moz domain analysis for each canonical domain. Arrays can be empty, and scalar metrics can be `null` when Moz does not expose them.

**Domain analysis fields**

| Field | Type | What it does |
| --- | --- | --- |
| `domain` | string | The canonical domain analyzed by Moz. |
| `submittedTarget` | string | The first submitted 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. |
| `authorityHistory` | array of objects | Archived Domain Authority observations. Months without a capture are omitted. |
| `authorityHistory[].archiveTimestamp` | string | The timestamp or month for an archived public Moz report. |
| `authorityHistory[].domainAuthority` | integer | The Domain Authority score from that archived report. |
| `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. |
| `topPages` | array of objects | Visible top pages and their Page Authority values. |
| `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. |
| `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. |
| `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. |
| `missingFields` | array of strings | Core metric fields that Moz did not expose for an otherwise successful analysis. |

**Domain analysis row**

This genuine row is copied from the latest successful current-beta run. The run used `includeAuthorityHistory: false`, so optional history and unavailable-field lists are not present in this row.

```json
{
  "domain": "openai.com",
  "submittedTarget": "https://moz.com/domain-analysis/openai.com",
  "domainAuthority": 92,
  "pageAuthority": 80,
  "linkingRootDomains": 374000,
  "spamScore": 2,
  "topPages": [
    {
      "pageUrl": "chat.openai.com/",
      "pageAuthority": 80
    },
    {
      "pageUrl": "openai.com/",
      "pageAuthority": 80
    },
    {
      "pageUrl": "openai.com/blog/chatgpt",
      "pageAuthority": 76
    },
    {
      "pageUrl": "openai.com/blog/chatgpt/",
      "pageAuthority": 75
    },
    {
      "pageUrl": "chat.openai.com/chat",
      "pageAuthority": 75
    },
    {
      "pageUrl": "chat.openai.com/auth/login",
      "pageAuthority": 74
    },
    {
      "pageUrl": "openai.com/dall-e-2/",
      "pageAuthority": 74
    }
  ],
  "topLinkingDomains": [
    {
      "domain": "linkedin.com",
      "domainAuthority": 99
    },
    {
      "domain": "apple.com",
      "domainAuthority": 99
    },
    {
      "domain": "googleusercontent.com",
      "domainAuthority": 99
    },
    {
      "domain": "docs.google.com",
      "domainAuthority": 98
    },
    {
      "domain": "cloudflare.com",
      "domainAuthority": 98
    },
    {
      "domain": "wordpress.org",
      "domainAuthority": 98
    },
    {
      "domain": "microsoft.com",
      "domainAuthority": 98
    }
  ],
  "linkingDomainHistory": [
    {
      "label": "07/07",
      "discovered": 1221,
      "lost": -492
    },
    {
      "label": "07/08",
      "discovered": 926,
      "lost": -578
    },
    {
      "label": "07/09",
      "discovered": 909,
      "lost": -591
    },
    {
      "label": "07/10",
      "discovered": 1192,
      "lost": -347
    },
    {
      "label": "07/11",
      "discovered": 935,
      "lost": -233
    },
    {
      "label": "07/12",
      "discovered": 825,
      "lost": -303
    },
    {
      "label": "07/13",
      "discovered": 1032,
      "lost": -232
    },
    {
      "label": "07/14",
      "discovered": 765,
      "lost": -219
    },
    {
      "label": "07/15",
      "discovered": 723,
      "lost": -250
    },
    {
      "label": "07/16",
      "discovered": 803,
      "lost": -245
    },
    {
      "label": "07/17",
      "discovered": 640,
      "lost": -189
    },
    {
      "label": "07/18",
      "discovered": 645,
      "lost": -233
    },
    {
      "label": "07/19",
      "discovered": 712,
      "lost": -215
    },
    {
      "label": "07/20",
      "discovered": 541,
      "lost": -192
    },
    {
      "label": "07/21",
      "discovered": 507,
      "lost": -218
    },
    {
      "label": "07/22",
      "discovered": 662,
      "lost": -189
    },
    {
      "label": "07/23",
      "discovered": 533,
      "lost": -239
    },
    {
      "label": "07/24",
      "discovered": 522,
      "lost": -194
    },
    {
      "label": "07/25",
      "discovered": 654,
      "lost": -137
    },
    {
      "label": "07/26",
      "discovered": 570,
      "lost": -139
    },
    {
      "label": "07/27",
      "discovered": 447,
      "lost": -125
    },
    {
      "label": "07/28",
      "discovered": 652,
      "lost": -152
    },
    {
      "label": "07/29",
      "discovered": 501,
      "lost": -197
    },
    {
      "label": "07/30",
      "discovered": 405,
      "lost": -174
    },
    {
      "label": "07/31",
      "discovered": 118,
      "lost": -66
    },
    {
      "label": "08/01",
      "discovered": 69,
      "lost": -56
    },
    {
      "label": "08/02",
      "discovered": 46,
      "lost": -47
    },
    {
      "label": "08/03",
      "discovered": 43,
      "lost": -43
    },
    {
      "label": "08/04",
      "discovered": 137,
      "lost": -51
    },
    {
      "label": "08/05",
      "discovered": 807,
      "lost": -235
    },
    {
      "label": "08/06",
      "discovered": 614,
      "lost": -236
    },
    {
      "label": "08/07",
      "discovered": 879,
      "lost": -331
    },
    {
      "label": "08/08",
      "discovered": 494,
      "lost": -231
    },
    {
      "label": "08/09",
      "discovered": 372,
      "lost": -185
    },
    {
      "label": "08/10",
      "discovered": 1035,
      "lost": -266
    },
    {
      "label": "08/11",
      "discovered": 718,
      "lost": -225
    },
    {
      "label": "08/12",
      "discovered": 609,
      "lost": -233
    },
    {
      "label": "08/13",
      "discovered": 801,
      "lost": -165
    },
    {
      "label": "08/14",
      "discovered": 736,
      "lost": -170
    },
    {
      "label": "08/15",
      "discovered": 693,
      "lost": -215
    },
    {
      "label": "08/16",
      "discovered": 1003,
      "lost": -232
    },
    {
      "label": "08/17",
      "discovered": 701,
      "lost": -164
    },
    {
      "label": "08/18",
      "discovered": 646,
      "lost": -192
    },
    {
      "label": "08/19",
      "discovered": 1119,
      "lost": -267
    },
    {
      "label": "08/20",
      "discovered": 870,
      "lost": -256
    },
    {
      "label": "08/21",
      "discovered": 797,
      "lost": -281
    },
    {
      "label": "08/22",
      "discovered": 1135,
      "lost": -218
    },
    {
      "label": "08/23",
      "discovered": 782,
      "lost": -192
    },
    {
      "label": "08/24",
      "discovered": 718,
      "lost": -198
    },
    {
      "label": "08/25",
      "discovered": 974,
      "lost": -174
    },
    {
      "label": "08/26",
      "discovered": 691,
      "lost": -163
    },
    {
      "label": "08/27",
      "discovered": 527,
      "lost": -198
    },
    {
      "label": "08/28",
      "discovered": 92,
      "lost": -59
    },
    {
      "label": "08/29",
      "discovered": 147,
      "lost": -57
    },
    {
      "label": "08/30",
      "discovered": 731,
      "lost": -155
    },
    {
      "label": "08/31",
      "discovered": 880,
      "lost": -236
    },
    {
      "label": "09/01",
      "discovered": 684,
      "lost": -217
    },
    {
      "label": "09/02",
      "discovered": 324,
      "lost": -156
    },
    {
      "label": "09/03",
      "discovered": 694,
      "lost": -127
    },
    {
      "label": "09/04",
      "discovered": 737,
      "lost": -155
    },
    {
      "label": "09/05",
      "discovered": 657,
      "lost": -156
    }
  ]
}
```

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.

##### 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.

##### Does Domain Authority history slow the run?

Yes. This option substantially slows collection. Leave it off for current metrics and turn it on when you need archived monthly Domain Authority observations.

##### 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`):

Enter 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.

## `includeAuthorityHistory` (type: `boolean`):

Collect the historical Domain Authority timeline for each domain. This substantially slows the run.

## Actor input object example

```json
{
  "targets": [
    "wikipedia.org"
  ],
  "includeAuthorityHistory": 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/7wFqOTfjIL0CVpi07/openapi.json
