Programmatically access your Shopify App Store keyword ranking data.
Rankbase is a keyword ranking and analytics platform built by a Shopify app developer, for Shopify app developers. It connects to your Google Analytics 4 property and analyzes how users discover your app through App Store search, which keywords drive the most traffic and installs, and how your search position changes over time.
The Rankbase API lets you access this data programmatically so you can build custom dashboards, automate reporting, feed data into spreadsheets, or integrate keyword insights into your own tools and workflows. For a complete overview of all features, see the Rankbase documentation.
search) from paid search ads (search_ad).When a user searches the Shopify App Store, Shopify sends search query data to your connected Google Analytics 4 property. Rankbase reads this GA4 data, processes it into keyword reports, and exposes it through both the web dashboard and this API. You need to have Google Analytics connected for your app in the Rankbase dashboard before the API can return data.
All API requests require a Bearer token in the Authorization header. You can create API keys from the API section in your dashboard.
Authorization: Bearer rb_your_api_key_here
API keys are scoped to your team. Any app belonging to your team can be queried using the same key. Each team can have up to 5 API keys.
All API endpoints are served under the following base URL:
https://rankbase.io/api/v1
API requests are limited to 60 requests per minute per team. Rate limit information is included in response headers:
| Header | Description |
|---|---|
X-RateLimit-Limit | Maximum requests per minute |
X-RateLimit-Remaining | Remaining requests in current window |
Retry-After | Seconds until the rate limit resets (only present on 429 responses) |
Retrieve keyword ranking data for a specific Shopify app. Returns all search keywords that led users to your app listing on the Shopify App Store, along with position data, country breakdown, and importance scoring.
The appId is the numeric ID of your app in Rankbase. You can find it in the URL when viewing your app in the dashboard (e.g. /app/30 means appId is 30).
| Parameter | Type | Default | Description |
|---|---|---|---|
days | integer | 90 | Number of days to look back (1-365). Ignored if start_date and end_date are provided. |
start_date | string | - | Start of date range in YYYY-MM-DD format. Must be used together with end_date. |
end_date | string | - | End of date range in YYYY-MM-DD format. Must be used together with start_date. |
installed | string | "false" | Set to "true" to return only keywords that led to install button clicks (not just listing views). |
search_type | string | "all" | Filter by search type: "all" (both organic and ads), "search" (organic only), or "search_ad" (paid ads only). |
curl -H "Authorization: Bearer rb_your_api_key" \ "https://rankbase.io/api/v1/apps/30/keywords?days=30"
curl -H "Authorization: Bearer rb_your_api_key" \ "https://rankbase.io/api/v1/apps/30/keywords?start_date=2025-01-01&end_date=2025-01-31"
curl -H "Authorization: Bearer rb_your_api_key" \ "https://rankbase.io/api/v1/apps/30/keywords?days=30&installed=true&search_type=search"
| Field | Type | Description |
|---|---|---|
app_id | integer | The app's ID in Rankbase. |
app_name | string | The app's display name. |
days | integer | The number of days covered by the report. |
installed | boolean | Whether the results are filtered to install-click keywords only. |
search_type | string | The search type filter applied ("all", "search", or "search_ad"). |
total_keywords | integer | Total number of unique keywords returned. |
keywords | object | Map of keyword string to keyword data. Each keyword contains totalUsers (number of users who searched this term), positions (array of position records with position, date, locale, search_type, country), averagePosition, latestPosition, and score. |
most_important_keywords | object | Map of keyword string to percentage (integer). Shows keywords that drive more than 2 users, ranked by their share of total traffic. |
{
"app_id": 30,
"app_name": "My Shopify App",
"days": 30,
"installed": false,
"search_type": "all",
"total_keywords": 42,
"keywords": {
"variant image": {
"totalUsers": 24,
"positions": [
{
"position": 3,
"date": "2025-02-04",
"locale": "en",
"search_type": "search",
"country": "CA"
},
{
"position": 2,
"date": "2025-02-05",
"locale": "en",
"search_type": "search",
"country": "US"
}
],
"averagePosition": 2.4,
"latestPosition": 2,
"score": 624
},
"color swatch": {
"totalUsers": 5,
"positions": [
{
"position": 1,
"date": "2025-02-07",
"locale": "fr",
"search_type": "search",
"country": "FR"
}
],
"averagePosition": 2,
"latestPosition": 3,
"score": 72
}
},
"most_important_keywords": {
"variant image": 28,
"color swatch": 15
}
}
All errors return a JSON object with an error field describing what went wrong.
| Status Code | Meaning | Example Message |
|---|---|---|
401 | Missing or invalid API key | "Invalid API key." |
403 | App does not belong to your team, or subscription is inactive | "This app does not belong to your team." |
404 | App not found | "App not found." |
422 | Validation error (invalid dates, invalid search_type, or Google Analytics not connected) | "Invalid date format. Use YYYY-MM-DD." |
429 | Rate limit exceeded (60 requests per minute) | "Too many requests. Limit: 60 per minute." |
500 | Internal server error | "Failed to fetch keyword data." |
{
"error": "Invalid API key."
}