🎯 Semrush - Competitor Analysis
Overview​
Discover and analyze competitors in both organic search and paid advertising, including shared keywords and traffic overlap.
Organic Competitors​
Get Organic Competitors​
GET /competitor/organic/:domain​
Purpose: Find domains competing for similar organic keywords
Request:
GET /v1/integrations/semrush/competitor/organic/example.com?new=false
Authorization: Bearer {jwt_token}
Semrush API:
GET https://api.semrush.com/?type=domain_organic_organic&key={API_KEY}&database={COUNTRY}&domain={DOMAIN}&display_limit=10&display_sort=cr_desc
API Parameters:
type:domain_organic_organicdisplay_limit: 10 (top competitors)display_sort:cr_desc(by common keywords descending)
CSV Response Columns:
Domain;Competitor Domain;Common Keywords;Organic Keywords (Competitor);SE Keywords (Competitor);Organic Traffic (Competitor);Organic Cost (Competitor);Adwords Keywords (Competitor);Adwords Traffic (Competitor);Adwords Cost (Competitor);Competition Level
JSON Response:
{
"success": true,
"message": "SUCCESS",
"data": {
"data": [
{
"Domain": "example.com",
"Competitor Domain": "competitor1.com",
"Common Keywords": "2845",
"Organic Keywords (Competitor)": "15420",
"SE Keywords (Competitor)": "18230",
"Organic Traffic (Competitor)": "125000",
"Organic Cost (Competitor)": "285000",
"Adwords Keywords (Competitor)": "450",
"Adwords Traffic (Competitor)": "8500",
"Adwords Cost (Competitor)": "12000",
"Competition Level": "0.72"
},
{
"Domain": "example.com",
"Competitor Domain": "competitor2.com",
"Common Keywords": "1923",
"Organic Keywords (Competitor)": "9800",
"SE Keywords (Competitor)": "11230",
"Organic Traffic (Competitor)": "75000",
"Organic Cost (Competitor)": "165000",
"Competition Level": "0.58"
}
],
"createdAt": "2025-10-10T08:00:00Z",
"lastUpdate": "2025-10-10T08:00:00Z",
"nextUpdate": "2025-10-17T08:00:00Z",
"daysSinceUpdate": 0,
"daysUntilUpdate": 7,
"isStale": false
}
}
Caching:
- Cache Type:
domain_organic_organic - TTL: 7 days
Paid Competitors​
Get Paid Competitors​
GET /competitor/paid/:domain​
Purpose: Find domains competing in paid search (Google Ads)
Request:
GET /v1/integrations/semrush/competitor/paid/example.com?new=false
Authorization: Bearer {jwt_token}
Semrush API:
GET https://api.semrush.com/?type=domain_adwords_adwords&key={API_KEY}&database={COUNTRY}&domain={DOMAIN}&display_limit=10&display_sort=cr_desc
API Parameters:
type:domain_adwords_adwordsdisplay_sort:cr_desc(by common keywords)
JSON Response:
{
"success": true,
"message": "SUCCESS",
"data": {
"data": [
{
"Domain": "example.com",
"Competitor Domain": "competitor1.com",
"Common Keywords": "185",
"Adwords Keywords (Competitor)": "1250",
"Adwords Traffic (Competitor)": "25000",
"Adwords Cost (Competitor)": "45000",
"Organic Keywords (Competitor)": "8500",
"Organic Traffic (Competitor)": "62000",
"Organic Cost (Competitor)": "135000",
"Competition Level": "0.65"
}
],
"createdAt": "2025-10-10T08:00:00Z",
"lastUpdate": "2025-10-10T08:00:00Z",
"nextUpdate": "2025-10-17T08:00:00Z",
"daysSinceUpdate": 0,
"daysUntilUpdate": 7,
"isStale": false
}
}
Caching:
- Cache Type:
domain_adwords_adwords - TTL: 7 days
Competitor Metrics​
Key Fields​
| Field | Description | Use Case |
|---|---|---|
| Competitor Domain | Competing website | Identify rivals |
| Common Keywords | Shared keyword count | Overlap analysis |
| Organic Keywords | Total organic keywords | SEO strength |
| Organic Traffic | Est. organic visits/month | Traffic potential |
| Organic Cost | PPC value of organic traffic | SEO value |
| Adwords Keywords | Paid keyword count | PPC activity |
| Adwords Traffic | Est. paid visits/month | PPC traffic |
| Adwords Cost | Est. monthly ad spend | Budget insights |
| Competition Level | Overlap intensity (0-1) | Priority ranking |
Use Cases​
1. Competitive Landscape Analysis​
Identify top competitors:
// Sort by competition level
const topCompetitors = competitors
.sort((a, b) => parseFloat(b['Competition Level']) - parseFloat(a['Competition Level']))
.slice(0, 5);
2. Keyword Gap Analysis​
Find shared keywords to target:
# Get your organic keywords
GET /keyword/organic/yourclient.com
# Get competitor's keywords
GET /competitor/organic/yourclient.com
# Analyze common keywords count
3. Budget Benchmarking​
Compare ad spend:
const avgAdSpend =
competitors.reduce((sum, c) => sum + parseFloat(c['Adwords Cost (Competitor)'] || 0), 0) /
competitors.length;
console.log(`Average competitor ad spend: $${avgAdSpend}/month`);
4. Traffic Comparison​
Benchmark organic traffic:
competitors.forEach(c => {
const traffic = parseInt(c['Organic Traffic (Competitor)']);
const keywords = parseInt(c['Organic Keywords (Competitor)']);
const trafficPerKeyword = (traffic / keywords).toFixed(2);
console.log(`${c['Competitor Domain']}: ${trafficPerKeyword} visits/keyword`);
});
5. SEO vs PPC Strategy​
Analyze competitor strategy mix:
competitors.forEach(c => {
const organicValue = parseFloat(c['Organic Cost (Competitor)']);
const paidSpend = parseFloat(c['Adwords Cost (Competitor)']);
const ratio = ((organicValue / (organicValue + paidSpend)) * 100).toFixed(1);
console.log(`${c['Competitor Domain']}: ${ratio}% organic, ${100 - ratio}% paid`);
});
Competition Level Interpretation​
| Score | Meaning | Action |
|---|---|---|
| 0.8 - 1.0 | Very high overlap | Primary competitor - monitor closely |
| 0.6 - 0.8 | High overlap | Key competitor - track regularly |
| 0.4 - 0.6 | Moderate overlap | Secondary competitor - periodic checks |
| 0.2 - 0.4 | Low overlap | Tangential competitor |
| 0.0 - 0.2 | Minimal overlap | Different market segment |