Query analytics Query analytics metrics with optional grouping, sorting and filters.
The Query Endpoint is very flexible and can be used to retrieve aggregated analytics data based on custom filters, groupings, and time ranges. It basically lets you retrieve all the data you can see in the Vemetric Dashboard , programmatically.
Examples
Below you can see several examples of how to use the Query Endpoint to retrieve different types of aggregated analytics data. Further down this page, you can find a detailed reference of all the available options you can pass.
Copy the JSON body of any of these examples, and use it in a POST request to https://api.vemetric.com/v1/analytics/query with your API key to see the results.
Aggregated Metrics for the last 7 days Top countries by users in the last month Timeseries of how many users performed a specific event Most popular blog posts in the last month How many users came via ChatGPT in January?
Be sure to also check out the filter values endpoint to see which values you can use in the filters field.
Bearer token for a project API key. This endpoint returns data for that project only.
Example: Bearer vem_abcdefghijklmnopqrstuvwxyz123456
Request Body (required) application/json object
dateRange
* required
Description
Can be either one of the preset strings below, or an array with two date strings [start, end]. Date strings can be either in YYYY-MM-DD format or UTC ISO-8601 format with second precision. Type
"live" | "1hr" | "24hrs" | "7days" | "30days" | "3months" | "6months" | "1year" | array<string, string>
Example
["2026-01-01T12:00:00Z","2026-01-31T12:00:00Z"]
metrics
Description
Metrics to calculate and include in the response. Type
array<"users" | "pageviews" | "events" | "bounceRate" | "visitDuration">
Default
["users","pageviews","events"]
groupBy
Description
Allowed values: "interval:auto", "country", "city", "page:origin", "page:path", "browser", "deviceType", "os", "referrer", "referrerType", "utm*", "event:name", or "event:prop:<property_name>". At the moment it's only possible to group by one field, please tell us if you need more. Type
array<"country" | "city" | "page:origin" | "page:path" | "browser" | "deviceType" | "os" | "referrer" | "referrerType" | "utmCampaign" | "utmContent" | "utmMedium" | "utmSource" | "utmTerm" | "event:name" | "interval:auto" | string<pattern:^event:prop:([^\r\n]+)$>>
orderBy
Description
Gives you the ability to order by a specific field and direction. At the moment it's only possible to order by one field. Type
array<array<"users" | "pageviews" | "events" | "bounceRate" | "visitDuration" | "country" | "city" | "page:origin" | "page:path" | "browser" | "deviceType" | "os" | "referrer" | "referrerType" | "utmCampaign" | "utmContent" | "utmMedium" | "utmSource" | "utmTerm" | "event:name" | "date" | string<pattern:^event:prop:([^\r\n]+)$>, "asc" | "desc">>
Example
[["users","desc"]]
limit
Description
Limits the number of returned rows. Max value is 1000. offset
Description
Number of rows to skip from the start of the result set, to implement pagination. filters
Description
Ability to filter the results based on multiple criteria.
Show nested properties (12)
type: page
Description
Filter based on specific page view properties, like the full URL (origin + path + hash) or its individual parts. Example
{"type":"page","origin":{"value":"https://example.com","operator":"eq"},"path":{"value":"/blog","operator":"startsWith"}}
Show nested properties (3)
origin
Description
Filter based on the page origin (protocol + host). For example, "https://example.com".
Show nested properties (2)
value
* required
Description
Value to filter by operator
* required
Description
Operator to apply for the string filter. "eq" means equals, "notEq" means not equals. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
path
Description
Filter based on the page path. For example, "/blog".
Show nested properties (2)
value
* required
Description
Value to filter by operator
* required
Description
Operator to apply for the string filter. "eq" means equals, "notEq" means not equals. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
hash
Description
Filter based on the page hash. For example, "#section1".
Show nested properties (2)
value
* required
Description
Value to filter by operator
* required
Description
Operator to apply for the string filter. "eq" means equals, "notEq" means not equals. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
type: event
Description
Filter by event name and/or event property values. Example
{"type":"event","name":{"operator":"eq","value":"signup"},"properties":[{"property":"plan","operator":"eq","value":"pro"}]}
Show nested properties (2)
name
Description
Filter by event name.
Show nested properties (2)
value
* required
Description
Value to filter by operator
* required
Description
Operator to apply for the string filter. "eq" means equals, "notEq" means not equals. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
properties
Description
Filter by one or more custom event properties.
Show nested properties (3)
property
* required
Description
Event property key inside custom event data. value
* required
Description
Event property value to compare against. operator
* required
Description
String matching operator for value. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
type: user
Description
Ability to filter for either anonymous or identified users. This is useful when you want to include only known users (for example, for a retention analysis) or only anonymous users (for example, to analyze new visitor behavior). Example
{"type":"user","anonymous":true}
Show nested properties (1)
anonymous
* required
Description
Filter for anonymous (true) or identified (false) users. type: location
Description
Filter by geographic location fields. Example
{"type":"location","country":{"operator":"oneOf","value":["US","DE"]},"city":{"operator":"oneOf","value":["Berlin"]}}
Show nested properties (2)
country
Description
Filter by one or more country codes (ISO-3166 alpha-2, e.g. "US").
Show nested properties (2)
value
* required
Description
List of values to filter by operator
* required
Description
Operator to apply for the list filter. The "any" operator means that any value is accepted and effectively disables the filter. Type
"any" | "oneOf" | "noneOf"
city
Description
Filter by one or more city names. Example
{"value":["Berlin","New York"],"operator":"oneOf"}
Show nested properties (2)
value
* required
Description
List of values to filter by operator
* required
Description
Operator to apply for the list filter. The "any" operator means that any value is accepted and effectively disables the filter. Type
"any" | "oneOf" | "noneOf"
type: referrer
Description
Filter by referrer name. Example
{"type":"referrer","operator":"eq","value":"Google"}
Show nested properties (2)
value
* required
Description
Referrer value to match. Empty string represents direct/none referrer. operator
* required
Description
String matching operator for value. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
type: referrerUrl
Description
Filter by referrer URL. Example
{"type":"referrerUrl","operator":"contains","value":"google.com"}
Show nested properties (2)
value
* required
Description
Referrer URL value to match. Example
"https://google.com"
operator
* required
Description
String matching operator for value. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
type: referrerType
Description
Filter by referrer category/type. Example
{"type":"referrerType","operator":"oneOf","value":["search"]}
Show nested properties (2)
value
* required
Description
List of referrer types to match (for example: search, social, email, direct). Example
["search","social"]
operator
* required
Description
List matching operator for value. Type
"any" | "oneOf" | "noneOf"
type: utmTags
Description
Filter by one or more UTM parameters. Example
{"type":"utmTags","utmSource":{"operator":"eq","value":"google"},"utmMedium":{"operator":"eq","value":"cpc"}}
Show nested properties (5)
utmCampaign
Description
Filter by UTM campaign.
Show nested properties (2)
value
* required
Description
Value to filter by operator
* required
Description
Operator to apply for the string filter. "eq" means equals, "notEq" means not equals. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
utmContent
Description
Filter by UTM content.
Show nested properties (2)
value
* required
Description
Value to filter by operator
* required
Description
Operator to apply for the string filter. "eq" means equals, "notEq" means not equals. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
utmMedium
Description
Filter by UTM medium.
Show nested properties (2)
value
* required
Description
Value to filter by operator
* required
Description
Operator to apply for the string filter. "eq" means equals, "notEq" means not equals. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
utmSource
Description
Filter by UTM source.
Show nested properties (2)
value
* required
Description
Value to filter by operator
* required
Description
Operator to apply for the string filter. "eq" means equals, "notEq" means not equals. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
utmTerm
Description
Filter by UTM term.
Show nested properties (2)
value
* required
Description
Value to filter by operator
* required
Description
Operator to apply for the string filter. "eq" means equals, "notEq" means not equals. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
type: browser
Description
Filter by browser. Example
{"type":"browser","operator":"oneOf","value":["Chrome"]}
Show nested properties (2)
value
* required
Description
List of browser names to match. Example
["Chrome","Safari"]
operator
* required
Description
List matching operator for value. Type
"any" | "oneOf" | "noneOf"
type: device
Description
Filter by device type. Example
{"type":"device","operator":"oneOf","value":["desktop"]}
Show nested properties (2)
value
* required
Description
List of device types to match. Example
["desktop","mobile"]
operator
* required
Description
List matching operator for value. Type
"any" | "oneOf" | "noneOf"
type: os
Description
Filter by operating system. Example
{"type":"os","operator":"oneOf","value":["macOS"]}
Show nested properties (2)
value
* required
Description
List of operating system names to match. Example
["macOS","Windows"]
operator
* required
Description
List matching operator for value. Type
"any" | "oneOf" | "noneOf"
type: funnel
Description
Filter users based on funnel step completion. Example
{"type":"funnel","id":"550e8400-e29b-41d4-a716-446655440000","step":1,"operator":"completed"}
Show nested properties (3)
id
* required
Description
Funnel ID to evaluate for completion status. Example
"550e8400-e29b-41d4-a716-446655440000"
step
* required
Description
Zero-based funnel step index to evaluate. operator
* required
Description
Whether users must have completed or not completed the selected step. Type
"completed" | "notCompleted"
filtersOperator
Description
Operator to apply between multiple filters. Can be either "and" or "or". Responses 200 Success
application/json period
Description
Resolved query period. from
Description
Resolved UTC start timestamp for the query window. Type
string<pattern:^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$>
Example
"2026-01-19T12:30:00Z"
to
Description
Resolved UTC end timestamp for the query window. Type
string<pattern:^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$>
Example
"2026-01-19T12:30:00Z"
query
Description
Resolved query configuration used for this response. dateRange
Description
Echo of the incoming dateRange request field. Type
"live" | "1hr" | "24hrs" | "7days" | "30days" | "3months" | "6months" | "1year" | array<string, string>
Example
["2026-01-01T12:00:00Z","2026-01-31T12:00:00Z"]
groupBy
Description
Echo of the incoming groupBy request field. Type
array<"country" | "city" | "page:origin" | "page:path" | "browser" | "deviceType" | "os" | "referrer" | "referrerType" | "utmCampaign" | "utmContent" | "utmMedium" | "utmSource" | "utmTerm" | "event:name" | "interval:auto" | string<pattern:^event:prop:([^\r\n]+)$>>
metrics
Description
Resolved list of metrics used in the query. Type
array<"users" | "pageviews" | "events" | "bounceRate" | "visitDuration">
orderBy
Description
Echo of the incoming orderBy request field. Type
array<array<"users" | "pageviews" | "events" | "bounceRate" | "visitDuration" | "country" | "city" | "page:origin" | "page:path" | "browser" | "deviceType" | "os" | "referrer" | "referrerType" | "utmCampaign" | "utmContent" | "utmMedium" | "utmSource" | "utmTerm" | "event:name" | "date" | string<pattern:^event:prop:([^\r\n]+)$>, "asc" | "desc">>
Show nested properties (1)
[0]
Type
"users" | "pageviews" | "events" | "bounceRate" | "visitDuration" | "country" | "city" | "page:origin" | "page:path" | "browser" | "deviceType" | "os" | "referrer" | "referrerType" | "utmCampaign" | "utmContent" | "utmMedium" | "utmSource" | "utmTerm" | "event:name" | "date" | string<pattern:^event:prop:([^\r\n]+)$>
Example
"event:prop:plan"
limit
Description
Echo of the incoming limit request field. offset
Description
Echo of the incoming offset request field. filters
Description
Echo of the incoming filters request field.
Show nested properties (12)
type: page
Description
Filter based on specific page view properties, like the full URL (origin + path + hash) or its individual parts. Example
{"type":"page","origin":{"value":"https://example.com","operator":"eq"},"path":{"value":"/blog","operator":"startsWith"}}
Show nested properties (3)
origin
Description
Filter based on the page origin (protocol + host). For example, "https://example.com".
Show nested properties (2)
value
Description
Value to filter by operator
Description
Operator to apply for the string filter. "eq" means equals, "notEq" means not equals. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
path
Description
Filter based on the page path. For example, "/blog".
Show nested properties (2)
value
Description
Value to filter by operator
Description
Operator to apply for the string filter. "eq" means equals, "notEq" means not equals. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
hash
Description
Filter based on the page hash. For example, "#section1".
Show nested properties (2)
value
Description
Value to filter by operator
Description
Operator to apply for the string filter. "eq" means equals, "notEq" means not equals. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
type: event
Description
Filter by event name and/or event property values. Example
{"type":"event","name":{"operator":"eq","value":"signup"},"properties":[{"property":"plan","operator":"eq","value":"pro"}]}
Show nested properties (2)
name
Description
Filter by event name.
Show nested properties (2)
value
Description
Value to filter by operator
Description
Operator to apply for the string filter. "eq" means equals, "notEq" means not equals. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
properties
Description
Filter by one or more custom event properties.
Show nested properties (3)
property
Description
Event property key inside custom event data. value
Description
Event property value to compare against. operator
Description
String matching operator for value. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
type: user
Description
Ability to filter for either anonymous or identified users. This is useful when you want to include only known users (for example, for a retention analysis) or only anonymous users (for example, to analyze new visitor behavior). Example
{"type":"user","anonymous":true}
Show nested properties (1)
anonymous
Description
Filter for anonymous (true) or identified (false) users. type: location
Description
Filter by geographic location fields. Example
{"type":"location","country":{"operator":"oneOf","value":["US","DE"]},"city":{"operator":"oneOf","value":["Berlin"]}}
Show nested properties (2)
country
Description
Filter by one or more country codes (ISO-3166 alpha-2, e.g. "US").
Show nested properties (2)
value
Description
List of values to filter by operator
Description
Operator to apply for the list filter. The "any" operator means that any value is accepted and effectively disables the filter. Type
"any" | "oneOf" | "noneOf"
city
Description
Filter by one or more city names. Example
{"value":["Berlin","New York"],"operator":"oneOf"}
Show nested properties (2)
value
Description
List of values to filter by operator
Description
Operator to apply for the list filter. The "any" operator means that any value is accepted and effectively disables the filter. Type
"any" | "oneOf" | "noneOf"
type: referrer
Description
Filter by referrer name. Example
{"type":"referrer","operator":"eq","value":"Google"}
Show nested properties (2)
value
Description
Referrer value to match. Empty string represents direct/none referrer. operator
Description
String matching operator for value. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
type: referrerUrl
Description
Filter by referrer URL. Example
{"type":"referrerUrl","operator":"contains","value":"google.com"}
Show nested properties (2)
value
Description
Referrer URL value to match. Example
"https://google.com"
operator
Description
String matching operator for value. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
type: referrerType
Description
Filter by referrer category/type. Example
{"type":"referrerType","operator":"oneOf","value":["search"]}
Show nested properties (2)
value
Description
List of referrer types to match (for example: search, social, email, direct). Example
["search","social"]
operator
Description
List matching operator for value. Type
"any" | "oneOf" | "noneOf"
type: utmTags
Description
Filter by one or more UTM parameters. Example
{"type":"utmTags","utmSource":{"operator":"eq","value":"google"},"utmMedium":{"operator":"eq","value":"cpc"}}
Show nested properties (5)
utmCampaign
Description
Filter by UTM campaign.
Show nested properties (2)
value
Description
Value to filter by operator
Description
Operator to apply for the string filter. "eq" means equals, "notEq" means not equals. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
utmContent
Description
Filter by UTM content.
Show nested properties (2)
value
Description
Value to filter by operator
Description
Operator to apply for the string filter. "eq" means equals, "notEq" means not equals. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
utmMedium
Description
Filter by UTM medium.
Show nested properties (2)
value
Description
Value to filter by operator
Description
Operator to apply for the string filter. "eq" means equals, "notEq" means not equals. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
utmSource
Description
Filter by UTM source.
Show nested properties (2)
value
Description
Value to filter by operator
Description
Operator to apply for the string filter. "eq" means equals, "notEq" means not equals. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
utmTerm
Description
Filter by UTM term.
Show nested properties (2)
value
Description
Value to filter by operator
Description
Operator to apply for the string filter. "eq" means equals, "notEq" means not equals. Type
"any" | "eq" | "notEq" | "contains" | "notContains" | "startsWith" | "endsWith"
type: browser
Description
Filter by browser. Example
{"type":"browser","operator":"oneOf","value":["Chrome"]}
Show nested properties (2)
value
Description
List of browser names to match. Example
["Chrome","Safari"]
operator
Description
List matching operator for value. Type
"any" | "oneOf" | "noneOf"
type: device
Description
Filter by device type. Example
{"type":"device","operator":"oneOf","value":["desktop"]}
Show nested properties (2)
value
Description
List of device types to match. Example
["desktop","mobile"]
operator
Description
List matching operator for value. Type
"any" | "oneOf" | "noneOf"
type: os
Description
Filter by operating system. Example
{"type":"os","operator":"oneOf","value":["macOS"]}
Show nested properties (2)
value
Description
List of operating system names to match. Example
["macOS","Windows"]
operator
Description
List matching operator for value. Type
"any" | "oneOf" | "noneOf"
type: funnel
Description
Filter users based on funnel step completion. Example
{"type":"funnel","id":"550e8400-e29b-41d4-a716-446655440000","step":1,"operator":"completed"}
Show nested properties (3)
id
Description
Funnel ID to evaluate for completion status. Example
"550e8400-e29b-41d4-a716-446655440000"
step
Description
Zero-based funnel step index to evaluate. operator
Description
Whether users must have completed or not completed the selected step. Type
"completed" | "notCompleted"
filtersOperator
Description
Echo of the incoming filtersOperator request field. pagination
Description
Pagination metadata for the response. limit
Description
Applied row limit after internal normalization. offset
Description
Applied row offset after internal normalization. returned
Description
Number of rows returned in data. Can be used to determine if there are more rows available for pagination (when returned is equal to limit, there might be more rows available on the next page). data
Description
Result rows for the query after grouping, sorting, and pagination. group
Description
Group values for this row. Empty object for aggregate queries. Example
{"date":"2026-01-18T00:00:00Z"}
Show nested properties (16)
date
Description
UTC timestamp in ISO-8601 format with second precision (no milliseconds). Type
string<pattern:^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}Z$>
Example
"2026-01-19T12:30:00Z"
metrics
Description
Calculated metric values for the row. Only requested metrics are returned.
Show nested properties (5)
users
Description
Unique users count for this row. pageviews
Description
Pageview events count for this row. events
Description
Custom events count for this row. bounceRate
Description
Bounce rate percentage for this row. Can be null when not applicable for the selected grouping. visitDuration
Description
Average visit duration in seconds for this row. Can be null when not applicable for the selected grouping. 400 Bad request - invalid request payload or parameters
application/json error
Description
Validation error details. code
Description
Machine-readable validation error code. message
Description
Human-readable validation summary. details
Description
Per-field validation issues.
Show nested properties (2)
field
Description
Path to the invalid request field. message
Description
Validation error message for the field. 401 Unauthorized - invalid or revoked API key
application/json error
Description
Error details. code
Description
Machine-readable error code. message
Description
Human-readable error message. 403 Requested date range is not allowed for the current plan
application/json error
code
Type
"PLAN_LIMIT_EXCEEDED"
429 Rate limit exceeded
application/json error
Description
Error details. code
Description
Machine-readable error code. Type
"RATE_LIMIT_EXCEEDED"
message
Description
Human-readable error message. 500 Unexpected internal error
application/json error
Description
Error details. code
Description
Machine-readable error code. Type
"INTERNAL_SERVER_ERROR"
message
Description
Human-readable error message.