# Moz Domain Authority Scraper - Bulk DA, Spam Score & Links (`parseforge/moz-domain-authority-scraper`) Actor

Bulk Moz Domain Authority checker, no Moz account: DA, homepage PA, Spam Score, linking domains, keywords and 60-day link history. Export CSV, Excel, JSON, XML.

- **URL**: https://apify.com/parseforge/moz-domain-authority-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** SEO tools, Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 domain reports

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

![ParseForge Banner](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner-v4.webp)

## 🏆 Moz Domain Authority Scraper

> 🚀 **Export Moz Domain Authority for any list of domains in seconds.** 22 fields per domain, no Moz Pro account, no API key, and a 60-day daily history of discovered and lost linking domains in every row.

This Actor reads Moz's public Domain Authority Checker, the free report at `moz.com/domain-analysis`, and turns it into clean dataset rows. Paste a list of domains or URLs and get back each site's Domain Authority, the Page Authority of its homepage, its Spam Score, how many root domains link to it, how many keywords it ranks for, its 7 strongest pages, its 7 strongest linking domains and a day-by-day record of linking domains gained and lost over the last 60 days.

Moz only gives each visitor 3 free reports a day and puts the report page behind a Cloudflare check. The Actor handles both for you: every 3 domains it opens a fresh stealth browser on a fresh residential IP, so a list of 1,000 domains runs as one job. In the verification runs on the final configuration, 41 of 41 domains came back with a full report.

| 🎯 Target Audience | 💡 Primary Use Cases |
|---|---|
| SEO agencies and consultants | Bulk DA audits for clients and competitors |
| Link builders and outreach teams | Qualifying prospect sites by DA and Spam Score |
| Domain investors | Screening expired and for-sale domains before buying |
| Sales and lead-gen teams | Scoring domain lists by authority before outreach |
| Content and PR teams | Picking publications worth pitching |
| Data teams and AI builders | Feeding authority signals into models and dashboards |

### 📋 What the Moz Domain Authority Scraper does

1. Takes a list of domains or URLs and normalizes them. `https://www.stripe.com/pricing`, `WWW.STRIPE.COM` and `stripe.com` all become `stripe.com`, and duplicates are dropped before anything is fetched. Entries that are not domains are flagged, not sent.
2. Opens Moz's free Domain Authority Checker for each domain through a stealth browser that clears Moz's Cloudflare check.
3. Rotates to a new residential IP every 3 domains, which is exactly Moz's free allowance per visitor, and retries on a new IP when an address has already spent its quota.
4. Reads the four headline metrics (Domain Authority, Linking Root Domains, Ranking Keywords, Spam Score), the Top Pages and Top Linking Domains tables, and the data behind Moz's "Discovered and Lost Linking Domains" chart.
5. Expands Moz's abbreviated counts (`4.6m` becomes `4600000`) while keeping Moz's own display text beside them, converts the chart's `MM/DD` labels into real ISO dates, and sums the 60 days into discovered, lost and net totals.
6. Flags domains Moz has no data for with `hasMozData: "No"` and delivers them free of charge.

> 💡 **Why it matters:** Moz Pro starts at a monthly seat, and the free checker stops after 3 lookups a day. Qualifying a list of 500 guest-post prospects by hand takes a week of browser sessions. This Actor turns it into one scheduled run and a spreadsheet.

### 🎬 Full Demo (🚧 Coming soon)

### 📊 Output

One row per domain, 22 fields. Arrays stay arrays in JSON and flatten cleanly in CSV and Excel.

| Field | Type | Description |
|---|---|---|
| 🖼 `imageUrl` | string | Favicon of the domain |
| 🌐 `domain` | string | Domain as Moz reports it |
| 🔗 `url` | string | The Moz report page for the domain |
| ⌨️ `input` | string | What you entered, before normalization |
| 🏆 `domainAuthority` | number | Moz Domain Authority, 1-100 |
| 📄 `homepagePageAuthority` | number | Page Authority of the site's homepage, when it is among the top pages |
| 🚫 `spamScorePercent` | number | Moz Spam Score, as a percentage |
| 🔗 `linkingRootDomains` | number | Unique root domains linking to the site |
| 🔗 `linkingRootDomainsDisplay` | string | The same count as Moz prints it (`11.9k`) |
| 🔑 `rankingKeywords` | number | Keywords the domain ranks for |
| 🔑 `rankingKeywordsDisplay` | string | The same count as Moz prints it |
| 📈 `discoveredLinkingDomains60d` | number | New linking domains found in the last 60 days |
| 📉 `lostLinkingDomains60d` | number | Linking domains lost in the last 60 days |
| ⚖️ `netLinkingDomains60d` | number | Discovered minus lost |
| 🗓 `linkHistoryFrom` / `linkHistoryTo` | string | Date range of the link history |
| ✅ `hasMozData` | string | `Yes`, or `No` when Moz knows nothing about the domain |
| 📄 `topPages` | array | 7 strongest pages: URL and Page Authority |
| 🌍 `topLinkingDomains` | array | 7 strongest linking domains: domain and DA |
| 📊 `linkHistory` | array | One entry per day: date, discovered, lost |
| 🕒 `scrapedAt` | string | ISO timestamp of the lookup |
| ❌ `error` | string | Filled only on rows that failed |

Three real records from a verification run (arrays trimmed to 2 entries for readability; a real row carries 7 top pages, 7 linking domains and about 60 days of history):

```json
{
  "imageUrl": "https://www.google.com/s2/favicons?domain=adobe.com&sz=128",
  "domain": "adobe.com",
  "url": "https://moz.com/domain-analysis?site=adobe.com",
  "input": "adobe.com",
  "domainAuthority": 96,
  "homepagePageAuthority": 88,
  "spamScorePercent": 5,
  "linkingRootDomains": 3000000,
  "linkingRootDomainsDisplay": "3m",
  "rankingKeywords": 2700000,
  "rankingKeywordsDisplay": "2.7m",
  "discoveredLinkingDomains60d": 50764,
  "lostLinkingDomains60d": 40672,
  "netLinkingDomains60d": 10092,
  "linkHistoryFrom": "2026-07-23",
  "linkHistoryTo": "2026-09-21",
  "hasMozData": "Yes",
  "topPages": [
    { "url": "https://www.adobe.com/go/getflashplayer", "pageAuthority": 92 },
    { "url": "https://get.adobe.com/flashplayer/", "pageAuthority": 89 }
  ],
  "topLinkingDomains": [
    { "domain": "www.google.com", "domainAuthority": 100 },
    { "domain": "youtube.com", "domainAuthority": 100 }
  ],
  "linkHistory": [
    { "date": "2026-09-20", "discovered": 1587, "lost": 773 },
    { "date": "2026-09-21", "discovered": 1407, "lost": 656 }
  ],
  "scrapedAt": "2026-09-25T18:05:38.277Z",
  "error": null
}
```

```json
{
  "domain": "apple.com",
  "domainAuthority": 99,
  "homepagePageAuthority": 94,
  "spamScorePercent": 5,
  "linkingRootDomains": 11400000,
  "linkingRootDomainsDisplay": "11.4m",
  "rankingKeywords": 7800000,
  "rankingKeywordsDisplay": "7.8m",
  "discoveredLinkingDomains60d": 1722101,
  "lostLinkingDomains60d": 141668,
  "netLinkingDomains60d": 1580433,
  "hasMozData": "Yes",
  "linkHistory": [
    { "date": "2026-09-20", "discovered": 28835, "lost": 2717 },
    { "date": "2026-09-21", "discovered": 26614, "lost": 2452 }
  ]
}
```

```json
{
  "domain": "hp.com",
  "domainAuthority": 93,
  "homepagePageAuthority": 73,
  "spamScorePercent": 1,
  "linkingRootDomains": 480500,
  "linkingRootDomainsDisplay": "480.5k",
  "rankingKeywords": 424800,
  "rankingKeywordsDisplay": "424.8k",
  "discoveredLinkingDomains60d": 5273,
  "lostLinkingDomains60d": 9612,
  "netLinkingDomains60d": -4339,
  "hasMozData": "Yes",
  "topPages": [
    { "url": "https://www.hpl.hp.com/techreports/Compaq-DEC/WRL-95-4.html", "pageAuthority": 82 },
    { "url": "https://www.cup.hp.com/netperf/NetperfPage.html", "pageAuthority": 80 }
  ]
}
```

### ✨ Why choose this Actor

- **No Moz account needed.** The Actor reads only the free report Moz shows to anonymous visitors.
- **Past the 3-a-day limit.** A fresh residential IP every 3 domains, handled automatically, so one run can cover thousands of domains.
- **Link velocity, not just a snapshot.** Every row carries 60 days of discovered and lost linking domains with real dates, plus the 60-day totals, so you can see whether a site is gaining or bleeding links. The hp.com sample above lost more linking domains than it gained.
- **Numbers you can sort.** Counts come as integers, with Moz's own display string kept beside them.
- **Homepage Page Authority** picked out of the top pages table, so you do not have to look for the root URL yourself.
- **Empty lookups are free.** A domain Moz has no data for is delivered with `hasMozData: "No"` and is never charged.
- **No nulls.** `"Not Disclosed"` where Moz withholds a value (a Spam Score of `--`), `[]` for empty lists. CSV and Excel exports stay clean.

### 📈 How it compares to alternatives

| | This Actor | Other Moz scrapers on Apify | Moz free checker | Moz Pro / Moz API |
|---|---|---|---|---|
| Moz login required | No | No | No | Yes, paid |
| Domains per day | Your list | Your list | 3 | Plan quota |
| DA, Spam Score, linking domains, keywords | Yes | Yes | Yes | Yes |
| Top pages with PA / top linking domains with DA | 7 / 7 | 7 / 7 | 7 / 7 | Full lists |
| Daily discovered/lost links with dates | Yes, 60 days | Varies | Chart only | Yes |
| Empty lookups charged | No | Varies | Free | Counted |
| Typical price per 1,000 domains | $5-$7 | $2.65-$20 | Free, 3/day | Per seat or per row |

**Ceilings you should know before you buy**, all of them limits of Moz's free report, not of this Actor: 7 top pages and 7 top linking domains per domain, counts published only in abbreviated form (`11.9k`), so expanded numbers are accurate to Moz's 3-4 significant digits, no keyword list, no competitor list and no Page Authority for arbitrary URLs. Moz reports root domains: `www.` and paths are dropped, subdomains such as `blog.hubspot.com` return Moz's root-domain figures.

### 🚀 How to use

1. Create a free Apify account. New accounts come with **$5 in free credit**. [Sign up here](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the Moz Domain Authority Scraper and go to the **Input** tab.
3. Paste your domains into **Domains**, one per line. Full URLs work too.
4. Set **Max Items** to the number of domains you want checked.
5. Leave the proxy on its default (residential, US). It is what lets the Actor go past 3 domains.
6. Click **Start**. Each domain logs its DA, Spam Score and link counts as it lands.
7. Download the dataset as CSV, Excel, JSON or XML from the **Storage** tab, or pull it from the API.

```json
{
  "domains": ["apify.com", "github.com", "stripe.com", "shopify.com", "wikipedia.org"],
  "maxItems": 5
}
```

### 💼 Business use cases

#### Link-building prospect qualification

A guest-post or outreach list arrives as a few hundred domains. Run it once and sort by `domainAuthority`, then drop anything with a `spamScorePercent` above your threshold. In the verification sample, target.com showed a 24% Spam Score and bestbuy.com 28% next to DAs above 90, the kind of signal that is invisible until you check.

#### Domain investing and expired-domain screening

Before bidding on a domain, check what authority it still carries and whether it is still gaining links. `netLinkingDomains60d` and the daily `linkHistory` show whether the backlink profile is alive or decaying, and `topLinkingDomains` shows which sites are worth the price.

#### Client and competitor SEO reporting

Put a client and its competitors in one run and get one comparable row each: DA, homepage PA, linking domains, ranking keywords and 60-day link velocity. Schedule it monthly and the history builds itself, with no seat to share.

#### Lead scoring for agencies and SaaS sales

Enrich a prospect list with authority before anyone writes an email. A DA 60 site gaining 1,500 net linking domains in 60 days (apify.com in our tests) is a different conversation from a DA 20 site losing links.

### 🔌 Automating Moz Domain Authority Scraper

- **Make** and **Zapier**: trigger a run when a new domain lands in a sheet or CRM, then write DA and Spam Score back onto the record.
- **Slack**: post a weekly note of the domains whose DA or net linking domains moved most.
- **Airbyte**: sync the dataset into BigQuery, Snowflake or Postgres next to your own SEO data.
- **GitHub Actions**: call the Actor from a workflow and commit the CSV so authority history is versioned.
- **Google Drive**: drop each export into a shared folder for the whole team.
- **Apify Scheduler**: run the same list every month and chart the trend.

### 🌟 Beyond business use cases

- **Research.** Study how authority, spam signals and link velocity relate across industries or across a fixed sample of sites over time.
- **Personal.** Check your own blog or side project and see which sites link to it.
- **Non-profit.** Benchmark your site against peer organisations without paying for a seat.
- **Experimentation.** Load the dataset into a notebook or an LLM and cluster domains by authority profile and link velocity.

### 🤖 Ask an AI assistant about this scraper

Paste this into ChatGPT, Claude or Gemini to get help shaping a run:

> I am using the Moz Domain Authority Scraper on Apify. It returns 22 fields per domain from Moz's free Domain Authority Checker: Domain Authority, homepage Page Authority, Spam Score, linking root domains, ranking keywords, the 7 top pages with Page Authority, the 7 top linking domains with DA, and a 60-day daily history of discovered and lost linking domains with totals. Help me design a run for \[describe your goal] and tell me which fields to use.

### ❓ Frequently Asked Questions

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

No. The Actor reads the free report Moz shows to anonymous visitors. No Moz credential is used anywhere.

#### 🔢 How is this possible when Moz allows 3 free reports a day?

The limit is per visitor IP. The Actor opens a new browser on a new residential IP every 3 domains, and moves to another IP when one has already used its allowance. That is why the residential proxy is on by default.

#### 📊 How accurate are the numbers?

They are exactly Moz's numbers. Domain Authority, Page Authority and Spam Score are exact. Linking root domains and ranking keywords are published by Moz only in abbreviated form (`11.9k`), so the expanded integer is precise to the digits Moz shows; the original text is kept in the `...Display` fields.

#### 🗓 How fresh is the data?

It is Moz's live free report at the time of the run. The link history ends a few days before the run date, as Moz's own chart does, and `linkHistoryTo` tells you the last day covered.

#### 📈 What is the link history?

The data behind Moz's "Discovered and Lost Linking Domains" chart: for each of roughly the last 60 days, how many new linking domains Moz found and how many it lost. The Actor also sums them into `discoveredLinkingDomains60d`, `lostLinkingDomains60d` and `netLinkingDomains60d`.

#### 📄 Why is homepage Page Authority sometimes "Not Disclosed"?

Moz's free report lists the 7 pages with the highest Page Authority. When the homepage is not among them, its PA is not published, and the Actor says so instead of guessing.

#### 🌐 Can I check a subdomain or a specific page?

You can enter any URL, but Moz reports domains. Paths and `www.` are dropped, and subdomains return Moz's figures for the root domain. Page Authority for arbitrary URLs is not part of the free report.

#### 🧾 What happens with a domain Moz has no data for?

You get a row with DA 1, zero counts and `hasMozData: "No"`, and it is not charged. Entries that are not domains at all are listed as error rows and never charged either.

#### ⚡ How fast is it?

With the default 3 parallel sessions, 12 domains took about 90 seconds of working time in testing. Each session needs 10-20 seconds to clear Moz's Cloudflare check and then answers up to 3 domains. Raise **Parallel Sessions** for large lists.

#### 🌍 Do I need a proxy?

Yes, for more than 3 domains. The default residential US proxy is what gives each session its own IP. Without a proxy the Actor runs from a single IP and Moz stops answering after 3 domains.

#### 📥 What export formats are available?

CSV, JSON, Excel and XML from the Storage tab, plus the Apify API and the JavaScript and Python clients.

### 🔌 Integrate with any app

Every run's dataset is available through the [Apify API](https://docs.apify.com/api/v2), the [JavaScript client](https://docs.apify.com/api/client/js/) and the [Python client](https://docs.apify.com/api/client/python/), and through Apify's integrations with Make, Zapier, Airbyte, Slack, Google Drive, GitHub and webhooks. Schedule it, chain it after another Actor, or call it from your own code.

### 🔗 Recommended Actors

- [Semrush Scraper](https://apify.com/parseforge/semrush-scraper) - traffic, Authority Score, backlinks and top keywords for the same domain list.
- [Ahrefs Free Tools Scraper](https://apify.com/parseforge/ahrefs-tools-scraper) - Ahrefs Domain Rating, backlinks and keyword difficulty from its free tools.
- [Similarweb Traffic Scraper](https://apify.com/parseforge/similarweb-scraper) - visits, engagement and traffic sources to pair with authority.
- [RDAP Domain Lookup Scraper](https://apify.com/parseforge/rdap-domain-lookup-scraper) - registration, expiry and nameserver records for each domain.

> 💡 **Pro Tip:** browse the complete [ParseForge collection](https://apify.com/parseforge).

**🆘 Need Help?** [Open our contact form](https://tally.so/r/BzdKgA)

> **⚠️ Disclaimer:** This is an independent tool and is not affiliated with, endorsed by, or sponsored by Moz or SEOMoz, Inc. Domain Authority is a registered trademark of SEOMoz, Inc. The Actor collects only publicly available data from Moz's free report shown to anonymous visitors.

# Actor input Schema

## `domains` (type: `array`):

Domains or URLs to check, one per line (for example apify.com, https://www.stripe.com/pricing or blog.hubspot.com). Protocol, www and paths are stripped, and duplicates are removed. Each domain returns one Moz report row.

## `maxItems` (type: `integer`):

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## `maxConcurrency` (type: `integer`):

How many browser sessions check domains at the same time. Each session uses its own IP and answers up to 3 domains. Higher is faster; 3 is a safe default for 4 GB of memory.

## `proxyConfiguration` (type: `object`):

Residential proxies are on by default and required for more than 3 domains per run: every 3 domains need a new IP. Datacenter IPs are challenged by Cloudflare on the report page.

## Actor input object example

```json
{
  "domains": [
    "apify.com",
    "github.com",
    "stripe.com",
    "shopify.com",
    "wikipedia.org"
  ],
  "maxItems": 10,
  "maxConcurrency": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ],
    "apifyProxyCountry": "US"
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

Key authority metrics per domain

## `fullData` (type: `string`):

Complete dataset with all 22 fields, including top pages, top linking domains and the daily link history

# 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 = {
    "domains": [
        "apify.com",
        "github.com",
        "stripe.com",
        "shopify.com",
        "wikipedia.org"
    ],
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/moz-domain-authority-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 = {
    "domains": [
        "apify.com",
        "github.com",
        "stripe.com",
        "shopify.com",
        "wikipedia.org",
    ],
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/moz-domain-authority-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 '{
  "domains": [
    "apify.com",
    "github.com",
    "stripe.com",
    "shopify.com",
    "wikipedia.org"
  ],
  "maxItems": 10
}' |
apify call parseforge/moz-domain-authority-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/moz-domain-authority-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/rs9Ows3YRHcEMwRgG/builds/lfFBWYkZlo7a9PflG/openapi.json
