CrawlioCrawlio Docs

Capture Commands

Capture commands render a single page via WebKit and extract focused data without running a full disk crawl. Each command uses WebKitRuntimeCapture to load the page with JavaScript execution, then pulls the specific artifact (screenshot, SEO metadata, performance metrics, or a quick-look preview).

/speed is Free tier. /screenshot, /seo, and /preview are Core tier.


/screenshot <url>

Capture a single PNG screenshot of the fully rendered page. No disk crawl is performed.

WebKit loads the page, executes JavaScript, waits for the load event, and takes a viewport-sized screenshot. The PNG bytes are returned directly; callers decide where to persist the image.

Output

Field Type Description
png Data PNG image data of the rendered page
finalURL URL Final URL after redirects

CLI

crawlio cmd screenshot https://example.com

MCP

{ "name": "slash_screenshot", "arguments": { "url": "https://example.com" } }

Returns { png: base64, finalURL: string }.


/seo <url>

Render the page via WebKit and extract a single-page SEO report. The report covers the metadata most often checked during an audit. This is not a full SiteAnalysisManager run -- it targets one URL and returns immediately.

The DOM snapshot captured by WebKitRuntimeCapture is passed to PageSEOExtractor, which extracts structured metadata from the rendered HTML (after JS execution, so client-rendered content is included).

Output

Field Type Description
finalURL URL Final URL after redirects
report.url String Requested URL
report.capturedAt Date ISO 8601 timestamp
report.title String? <title> content
report.metaDescription String? <meta name="description"> content
report.canonical String? <link rel="canonical"> href
report.robotsMeta String? <meta name="robots"> content
report.langAttr String? <html lang="..."> value
report.h1s [String] All H1 text values
report.h1Count Int Number of H1 elements
report.h2Count Int Number of H2 elements
report.headingOutline [String] Heading hierarchy (e.g. ["H1: Welcome", "H2: Pricing"])
report.ogTags {String: String} Open Graph tags (og:title, og:image, og:description, etc.)
report.twitterTags {String: String} Twitter Card tags (twitter:card, twitter:title, etc.)
report.jsonLdTypes [String] @type values from JSON-LD blocks
report.jsonLdBlockCount Int Number of <script type="application/ld+json"> blocks
report.hreflangs {String: String} hreflang attribute to href mapping
report.wordCountApprox Int Approximate word count of visible text

CLI

crawlio cmd seo https://example.com

MCP

{ "name": "slash_seo", "arguments": { "url": "https://example.com" } }

Returns the full PageSEOReport JSON.


/speed <url>

Render the page and extract Core Web Vitals plus page weight metrics. This is the only Free tier slash command -- a loss-leader hook into Core.

Performance observers are installed at .atDocumentStart via a WebKit user script so LCP and CLS accumulate from first paint. Network entries from PerformanceObserver are aggregated for transfer size and request counts.

Output

Field Type Description
report.url String Requested URL
report.finalURL String Final URL after redirects
report.capturedAt Date ISO 8601 timestamp
report.ttfbMs Double? Time to First Byte (responseStart - requestStart)
report.fcpMs Double? First Contentful Paint
report.lcpMs Double? Largest Contentful Paint
report.cls Double? Cumulative Layout Shift (dimensionless score)
report.domContentLoadedMs Double? DOMContentLoaded event time
report.loadEventMs Double? load event time
report.totalTransferBytes Int64 Sum of transferSize for all resources
report.totalDecodedBytes Int64 Sum of decodedBodySize (uncompressed)
report.requestCount Int Total number of network requests
report.requestsByType {String: Int} Requests grouped by resource type (e.g. {"script": 24, "img": 41})

Nil timing fields mean the metric was not observed (older WebKit, measurement race, or the page did not produce the event).

CLI

crawlio cmd speed https://example.com

MCP

{ "name": "slash_speed", "arguments": { "url": "https://example.com" } }

Returns the full PageSpeedReport JSON.


/preview <url>

Screenshot plus minimal metadata in one shot -- a quick-look command that bypasses disk crawl entirely. Returns a first-paint PNG, the page title, and the detected framework.

Internally identical to /screenshot but also extracts the <title> from the DOM snapshot and the primary framework from WebKit's runtime enrichment.

Output

Field Type Description
png Data PNG screenshot
title String? Page <title> if present
finalURL URL Final URL after redirects
detectedFramework String? Primary framework (subtype preferred, e.g. "Next.js" over "React")
capturedAt Date ISO 8601 timestamp

A companion PreviewReport sidecar (Codable JSON) is written to disk with the same fields plus pngSizeBytes and both requestedURL / finalURL as strings.

CLI

crawlio cmd preview https://vercel.com

MCP

{ "name": "slash_preview", "arguments": { "url": "https://vercel.com" } }

Returns { png: base64, title: string?, finalURL: string, detectedFramework: string?, capturedAt: string }.

© 2026 Crawlio. All rights reserved.