Competitors
POST /seo/competitors — find and rank the domains competing with you across a keyword set.
Given a keyword set, returns the domains that appear against them in search results, ranked by the visibility they capture.
/seo/competitorsRequest body
projectIdstringbodyrequiredOwning project.
keywordsstring[]bodyrequiredBetween 1 and 100 keywords to analyse.
locationCodenumberbodydefault: 2840Numeric location code.
languageCodestringbodydefault: enTwo-letter language code.
resultTypesstring[]bodyWhich result types to count. Any of organic, paid, featured_snippet, local_pack.
excludeDomainsstring[]bodyDomains to leave out of the results — typically your own.
includeSubdomainsbooleanbodyTreat subdomains as part of their parent domain.
sortBystringbodyOne of visibility, traffic_estimate, avg_position, keyword_count.
limitnumberbodydefault: 50Results to return, between 1 and 100.
offsetnumberbodyResult offset, between 0 and 1000.
Response fields
competitorsobject[]Ranked competitor records.
curl -X POST https://api.misar.io/seo/competitors \
-H "Authorization: Bearer $MISARSEO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"projectId": "5b1c7d2e-…",
"keywords": ["seo audit tool", "rank tracker", "backlink checker"],
"resultTypes": ["organic", "featured_snippet"],
"excludeDomains": ["acme.com"],
"sortBy": "visibility",
"limit": 25
}'Rate limit: 10 requests per 60 s.
Exclude yourself
Your own domain will otherwise dominate the ranking for the keywords you already own. Pass it in excludeDomains to see who you are actually competing against.
Status codes
| Code | Meaning |
|---|---|
200 | Competitors returned |
400 | VALIDATION_ERROR — schema failure. The message is formatted <field path>: <reason>. |
401 | UNAUTHENTICATED |
404 | NOT_FOUND — project not found |
429 | RATE_LIMITED |