> ## Documentation Index
> Fetch the complete documentation index at: https://www.usenotra.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Get website analytics totals and trend

> Page views, visitors, sessions and AI-referred visitors against the previous window of the same length, daily views and visitors, and the hosts seen. Includes completed history imports. Explicit ranges can span at most 366 days.



## OpenAPI

````yaml https://api.usenotra.com/openapi.json get /v1/projects/{projectId}/geo/traffic/web
openapi: 3.1.1
info:
  title: Notra API
  version: 1.0.0
  description: >-
    OpenAPI schema for Notra content endpoints. Use GET /v1/status for public
    reachability. Error responses include recovery guidance. Breaking changes
    ship under a new major path; deprecated operations send Deprecation and
    Sunset headers at least 90 days before removal.
servers:
  - url: https://api.usenotra.com
    description: Production
  - url: https://demo-api.usenotra.com
    description: >-
      Sandbox with sample data. Get a free sandbox key at demo.usenotra.com, no
      signup needed
security:
  - BearerAuth: []
tags:
  - name: Webhooks
    description: Manage outbound webhook subscriptions and delivery history.
  - name: Discovery
    description: Public API status and authenticated workspace discovery.
  - name: Content
    description: >-
      Manage posts, brand identities, and GitHub or Linear integrations, and
      queue content generation. Organization is inferred from the API key
      (identity.externalId).
  - name: Schedules
    description: >-
      Manage scheduled content generation. Organization is inferred from the API
      key (identity.externalId).
  - name: Event Triggers
    description: >-
      Manage event-based content generation triggered by GitHub webhooks.
      Organization is inferred from the API key (identity.externalId).
  - name: Chats
    description: >-
      Manage chat sessions. Organization is inferred from the API key
      (identity.externalId).
  - name: Skills
    description: >-
      Manage reusable writing skills. Organization is inferred from the API key
      (identity.externalId).
  - name: Feedback
    description: >-
      Collect and triage feedback submitted by AI agents. Agents post to the
      organization's feedback URL without credentials; reading and triage
      require an API key with feedback.read or feedback.write.
  - name: GEO
    description: >-
      Manage generative engine optimization: projects, tracking settings,
      prompts, prompt sequences, competitors, scans, visibility reads, content
      gaps and briefs, agent readiness and AI traffic. Project-scoped endpoints
      require the GEO plan entitlement in addition to their scope;
      organization-level ingest endpoints require only the traffic scope.
  - name: Sites
    description: >-
      Notra Sites are hosted blogs and changelogs built from a GitHub
      repository. Read Sites and their deployments, start builds, preview posts
      on a Site, open pull requests that publish posts to it, and manage
      blog.json authors and the author page through staged Design changes.
      Domains, settings, rollbacks and deletion stay in the dashboard.
externalDocs:
  description: Notra API versioning and deprecation policy
  url: https://www.usenotra.com/docs/api/versioning
paths:
  /v1/projects/{projectId}/geo/traffic/web:
    get:
      tags:
        - GEO
      summary: Get website analytics totals and trend
      description: >-
        Page views, visitors, sessions and AI-referred visitors against the
        previous window of the same length, daily views and visitors, and the
        hosts seen. Includes completed history imports. Explicit ranges can span
        at most 366 days.
      operationId: getGeoWebAnalytics
      parameters:
        - schema:
            type: string
            minLength: 1
            pattern: ^[A-Za-z0-9_-]{1,100}$
            example: b1f2c3d4-0000-4000-8000-000000000000
          required: true
          name: projectId
          in: path
        - schema:
            type: integer
            minimum: 1
            maximum: 365
            description: Rolling window size in days. Ignored when from/to are set.
          required: false
          description: Rolling window size in days. Ignored when from/to are set.
          name: days
          in: query
        - schema:
            type: string
            pattern: ^\d{4}-\d{2}-\d{2}$
            example: '2026-01-31'
          required: false
          name: from
          in: query
        - schema:
            type: string
            pattern: ^\d{4}-\d{2}-\d{2}$
            example: '2026-01-31'
          required: false
          name: to
          in: query
        - schema:
            type: string
            maxLength: 128
            description: >-
              Hostname to filter on, such as www.example.com. Subdomains are
              included. Omit for every host.
          required: false
          description: >-
            Hostname to filter on, such as www.example.com. Subdomains are
            included. Omit for every host.
          name: host
          in: query
        - schema:
            type: string
            maxLength: 2048
            description: Only count this exact page path, such as /pricing.
          required: false
          description: Only count this exact page path, such as /pricing.
          name: path
          in: query
        - schema:
            type: string
            enum:
              - exclude
            description: '`exclude` leaves out traffic to sites hosted on Notra Sites.'
          required: false
          description: '`exclude` leaves out traffic to sites hosted on Notra Sites.'
          name: sites
          in: query
      responses:
        '200':
          description: Web analytics fetched successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GeoWebAnalyticsResponse'
        '400':
          description: Invalid request
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          description: Missing or invalid API key
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '402':
          description: GEO plan or available AI credits required
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '403':
          description: Forbidden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '404':
          description: Organization, project or resource not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '409':
          description: Conflict
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '503':
          description: Authentication or billing service unavailable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
components:
  schemas:
    GeoWebAnalyticsResponse:
      type: object
      properties:
        configured:
          type: boolean
          description: >-
            False when the analytics backend is not configured for this
            deployment; the payload is then empty rather than an error.
        imported:
          type:
            - object
            - 'null'
          properties:
            provider:
              type: string
              enum:
                - plausible
                - plausible_csv
                - vercel
                - cloudflare
                - cloudflare_rum
                - rybbit
                - databuddy
            until:
              type: string
              description: Last imported day.
            nativeStart:
              type:
                - string
                - 'null'
              description: First day Notra tracked natively, when known.
          required:
            - provider
            - until
            - nativeStart
          description: >-
            Latest completed history import. Days up to `until` come from it;
            native tracking starts the day after.
        hosts:
          type: array
          items:
            type: object
            properties:
              host:
                type: string
              siteId:
                type: string
                description: Notra Sites site id, empty for your own domains.
              views:
                type: integer
            required:
              - host
              - siteId
              - views
        totals:
          type: object
          properties:
            views:
              type: integer
            previousViews:
              type: integer
            visitors:
              type: integer
            previousVisitors:
              type: integer
            sessions:
              type: integer
            previousSessions:
              type: integer
            engagedSessions:
              type: integer
            aiVisitors:
              type: integer
              description: Visitors who arrived from an AI assistant.
            previousAiVisitors:
              type: integer
          required:
            - views
            - previousViews
            - visitors
            - previousVisitors
            - sessions
            - previousSessions
            - engagedSessions
            - aiVisitors
            - previousAiVisitors
        points:
          type: array
          items:
            type: object
            properties:
              day:
                type: string
              views:
                type: integer
              visitors:
                type: integer
            required:
              - day
              - views
              - visitors
        organization:
          type: object
          properties:
            id:
              type: string
            slug:
              type: string
            name:
              type: string
            logo:
              type:
                - string
                - 'null'
          required:
            - id
            - slug
            - name
            - logo
      required:
        - configured
        - hosts
        - totals
        - points
        - organization
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
        code:
          type: string
        recovery:
          type: string
      required:
        - error
  securitySchemes:
    BearerAuth:
      type: http
      scheme: bearer
      bearerFormat: API Key
      description: >-
        Send your API key in the Authorization header as Bearer API_KEY. Account
        API keys work in every workspace you belong to: send
        X-Notra-Organization-Id with the workspace id or slug to choose one.
        Workspace endpoints require it when you belong to more than one
        workspace; GET /v1/me/workspaces works without it. Organization keys
        only accept their own workspace there.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.