Skip to content

Exporting Results

Scan results can be downloaded directly from the app, exported as CSV, or retrieved programmatically via the REST API.

Download from scan detail

Every completed scan has a Download button in the header of the scan detail page. Click it to download a full report of that scan.

CSV export from the Scans page

To export a CSV covering your scan history:

  1. Navigate to Scans in the sidebar
  2. Click Export CSV in the top-right of the page header (visible when you have at least one completed scan)

The CSV file contains one row per check with columns:

ColumnDescription
idCheck identifier
titleCheck title
resultPassed, Failed, or Skipped
severityCritical, High, Medium, or Low
frameworkCIS, EIDSCA, CISA, or other
helpUrlReference link
remediationStepsRemediation guidance
rawOutputRaw value detected in the tenant

CSV files are encoded as UTF-8.

API export

You can retrieve results programmatically using the REST API. This enables automated reporting, integration with ticketing systems, or feeding results into a SIEM. API access is available on Enterprise plans.

Get all results for a scan

bash
curl https://api.aether365.io/scans/{scanId}/results \
  -H "Authorization: Bearer <api-key>"

Returns a paginated list of all check results. See Results API for full documentation.

Filter by status

bash
curl "https://api.aether365.io/scans/{scanId}/results?result=Failed" \
  -H "Authorization: Bearer <api-key>"

Filter by severity

bash
curl "https://api.aether365.io/scans/{scanId}/results?severity=Critical" \
  -H "Authorization: Bearer <api-key>"

Python example: export all failed checks to CSV

python
import requests
import csv

API_KEY = "your-api-key"
SCAN_ID = "your-scan-id"

headers = {"Authorization": f"Bearer {API_KEY}"}
results = []
page = 1

while True:
    resp = requests.get(
        f"https://api.aether365.io/scans/{SCAN_ID}/results",
        params={"result": "Failed", "page": page, "limit": 100},
        headers=headers,
    )
    data = resp.json()
    results.extend(data["data"])
    if page >= data["meta"]["totalPages"]:
        break
    page += 1

with open("failed_checks.csv", "w", newline="") as f:
    writer = csv.DictWriter(
        f, fieldnames=["id", "title", "severity", "framework", "remediationSteps"]
    )
    writer.writeheader()
    writer.writerows(results)

print(f"Exported {len(results)} failed checks")

PowerShell example: fetch all critical failures

powershell
$headers = @{ Authorization = "Bearer $env:AETHER365_API_KEY" }
$scanId = "your-scan-id"
$page = 1
$results = @()

do {
    $response = Invoke-RestMethod `
        -Uri "https://api.aether365.io/scans/$scanId/results?result=Failed&severity=Critical&page=$page&limit=100" `
        -Headers $headers
    $results += $response.data
    $page++
} while ($page -le $response.meta.totalPages)

$results | Export-Csv -Path "critical_failures.csv" -NoTypeInformation
Write-Host "Exported $($results.Count) critical failures"

Automated reporting

You can combine the API with your existing tooling to produce automated reports after each scan:

  • Webhook to script - configure a Teams or email notification as a trigger, then call the API for the latest scan results
  • Scheduled script - run a script on a schedule that retrieves the latest results and generates a report
  • CI/CD pipeline integration - retrieve results after a scan as part of a compliance verification step

See Integrations for more examples.

Was this page helpful?