Contract
{
"type": "object",
"required": [
"subdomain",
"display_date"
],
"properties": {
"database": {
"type": "string",
"default": "us",
"minLength": 2,
"description": "Regional Semrush database (Google region), e.g. 'us', 'uk', 'de', 'fr'. Mobile ('mobile-us') and extended ('us-ext') variants are also accepted. Defaults to 'us'. Full list: https://developer.semrush.com/api/v3/seo/overview/ (Databases). Tip: run /domain_ranks first to see every database a domain has data in."
},
"subdomain": {
"type": "string",
"minLength": 1,
"description": "Subdomain to analyze, e.g. 'shop.example.com' (no scheme)."
},
"display_date": {
"type": "string",
"pattern": "^\\d{6}15$",
"description": "Historical month to report on, in Semrush's YYYYMM15 format (e.g. '20260415' for April 2026). REQUIRED — this endpoint bills the historical rate; use the non-history endpoint for live data."
}
},
"additionalProperties": false
}{
"type": "object",
"properties": {
"rows": {
"type": "array",
"items": {
"type": "object",
"properties": {
"adwordsCost": {
"type": "string",
"description": "Estimated paid-ad spend for that month, as a numeric string. Observed as '0' on both calls captured."
},
"organicCost": {
"type": "string",
"description": "Estimated equivalent paid-ad cost of that organic traffic for that month, as a numeric string (this data source's own valuation, not a real spend figure)."
},
"adwordsTraffic": {
"type": "string",
"description": "Estimated paid-ad traffic for that month, as a numeric string. Observed as '0' on both calls captured."
},
"organicTraffic": {
"type": "string",
"description": "Estimated organic search traffic for that month, as a numeric string."
},
"adwordsKeywords": {
"type": "string",
"description": "Count of paid-ad keywords the subdomain ran that month, as a numeric string. Observed as '0' on both calls captured (mail.google.com runs no paid ads)."
},
"organicKeywords": {
"type": "string",
"description": "Count of organic keywords the subdomain ranked for that month, as a numeric string."
}
},
"additionalProperties": true
},
"description": "One row per requested month/database combination. Both fixtures captured a single-element array; whether this endpoint can ever return more than one row is unconfirmed."
},
"type": {
"type": "string",
"description": "The result kind, observed as the literal string 'subdomain_rank' on both calls captured."
},
"database": {
"type": "string",
"description": "The regional database the result was computed in, echoing the request's `database` input (or its 'us' default), e.g. 'us' or 'uk'."
}
},
"description": "The historical subdomain rank summary, as returned at routing.responseResultPath ($.output). Both captured fixtures return a single populated row for the requested month and database; no not-found or empty case has been observed for this endpoint.",
"additionalProperties": true
}Pricing
Every real charge, itemised. A model that quietly omits one is a slow financial leak, so nothing here is rolled up, and a charge that only applies to some inputs says so rather than being added in.
Prices in this catalog are the provider's own list price, not your bill: Omnial MCP charges provider cost plus a platform markup on top, so what you are charged is higher than the figure shown. For the exact amount a specific call will cost, run omnial_execute with dry_run: true; that number includes the markup and is what we hold while the call runs. It is a quote, not a cap on the charge.
| Charge | Rate |
|---|---|
Per call Flat, regardless of what comes back | $0.01365 |
- Cost basis
- Not recorded
This tool's catalog entry does not record how its final bill is determined, so we will not tell you whether its cost is fixed before the call or reported by the provider afterwards. Either way what is held is a quote rather than a cap: you are charged what the call actually costs, bounded at 2x the quote.
- Updated
- Sep 23, 2026
