API
Reporting API
Quickstart on using the Nozzle reporting api
Updated July 4, 20262 min read
Contents
Keywords
Here's an example curl call that returns data for each keyword. Here is a list of template tokens to swap out:
apiKey:apiKey: create your own from Settings → Users → Create API Token — see How do I create an API token?workspaceId: Nozzle workspace idteamId: Nozzle project id, which used to be called teamsstart: start of the reporting time rangeend: end of the reporting time rangebrandIds: choose a single brand id (copy from brand manager)segmentIds: choose a single segment id (copy from segment manager)keywordGroups: choose a single keyword group, exact match and case-sensitivekeywordIds: to limit to just the provided keywords, add an array of keyword ids
brandIds can be swapped out for brandTypes, brandProperties, brandIds, domainIds or urlIds, as long as you also change rollupBy to match.
Metrics
The example lists all the available metrics and aggregations, you can slim down the response by eliminating variations you don't need.
curl -X POST --location "https://api.nozzle.app/reports/groupByOverTime" \
-H "accept: application/json, text/plain, */*" \
-H "authorization: Token {{apiKey}}" \
-H "Content-Type: application/json" \
-d '{
"workspaceId":{{workspaceId}},
"teamId":{{projectId}},
"start": "2026-02-03T00:00:00+00:00",
"end": "2026-03-04T23:59:59+00:00",
"rollupBy": "brand_id",
"groupBy": "keyword_id",
"samples": 1,
"filters": {
"segmentIds": [
1
],
"keywordGroups": [
"- All Keywords -"
],
"brandIds": [
971604420480256
],
"brandProperties": [],
"brandTypes": [],
"domainIds": [],
"urlIds": [],
"keywordIds": []
},
"orderBy": [
{
"metric": {
"id": "percentage_of_viewport",
"aggregation": "avg",
"subAggregation": "total",
"postAggregation": "value"
},
"limit": 50,
"offset": 0,
"desc": true
}
],
"includedMetrics": [
{
"id": "percentage_of_viewport",
"aggregation": "avg",
"subAggregation": "total",
"postAggregation": "value"
},
{
"id": "top_rank",
"aggregation": "avg",
"subAggregation": "total",
"postAggregation": "value"
},
{
"id": "top_stat_base_rank",
"aggregation": "avg",
"subAggregation": "total",
"postAggregation": "value"
},
{
"id": "estimated_traffic_sov",
"aggregation": "sum",
"subAggregation": "total",
"postAggregation": "value"
},
{
"id": "click_through_rate",
"aggregation": "avg",
"subAggregation": "total",
"postAggregation": "value"
},
{
"id": "estimated_traffic",
"aggregation": "sum",
"subAggregation": "total",
"postAggregation": "value"
},
{
"id": "top_pixels_from_top",
"aggregation": "avg",
"subAggregation": "total",
"postAggregation": "value"
},
{
"id": "percentage_of_viewport",
"aggregation": "avg",
"subAggregation": "total",
"postAggregation": "value"
},
{
"id": "percentage_of_dom",
"aggregation": "avg",
"subAggregation": "total",
"postAggregation": "value"
},
{
"id": "results",
"aggregation": "count",
"subAggregation": "total",
"postAggregation": "value"
},
{
"id": "unique_urls",
"aggregation": "count",
"subAggregation": "total",
"postAggregation": "value"
},
{
"id": "ppc_value",
"aggregation": "sum",
"subAggregation": "total",
"postAggregation": "value"
},
{
"id": "adwords_search_volume",
"aggregation": "sum",
"subAggregation": "total",
"postAggregation": "value"
},
{
"id": "top_ranking_results",
"aggregation": "any",
"subAggregation": "any",
"postAggregation": "value"
},
{
"id": "top_rank",
"aggregation": "avg",
"subAggregation": "total",
"postAggregation": "change"
},
{
"id": "top_stat_base_rank",
"aggregation": "avg",
"subAggregation": "total",
"postAggregation": "change"
},
{
"id": "estimated_traffic_sov",
"aggregation": "sum",
"subAggregation": "total",
"postAggregation": "change"
},
{
"id": "click_through_rate",
"aggregation": "avg",
"subAggregation": "total",
"postAggregation": "change"
},
{
"id": "estimated_traffic",
"aggregation": "sum",
"subAggregation": "total",
"postAggregation": "change"
},
{
"id": "top_pixels_from_top",
"aggregation": "avg",
"subAggregation": "total",
"postAggregation": "change"
},
{
"id": "percentage_of_viewport",
"aggregation": "avg",
"subAggregation": "total",
"postAggregation": "change"
},
{
"id": "percentage_of_dom",
"aggregation": "avg",
"subAggregation": "total",
"postAggregation": "change"
},
{
"id": "results",
"aggregation": "count",
"subAggregation": "total",
"postAggregation": "change"
},
{
"id": "unique_urls",
"aggregation": "count",
"subAggregation": "total",
"postAggregation": "change"
},
{
"id": "ppc_value",
"aggregation": "sum",
"subAggregation": "total",
"postAggregation": "change"
},
{
"id": "adwords_search_volume",
"aggregation": "sum",
"subAggregation": "total",
"postAggregation": "change"
}
]
}'Related articles
Admin APIA quickstart for the Nozzle Admin API, covering API tokens, workspace and project ids, template tokens, and a cURL example for listing your projects.How Do I Create An API Token?How to create a Nozzle API token from the Users page, save it the one time it is shown, and send it in the Authorization header with the Token prefix.How do I authenticate with the Nozzle API?How to authenticate with the Nozzle API using a long-lived key in the Authorization header, plus finding the workspace, team, and keyword source IDs.