Moz Domain Authority Checker & SEO Metrics Scraper
Pricing
from $6.00 / 1,000 per domain checkeds
Moz Domain Authority Checker & SEO Metrics Scraper
Check Domain Authority (DA), spam score, backlinks, ranking keywords, and 13 SEO metrics from Moz.com free analysis. No Moz Pro subscription needed. Analyze up to 10 domains per run.
Pricing
from $6.00 / 1,000 per domain checkeds
Rating
5.0
(2)
Developer
seo-scraper
Actor stats
0
Bookmarked
4
Total users
2
Monthly active users
2 days ago
Last modified
Categories
Share
Moz Domain Authority Checker
Extract Domain Authority, spam score, backlinks, ranking keywords, competitors, and 13 total SEO metrics from Moz.com free domain analysis — without needing a Moz Pro subscription or API key.
This lightweight actor uses plain HTTP requests with TLS fingerprint impersonation (no browser), making it fast, cheap, and reliable. Analyze up to 10 domains per run.
What data can you extract?
For every domain the actor returns a structured JSON with 4 core metrics and 9 detailed data arrays:
Core metrics
| Metric | Description | Example |
|---|---|---|
| Domain Authority (DA) | Moz's 0-100 score predicting how well a site ranks | 94 |
| Spam Score | Percentage indicating likelihood of being penalized | 1 |
| Linking Root Domains | Unique root domains that link to the site | 1,300,000 |
| Ranking Keywords | Total keywords the domain ranks for in Google | 9,000,000 |
Detailed analysis arrays
| Data | What's inside |
|---|---|
| Top Pages by Links | Highest-authority pages with their Page Authority (PA) scores |
| Top Linking Domains | Most valuable domains linking to the site with their DA |
| Discovered & Lost Links | Monthly trend of new and lost linking domains (up to 60 days) |
| Keywords by Est. Clicks | Keywords sorted by estimated organic click volume |
| Top Ranking Keywords | Keywords where the domain ranks highest |
| Branded Keywords | Brand-related search terms with monthly volume |
| Keyword Ranking Distribution | Breakdown by rank position (#1-3, #4-10, #11-20, etc.) |
| Top Search Competitors | Competing domains with DA and visibility scores |
| Top Questions | Related questions from "People Also Ask" with relevance scores |
Use cases
- SEO audits — Bulk-check DA and spam scores across your portfolio or client list
- Competitor research — Compare Domain Authority and keyword overlap with competitors
- Link building — Find top linking domains and discover new backlink opportunities
- Content strategy — Identify top-ranking keywords, branded terms, and FAQ questions
- Due diligence — Evaluate domain quality and spam risk before purchasing or partnering
Input
| Parameter | Type | Default | Description |
|---|---|---|---|
domains | string[] | required | 1-10 domains to check. Protocols (https://), www., and trailing slashes are stripped automatically |
maxRetries | integer | 10 | Retry attempts per domain. Higher values improve reliability but increase run time |
proxyConfiguration | object | Residential | Apify proxy configuration. Residential proxies are strongly recommended for bypassing Cloudflare |
Example input
{"domains": ["google.com", "apple.com", "github.com"],"maxRetries": 10,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
Tip: You don't need to clean up your domain list — the actor handles
https://www.example.com/pathand normalizes it toexample.com. Duplicates are automatically removed.
Output
Each domain produces one dataset item with all 13 metrics. All domains are processed concurrently and results are pushed to the dataset immediately as they complete.
Example output (google.com)
{"success": true,"domain": "google.com","errorCode": null,"error": null,"domain_authority": 94,"spam_score": 1,"linking_root_domains": 1300000,"ranking_keywords": 8300000,"top_pages_by_links": [{ "link": "https://google.com/", "pa": 90 },{ "link": "https://google.com/chrome", "pa": 75 },{ "link": "https://google.com/maps/place/", "pa": 75 },{ "link": "https://google.com/maps", "pa": 74 }],"top_linking_domains": [{ "domain": "www.google.com", "da": 100 },{ "domain": "youtube.com", "da": 100 },{ "domain": "linkedin.com", "da": 99 },{ "domain": "wordpress.org", "da": 99 }],"discovered_and_lost_linking_domains": [{ "date": "12/14", "discovered": 490, "lost": -142 }],"keywords_by_estimated_clicks": [{ "keyword": "gmail", "visibility": 35688971 }],"top_ranking_keywords": [{ "keyword": "google", "rank": 1 }],"branded_keywords": [{ "keyword": "google", "volume": 50940000 }],"keyword_ranking_distribution": [{ "rank_position": "#1-3", "domain": "google.com", "amount": 1340196 }],"top_search_competitors": [{ "domain": "www.google.com", "da": 100, "visibility": 10.26 }],"top_questions": [{ "question": "How do I access Google Play on Android?", "relevance": 156.49 }],"checkTime": "2026-03-27T12:00:00.000Z","timeMs": 3200,"attempts": 1}
Dataset views
The output dataset includes 5 pre-configured views for easy exploration in the Apify Console:
| View | Fields shown |
|---|---|
| Main Metrics | Domain, DA, Spam %, Backlinks, Keywords, Status |
| Keywords Analysis | Top keywords, keywords by clicks, branded keywords |
| Backlinks Analysis | Linking domains, top pages, link history |
| Competitive Analysis | Competitors, ranking distribution, top questions |
| Complete Data | All fields |
Error handling
When a domain fails, the result still appears in the dataset with success: false and a structured errorCode:
| Error code | Meaning | What to do |
|---|---|---|
CLOUDFLARE_BLOCKED | Anti-bot protection not bypassed | Try again with RESIDENTIAL proxy and higher maxRetries |
NO_DATA | Moz has no metrics for this domain | Domain is too new or has no backlinks — this is expected |
RATE_LIMITED | Free analysis limit reached | Increase maxRetries to cycle through more proxy IPs |
NETWORK_ERROR | Connection timeout or DNS failure | Check domain spelling, retry later |
PARSE_ERROR | Page loaded but data extraction failed | Moz may have changed their page layout — open an issue |
How it works
- Validates input domains — normalizes URLs, removes duplicates, enforces the 10-domain limit
- Configures Apify proxy with residential or datacenter rotation (fresh IP per request)
- Fetches all domains concurrently using
curl_cffiwith Chrome TLS fingerprint impersonation - Detects errors — Cloudflare challenges, rate limit redirects, and "no data" pages before parsing
- Parses the HTML using BeautifulSoup, extracting all 13 metric sections from cards, tables, and chart scripts
- Retries on failure with exponential backoff (1.5s x attempt, capped at 10s, with random jitter)
- Pushes each result to the dataset immediately — no waiting for all domains to finish
No browser required. This actor uses lightweight HTTP requests with ~256 MB RAM, keeping compute costs low.
Integrations
Python
from apify_client import ApifyClientclient = ApifyClient('YOUR_API_TOKEN')run = client.actor('your-username/moz-domain-authority-checker').call(run_input={'domains': ['example.com', 'competitor.com'],'maxRetries': 10,'proxyConfiguration': {'useApifyProxy': True,'apifyProxyGroups': ['RESIDENTIAL'],},})for item in client.dataset(run['defaultDatasetId']).iterate_items():print(f"{item['domain']}: DA={item['domain_authority']}, Spam={item['spam_score']}%")
JavaScript / Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });const run = await client.actor('your-username/moz-domain-authority-checker').call({domains: ['example.com', 'competitor.com'],maxRetries: 10,proxyConfiguration: {useApifyProxy: true,apifyProxyGroups: ['RESIDENTIAL'],},});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const item of items) {console.log(`${item.domain}: DA=${item.domain_authority}, Spam=${item.spam_score}%`);}
Webhooks and scheduling
- Set up a webhook to send results to your app, Slack, or Google Sheets when a run completes
- Use scheduled runs to track Domain Authority changes over time (weekly or monthly)
Cost estimate
| Component | Cost |
|---|---|
| Compute | ~0.01 USD per domain (256 MB, ~3s per domain) |
| Residential proxy | ~0.01-0.03 USD per domain depending on retries |
| Typical 10-domain run | ~0.20-0.50 USD total |
Save money: Use
DATACENTERproxy groups for non-critical checks — it's 5-10x cheaper than residential, though slightly less reliable against Cloudflare.
Limitations
- 10 domains per run — for larger batches, schedule multiple runs or use the API to chain them
- Free Moz data only — the actor scrapes Moz's public domain analysis page, not the paid Moz Pro API
- Rate limits — Moz may throttle requests; the actor handles this with automatic retries and proxy rotation
- Data freshness — metrics reflect what Moz shows on their free analysis page, which may lag behind Moz Pro data
FAQ
Do I need a Moz account?
No. The actor scrapes the free public analysis page at moz.com/domain-analysis.
Why did a domain return NO_DATA? Moz doesn't have metrics for very new domains or domains with no backlinks. This is a Moz limitation, not an actor issue.
Why is Domain Authority different from what I see on Moz?
Make sure you're comparing the same domain format. The actor strips www. — so google.com and www.google.com may show different DA values on Moz.
Can I run more than 10 domains? Not in a single run. Use the Apify API or scheduler to chain multiple runs for larger batches.
Changelog
- v1.0 — Initial release. Browser-based (nodriver), 13 metrics, structured error codes, 10-domain limit.
Support
Found a bug or have a feature request? Open an issue on the actor's page or contact through Apify Console.