sensorhubDevelopers
Open SensorhubGet an API key
Browse documentation
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

FieldTypeDescriptionFilterSort
id
stringStable identifier for this aggregate row.–✓
project_id
indexed
stringProject ID from projects.✓–
day
datetimeUTC calendar day. Filter this field to select complete daily buckets.✓✓
engine
stringAnswer engine.
CHATGPT GOOGLE_AIO
✓✓
topic_id
nullable
stringTopic 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.✓✓
topic
nullable
stringPrompt topic name.✓✓
answers
integerAll answer runs, including runs without a rendered AI overview.✓✓
brand_mentioned
integerAnswer runs that mention the project brand.✓✓
unbranded_answers
integerRuns on prompts explicitly branded=false; denominator for unbranded_visibility.✓✓
unbranded_mentioned
integerBrand-mentioned runs on prompts explicitly branded=false.✓✓
branded_mentioned
integerBrand-mentioned runs on prompts branded=true.✓✓
unknown_branding_answers
integerRuns whose prompt branding has not been classified.✓✓
unbranded_visibility
nullable
numberUnbranded mentioned / unbranded answers, fraction 0..1; null with no unbranded runs.✓✓
all_own_hits_from_branded_prompts
booleanTrue only when this bucket has hits and all are from branded prompts.✓✓
competitor_mentions
integerCompetitor occurrences across answer runs; repeated stored names contribute to the overview denominator.✓✓
share
numberBrand visibility as a fraction from 0 to 1: brand_mentioned / answers.✓✓
share_of_voice
numberBrand 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 25

Calling 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>"
  ]
}
JSON
Row 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
}