Output Formats
One audit, 7 ways to consume it. Pick with --format (alias -f).
Quick reference
| Format | When to use | Typical target |
|---|---|---|
| console | Quick smoke test | Terminal |
| json | Pipeline + automation | jq, dashboard, CI/CD |
| html | Client-facing report | Email, shared link |
| markdown | Documentation drop | Notion, Linear, Obsidian |
| text | Human-readable log | Plain email, log file |
| xml | Enterprise integration | XML parser tooling |
| llm | AI input | Claude, ChatGPT, agents |
console default
Minimal output: score + finding count. Default if you don't pass -f.
$ smartspec audit https://example.com -m 1
auditing https://example.com...
score: 59
findings: 23 Ideal in CI for a quick pass/fail check.
json -f json
Full AuditResult, 2-space indent. Schema includes startUrl, finalUrl, score, pagesScanned, findings[].
{
"startUrl": "https://example.com",
"finalUrl": "https://example.com/",
"score": 59,
"pagesScanned": 1,
"findings": [
{
"id": "home::page-meta-desc-missing",
"title": "No meta description",
"severity": "warning",
"category": "page",
"evidence": "...",
"recommendation": "...",
...
}
]
} Pipe into jq to extract what you need: jq '.findings[] | select(.severity == "critical")'.
html -f html
Standalone report with inline CSS. Ready to email to a client or upload to S3/Netlify.
smartspec audit https://example.com -f html -o report.html
open report.html Color-coded score (green/yellow/red), category scorecard, findings grouped by severity, "fix it" link per finding.
markdown -f markdown
Standard Markdown with summary table + sections by severity. Renders on Notion, Linear, Obsidian.
# Audit report — https://example.com
**Score:** 59/100
**Pages scanned:** 1
## Summary
| Severity | Count |
|---|---:|
| Critical | 0 |
| Warnings | 7 |
| Info | 6 |
| Passes | 10 |
## Warnings (7)
### 1. No meta description
**Category:** `page` · **Effort:** low · **Confidence:** confirmed
... text -f text
Plain text wrapped at 78 columns. For plain email, log files, postit-style chat messages.
AUDIT REPORT
============
Target: https://example.com
Score: 59/100
Pages scanned: 1
SUMMARY
-------
critical 0
warning 7
info 6
pass 10
WARNINGS (7)
------------
[1] No meta description
category: page | effort: low | confidence: confirmed
Evidence:
The meta description tag is empty or missing... xml -f xml
XML 1.0 with prolog. For enterprise integrations (tools that parse strict XML).
<?xml version="1.0" encoding="UTF-8"?>
<auditReport>
<startUrl>https://example.com</startUrl>
<score>59</score>
<pagesScanned>1</pagesScanned>
<findings>
<finding>
<id>home::page-meta-desc-missing</id>
<severity>warning</severity>
<category>page</category>
...
</finding>
</findings>
</auditReport> llm -f llm (recommended for Claude/ChatGPT)
XML tag-based, optimized for LLM parsing. Includes a leading instruction block that primes the model for the task. Attributes for short data, content for long fields → low token cost, structure preserved.
You are given a technical SEO audit. Each finding has a severity
(critical|warning|info|pass), category, evidence, and recommendation.
Use this report to prioritize fixes, starting with critical issues.
The score is computed as pass / (pass + critical*3 + warning) * 100,
with info excluded.
<audit target="https://example.com" score="59" pages-scanned="1">
<finding severity="warning" category="page" effort="low" confidence="confirmed">
<title>No meta description</title>
<evidence>The meta description tag is empty or missing.</evidence>
<recommendation>Add a <meta name="description"> of 140-160 chars...</recommendation>
</finding>
...
</audit> Use case: pipe straight into Claude/Cursor/Windsurf for automatic fixes, or use as input for an agent that applies the patches.
Save to file
Every format supports -o <path> to write to a file instead of stdout.
smartspec audit https://example.com -f markdown -o report.md
smartspec audit https://example.com -f html -o /tmp/report.html
smartspec audit https://example.com -f json -o audit-$(date +%Y-%m-%d).json