Scan report files
Files in the results folder
Oobee writes these files to the scan’s results folder. Refer to Read and export scan reports for how to find and use them.
| File | Created | Format | Contents |
|---|---|---|---|
report.html |
Always | HTML | Interactive report with all issues, pages scanned and pages not scanned |
summary.pdf |
Always | Printable summary of issue types and counts | |
report.csv |
Always | CSV | One row per issue in the Must Fix, Good to Fix and Manual Review Required categories |
scanDetails.csv |
Always | CSV | Three Base64 columns: scanData_base64, scanItems_base64, scanItemsSummary_base64 |
scanData.json.gz.b64 |
-g yes |
Gzip, Base64 | Scan overview and metadata |
scanItems.json.gz.b64 |
-g yes |
Gzip, Base64 | Detailed issues by category and rule |
scanItemsSummary.json.gz.b64 |
-g yes |
Gzip, Base64 | Issue totals and WCAG pass percentages |
scanIssuesSummary.json.gz.b64 |
-g yes |
Gzip, Base64 | Rules by category with pages affected |
scanPagesSummary.json.gz.b64 |
-g yes |
Gzip, Base64 | Pages affected and not affected |
scanPagesDetail.json.gz.b64 |
-g yes |
Gzip, Base64 | Pages affected and not affected, with issue types per page |
sitemap.txt |
Always | Text | One scanned URL per line |
elemScreenshots/ |
Screenshots on | Folder | Element screenshots in elemScreenshots/html and elemScreenshots/pdf |
pageDOMs/ |
OOBEE_SAVE_DOM or OOBEE_SAVE_PAGE_SCREENSHOT set |
Folder | Saved page DOMs and page screenshots |
| Zip file | -o |
Zip | Copy of the results, named by the -o value |
Each JSON file is also written uncompressed as <name>.json during the scan. With -g yes, Oobee keeps both the .json and .json.gz.b64 files. Without it, Oobee deletes both.
Decode a compressed JSON file
A .json.gz.b64 file is gzip-compressed JSON encoded as Base64. Decode it with a command or a script.
| Platform | Command |
|---|---|
| macOS | base64 -D -i scanData.json.gz.b64 | gunzip > scanData.json |
| Linux | base64 -d scanData.json.gz.b64 | gunzip > scanData.json |
In JavaScript, with the pako library installed:
const decompressedBytes = pako.inflate(compressedBytes);
const jsonString = new TextDecoder().decode(decompressedBytes);
const result = JSON.parse(jsonString);report.csv columns
| Column | Description |
|---|---|
customFlowLabel |
Label of the custom flow, or None |
deviceChosen |
Device or viewport scanned, for example Desktop |
scanCompletedAt |
Scan completion time in ISO 8601 format |
severity |
mustFix, goodToFix, needsReview or error |
issueId |
Rule identifier, for example aria-prohibited-attr |
issueDescription |
Description of the issue |
wcagConformance |
Related axe-core WCAG tags, comma-separated, for example wcag2a,wcag412 |
url |
URL of the affected page |
pageTitle |
Title of the affected page |
context |
HTML snippet of the affected element |
howToFix |
Suggested fix |
axeImpact |
Impact from axe-core: critical, serious, moderate or minor |
xpath |
XPath of the affected element |
learnMore |
URL with more information on the rule |
Oobee prefixes a single quote to any field that starts with =, +, -, @, a tab or a carriage return, so that spreadsheets do not run it as a formula. Rows with severity error list pages the scan skipped.
"customFlowLabel","deviceChosen","scanCompletedAt","severity","issueId","issueDescription","wcagConformance","url","pageTitle","context","howToFix","axeImpact","xpath","learnMore"
"Custom Flow","Desktop","2025-03-13T10:09:18.733Z","needsReview","aria-prohibited-attr","Elements must only use permitted ARIA attributes","wcag2a,wcag412","https://example.com/page1","Example Page 1","<a class=""nav-link"" aria-label=""Example Link"">Example</a>","aria-label attribute is not well supported on an <a> with no valid role attribute.","serious","a[aria-label=""Example Link""]","https://dequeuniversity.com/rules/axe/4.10/aria-prohibited-attr"scanItemsSummary.json fields
| Field | Description |
|---|---|
oobeeAppVersion |
Oobee version used for the scan |
mustFix, goodToFix, needsReview |
Each has totalItems and totalRuleIssues |
topTenPagesWithMostIssues |
Pages with the most issues: url, pageTitle, totalIssues, totalOccurrences |
wcagLinks |
Map of WCAG criteria to their documentation URLs |
wcagPassPercentage |
passPercentageAA, totalWcagChecksAA, totalWcagViolationsAA and the same three fields for AA plus AAA |
progressPercentage |
averageProgressPercentageAA and averageProgressPercentageAAandAAA |
issuesPercentage |
The fields in the next table |
issuesPercentage field |
Description |
|---|---|
avgTypesOfIssuesCountAtMustFix, avgTypesOfIssuesCountAtGoodToFix, avgTypesOfIssuesCountAtMustFixAndGoodToFix |
Average count of issue types per page at each level |
avgTypesOfIssuesPercentageOfTotalRulesAtMustFix, avgTypesOfIssuesPercentageOfTotalRulesAtGoodToFix, avgTypesOfIssuesPercentageOfTotalRulesAtMustFixAndGoodToFix |
Average percentage of the total rules affected per page at each level |
totalRulesMustFix, totalRulesGoodToFix, totalRulesMustFixAndGoodToFix |
Number of rules in each category |
pagesAffectedPerRule |
Number of pages affected by each rule, keyed by rule ID |
pagesPercentageAffectedPerRule |
Percentage of pages affected by each rule, keyed by rule ID |
totalPagesScanned, totalPagesNotScanned |
Page counts |
topTenIssues |
Most common issues: category, ruleId, description, axeImpact, conformance, totalItems |
scanIssuesSummary.json fields
| Field | Description |
|---|---|
oobeeAppVersion |
Oobee version used for the scan |
mustFix, goodToFix, needsReview, passed |
Arrays of rules in each category |
rule |
Rule identifier |
description |
Short description of the rule |
axeImpact |
Impact from axe-core |
helpUrl |
URL with more information on the rule |
conformance |
WCAG criteria the rule maps to |
totalItems |
Number of times the rule was detected |
pagesAffectedCount |
Number of pages where the rule was detected |
scanPagesSummary.json and scanPagesDetail.json fields
Both files hold pagesAffected, pagesNotAffected, scannedPagesCount, pagesNotScanned and pagesNotScannedCount. scanPagesDetail.json adds a typesOfIssues array to each page.
| Field | Description |
|---|---|
pageTitle, url |
Title and URL of the page |
totalOccurrencesFailedIncludingNeedsReview |
Failed checks, including Manual Review Required |
totalOccurrencesFailedExcludingNeedsReview |
Failed checks, excluding Manual Review Required |
totalOccurrencesMustFix, totalOccurrencesGoodToFix, totalOccurrencesNeedsReview, totalOccurrencesPassed |
Occurrences by category |
typesOfIssuesCount |
Unique issue types on the page |
typesOfIssuesExcludingNeedsReviewCount |
Unique issue types, excluding Manual Review Required |
typesOfIssuesExclusiveToNeedsReviewCount |
Unique issue types that appear only as Manual Review Required |
categoriesPresent |
Categories found on the page |
conformance |
WCAG criteria related to the page’s issues |
typesOfIssues |
scanPagesDetail.json only: ruleId, wcagConformance, occurrencesMustFix, occurrencesGoodToFix, occurrencesNeedsReview, occurrencesPassed |
pagesNotScanned |
Skipped pages: url, pageTitle, actualUrl, metadata, httpStatusCode |
Status codes for skipped pages
The httpStatusCode and metadata fields in pagesNotScanned give the reason a page was not scanned.
| Code | Metadata |
|---|---|
| 0 | Page Excluded |
| 1 | Not A Supported Document |
| 2 | Web Crawler Errored |
| 3 | Blocked by Safe Browsing |
| 200 | Oobee was not able to scan the page due to access restrictions or compatibility issues |
| 599 | Uncommon Response Status Code Received |
For the HTTP status codes below, metadata is the code followed by its standard name, for example 403 - Forbidden.
| Range | Codes recorded |
|---|---|
| 1xx | 100, 101, 102, 103 |
| 2xx | 204, 205 |
| 3xx | 300, 301, 302, 303, 304, 305, 307, 308 |
| 4xx | 400 to 418, 421 to 426, 428, 429, 431, 451 |
| 5xx | 500 to 508, 510, 511 |
Oobee’s source notes that the crawler library returns status codes 100, 102 and 103 as 599. They are listed here because Oobee has a name for each code, but they are reported as 599 in practice. Not every code in the table appears in every scan.