# Get Apps & Websites Overview Report

Retrieve the Apps & Websites usage "Overview" report for a workspace. Each row represents app/website usage aggregated per member/project (and other visible dimensions), matching the dashboard's Apps & Websites Overview tab.

Key Features:
- Date range: Optional start_date and end_date (YYYY-MM-DD). If omitted, defaults to the current week. Maximum date range is 1 month (31 days).
- Pagination: Rows are paginated via page/per_page. Default is 30 per page, maximum 100.
- Filtering: Filter by users, projects, teams, titles, and productivity. apps_websites_only (default true) restricts to desktop-tracker software usage; pass false to include all trackers.
- Security: Only workspace owners and executive managers can access this endpoint.

Endpoint: GET /reports/apps-websites
Version: 2.0.0
Security: oauth2, apiKey

## Query parameters:

  - `workspace_id` (integer, required)
    ID of the workspace
    Example: 1

  - `start_date` (string)
    Start date of the report range. Format: YYYY-MM-DD (e.g., 2024-01-01). Optional; defaults to the start of the current week when omitted. Must be before or equal to end_date.
    Example: "2024-01-01"

  - `end_date` (string)
    End date of the report range. Format: YYYY-MM-DD (e.g., 2024-01-31). Optional; defaults to the end of the current week when omitted. Must be after or equal to start_date. Maximum date range is 1 month (31 days).
    Example: "2024-01-31"

  - `users` (array)
    Optional filter by member (user) IDs. Comma-separated or array.
    Example: [100,101]

  - `projects` (array)
    Optional filter by project IDs. Comma-separated or array.
    Example: [10,11]

  - `teams` (array)
    Optional filter by team (department) IDs. Comma-separated or array.
    Example: [3]

  - `titles` (array)
    Optional filter by title (designation) IDs. Comma-separated or array.
    Example: [7]

  - `productivity` (array)
    Optional filter by productivity classification. Accepts only the names productive, neutral, non-productive, unset (case-insensitive); any other value returns 400. Comma-separated or array. The backend maps them to the internal usefulness values before querying.
    Enum: "productive", "neutral", "non-productive", "unset"

  - `apps_websites_only` (boolean)
    When true (default), restricts results to desktop-tracker software (apps & websites) usage. Pass false to include all trackers, including manually-added time.
    Example: true

  - `page` (integer)
    Page number for pagination. Results are paginated by row, so each page contains up to per_page usage rows.
    Example: 1

  - `per_page` (integer)
    Number of rows per page. Minimum: 1, Maximum: 100, Default: 30.
    Example: 30

## Response 200 fields (application/json):

  - `success` (boolean)
    Example: true

  - `data` (object)
    Apps & Websites usage overview report. Contains a paginated list of usage rows aggregated per member/project (and other visible dimensions).

  - `data.report_type` (string, required)
    Type of the report
    Example: "apps_websites_overview"

  - `data.start_date` (string, required)
    Start date of the report range
    Example: "2024-01-01"

  - `data.end_date` (string, required)
    End date of the report range
    Example: "2024-01-07"

  - `data.total_rows` (integer, required)
    Total number of usage rows across all pages
    Example: 42

  - `data.per_page` (integer, required)
    Number of rows per page
    Example: 30

  - `data.current_page` (integer, required)
    Current page number
    Example: 1

  - `data.total_pages` (integer, required)
    Total number of pages (always at least 1, even when there are no rows)
    Example: 2

  - `data.total_minutes` (integer, required)
    Total tracked minutes across the whole (unpaginated) result set.
    Example: 1830

  - `data.rows` (array, required)
    Usage rows for the current page

  - `data.rows.app_website` (string,null)
    Name of the app or website
    Example: "Slack"

  - `data.rows.category` (string,null)
    Category name of the app/website
    Example: "Communication"

  - `data.rows.productivity` (string)
    Productivity/usefulness classification for the app/website
    Enum: "Productive", "Neutral", "Non-productive", "Unset"

  - `data.rows.member` (object)

  - `data.rows.member.user_id` (integer,null)
    Member (user) ID
    Example: 100

  - `data.rows.member.name` (string,null)
    Full name of the member
    Example: "John Doe"

  - `data.rows.project` (object)

  - `data.rows.project.project_id` (integer,null)
    Project ID (null when not associated with a project)
    Example: 10

  - `data.rows.project.name` (string,null)
    Project name
    Example: "Website Redesign"

  - `data.rows.task` (string,null)
    Task title associated with the usage
    Example: "(no task)"

  - `data.rows.description` (string,null)
    Memo/description associated with the usage
    Example: "(no description)"

  - `data.rows.mouse_actions` (integer)
    Total mouse actions for this row
    Example: 320

  - `data.rows.keyboard_actions` (integer)
    Total keyboard actions for this row
    Example: 1450

  - `data.rows.scroll_actions` (integer)
    Total scroll actions for this row
    Example: 88

  - `data.rows.activity_level` (integer)
    Activity level percentage (0-100), derived from mouse/keyboard/scroll actions per tracked minute.
    Example: 84

  - `data.rows.inactive_minutes` (integer)
    Total inactive minutes for this row
    Example: 5

  - `data.rows.date` (string,null)
    Date of the usage row
    Example: "2024-01-03"

  - `data.rows.total_minutes` (integer)
    Tracked minutes for this row.
    Example: 120

  - `message` (string)
    Example: "Apps & websites overview report retrieved successfully"

  - `meta` (object)

  - `meta.api_version` (string)
    Example: "2.0.0"

  - `meta.timestamp` (string)

## Response 400 fields (application/json):

  - `success` (boolean, required)

  - `error` (string, required)
    Error message describing what went wrong (single-message errors: 400/401/403/404/500). Validation failures (422) use the errors map instead — see ValidationErrorResponse.
    Example: "Shift not found"

  - `meta` (object, required)


