Pull real SEO metrics for any domain using Apify scrapers
SEO domain analyzer

Pull real SEO metrics for any domain using Apify scrapers for Semrush and Ahrefs data. Gets domain authority, organic traffic estimates, keyword rankings, backlink profiles, top performing pages, and auto-discovers competitors from…
--- name: seo-domain-analyzer description: > Pull real SEO metrics for any domain using Apify scrapers for Semrush and Ahrefs data. Gets domain authority, organic traffic estimates, keyword rankings, backlink profiles, top performing pages, and auto-discovers competitors from keyword overlap. No Semrush/Ahrefs subscription needed — uses Apify actors that scrape public pages. tags: [competitive-intel, seo] --- # SEO Domain Analyzer Pull real SEO performance data for any domain — no Semrush or Ahrefs subscription needed. Uses Apify actors that scrape Semrush/Ahrefs public pages to get authority scores, traffic estimates, keyword rankings, backlink profiles, and competitor discovery. ## Quick Start ```bash # Basic domain analysis
Overview
Pull real SEO performance data for any domain — no Semrush or Ahrefs subscription needed. Uses Apify actors that scrape Semrush/Ahrefs public pages to get authority scores, traffic estimates, keyword rankings, backlink profiles, and competitor discovery.
Manual install (npx, ZIP)
npx skills add gooseworks-ai/goose-skills --skill seo-domain-analyzer -g -a claude-codemkdir -p ~/.claude/skills && curl -sL https://codeload.github.com/gooseworks-ai/goose-skills/tar.gz/615c685f34f8 \
| tar -xz -C ~/.claude/skills --strip-components=4 goose-skills-615c685f34f8/skills/seo/capabilities/seo-domain-analyzerNew-Item -ItemType Directory -Force "$HOME\.claude\skills" | Out-Null; Invoke-WebRequest "https://m.agentalley.io/zip/2dba7d59995020133431/seo-domain-analyzer.zip" -OutFile "$env:TEMP\seo-domain-analyzer.zip"; Expand-Archive "$env:TEMP\seo-domain-analyzer.zip" -DestinationPath "$HOME\.claude\skills" -ForceConnects with Agent Alley MCP · agentalley.io/mcp
Files included
SKILL.md8.6 KBskill.meta.json281 Bscripts/1 file · 20.9 KB
Read the files here
Show the full text278 lines
SEO Domain Analyzer
Pull real SEO performance data for any domain — no Semrush or Ahrefs subscription needed. Uses Apify actors that scrape Semrush/Ahrefs public pages to get authority scores, traffic estimates, keyword rankings, backlink profiles, and competitor discovery.
Quick Start
# Basic domain analysis
python3 scripts/analyze_domain.py --domain "example.com"
# With competitor comparison
python3 scripts/analyze_domain.py \
--domain "example.com" \
--competitors "competitor1.com,competitor2.com,competitor3.com"
# Check specific keywords
python3 scripts/analyze_domain.py \
--domain "example.com" \
--keywords "cloud cost optimization,reduce aws bill,finops tools"
# Save output
python3 scripts/analyze_domain.py \
--domain "example.com" --output seo-profile.json
Inputs
| Parameter | Required | Default | Description |
|---|---|---|---|
| domain | Yes | — | Domain to analyze (e.g., "example.com") |
| competitors | No | auto-discovered | Comma-separated competitor domains |
| keywords | No | auto-inferred | Specific keywords to check rankings for |
| output | No | stdout | Path to save JSON output |
| skip-backlinks | No | false | Skip Ahrefs backlink analysis (saves ~$0.10) |
Cost
| Data Source | Apify Actor | Est. Cost |
|---|---|---|
| Domain overview (Semrush) | devnaz/semrush-scraper |
~$0.10/domain |
| Backlink profile (Ahrefs) | radeance/ahrefs-scraper |
~$0.10/domain |
| Keyword rank checks | apify/google-search-scraper |
~$0.002/keyword |
| Typical full run | ~$0.50-1.00 | |
| With 3 competitors | ~$1.50-3.00 |
Process
Phase 1: Domain Overview (Semrush Data)
Use Apify actor devnaz/semrush-scraper to get:
# Actor: devnaz/semrush-scraper
# Input: domain URL
{
"urls": ["https://example.com"]
}
Extracted metrics:
- Authority Score (0-100)
- Organic monthly traffic estimate
- Organic keywords count (how many keywords the domain ranks for)
- Paid traffic estimate (if any)
- Backlinks count (Semrush's count)
- Referring domains count
- Top organic keywords (keyword, position, traffic share)
- Top competitors (competing domains by keyword overlap)
- Traffic trend (month-over-month direction)
Phase 2: Backlink Profile (Ahrefs Data)
Use Apify actor radeance/ahrefs-scraper to get:
# Actor: radeance/ahrefs-scraper
# Input: domain for backlink analysis
{
"urls": ["https://example.com"],
"mode": "domain-overview"
}
Extracted metrics:
- Domain Rating (DR) (0-100)
- URL Rating of homepage
- Referring domains count and trend
- Backlinks total count
- Top referring domains (which sites link to them)
- Anchor text distribution (branded vs keyword vs generic)
- Dofollow vs nofollow ratio
Phase 3: Keyword Rank Verification
For specific keywords (user-provided or auto-inferred from Phase 1), verify actual rankings using Google search:
# Actor: apify/google-search-scraper
# Input: keyword queries
{
"queries": "cloud cost optimization",
"maxPagesPerQuery": 1,
"resultsPerPage": 10,
"countryCode": "us",
"languageCode": "en"
}
For each keyword:
- Does the target domain appear in top 10?
- What position?
- What specific URL ranks?
- Who else ranks? (competitive landscape for that keyword)
Keyword sources (in priority order):
- User-provided keywords
- Top organic keywords from Semrush data (Phase 1)
- Auto-inferred from domain content (WebSearch
site:[domain]to see page titles)
Phase 4: Top Pages Analysis
From the Semrush data, extract the highest-traffic pages:
- URL
- Estimated monthly traffic
- Primary keyword(s) driving traffic
- Number of ranking keywords
If Semrush doesn't provide per-page data, supplement with:
- WebSearch:
site:[domain]and note which pages appear first (proxy for importance) - WebSearch:
site:[domain] blogfor top blog content
Phase 5: Competitor Discovery
Competitors are identified from multiple sources:
- Semrush competitor data (Phase 1) — domains competing for same keywords
- User-provided competitors — always included
- Google SERP competitors — from Phase 3 keyword checks, note which domains consistently appear
For each competitor, run a lighter version of Phase 1 (domain overview only):
- Authority score
- Organic traffic estimate
- Keyword count
- Top keywords
Phase 6: Output
JSON Output
{
"domain": "example.com",
"analysis_date": "2026-02-25",
"domain_metrics": {
"semrush_authority_score": 45,
"ahrefs_domain_rating": 52,
"organic_monthly_traffic": 28500,
"organic_keywords": 1240,
"backlinks": 8930,
"referring_domains": 412,
"traffic_trend": "increasing"
},
"top_pages": [
{
"url": "https://example.com/blog/reduce-aws-costs",
"estimated_traffic": 3200,
"top_keyword": "reduce aws costs",
"ranking_keywords": 45
}
],
"keyword_rankings": [
{
"keyword": "cloud cost optimization",
"position": 4,
"url": "https://example.com/blog/cloud-cost-optimization-guide",
"serp_competitors": ["vantage.sh", "antimetal.com", "finout.io"]
}
],
"backlink_profile": {
"domain_rating": 52,
"total_backlinks": 8930,
"referring_domains": 412,
"dofollow_ratio": 0.78,
"top_referring_domains": ["techcrunch.com", "producthunt.com", ...],
"anchor_text_distribution": {
"branded": 0.45,
"keyword": 0.22,
"generic": 0.18,
"url": 0.15
}
},
"competitors": [
{
"domain": "competitor1.com",
"authority_score": 62,
"organic_traffic": 45000,
"organic_keywords": 2100,
"keyword_overlap": 340
}
]
}
Markdown Summary (also generated)
# SEO Domain Profile: example.com
**Date:** 2026-02-25
## Domain Metrics
| Metric | Value |
|--------|-------|
| Semrush Authority Score | 45/100 |
| Ahrefs Domain Rating | 52/100 |
| Monthly Organic Traffic | ~28,500 |
| Organic Keywords | 1,240 |
| Backlinks | 8,930 |
| Referring Domains | 412 |
| Traffic Trend | Increasing |
## Top Performing Pages
| # | URL | Est. Traffic | Top Keyword |
|---|-----|-------------|-------------|
| 1 | /blog/reduce-aws-costs | 3,200 | reduce aws costs |
| ... |
## Keyword Rankings
| Keyword | Position | URL | SERP Competitors |
|---------|----------|-----|-----------------|
| cloud cost optimization | #4 | /blog/cloud-cost... | vantage.sh, antimetal.com |
| ... |
## Backlink Profile
- Domain Rating: 52/100
- Referring Domains: 412
- Dofollow Ratio: 78%
- Top linking sites: TechCrunch, Product Hunt, ...
## Competitor Comparison
| Domain | Authority | Traffic | Keywords | Overlap |
|--------|-----------|---------|----------|---------|
| example.com | 45 | 28.5K | 1,240 | — |
| competitor1.com | 62 | 45K | 2,100 | 340 |
| ... |
Tips
- Semrush scraper data quality varies. The Apify actors scrape public Semrush pages, which show limited data for non-subscribers. Traffic estimates and top keywords are available, but detailed per-page breakdowns may be partial.
- Combine with site-content-catalog to get both the content inventory AND performance data — together they tell you what content exists AND which pieces actually drive traffic.
- Keyword rank verification via Google is the most reliable data point. Semrush/Ahrefs estimates can be off, but checking actual SERPs gives ground truth.
- Run competitors lighter. Full backlink analysis on 5 competitors gets expensive. Domain overview (Semrush only) is usually sufficient for comparison.
- Apify actors may break. These scrape Semrush/Ahrefs public pages, which can change. If an actor fails, fall back to the free
seo-traffic-analyzerskill which uses web search probes.
Fallback: Free Mode
If APIFY_API_TOKEN is not set or Apify actors fail, the script falls back to:
- WebSearch probes (like
seo-traffic-analyzerskill) site:[domain]for indexed page count- SimilarWeb free tier for traffic estimates
- Manual Google SERP checks for keyword rankings
This gives less precise data but still produces a useful report.
Dependencies
- Python 3.8+
requestslibraryAPIFY_API_TOKENenv var (for Apify mode; falls back to free probes without it)
| 1 | |
| 2 | name seo-domain-analyzer |
| 3 | description > |
| 4 | Pull real SEO metrics for any domain using Apify scrapers for Semrush and Ahrefs |
| 5 | data. Gets domain authority, organic traffic estimates, keyword rankings, backlink |
| 6 | profiles, top performing pages, and auto-discovers competitors from keyword overlap. |
| 7 | No Semrush/Ahrefs subscription needed — uses Apify actors that scrape public pages. |
| 8 | tags [competitive-intel, seo] |
| 9 | |
| 10 | |
| 11 | # SEO Domain Analyzer |
| 12 | |
| 13 | Pull real SEO performance data for any domain — no Semrush or Ahrefs subscription needed. Uses Apify actors that scrape Semrush/Ahrefs public pages to get authority scores, traffic estimates, keyword rankings, backlink profiles, and competitor discovery. |
| 14 | |
| 15 | ## Quick Start |
| 16 | |
| 17 | |
| 18 | # Basic domain analysis |
| 19 | python3 scripts/analyze_domain.py --domain "example.com" |
| 20 | |
| 21 | # With competitor comparison |
| 22 | python3 scripts/analyze_domain.py \ |
| 23 | --domain "example.com" \ |
| 24 | --competitors "competitor1.com,competitor2.com,competitor3.com" |
| 25 | |
| 26 | # Check specific keywords |
| 27 | python3 scripts/analyze_domain.py \ |
| 28 | --domain "example.com" \ |
| 29 | --keywords "cloud cost optimization,reduce aws bill,finops tools" |
| 30 | |
| 31 | # Save output |
| 32 | python3 scripts/analyze_domain.py \ |
| 33 | --domain "example.com" --output seo-profile.json |
| 34 | |
| 35 | |
| 36 | ## Inputs |
| 37 | |
| 38 | | Parameter | Required | Default | Description | |
| 39 | |-----------|----------|---------|-------------| |
| 40 | | domain | Yes | — | Domain to analyze (e.g., "example.com") | |
| 41 | | competitors | No | auto-discovered | Comma-separated competitor domains | |
| 42 | | keywords | No | auto-inferred | Specific keywords to check rankings for | |
| 43 | | output | No | stdout | Path to save JSON output | |
| 44 | | skip-backlinks | No | false | Skip Ahrefs backlink analysis (saves ~$0.10) | |
| 45 | |
| 46 | ## Cost |
| 47 | |
| 48 | | Data Source | Apify Actor | Est. Cost | |
| 49 | |-------------|------------|-----------| |
| 50 | | Domain overview (Semrush) | `devnaz/semrush-scraper` | ~$0.10/domain | |
| 51 | | Backlink profile (Ahrefs) | `radeance/ahrefs-scraper` | ~$0.10/domain | |
| 52 | | Keyword rank checks | `apify/google-search-scraper` | ~$0.002/keyword | |
| 53 | | **Typical full run** | | **~$0.50-1.00** | |
| 54 | | **With 3 competitors** | | **~$1.50-3.00** | |
| 55 | |
| 56 | ## Process |
| 57 | |
| 58 | ### Phase 1: Domain Overview (Semrush Data) |
| 59 | |
| 60 | Use Apify actor `devnaz/semrush-scraper` to get: |
| 61 | |
| 62 | |
| 63 | # Actor: devnaz/semrush-scraper |
| 64 | # Input: domain URL |
| 65 | { |
| 66 | "urls": ["https://example.com"] |
| 67 | } |
| 68 | |
| 69 | |
| 70 | **Extracted metrics:** |
| 71 | **Authority Score** (0-100) |
| 72 | **Organic monthly traffic** estimate |
| 73 | **Organic keywords count** (how many keywords the domain ranks for) |
| 74 | **Paid traffic** estimate (if any) |
| 75 | **Backlinks count** (Semrush's count) |
| 76 | **Referring domains count** |
| 77 | **Top organic keywords** (keyword, position, traffic share) |
| 78 | **Top competitors** (competing domains by keyword overlap) |
| 79 | **Traffic trend** (month-over-month direction) |
| 80 | |
| 81 | ### Phase 2: Backlink Profile (Ahrefs Data) |
| 82 | |
| 83 | Use Apify actor `radeance/ahrefs-scraper` to get: |
| 84 | |
| 85 | |
| 86 | # Actor: radeance/ahrefs-scraper |
| 87 | # Input: domain for backlink analysis |
| 88 | { |
| 89 | "urls": ["https://example.com"], |
| 90 | "mode": "domain-overview" |
| 91 | } |
| 92 | |
| 93 | |
| 94 | **Extracted metrics:** |
| 95 | **Domain Rating (DR)** (0-100) |
| 96 | **URL Rating** of homepage |
| 97 | **Referring domains** count and trend |
| 98 | **Backlinks** total count |
| 99 | **Top referring domains** (which sites link to them) |
| 100 | **Anchor text distribution** (branded vs keyword vs generic) |
| 101 | **Dofollow vs nofollow ratio** |
| 102 | |
| 103 | ### Phase 3: Keyword Rank Verification |
| 104 | |
| 105 | For specific keywords (user-provided or auto-inferred from Phase 1), verify actual rankings using Google search: |
| 106 | |
| 107 | |
| 108 | # Actor: apify/google-search-scraper |
| 109 | # Input: keyword queries |
| 110 | { |
| 111 | "queries": "cloud cost optimization", |
| 112 | "maxPagesPerQuery": 1, |
| 113 | "resultsPerPage": 10, |
| 114 | "countryCode": "us", |
| 115 | "languageCode": "en" |
| 116 | } |
| 117 | |
| 118 | |
| 119 | **For each keyword:** |
| 120 | Does the target domain appear in top 10? |
| 121 | What position? |
| 122 | What specific URL ranks? |
| 123 | Who else ranks? (competitive landscape for that keyword) |
| 124 | |
| 125 | **Keyword sources (in priority order):** |
| 126 | User-provided keywords |
| 127 | Top organic keywords from Semrush data (Phase 1) |
| 128 | Auto-inferred from domain content (WebSearch `site:[domain]` to see page titles) |
| 129 | |
| 130 | ### Phase 4: Top Pages Analysis |
| 131 | |
| 132 | From the Semrush data, extract the highest-traffic pages: |
| 133 | URL |
| 134 | Estimated monthly traffic |
| 135 | Primary keyword(s) driving traffic |
| 136 | Number of ranking keywords |
| 137 | |
| 138 | If Semrush doesn't provide per-page data, supplement with: |
| 139 | WebSearch: `site:[domain]` and note which pages appear first (proxy for importance) |
| 140 | WebSearch: `site:[domain] blog` for top blog content |
| 141 | |
| 142 | ### Phase 5: Competitor Discovery |
| 143 | |
| 144 | Competitors are identified from multiple sources: |
| 145 | |
| 146 | **Semrush competitor data** (Phase 1) — domains competing for same keywords |
| 147 | **User-provided competitors** — always included |
| 148 | **Google SERP competitors** — from Phase 3 keyword checks, note which domains consistently appear |
| 149 | |
| 150 | For each competitor, run a lighter version of Phase 1 (domain overview only): |
| 151 | Authority score |
| 152 | Organic traffic estimate |
| 153 | Keyword count |
| 154 | Top keywords |
| 155 | |
| 156 | ### Phase 6: Output |
| 157 | |
| 158 | #### JSON Output |
| 159 | |
| 160 | { |
| 161 | "domain": "example.com", |
| 162 | "analysis_date": "2026-02-25", |
| 163 | "domain_metrics": { |
| 164 | "semrush_authority_score": 45, |
| 165 | "ahrefs_domain_rating": 52, |
| 166 | "organic_monthly_traffic": 28500, |
| 167 | "organic_keywords": 1240, |
| 168 | "backlinks": 8930, |
| 169 | "referring_domains": 412, |
| 170 | "traffic_trend": "increasing" |
| 171 | }, |
| 172 | "top_pages": [ |
| 173 | { |
| 174 | "url": "https://example.com/blog/reduce-aws-costs", |
| 175 | "estimated_traffic": 3200, |
| 176 | "top_keyword": "reduce aws costs", |
| 177 | "ranking_keywords": 45 |
| 178 | } |
| 179 | ], |
| 180 | "keyword_rankings": [ |
| 181 | { |
| 182 | "keyword": "cloud cost optimization", |
| 183 | "position": 4, |
| 184 | "url": "https://example.com/blog/cloud-cost-optimization-guide", |
| 185 | "serp_competitors": ["vantage.sh", "antimetal.com", "finout.io"] |
| 186 | } |
| 187 | ], |
| 188 | "backlink_profile": { |
| 189 | "domain_rating": 52, |
| 190 | "total_backlinks": 8930, |
| 191 | "referring_domains": 412, |
| 192 | "dofollow_ratio": 0.78, |
| 193 | "top_referring_domains": ["techcrunch.com", "producthunt.com", ...], |
| 194 | "anchor_text_distribution": { |
| 195 | "branded": 0.45, |
| 196 | "keyword": 0.22, |
| 197 | "generic": 0.18, |
| 198 | "url": 0.15 |
| 199 | } |
| 200 | }, |
| 201 | "competitors": [ |
| 202 | { |
| 203 | "domain": "competitor1.com", |
| 204 | "authority_score": 62, |
| 205 | "organic_traffic": 45000, |
| 206 | "organic_keywords": 2100, |
| 207 | "keyword_overlap": 340 |
| 208 | } |
| 209 | ] |
| 210 | } |
| 211 | |
| 212 | |
| 213 | #### Markdown Summary (also generated) |
| 214 | |
| 215 | # SEO Domain Profile: example.com |
| 216 | **Date:** 2026-02-25 |
| 217 | |
| 218 | ## Domain Metrics |
| 219 | | Metric | Value | |
| 220 | |--------|-------| |
| 221 | | Semrush Authority Score | 45/100 | |
| 222 | | Ahrefs Domain Rating | 52/100 | |
| 223 | | Monthly Organic Traffic | ~28,500 | |
| 224 | | Organic Keywords | 1,240 | |
| 225 | | Backlinks | 8,930 | |
| 226 | | Referring Domains | 412 | |
| 227 | | Traffic Trend | Increasing | |
| 228 | |
| 229 | ## Top Performing Pages |
| 230 | | # | URL | Est. Traffic | Top Keyword | |
| 231 | |---|-----|-------------|-------------| |
| 232 | | 1 | /blog/reduce-aws-costs | 3,200 | reduce aws costs | |
| 233 | | ... | |
| 234 | |
| 235 | ## Keyword Rankings |
| 236 | | Keyword | Position | URL | SERP Competitors | |
| 237 | |---------|----------|-----|-----------------| |
| 238 | | cloud cost optimization | #4 | /blog/cloud-cost... | vantage.sh, antimetal.com | |
| 239 | | ... | |
| 240 | |
| 241 | ## Backlink Profile |
| 242 | - Domain Rating: 52/100 |
| 243 | - Referring Domains: 412 |
| 244 | - Dofollow Ratio: 78% |
| 245 | - Top linking sites: TechCrunch, Product Hunt, ... |
| 246 | |
| 247 | ## Competitor Comparison |
| 248 | | Domain | Authority | Traffic | Keywords | Overlap | |
| 249 | |--------|-----------|---------|----------|---------| |
| 250 | | example.com | 45 | 28.5K | 1,240 | — | |
| 251 | | competitor1.com | 62 | 45K | 2,100 | 340 | |
| 252 | | ... | |
| 253 | |
| 254 | |
| 255 | ## Tips |
| 256 | |
| 257 | **Semrush scraper data quality varies.** The Apify actors scrape public Semrush pages, which show limited data for non-subscribers. Traffic estimates and top keywords are available, but detailed per-page breakdowns may be partial. |
| 258 | **Combine with site-content-catalog** to get both the content inventory AND performance data — together they tell you what content exists AND which pieces actually drive traffic. |
| 259 | **Keyword rank verification via Google** is the most reliable data point. Semrush/Ahrefs estimates can be off, but checking actual SERPs gives ground truth. |
| 260 | **Run competitors lighter.** Full backlink analysis on 5 competitors gets expensive. Domain overview (Semrush only) is usually sufficient for comparison. |
| 261 | **Apify actors may break.** These scrape Semrush/Ahrefs public pages, which can change. If an actor fails, fall back to the free `seo-traffic-analyzer` skill which uses web search probes. |
| 262 | |
| 263 | ## Fallback: Free Mode |
| 264 | |
| 265 | If `APIFY_API_TOKEN` is not set or Apify actors fail, the script falls back to: |
| 266 | WebSearch probes (like `seo-traffic-analyzer` skill) |
| 267 | `site:[domain]` for indexed page count |
| 268 | SimilarWeb free tier for traffic estimates |
| 269 | Manual Google SERP checks for keyword rankings |
| 270 | |
| 271 | This gives less precise data but still produces a useful report. |
| 272 | |
| 273 | ## Dependencies |
| 274 | |
| 275 | Python 3.8+ |
| 276 | `requests` library |
| 277 | `APIFY_API_TOKEN` env var (for Apify mode; falls back to free probes without it) |
| 278 |
Details
- Updated
- Sep 21, 2026
- License
- MIT
- Stars on the repo
- ★ 1,220
- Checked
- Source
- gooseworks-ai/goose-skills ↗
- Creator
- gooseworks-ai · 206 listings
Made with seo-domain-analyzer

Similar skills
See all →
SkillThe Lighthouse Agentic Browsing fractionAgentic Browsing Readiness
SkillReferring domains, anchor text distributionBacklink Profile Analysis
SkillConnect a CMS to notfair SEO tools/setup-cms
SkillBacklink profile for any domainBacklink check
SkillOptimize Core Web Vitals for better page experienceCore Web Vitals optimization
SkillRun an SEO page observation-action-review loopRun the SEO page loopMore from gooseworks-ai
SkillMine the highest-converting ad angles from customer reviewsAd angle miner
SkillAnalyze ad campaign performance data to identify what'sAd campaign analyzer
SkillFor paid lead-gen and participant-recruitment adsAd lead quality analyzer
SkillAnalyze the message match between your ads and landing pagesAd to landing page auditor
SkillCheck and improve your brand's visibility across AI searchAeo
SkillSearch Amazon products - find items, compare pricesAmazon Product Search