REST API / Views
visibility_daily
View
Answer-run counts by UTC day, engine and topic, using visibility overview counting rules. Sum the counts before calculating shares across buckets. For dashboard-identical headline numbers, anchored windows and deltas, use read report_visibility_overview.
- Max rows per query
- 100
- Default order
- day desc
- Required filter
- one of project_id
- Max offset
- 2000
- Cursor paging
- by id
Filter project_id and day where available. For dashboard-identical headline numbers, anchored windows and deltas, use read report_*.
Fields
| Field | Type | Description | Filter | Sort |
|---|---|---|---|---|
id | string | Stable identifier for this aggregate row. | – | ✓ |
project_id indexed | string | Project ID from projects. | ✓ | – |
day | datetime | UTC calendar day. Filter this field to select complete daily buckets. | ✓ | ✓ |
engine | string | Answer engine.CHATGPT GOOGLE_AIO | ✓ | ✓ |
topic_idnullable | string | Topic folder ID from topics, resolved as in prompts. A prompt without a topic carries the "No topic" folder's ID once that folder has been positioned, otherwise null; filter topic IS NULL to select untopiced prompts. | ✓ | ✓ |
topicnullable | string | Prompt topic name. | ✓ | ✓ |
answers | integer | All answer runs, including runs without a rendered AI overview. | ✓ | ✓ |
brand_mentioned | integer | Answer runs that mention the project brand. | ✓ | ✓ |
unbranded_answers | integer | Runs on prompts explicitly branded=false; denominator for unbranded_visibility. | ✓ | ✓ |
unbranded_mentioned | integer | Brand-mentioned runs on prompts explicitly branded=false. | ✓ | ✓ |
branded_mentioned | integer | Brand-mentioned runs on prompts branded=true. | ✓ | ✓ |
unknown_branding_answers | integer | Runs whose prompt branding has not been classified. | ✓ | ✓ |
unbranded_visibilitynullable | number | Unbranded mentioned / unbranded answers, fraction 0..1; null with no unbranded runs. | ✓ | ✓ |
all_own_hits_from_branded_prompts | boolean | True only when this bucket has hits and all are from branded prompts. | ✓ | ✓ |
competitor_mentions | integer | Competitor occurrences across answer runs; repeated stored names contribute to the overview denominator. | ✓ | ✓ |
share | number | Brand visibility as a fraction from 0 to 1: brand_mentioned / answers. | ✓ | ✓ |
share_of_voice | number | Brand share as a fraction from 0 to 1: brand_mentioned / (brand_mentioned + competitor_mentions), or 0 when no brand was mentioned. | ✓ | ✓ |
Examples
Example
SELECT id, project_id, day, engine, topic_id
FROM visibility_daily
WHERE project_id = $1
ORDER BY day DESC
LIMIT 25Calling it
MCP
Tool call
query({"sql":"SELECT id, project_id, day, engine, topic_id FROM visibility_daily WHERE project_id = $1 ORDER BY day DESC LIMIT 25","params":["<value 1>"]})REST
curl
curl -X POST "https://app.sensorhub.ai/api/v1/query" \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
--data-binary @- <<'JSON'
{
"sql": "SELECT id, project_id, day, engine, topic_id FROM visibility_daily WHERE project_id = $1 ORDER BY day DESC LIMIT 25",
"params": [
"<value 1>"
]
}
JSONRow JSON Schema
json
{
"type": "object",
"description": "Answer-run counts by UTC day, engine and topic, using visibility overview counting rules. Sum the counts before calculating shares across buckets. For dashboard-identical headline numbers, anchored windows and deltas, use read report_visibility_overview.",
"properties": {
"id": {
"type": "string",
"description": "Stable identifier for this aggregate row.",
"x-sensorhub-indexed": false,
"x-sensorhub-searchable": false,
"x-sensorhub-aggregatable": true,
"x-sensorhub-filterable": false,
"x-sensorhub-sortable": true
},
"project_id": {
"type": "string",
"description": "Project ID from projects.",
"x-sensorhub-indexed": true,
"x-sensorhub-searchable": false,
"x-sensorhub-aggregatable": true,
"x-sensorhub-filterable": true,
"x-sensorhub-sortable": false
},
"day": {
"type": "string",
"description": "UTC calendar day. Filter this field to select complete daily buckets.",
"format": "date-time",
"x-sensorhub-indexed": false,
"x-sensorhub-searchable": false,
"x-sensorhub-aggregatable": true,
"x-sensorhub-filterable": true,
"x-sensorhub-sortable": true
},
"engine": {
"type": "string",
"description": "Answer engine.",
"enum": [
"CHATGPT",
"GOOGLE_AIO"
],
"x-sensorhub-filter-operators": [
"=",
"!=",
"<>",
"IN",
"NOT IN",
"IS NULL",
"IS NOT NULL"
],
"x-sensorhub-indexed": false,
"x-sensorhub-searchable": false,
"x-sensorhub-aggregatable": true,
"x-sensorhub-filterable": true,
"x-sensorhub-sortable": true
},
"topic_id": {
"type": [
"string",
"null"
],
"description": "Topic folder ID from topics, resolved as in prompts. A prompt without a topic carries the \"No topic\" folder's ID once that folder has been positioned, otherwise null; filter topic IS NULL to select untopiced prompts.",
"x-sensorhub-indexed": false,
"x-sensorhub-searchable": false,
"x-sensorhub-aggregatable": true,
"x-sensorhub-filterable": true,
"x-sensorhub-sortable": true
},
"topic": {
"type": [
"string",
"null"
],
"description": "Prompt topic name.",
"x-sensorhub-indexed": false,
"x-sensorhub-searchable": false,
"x-sensorhub-aggregatable": true,
"x-sensorhub-filterable": true,
"x-sensorhub-sortable": true
},
"answers": {
"type": "integer",
"description": "All answer runs, including runs without a rendered AI overview.",
"x-sensorhub-indexed": false,
"x-sensorhub-searchable": false,
"x-sensorhub-aggregatable": true,
"x-sensorhub-filterable": true,
"x-sensorhub-sortable": true
},
"brand_mentioned": {
"type": "integer",
"description": "Answer runs that mention the project brand.",
"x-sensorhub-indexed": false,
"x-sensorhub-searchable": false,
"x-sensorhub-aggregatable": true,
"x-sensorhub-filterable": true,
"x-sensorhub-sortable": true
},
"unbranded_answers": {
"type": "integer",
"description": "Runs on prompts explicitly branded=false; denominator for unbranded_visibility.",
"x-sensorhub-indexed": false,
"x-sensorhub-searchable": false,
"x-sensorhub-aggregatable": true,
"x-sensorhub-filterable": true,
"x-sensorhub-sortable": true
},
"unbranded_mentioned": {
"type": "integer",
"description": "Brand-mentioned runs on prompts explicitly branded=false.",
"x-sensorhub-indexed": false,
"x-sensorhub-searchable": false,
"x-sensorhub-aggregatable": true,
"x-sensorhub-filterable": true,
"x-sensorhub-sortable": true
},
"branded_mentioned": {
"type": "integer",
"description": "Brand-mentioned runs on prompts branded=true.",
"x-sensorhub-indexed": false,
"x-sensorhub-searchable": false,
"x-sensorhub-aggregatable": true,
"x-sensorhub-filterable": true,
"x-sensorhub-sortable": true
},
"unknown_branding_answers": {
"type": "integer",
"description": "Runs whose prompt branding has not been classified.",
"x-sensorhub-indexed": false,
"x-sensorhub-searchable": false,
"x-sensorhub-aggregatable": true,
"x-sensorhub-filterable": true,
"x-sensorhub-sortable": true
},
"unbranded_visibility": {
"type": [
"number",
"null"
],
"description": "Unbranded mentioned / unbranded answers, fraction 0..1; null with no unbranded runs.",
"x-sensorhub-indexed": false,
"x-sensorhub-searchable": false,
"x-sensorhub-aggregatable": true,
"x-sensorhub-filterable": true,
"x-sensorhub-sortable": true
},
"all_own_hits_from_branded_prompts": {
"type": "boolean",
"description": "True only when this bucket has hits and all are from branded prompts.",
"x-sensorhub-indexed": false,
"x-sensorhub-searchable": false,
"x-sensorhub-aggregatable": true,
"x-sensorhub-filterable": true,
"x-sensorhub-sortable": true
},
"competitor_mentions": {
"type": "integer",
"description": "Competitor occurrences across answer runs; repeated stored names contribute to the overview denominator.",
"x-sensorhub-indexed": false,
"x-sensorhub-searchable": false,
"x-sensorhub-aggregatable": true,
"x-sensorhub-filterable": true,
"x-sensorhub-sortable": true
},
"share": {
"type": "number",
"description": "Brand visibility as a fraction from 0 to 1: brand_mentioned / answers.",
"x-sensorhub-indexed": false,
"x-sensorhub-searchable": false,
"x-sensorhub-aggregatable": true,
"x-sensorhub-filterable": true,
"x-sensorhub-sortable": true
},
"share_of_voice": {
"type": "number",
"description": "Brand share as a fraction from 0 to 1: brand_mentioned / (brand_mentioned + competitor_mentions), or 0 when no brand was mentioned.",
"x-sensorhub-indexed": false,
"x-sensorhub-searchable": false,
"x-sensorhub-aggregatable": true,
"x-sensorhub-filterable": true,
"x-sensorhub-sortable": true
}
},
"additionalProperties": false
}