Sensor42
Public API Reference
Sensor42 exposes authenticated v7 endpoints for app info, keywords, markets, metadata, and app search.
This page documents the public, customer-facing endpoints only. Every field, filter, and option below is
generated from a single source file so the published page and the raw text inventory stay aligned.
Base URL: https://api.sensor42.com
Auth: X-API-Key
Credits: 5 per request
Rate limit: 60 requests/minute
Authentication
X-API-Key: YOUR_API_KEY is the primary authentication header.Authorization: Bearer YOUR_API_KEY is also accepted.api_key=YOUR_API_KEY in the query string is accepted for server-to-server convenience, but headers are preferred.
Billing and rate limits
- Every documented v7 endpoint currently charges 5 credits per request.
- Each response includes
X-Credits-Charged and X-Credits-Balance headers. - Rate limit is 60 requests per minute per API key.
- Rate limit headers are always returned:
X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. - If the minute bucket is exhausted, the API returns HTTP 429 with a
Retry-After header.
Formats and conventions
- JSON is the default response format.
- Endpoints that support CSV accept
format=csv or Accept: text/csv. - Dates and timestamps are returned as stored ISO/RFC3339-like strings when available.
- Nullable fields can be
null or empty collections depending on the endpoint. - IDs are numeric App Store or internal Sensor42 identifiers represented as integers.
Common HTTP statuses
200 OK for successful requests.400 Bad Request for invalid path, filter, sort, limit, offset, or format values.401 Unauthorized when the API key is missing or invalid.402 Payment Required when the account does not have enough credits.404 Not Found when the requested app, topic, or term does not exist.429 Too Many Requests when the per-minute key limit is exceeded.500 Internal Server Error for unexpected backend failures.503 Service Unavailable when a required analytics backend such as ClickHouse is not available.
GET
/api/v7/apps/{app_id}/info
App Info
Return the main app profile and the derived commercial metrics used across Sensor42: identity, category, ratings, release dates, speed/day, estimated downloads, estimated revenue ranges, and the latest all-markets reviews total.
Notes
speed_per_day, downloads_estimate, and the revenue range fields are computed estimates derived from the current review/rating footprint and release date, not official App Store sales numbers.all_markets_reviews comes from the latest available markets snapshot.- This endpoint returns JSON only.
Parameters
| Name | Location | Type | Required | Description |
app_id | path | uint64 | Yes | Numeric App Store app identifier. |
Response fields
| Field | Type | Description |
app_id | uint64 | Requested App Store app identifier. |
title | string|null | Current app title. |
subtitle | string|null | Current app subtitle when available. |
bundle_id | string|null | Bundle identifier, for example com.example.app. |
developer_name | string|null | Visible developer or publisher name. |
category_id | uint64|null | Apple category identifier. |
category_name | string|null | Resolved Apple category label. |
rating | float|null | Current average star rating. |
rating_count | int64|null | Current ratings/reviews count stored on the main app row. |
status | string | Current app collection status in Sensor42, for example visited. |
last_seen | datetime|null | Latest time this app row was seen in the crawler dataset. |
first_release_date | datetime|null | Earliest known release date. |
last_release_date | datetime|null | Most recent known release/update date. |
speed_per_day | float|null | Average reviews per day based on rating_count and first_release_date. |
downloads_estimate | float|null | Estimated downloads calculated from ratings signals. |
revenue_month_min | float|null | Estimated lower monthly revenue bound. |
revenue_month_max | float|null | Estimated upper monthly revenue bound. |
revenue_lifetime_min | float|null | Estimated lower lifetime revenue bound. |
revenue_lifetime_max | float|null | Estimated upper lifetime revenue bound. |
all_markets_reviews | uint64 | Latest aggregated review count across all markets. |
developer_tagline | string|null | Developer marketing line extracted from stored app metadata when available. |
Examples
cURL
curl "https://api.sensor42.com/api/v7/apps/1545593132/info" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Accept: application/json"
GET
/api/v7/apps/{app_id}/keywords
App Keywords
Return the parsed ASO keyword list extracted from the stored app metadata, enriched with global keyword frequency counts from Sensor42.
Notes
- Items are sorted by
frequency descending and then by keyword ascending. frequency is based on the Sensor42 keyword table times_seen value for each parsed ASO keyword.- This endpoint returns JSON only.
Parameters
| Name | Location | Type | Required | Description |
app_id | path | uint64 | Yes | Numeric App Store app identifier. |
Response fields
| Field | Type | Description |
app_id | uint64 | Requested App Store app identifier. |
total | int | Total number of parsed keyword rows returned. |
items[].keyword | string | Keyword text parsed from the app ASO metadata blob. |
items[].frequency | int64 | Global frequency score from the Sensor42 keyword corpus. |
Examples
cURL
curl "https://api.sensor42.com/api/v7/apps/1545593132/keywords" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Accept: application/json"
GET
/api/v7/apps/{app_id}/markets
App Markets
Return the latest market-level review/rating footprint for an app, including share percentage and the available recent and average speed/day values per market.
Notes
- This endpoint currently returns the full latest markets snapshot in one response. The pagination-style fields are present for consistency with the rest of the API, but the response is effectively a single page.
speed is an alias for speed_recent in the sort_by parameter.- This endpoint returns JSON only.
Parameters
| Name | Location | Type | Required | Description |
app_id | path | uint64 | Yes | Numeric App Store app identifier. |
sort_by | query | enum | No | Sort field. Allowed values: ratings (default), store, speed, speed_recent, speed_avg, rating, share, updated. |
sort_dir | query | enum | No | Sort direction. Allowed values: asc, desc. Default is asc for store, otherwise desc. |
Response fields
| Field | Type | Description |
app_id | uint64 | Requested App Store app identifier. |
run_id | string | Reserved field for the originating run identifier. Currently empty. |
run_created_at | string | Latest markets snapshot timestamp. |
page | int | Current page number. Currently always 1 when data exists. |
page_size | int | Number of market rows returned. |
total | int64 | Total number of market rows in the latest snapshot. |
total_pages | int | Total pages. Currently 1 when data exists. |
total_volume | uint64 | Sum of market review counts across the snapshot. |
items[].store | string | Uppercase 2-letter App Store market code. |
items[].volume | uint64 | Review count for that market. |
items[].rating | float | Average rating for that market row. |
items[].updated_at | string | Snapshot timestamp for that market row. |
items[].share_percent | float|null | Percent share of total_volume represented by the market row. |
items[].speed_per_day_recent | float|null | Recent speed/day for the market when the speed source exists. |
items[].speed_per_day_avg | float|null | Average speed/day for the market when the speed source exists. |
Examples
cURL
curl "https://api.sensor42.com/api/v7/apps/1545593132/markets?sort_by=share&sort_dir=desc" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Accept: application/json"
GET
/api/v7/apps/search
Apps Search
Search the public apps corpus by app ID, title, subtitle, bundle ID, and developer signals, then filter and sort the result set by reviews, speed, category, and release date windows.
Notes
- JSON is the default output. CSV is supported with
format=csv or Accept: text/csv. reviews_min and reviews_max accept the aliases all_markets_reviews_min and all_markets_reviews_max.avg_speed_min and avg_speed_max accept the aliases avg_speed_per_day_min and avg_speed_per_day_max.page and page_size are convenience aliases that are translated into offset and limit.limit defaults to 20 and is capped at 20.
Parameters
| Name | Location | Type | Required | Description |
q | query | string | No | Free-text query across app ID, title, subtitle, bundle ID, and developer signals. |
reviews_min | query | int64 | No | Minimum all-markets reviews threshold. Alias: all_markets_reviews_min. |
reviews_max | query | int64 | No | Maximum all-markets reviews threshold. Alias: all_markets_reviews_max. |
avg_speed_min | query | float64 | No | Minimum average speed/day threshold. Alias: avg_speed_per_day_min. |
avg_speed_max | query | float64 | No | Maximum average speed/day threshold. Alias: avg_speed_per_day_max. |
category_id | query | uint64 | No | Single Apple category identifier to include. |
category_ids | query | csv uint64 list | No | Comma-separated Apple category identifier list. |
first_release_from | query | date | No | Minimum first release date in YYYY-MM-DD. |
first_release_to | query | date | No | Maximum first release date in YYYY-MM-DD, inclusive through end of day. |
last_release_from | query | date | No | Minimum last release date in YYYY-MM-DD. |
last_release_to | query | date | No | Maximum last release date in YYYY-MM-DD, inclusive through end of day. |
sort_by | query | enum | No | Allowed values: all_markets_reviews, reviews, avg_speed, avg_speed_per_day, recent_speed, recent_speed_per_day, first_release, first_release_date, last_release, last_release_date. Default: all_markets_reviews. |
sort_dir | query | enum | No | Allowed values: asc, desc. Default: desc. |
limit | query | int | No | Page size. Default 20, max 20. |
offset | query | int | No | Zero-based row offset. Default 0. |
page | query | int | No | Alternative 1-based page number. Converted internally to offset. |
page_size | query | int | No | Alternative page size alias for limit. |
format | query | enum | No | Allowed values: json, csv. Default json. |
Response fields
| Field | Type | Description |
limit | int | Effective limit applied to the request. |
offset | int | Effective zero-based offset applied to the request. |
total | int64 | Total rows matching the filters before pagination. |
total_pages | int | Total pages at the effective limit. |
items[].app_id | uint64 | App Store app identifier. |
items[].status | string | Current app collection status. |
items[].title | string|null | App title. |
items[].bundle_id | string|null | Bundle identifier. |
items[].category_id | uint64|null | Apple category identifier. |
items[].category_name | string|null | Apple category name. |
items[].developer_name | string|null | Developer or publisher name. |
items[].developer_id | uint64|null | Internal developer row identifier. |
items[].developer_apps_count | int64|null | Number of apps currently attributed to that developer in the search dataset. |
items[].icon_url | string|null | Remote icon URL. |
items[].icon_local_url | string|null | Local mirrored icon URL when present. |
items[].rating | float|null | Current average star rating. |
items[].rating_count | int64|null | Stored main-row rating count. |
items[].all_markets_reviews | uint64 | All-markets reviews total used for search filtering and sorting. |
items[].avg_speed_per_day | float|null | Average speed/day derived from all-markets reviews and first release date. |
items[].recent_speed_per_day | float|null | Recent speed/day value hydrated from speed data. |
items[].first_release_date | datetime|null | Earliest known release date. |
items[].last_release_date | datetime|null | Latest known release/update date. |
items[].last_seen | datetime|null | Latest crawler seen timestamp for the app row. |
Examples
JSON
curl "https://api.sensor42.com/api/v7/apps/search?q=weather&reviews_min=100&avg_speed_min=1.5&category_id=6001&sort_by=all_markets_reviews&sort_dir=desc&limit=20&offset=0" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Accept: application/json"
CSV
curl "https://api.sensor42.com/api/v7/apps/search?q=weather&reviews_min=100&sort_by=all_markets_reviews&sort_dir=desc&limit=20&offset=0&format=csv" \
-H "X-API-Key: YOUR_API_KEY" \
-H "Accept: text/csv"