Download OpenAPI specification:
Quaro Public API documentation for API version 2.
https://api.quaro.io/v2/
The API supports two authentication methods:
Recommended: Send your API key as a Bearer token in the Authorization header.
Authorization: Bearer <API_KEY>
Alternative for POST endpoints: Send the API key in the JSON request body as key.
{
"key": "<API_KEY>"
}
In the endpoint documentation, only Bearer Auth is shown as the formal OpenAPI authentication method. The key body attribute remains supported as a compatibility option.
The default rate limit is 3 requests per second, unless otherwise specified on an endpoint.
The API is currently organized into the following documented product areas:
Some endpoints are global and not tied to one suite.
Retrieve the available location and language codes for Quaro Search Volume. Use this endpoint to discover valid location_code and language_code values before requesting keyword metrics.
{- "data": { }
}Retrieve search volume, CPC, SEA competition, categories, and average search volume for the specified keywords.
The data is based on the Google Ads API. Keyword metrics are updated once a month. Historical metrics may be available from the beginning of 2019, depending on how long metrics have been available for a keyword.
Not every keyword is monitored in this dataset. If a keyword is not monitored, it can be missing in the response.
| keywords required | Array of strings <= 700 items |
| location_code required | integer Available locations can be fetched via the Quaro locations endpoint. |
| language_code required | string Available languages can be fetched via the Quaro locations endpoint. |
| key | string Optional API key body attribute. Use this only as an alternative to the Authorization Bearer header. |
{- "keywords": [
- "sample"
], - "location_code": 2276,
- "language_code": "de"
}{- "data": { }
}Retrieve search volume, CPC, SEA competition, and average search volume for the requested keywords.
Rate limit: 2 requests per minute. If location_code is omitted, Quaro returns international Google Ads data.
Use sv_length to control how many months are included in the historical output.
| keywords required | Array of strings <= 1000 items |
| key | string Optional API key body attribute. Use this only as an alternative to the Authorization Bearer header. |
| location_code | integer or null If omitted, international Adwords data is returned. |
| sv_length | integer <= 48 Default: 12 |
{- "keywords": [
- "sample"
], - "location_code": 2276
}{- "data": { }
}Retrieve demo data for search volume, CPC, SEA competition, and average search volume. This endpoint does not consume credits.
If location_code is omitted, Quaro returns international Google Ads data.
| keywords required | Array of strings <= 1000 items |
| key | string Optional API key body attribute. Use this only as an alternative to the Authorization Bearer header. |
| location_code | integer or null If omitted, international Adwords data is returned. |
{- "keywords": [
- "sample"
], - "location_code": 2276
}{- "data": { }
}Retrieve keywords, search volume, CPC, SEA competition, categories, and average search volume for a domain.
If location_code is omitted, Quaro returns international Google Ads data. Use sv_length to control how many months are included in the historical output.
| domain required | string The target domain to analyze. |
| key | string Optional API key body attribute. Use this only as an alternative to the Authorization Bearer header. |
| location_code | integer or null If omitted, Quaro returns international Google Ads data. |
| sv_length | integer <= 48 Default: 12 Number of months to include. Default: 12. Maximum: 48. |
{- "domain": "quaro.io",
- "location_code": 2276,
- "sv_length": 12
}{- "data": { }
}Retrieve keywords, search volume, CPC, SEA competition, categories, and average search volume for a specific URL.
Use sv_length to control how many months are included in the historical output.
| url required | string The target URL or domain to analyze. |
| key | string Optional API key body attribute. Use this only as an alternative to the Authorization Bearer header. |
| location_code | integer or null If omitted, Quaro returns international Google Ads data. |
| sv_length | integer <= 48 Default: 12 Number of months to include. Default: 12. Maximum: 48. |
{- "location_code": 2276,
- "sv_length": 12
}{- "data": { }
}Return the saved data of a single collection.
| collection required | string Name of the collection stored in Quaro. |
| key | string Optional API key body attribute. Use this only as an alternative to the Authorization Bearer header. |
{- "collection": "collection_name"
}{- "data": { }
}Return the keywords of a single collection.
| collection required | string Name of the collection stored in Quaro. |
| key | string Optional API key body attribute. Use this only as an alternative to the Authorization Bearer header. |
| property name* additional property | any |
{- "collection": "collection_name"
}{- "data": { }
}Retrieve the categories configured for a Quaro monitoring project. Use category_id or category_ids to narrow the response and sv_length to limit monthly search-volume history.
| project_id required | string ID of the Quaro monitoring project. You can find it by opening the project in app.quaro.io and copying the last segment of the URL. |
| key | string Optional API key body attribute. Use this only as an alternative to the Authorization Bearer header. |
| category_id | string Optional single category ID filter. |
| category_ids | Array of strings <= 100 items Optional list of category IDs to filter by. Maximum 100 category IDs per request. |
| sv_length | integer >= 1 Optional number of monthly search-volume history entries to return per category. |
{- "project_id": "monitoring_project_id",
- "category_ids": [
- "category_id_1",
- "category_id_2"
], - "sv_length": 12
}{- "data": { }
}Retrieve keywords for a monitoring project. Supports pagination through skip and limit.
| project_id required | string ID of the Quaro monitoring project. You can find it by opening the project in app.quaro.io and copying the last segment of the URL. |
| key | string Optional API key body attribute. Use this only as an alternative to the Authorization Bearer header. |
| skip | integer >= 0 Default: 0 Optional number of keyword records to skip before returning results. |
| limit | integer [ 1 .. 10000 ] Default: 1000 Optional maximum number of keyword records to return. Defaults to 1000 and is capped at 10000. |
{- "project_id": "monitoring_project_id",
- "skip": 0,
- "limit": 1000
}{- "data": { }
}Add up to 1000 keywords to a Quaro monitoring project. Rate limit: 1 request per 10 seconds.
| project_id required | string ID of the Quaro monitoring project. You can find it by opening the project in app.quaro.io and copying the last segment of the URL. |
| category_id required | string Category ID from |
| keywords required | Array of strings Keywords to add to the monitoring project. |
| key | string Optional API key body attribute. Use this only as an alternative to the Authorization Bearer header. |
{- "project_id": "monitoring_project_id",
- "category_id": "category_id",
- "keywords": [
- "keyword one",
- "keyword two"
]
}{- "data": { }
}Delete keywords from a Quaro monitoring project.
| project_id required | string ID of the Quaro monitoring project. You can find it by opening the project in app.quaro.io and copying the last segment of the URL. |
| keywords required | Array of strings Keywords to remove from the monitoring project. |
| key | string Optional API key body attribute. Use this only as an alternative to the Authorization Bearer header. |
{- "project_id": "monitoring_project_id",
- "keywords": [
- "keyword one",
- "keyword two"
]
}{- "data": { }
}Retrieve competitors for a monitoring project. Supports pagination, optional category filtering and optional raw query/sort objects.
| project_id required | string ID of the Quaro monitoring project. You can find it by opening the project in app.quaro.io and copying the last segment of the URL. |
| key | string Optional API key body attribute. Use this only as an alternative to the Authorization Bearer header. |
| category_id | string or null Optional category ID filter. Omit, set to |
object Optional advanced query object. If omitted, the API uses the current project ID automatically. | |
object Optional sort object. Defaults to sorting by current visibility descending. | |
| skip | integer >= 0 Default: 0 Optional number of competitor records to skip before returning results. |
| limit | integer [ 1 .. 100 ] Default: 25 Optional maximum number of competitors to return. Defaults to 25 and is capped at 100. |
{- "project_id": "monitoring_project_id",
- "category_id": "category_id",
- "skip": 0,
- "limit": 25
}{- "data": { }
}Retrieve competitor records for one or more domains in a monitoring project. domains is required and may contain up to 100 domains.
| project_id required | string ID of the Quaro monitoring project. You can find it by opening the project in app.quaro.io and copying the last segment of the URL. |
| domains required | Array of strings <= 100 items Domains to search for. Maximum 100 domains per request. |
| key | string Optional API key body attribute. Use this only as an alternative to the Authorization Bearer header. |
| category_id | string or null Optional category ID filter. Omit, set to |
object Optional sort object. Defaults to sorting by current visibility descending. | |
| limit | integer [ 1 .. 100 ] Optional maximum number of competitors to return. Defaults to the number of requested domains and is capped at 100. |
{- "project_id": "monitoring_project_id",
- "domains": [
- "example.com",
- "competitor.com"
], - "category_id": "category_id"
}{- "data": { }
}Retrieve top competitors for a monitoring project. Supports category filters, pagination and custom sorting.
| project_id required | string ID of the Quaro monitoring project. You can find it by opening the project in app.quaro.io and copying the last segment of the URL. |
| key | string Optional API key body attribute. Use this only as an alternative to the Authorization Bearer header. |
| category_id | string or null Optional single category ID filter. Omit, set to |
| category_ids | Array of strings Optional list of category IDs. If multiple IDs are sent, competitors are merged across those categories. |
object Optional sort object. Defaults to sorting by current visibility descending. | |
| skip | integer >= 0 Default: 0 Optional number of competitors to skip before returning results. |
| limit | integer [ 1 .. 100 ] Default: 25 Optional maximum number of competitors to return. Defaults to 25 and is capped at 100. |
{- "project_id": "monitoring_project_id",
- "category_ids": [
- "category_id_1",
- "category_id_2"
], - "skip": 0,
- "limit": 25
}{- "data": { }
}Retrieve visibility chart data for competitors. Supports optional domain filtering, category filtering, pagination and custom sorting.
| project_id required | string ID of the Quaro monitoring project. You can find it by opening the project in app.quaro.io and copying the last segment of the URL. |
| key | string Optional API key body attribute. Use this only as an alternative to the Authorization Bearer header. |
| domains | Array of strings <= 100 items Optional list of domains to include. Maximum 100 domains per request. |
| category_id | string or null Optional category ID filter. Omit, set to |
object Optional advanced query object. If omitted, the API uses the current project ID automatically. | |
object Optional sort object. Defaults to sorting by current visibility descending. | |
| skip | integer >= 0 Default: 0 Optional number of competitor records to skip before returning chart data. |
| limit | integer [ 1 .. 1000 ] Default: 25 Optional maximum number of source competitors. Defaults to 25 and is capped at 1000. |
{- "project_id": "monitoring_project_id",
- "domains": [
- "example.com"
], - "category_id": "category_id",
- "limit": 25
}{- "data": { }
}Discover competitor changes between two dates. date_current and date_prev are required. Use category_id for one category or category_ids for bulk mode across multiple categories.
| project_id required | string ID of the Quaro monitoring project. You can find it by opening the project in app.quaro.io and copying the last segment of the URL. |
| date_current required | string <date> Current comparison date. |
| date_prev required | string <date> Previous comparison date. |
| key | string Optional API key body attribute. Use this only as an alternative to the Authorization Bearer header. |
| category_id | string Optional single category ID filter. |
| category_ids | Array of strings <= 50 items Optional category IDs for bulk discovery mode. Maximum 50 category IDs per request. |
object Optional sort object used to order discovery results. | |
| skip | integer [ 0 .. 1000000 ] Default: 0 Optional number of discovery results to skip in single-category mode. |
| limit | integer >= 1 Default: 50 Optional maximum number of discovery results in single-category mode. If omitted, the current code uses 50. Explicit positive values are capped at 25. |
| skip_per_category | integer [ 0 .. 1000000 ] Default: 0 Optional number of discovery results to skip per category in bulk mode. Falls back to |
| limit_per_category | integer >= 1 Optional maximum number of discovery results per category in bulk mode. Falls back to |
{- "project_id": "monitoring_project_id",
- "date_current": "2026-05-01",
- "date_prev": "2026-04-01",
- "category_id": "category_id",
- "limit": 25
}{- "data": { }
}Retrieve visibility history for one competitor domain. domain must contain exactly one domain. Use competitors/search for multiple domains.
| project_id required | string ID of the Quaro monitoring project. You can find it by opening the project in app.quaro.io and copying the last segment of the URL. |
| domain required | string Competitor domain. Exactly one domain is supported. |
| key | string Optional API key body attribute. Use this only as an alternative to the Authorization Bearer header. |
| category_id | string Optional category ID filter. The API resolves matching category IDs and category names internally. |
| months | integer >= 1 Default: 24 Optional number of history months to return. Defaults to 24. |
| include_categories | boolean Optional flag controlling whether category-level history is included. Defaults to true. |
{- "project_id": "monitoring_project_id",
- "domain": "example.com",
- "months": 24,
- "include_categories": true
}{- "data": { }
}Retrieve shopping visibility history for one or more seller names. Use seller_name or seller_names.
| seller_name required | string Single seller name to retrieve. Preferred for one seller. |
| project_id required | string ID of the Quaro monitoring project. You can find it by opening the project in app.quaro.io and copying the last segment of the URL. |
| key | string Optional API key body attribute. Use this only as an alternative to the Authorization Bearer header. |
| seller_names | Array of strings <= 100 items Seller names to retrieve. Maximum 100 seller names per request. |
| category_id | string Optional category ID filter. |
| months | integer >= 1 Default: 24 Optional number of history months to return. Defaults to 24. |
{- "project_id": "monitoring_project_id",
- "seller_names": [
- "Hornbach",
- "OBI"
], - "months": 24
}{- "data": { }
}Retrieve project visibility history. Use scope to choose project-level history only or history including category breakdowns.
| project_id required | string ID of the Quaro monitoring project. You can find it by opening the project in app.quaro.io and copying the last segment of the URL. |
| key | string Optional API key body attribute. Use this only as an alternative to the Authorization Bearer header. |
| category_id | string Optional category ID filter. |
| scope | string Default: "categories" Enum: "project" "categories" Optional response scope. |
| months | integer [ 1 .. 48 ] Default: 48 Optional number of history months to return. Defaults to 48 and is capped at 48. |
{- "project_id": "monitoring_project_id",
- "scope": "categories",
- "months": 24
}{- "data": { }
}