SEO domain analyzer

Pull real SEO metrics for any domain using Apify scrapers for Semrush and Ahrefs data.

How to use it

  1. Hit Copy SKILL.md — or use the Claude Code line below to get every file.
  2. Claude: ⋯ → Download .md, then Customize → Skills → Add → Upload skill.
    ChatGPT: make a Project and paste it into Instructions.
    Neither? Paste it at the top of a new chat — it works for that chat.
  3. Describe your job in plain words. The AI follows the skill from there.
Claude Code — installs the whole folder, not just SKILL.md
npx degit gooseworks-ai/goose-skills/skills/seo/capabilities/seo-domain-analyzer#main ~/.claude/skills/seo-domain-analyzer

For one project only, change the path to .claude/skills/seo-domain-analyzer. This skill also uses seo-profile.json, vantage.sh — copying SKILL.md alone won't be enough. See the folder on GitHub.

Not working?
  • Check which app you pasted it into — the steps above name the right one.
  • Some skills need the paid tier of Claude or ChatGPT.
Step-by-step guide with screenshots · Ask in the forum

Paste into Claude, ChatGPT or Cursor.

Show the full text278 lines
seo-domain-analyzer/SKILL.md278 lines8.6 KBpushed 96d agoRawView on GitHub

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

  1. User-provided keywords
  2. Top organic keywords from Semrush data (Phase 1)
  3. 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] blog for top blog content

Phase 5: Competitor Discovery

Competitors are identified from multiple sources:

  1. Semrush competitor data (Phase 1) — domains competing for same keywords
  2. User-provided competitors — always included
  3. 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-analyzer skill which uses web search probes.

Fallback: Free Mode

If APIFY_API_TOKEN is not set or Apify actors fail, the script falls back to:

  1. WebSearch probes (like seo-traffic-analyzer skill)
  2. site:[domain] for indexed page count
  3. SimilarWeb free tier for traffic estimates
  4. Manual Google SERP checks for keyword rankings

This gives less precise data but still produces a useful report.

Dependencies

  • Python 3.8+
  • requests library
  • APIFY_API_TOKEN env var (for Apify mode; falls back to free probes without it)
1---
2name: seo-domain-analyzer
3description: >
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.
8tags: [competitive-intel, seo]
9---
10 
11# SEO Domain Analyzer
12 
13Pull 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```bash
18# Basic domain analysis
19python3 scripts/analyze_domain.py --domain "example.com"
20 
21# With competitor comparison
22python3 scripts/analyze_domain.py \
23 --domain "example.com" \
24 --competitors "competitor1.com,competitor2.com,competitor3.com"
25 
26# Check specific keywords
27python3 scripts/analyze_domain.py \
28 --domain "example.com" \
29 --keywords "cloud cost optimization,reduce aws bill,finops tools"
30 
31# Save output
32python3 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 
60Use Apify actor `devnaz/semrush-scraper` to get:
61 
62```python
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 
83Use Apify actor `radeance/ahrefs-scraper` to get:
84 
85```python
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 
105For specific keywords (user-provided or auto-inferred from Phase 1), verify actual rankings using Google search:
106 
107```python
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):**
1261. User-provided keywords
1272. Top organic keywords from Semrush data (Phase 1)
1283. Auto-inferred from domain content (WebSearch `site:[domain]` to see page titles)
129 
130### Phase 4: Top Pages Analysis
131 
132From 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 
138If 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 
144Competitors are identified from multiple sources:
145 
1461. **Semrush competitor data** (Phase 1) — domains competing for same keywords
1472. **User-provided competitors** — always included
1483. **Google SERP competitors** — from Phase 3 keyword checks, note which domains consistently appear
149 
150For 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```json
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```markdown
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 
265If `APIFY_API_TOKEN` is not set or Apify actors fail, the script falls back to:
2661. WebSearch probes (like `seo-traffic-analyzer` skill)
2672. `site:[domain]` for indexed page count
2683. SimilarWeb free tier for traffic estimates
2694. Manual Google SERP checks for keyword rankings
270 
271This 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 

Discussion

Alternatives

Also in SEO & keywords