Analytics exports
geni analytics produces flat, denormalized data for spreadsheets, audits, and custom
reports. It provides three exports:
| Command | API endpoint | One row per |
|---|---|---|
geni analytics submission |
GET /analytics/submissions |
Submission |
geni analytics task |
GET /analytics/tasks |
Task |
geni analytics instance |
GET /analytics/instances |
Compute instance |
These exports differ from geni stats, which returns aggregate counts, and geni costs,
which returns cost rollups.
Export submissions
Section titled “Export submissions”Export failed submissions created in January to CSV:
geni analytics submission \ --start-date 2026-01-01 \ --end-date 2026-01-31 \ --submission-status FAILED \ --format csv > january-failures.csvBoth dates are UTC and inclusive. Repeat --submission-status to include more than one
status. When it is omitted, the export includes terminated submissions: SUCCEEDED,
FAILED, and CANCELLED.
| Option | Default | Description |
|---|---|---|
--start-date YYYY-MM-DD |
No lower bound | Include submissions created on or after this UTC date. |
--end-date YYYY-MM-DD |
No upper bound | Include submissions created on or before this UTC date. |
--submission-status STATUS |
Terminated statuses | Filter by status; repeat the option to include multiple statuses. |
--limit N |
All matches | Return at most N rows. Without it, the CLI retrieves every page. |
--format table|json|csv |
table |
Select the output format. |
Submission columns
Section titled “Submission columns”The table and CSV formats use the column labels below. JSON uses the corresponding snake-case field names shown in parentheses.
| Column | Description |
|---|---|
Submission ID (submission_id) |
Submission UUID. |
Status (status) |
Current submission status. |
Created At (created_at) |
Time the submission was created. |
Started At (started_at) |
Time execution began, when available. |
Stopped At (stopped_at) |
Time the submission reached a terminal state, when available. |
Duration (s) (duration_seconds) |
Wall-clock time from start to stop, in seconds. |
Compute Cost ($) (compute_cost) |
Rolled-up task and engine compute cost in USD. |
Storage Cost ($) (storage_cost) |
Submission’s share of its engine execution-bucket cost for that day. |
Total Cost ($) (total_cost) |
Compute plus storage cost; empty until both values are available. |
Failure Reason (failure_reason) |
Reason from the first relevant failed task; populated only for failed submissions. |
Workflow (workflow_name) |
Registered workflow name. |
Workflow Version (workflow_version) |
Registered workflow version. |
Provider (provider) |
Cloud provider, such as aws or gcp. |
Environment (environment_name) |
Environment name. |
Engine (engine_name) |
Engine name. |
Engine Version (engine_version) |
Workflow-engine version. |
Queue (queue_name) |
Primary queue name. |
Queue Mode (queue_mode) |
Configured execution mode of the primary queue. |
Fallback Queue (fallback_queue_name) |
Fallback queue name, when configured. |
Fallback Mode (fallback_queue_mode) |
Configured execution mode of the fallback queue. |
Total Tasks (total_tasks) |
Number of tasks in the submission. |
Failed Tasks (failed_tasks) |
Number of tasks whose status is FAILED. |
Attempts (submission_attempts) |
Total tracked attempt count; 1 unless the submission was retried. |
| One column per tag | Submission tag value. JSON keeps these values in the tags object. |
Export tasks
Section titled “Export tasks”Export failed tasks from terminated submissions:
geni analytics task \ --start-date 2026-01-01 \ --end-date 2026-01-31 \ --task-status FAILED \ --format csv > january-failed-tasks.csvThe date range filters the task creation time. By default, only tasks belonging to
SUCCEEDED, FAILED, or CANCELLED submissions are returned.
| Option | Default | Description |
|---|---|---|
--start-date YYYY-MM-DD |
No lower bound | Include tasks created on or after this UTC date. |
--end-date YYYY-MM-DD |
No upper bound | Include tasks created on or before this UTC date. |
--submission-status STATUS |
Terminated statuses | Filter by parent submission status; repeat for multiple statuses. |
--task-status STATUS |
All task statuses | Filter by task status; repeat for multiple statuses. |
--limit N |
All matches | Return at most N rows. Without it, the CLI retrieves every page. |
--format table|json|csv |
table |
Select the output format. |
Task columns
Section titled “Task columns”| Column | Description |
|---|---|
Task ID (task_id) |
Task UUID. |
Submission ID (submission_id) |
Parent submission UUID. |
Sub. Status (submission_status) |
Parent submission status. |
Job Name (job_name) |
Provider job name, when available. |
Attempts (task_attempts) |
Total tracked attempt count (distinct Batch jobs), floored at 1; rises above 1 after a fallback-queue resubmission. |
Status (status) |
Current task status. |
Created At (created_at) |
Time the task was created. |
Started At (started_at) |
Time the task began running, when available. |
Stopped At (stopped_at) |
Time the task reached a terminal state, when available. |
Runnable Time (s) (runnable_duration_seconds) |
Queue wait from runnable to starting, in seconds. |
Execution Time (s) (execution_duration_seconds) |
Time from starting to the terminal state, in seconds. |
Est. Cost ($) (estimated_cost_usd) |
Sum of the task’s attempt costs in USD; empty until calculated. |
Cost Consolidated (cost_is_consolidated) |
true when the underlying instance cost has been replaced with billing data; false while estimated. |
Failure Reason (failure_reason) |
Provider status reason; empty for succeeded and cancelled tasks. |
Exit Code (exit_code) |
Container exit code, when available. |
vCPUs (vcpus) |
vCPUs allocated to the task. |
Memory (GB) (memory_gb) |
Memory allocated to the task, in GB. |
Instance Type (instance_type) |
Compute instance type that ran the task. |
Market (market_type) |
Realized market type, such as spot or on-demand. |
Provider (provider) |
Cloud provider. |
Workflow (workflow_name) |
Registered workflow name. |
Workflow Version (workflow_version) |
Registered workflow version. |
Environment (environment_name) |
Environment name. |
Engine (engine_name) |
Engine name. |
Engine Version (engine_version) |
Workflow-engine version. |
Queue (queue_name) |
Primary queue name. |
Queue Mode (queue_mode) |
Configured execution mode of the primary queue. |
Fallback Queue (fallback_queue_name) |
Fallback queue name, when configured. |
Fallback Mode (fallback_queue_mode) |
Configured execution mode of the fallback queue. |
JSON additionally includes task_key, the stable key shared by fallback-queue retries, and
job_attempts, in-job Batch container retries summed across the row’s attempts — not the
same as the task_attempts column above, which counts distinct Batch jobs.
Export instances
Section titled “Export instances”Export instances launched in January for one queue:
geni analytics instance \ --start-date 2026-01-01 \ --end-date 2026-01-31 \ --queue-id <queue-id> \ --format csv > january-instances.csvThe date range filters instance launch time. Attached-volume totals include volumes created by autoscaling, making the export useful for finding workloads whose disks grew beyond their initial size.
| Option | Default | Description |
|---|---|---|
--start-date YYYY-MM-DD |
No lower bound | Include instances launched on or after this UTC date. |
--end-date YYYY-MM-DD |
No upper bound | Include instances launched on or before this UTC date. |
--environment-id ID |
All environments | Filter by environment UUID. |
--queue-id ID |
All queues | Filter by queue UUID. |
--limit N |
All matches | Return at most N rows. Without it, the CLI retrieves every page. |
--format table|json|csv |
table |
Select the output format. |
Instance columns
Section titled “Instance columns”| Column | Description |
|---|---|
Instance ID (instance_id) |
GENI instance UUID. |
Cloud ID (cloud_id) |
Provider instance identifier, such as an EC2 instance ID. |
Instance Type (instance_type) |
Provider instance type. |
CPUs (cpus) |
Number of CPUs on the instance. |
Memory (GB) (memory_gb) |
Instance memory in GB. |
Volume Count (volume_count) |
Number of attached volumes recorded for the instance. |
Volume Total (GB) (volume_total_gb) |
Sum of the attached volumes’ sizes, including autoscaled volumes. |
Market (market_type) |
Realized market type, such as spot or on-demand. |
Provider (provider) |
Cloud provider. |
Environment (environment_name) |
Environment name. |
Queue (queue_name) |
Queue name. |
Launched At (launch_time) |
Instance launch time. |
Stopped At (termination_time) |
Instance termination time, when available. |
Call the API directly
Section titled “Call the API directly”The API uses ISO 8601 timestamps. Its from boundary is inclusive and its to boundary is
exclusive. All three endpoints accept limit (1–1000, default 50) and offset (default 0),
and return { items, total, limit, offset }.
| Endpoint | Additional query parameters |
|---|---|
GET /analytics/submissions |
from, to, and repeatable submissionStatus; filters created_at. |
GET /analytics/tasks |
from, to, repeatable submissionStatus, and repeatable taskStatus; filters created_at. |
GET /analytics/instances |
from, to, environmentId, and queueId; filters launch_time. |
Platform users must also pass the tenant UUID as tenantId. Tenant users cannot override
their tenant. The API field names and meanings match the column tables above.