Revelator’s Analytics API data provides consumption (trends) and revenue data.
For analytics with multiple options for aggregation, granularity, and filtering, see Comprehensive Analytics.
For a lightweight endpoint with various pre-calculated, enterprise-level metrics, see Keymetrics.
The primary analytics endpoints follow a standardized URL template with interchangeable components.
/analytics/{dataSet}/{aggregationDimension}?dateGranularity={granularity} …
Effective September 26, 2025, the trends aggregation will no longer refresh data and will be removed without
further notice. Please migrate to V3 analytics at /analytics/consumption/{aggregation}.
For full details, see the Changelog entry.
metadata will be different, based on the aggregationDimension and can be implemented as a generic type with a
metadata type parameter - AnalyticsResonseItem<TMetadata> using a different TMetadata for each
aggregationDimension.date should be excluded or null if dateGranularity is null or all| Component | Passed as | Description |
|---|---|---|
| Data Set required | URL parameter | Data range to be aggregated. Currently supports:
|
| Aggregation Dimension required | URL parameter | Data grouping dimension. Currently supports:
|
| Date Granularity optional | Querystring parameter: dateGranularity | Filter Level of date grouping. Options are:
|
| Filter | Multiple querystring parameters based on the desired filter. | Filters to be applied to the dataSet before grouping. You can apply multiple filters simultaneously. Currently supports:
Important: How to format array filters in the URL To provide an array of IDs, you must format the query string parameters by encoding the array brackets ( []) and providing an index for each value. Example: To filter for releaseIds=[1035587, 1628168], your query string would look like this:?releaseIds%5B0%5D=1035587&releaseIds%5B1%5D=1628168 |
| Page optional | Querystring parameters:
| Controls the amount of response data provided. |
| Order optional | Querystring parameters:
| Controls how the response data is ordered, and by what property. |
| Date range optional | Querystring parameters:
| Filters the results by date. Both parameters expect an ISO 8601 date format (e.g., YYYY-MM-DD). Behavior: - If fromDate and toDate are both provided: The API returns results for the specified date range.- If only fromDate is provided: The API returns results for a three-month period starting from the fromDate.- If only toDate is provided: The API returns results for a three-month period ending on the toDate.- If neither is provided: The API returns results for the last three months by default. |
| Targer Enterprise optional | Querystring parameter: targetEnterpriseId (integer) | Allows a parent enterprise user to retrieve data specifically for one of their child enterprises. Important: Currently, this parameter is only effective when the Data Set (URL parameter) is revenue. It will be ignored for other Data Sets. |
Example requests for different combinations of Data Sets and Aggregation Dimensions.
trends) Analyticsrevenue) AnalyticsThe following endpoints can be used to receive analytics metrics, aggregated by date; Revenue data (segregated monthly) and Trends data (segregated daily).
Effective September 26, 2025, the trends aggregation will no longer refresh data and will be removed without
further notice. Please migrate to V3 analytics at /analytics/consumption/{aggregation}.
For full details, see the Changelog entry.
/analytics/trends/metricsByDateRetrieves trends analytics data, with one object returned for each day within the selected date range.
At least one date parameter (fromDate or toDate) is required to retrieve data. Omitting both will result in a
500 error.
| Parameter | Type | Description |
|---|---|---|
fromDate required* | string | The start date for the date range, in YYYY-MM-DD format. *Required if toDate is not provided. |
toDate required* | string | The end date for the date range, in YYYY-MM-DD format. *Required if fromDate is not provided. |
metrics optional | string | Defaults to all available metrics when a valid date range is provided. To request specific metrics, repeat the parameter for each desired metric (e.g., ?metrics=dayStreams&metrics=daySkipRate). If metrics is provided without a date range, the endpoint will return an empty array []. |
/analytics/revenue/metricsByDateRetrieves revenue analytics data, with one object returned for each month within the selected date range.
| Parameter | Type | Description |
|---|---|---|
fromDate optional | string | The start date for the date range, in YYYY-MM-DD format. Defaults to the most current date with available data. As Revenue data is segregated monthly, this date should typically be the first of the month. |
toDate optional | string | The end date for the date range, in YYYY-MM-DD format. Defaults to the most current date with available data. As Revenue data is segregated monthly, this date should typically be the first of the month. |
metrics optional | string | Defaults to all available metrics. To request specific metrics, provide the parameter once for each desired metric. Example: metrics=monthRevenue |
targerEnterpriseId optional | integer | Allows a parent enterprise user to retrieve metrics specifically for one of their child enterprises. |
With the goal of providing a more comprehensive analytics solution, we have launched a new version of the Revelator Analytics API (v3).
This is a beta version of the API. Please reach out to us if there are any issues.
The V3 API currently includes only the consumption and engagement data endpoints. More endpoints matching their V2 counterparts, as well as brand new endpoints, will be added in the future.
/analytics/{metric}/{aggregation}Retrieves analytics data (consumption or engagement metrics) aggregated by different dimensions.
Available Metrics
consumption - previously trendsengagementEach one will have its own set of metrics on the response object
Available Aggregation Dimensions
byArtistbyCountrybyDatebyDeliveryTypebyDiscoveryTypebyDistributorbyLabelbyRecordingVersionbyReleasebySourceOfStreambyTrackNotes:
byDate endpoint does not have the metadata object in the items.dateGranularity, results are nested within a metrics array for each item.releaseIds=2384320&releaseIds=1628168).| Parameter | Type | Description |
|---|---|---|
fromDate required | string | Start date for the data range (YYYY-MM-DD). |
toDate required | string | End date for the data range (YYYY-MM-DD). |
dateGranularity optional | string | Date granularity for results. Possible values: Daily, Weekly, Monthly, Quarterly, Yearly, All, Null. |
pageSize optional | integer | Number of items per page. |
pageNumber optional | integer | Page number for pagination. |
orderByProperty optional | string | Property to order results by (e.g., streamsCount). |
orderByDescending optional | boolean | If true, orders results in descending order. |
| Filter | Type | Description | Applicable Aggregations |
|---|---|---|---|
releaseIds | array of integers | Filter by one or more release IDs. | All |
trackIds | array of integers | Filter by one or more track IDs. | All |
artistIds | array of integers | Filter by one or more artist IDs. | All |
labelIds | array of integers | Filter by one or more label IDs. | All |
distributorIds | array of integers | Filter by one or more distributor IDs. | All |
excludeDistributorIds | array of integers | Exclude specific distributor IDs from the results. | All |
excludeTikTok | boolean | If true, excludes TikTok data from the results. Defaults to false. | All |
countryIds | array of integer | Filter by one or more country IDs. | All |
deliveryTypeIds | array of integers | Filter by one or more delivery type IDs. | byDeliveryType |
discoveryTypeIds | array of integers | Filter by one or more discovery type IDs. | byDiscoveryType |
recordingVersionTypeIds | array of integers | Filter by one or more recording version type IDs. | byRecordingVersion |
sourceOfStreamIds | array of integers | Filter by one or more source of stream IDs. | bySourceOfStream |
isUgc | boolean | If true, filters results to only include User-Generated Content (UGC) metrics. If false or omitted, only includes non-UGC metrics. This affects which metric fields are populated. | All |
isSkipRate | boolean | If true, this filter will exclude entire items from the results where the skipRate metric is 0. This parameter is only relevant when the {metric} type is engagement. | All |
| Parameter | Type | Description |
|---|---|---|
totals | object | Aggregated totals for the entire request. Values will differ based on the data set (consumption or engagement). |
totals.streamsCount | integer | [All types] Total count for streams. |
totals.trackDownloadCount | integer | [consumption] Total count for track downloads. |
totals.releaseDownloadCount | integer | [consumption] Total count for release downloads. |
totals.sub30sCount | integer | [enagement] Total count of streams bellow 30 seconds. |
totals.savesCount | integer | [enagement] Total count of saves. |
totals.skipRate | float | [enagement] A float value representing the total skip rate. |
totals.completeRate | float | [enagement] A float value representing the total complete rate. |
totals.creationsCount | integer | [engagement] Total count of creations. (Will be 0 if isUgc is false or omitted). |
totals.likesCount | integer | [engagement] Total count of likes. (Will be 0 if isUgc is false or omitted). |
totals.sharesCount | integer | [enagagement] Total count of shares. (Will be 0 if isUgc is false or omitted). |
totals.commentsCount | integer | [engagement] Total count of comments. (Will be 0 if isUgc is false or omitted). |
totals.watchTime | float | [engagement] Total watch time. (Will be 0 if isUgc is false or omitted). |
fromDate | string | Start date of the data range. |
toDate | string | End date of the data range. |
totalItemsCount | integer | Total number of items in the result set. |
pageNumber | integer | Current page number. |
pageSize | integer | Number of items per page. |
items | array | Resulting array of consumption data items. |
items.metadata | object | Metadata for the item. This value changes depending on the aggregation dimension (null if byDate aggregation is used). |
items.metrics | object | Metrics for the item. TValues will differ between different data set types (consumption or engagement). |
items.metrics.streamsCount | integer | [All types] Count for streams. (Will be null if isUgc is true). |
items.metrics.trackDownloadCount | integer | [consumption] Count for track downloads. (Will be null if isUgc is true). |
items.metrics.releaseDownloadCount | integer | [consumption] Count for release downloads. (Will be null if isUgc is true). |
items.metrics.eventDate | string | [consumption] Date of the event (null if not applicable) |
items.metrics.sub30sCount | integer | [enagement] Count of streams bellow 30 seconds. (Will be null if isUgc is true). |
items.metrics.savesCount | integer | [enagement] Count saves. (Will be null if isUgc is true). |
items.metrics.skipRate | float | [enagement] A float value representing the skip rate for the item. (Will be null if isUgc is true). |
items.metrics.completeRate | float | [enagement] A float value representing the complete rate for the item. (Will be null if isUgc is true). |
items.metrics.viewsCount | integer | [consumption] Views count for the item. (Will be null if isUgc is false). |
items.metrics.creationsCount | integer | [engagement] Total count of creations for the item. (Will be null if isUgc is false). |
items.metrics.likesCount | integer | [engagement] Total count of likes for the item. (Will be null if isUgc is false). |
items.metrics.sharesCount | integer | [enagagement] Total count of shares for the item. (Will be null if isUgc is false). |
items.metrics.commentsCount | integer | [engagement] Total count of comments for the item. (Will be null if isUgc is false). |
items.metrics.watchTime | float | [engagement] Total watch time for the item. (Will be null if isUgc is false). Relevant only for Youtube and will not be populated for /engagement/byRelease?isUgc=true because YT does not have releases. |
consumption) Examplesengagement) ExamplesbyDate AggregationThe byDate aggregation is unique because it returns a single item in the main items array. This single item
contains a metrics array, and the structure of this metrics array is determined by the dateGranularity parameter.
When using byDate, the metadata object is not present in the response.
Here’s how each dateGranularity option affects the metrics array within the byDate aggregation:
dateGranularity Value | Resulting metrics Array Structure |
|---|---|
Daily | An array of objects, one for each day in the requested date range. Each object’s eventDate will be the date of the metrics (e.g., 2024-07-01T00:00:00Z). |
Weekly | An array of objects, one for each week in the requested date range. Each object’s eventDate will be the start of the week (Monday at midnight UTC, e.g., 2024-07-01T00:00:00Z). |
Monthly | An array of objects, one for each month in the requested date range. Each object’s eventDate will be the first day of the month (at midnight UTC, e.g., 2024-07-01T00:00:00Z). |
Quarterly | An array of objects, one for each quarter in the requested date range. Each object’s eventDate will be the first day of the quarter (Jan 1, Apr 1, Jul 1, Oct 1). |
Yearly | An array of objects, one for each year in the requested date range. Each object’s eventDate will be the first day of the year (Jan 1). |
All, Null, or omitted | A single object in the array, containing the aggregated total metrics for the entire specified date range. The eventDate for this object will be null. |
byDate Aggregation ExamplesArtificial streaming endpoints allow you to verify if streams from content provided by your clients come from automation processes like bots, scripts, or click farms, rather than genuine user listening intent. The less artificial streams, the better it is.
/analytics/artificialStreams/{aggregation}Retrieves artificial streams data aggregated by different dimensions.
Available Aggregation Dimensions
byTrackbyReleasebyArtistbyLabelbyCountrybyDistributorbyDatebyClientNotes:
byDate endpoint does not have the metadata object in the items.dateGranularity, results are nested within a metrics array for each item.releaseIds=2384320&releaseIds=1628168).The response will include finesAmount, which represents the amount of money that will be withheld from your next
royalty run based on artificial streaming detections in this period.
| Parameter | Type | Description |
|---|---|---|
fromDate optional | string | The start date for the data range, in YYYY-MM-DD format. If both fromDate and toDate are omitted, the API returns results from the past three months. |
toDate optional | string | The end date for the data range, in YYYY-MM-DD format. If both fromDate and toDate are omitted, the API returns results from the past three months. |
dateGranularity optional | string | Date granularity for results. Possible values: Monthly, All, Null. |
pageSize optional | integer | Number of items per page. |
pageNumber optional | integer | Page number for pagination. |
orderByProperty optional | string | Property to order results by (e.g., artificialStreamsCount). |
orderByDescending optional | boolean | If true, orders results in descending order. |
| Filter | Type | Description | Applicable Aggregations |
|---|---|---|---|
targetEnterpriseId | integer | Filter by your child enterprise. | All |
releaseIds | array of integers | Filter by one or more release IDs. | All |
trackIds | array of integers | Filter by one or more track IDs. | All |
artistIds | array of integers | Filter by one or more artist IDs. | All |
labelIds | array of integers | Filter by one or more label IDs. | All |
distributorIds | array of integers | Filter by one or more distributor IDs. | All |
excludeDistributorIds | array of integers | Exclude specific distributor IDs from the results. | All |
countryIds | array of integers | Filter by one or more country IDs. | All |
| Parameter | Type | Description |
|---|---|---|
totals | object | Aggregated totals for the entire request. |
totals.artificialStreamsCount | integer | Total count for artificial streams. |
totals.flaggedAssetsCount | integer | Total count for assets flagged with artificial streams. |
totals.finesAmount | float | Total amount of applied fines. |
fromDate | string | Start date of the data range (ISO 8601 format). |
toDate | string | End date of the data range (ISO 8601 format). |
totalItemsCount | integer | Total number of items in the result set. |
pageNumber | integer | Current page number. |
pageSize | integer | Number of items per page. |
items | array | Resulting array of artificial streams data items. |
items.metadata | object | Metadata for the item. This value changes depending on the aggregation dimension (null if byDate aggregation is used). |
items.metrics | object | Metrics for the item. |
items.metrics.artificialStreamsCount | integer | Count for artificial streams. |
items.metrics.flaggedAssetsCount | integer | Count for flagged assets. |
items.metrics.finesAmount | float | Total amount of fines. |
items.metrics.eventDate | string | Date of the event (ISO 8601 format; null if dateGranularity = All or Null). |
byDate AggregationThe byDate aggregation is unique because it returns a single item in the main items array. This single item
contains a metrics array, and the structure of this metrics array is determined by the dateGranularity parameter.
When using byDate, the metadata object is not present in the response.
Here’s how each dateGranularity option affects the metrics array within the byDate aggregation:
dateGranularity Value | Resulting metrics Array Structure |
|---|---|
Monthly | An array of objects, one for each month in the requested date range. Each object’s eventDate will be the first day of the month (at midnight UTC, e.g., 2024-07-01T00:00:00Z). |
All, Null, or omitted | A single object in the array, containing the aggregated total metrics for the entire specified date range. The eventDate for this object will be null. |
byDate Aggregation Examples/analytics/artificialStreams/dashboard/byClientRetrieves artificial streams data, comparing a current date range to a previous one, specifically aggregated by client.
When previousFromDate and previousToDate are omitted, or when dateGranularity = Monthly is used, the following
properties will always be 0 or null:
previousArtificialStreamsCountartificialStreamsChangeartificialStreamsChangePctincreaseThis is because, in these cases, either there is no prior period available for comparison, or the data is aggregated at a consolidated level (e.g., “All”), where changes can only be calculated at the item or total level.
| Parameter | Type | Description |
|---|---|---|
fromDate optional | string | Start date for the data current range (YYYY-MM-DD). |
toDate optional | string | End date for the data current range (YYYY-MM-DD). |
previousFromDate optional | string | Start date for the previous data range (YYYY-MM-DD). |
previousToDate optional | string | End date for the previous data range (YYYY-MM-DD). |
dateGranularity optional | string | Date granularity for results. Possible values: Monthly, All, Null. |
pageSize optional | integer | Number of items per page. |
pageNumber optional | integer | Page number for pagination. |
orderByProperty optional | string | Property to order results by (e.g., artificialStreamsCount). |
orderByDescending optional | boolean | If true, orders results in descending order. |
| Filter | Type | Description |
|---|---|---|
targetEnterpriseId | integer | Filter by your child enterprise. |
releaseIds | array of integers | Filter by one or more release IDs. |
trackIds | array of integers | Filter by one or more track IDs. |
artistIds | array of integers | Filter by one or more artist IDs. |
labelIds | array of integers | Filter by one or more label IDs. |
distributorIds | array of integers | Filter by one or more distributor IDs. |
excludeDistributorIds | array of integers | Exclude specific distributor IDs from the results. |
countryIds | array of integers | Filter by one or more country IDs. |
| Parameter | Type | Description |
|---|---|---|
totals | object | Aggregated totals for the entire request. |
totals.artificialStreamsCount | integer | Total count for artificial streams (current period). |
totals.previousArtificialStreamsCount | integer | Total count for artificial streams (previous period). |
totals.artificialStreamsChange | integer | The numerical change in artificial streams count (current vs. previous period). |
totals.artificialStreamsChangePct | float | The percentage change in artificial streams count (current vs. previous period). |
fromDate | string | Start date of the current data range (ISO 8601 format). |
toDate | string | End date of the current data range (ISO 8601 format). |
totalItemsCount | integer | Total number of items in the result set. |
pageNumber | integer | Current page number. |
pageSize | integer | Number of items per page. |
items | array | Resulting array of artificial streams data items. |
items.metadata | object | Metadata for the item. |
items.metadata.id | object | Enterprise ID. |
items.metadata.name | object | Enterprise name. |
items.metrics | object | Metrics for the item. |
items.metrics.artificialStreamsCount | integer | Count for artificial streams (current period). |
items.metrics.previousArtificialStreamsCount | integer | Count for artificial streams (previous period). |
items.metrics.artificialStreamsChange | integer | Numerical change in artificial streams count (current vs. previous period). |
items.metrics.artificialStreamsChangePct | float | Percentage change in artificial streams count (current vs. previous period). |
items.metrics.increase | boolean | Indicates if there was an increase in artificial streams (current vs. previous period). |
items.metrics.eventDate | string | Date of the event (ISO 8601 format; null if dateGranularity = All or Null). |