Snapshot to API
/install snapshot-to-api
Snapshot to API
Replace browser snapshots with direct API calls. 15-20x fewer tokens, 2x faster, 100% complete data.
Why
Browser snapshots return the full DOM tree — menus, buttons, refs, styling — when you only need the data. A typical table page: 45 KB DOM → ~15k tokens, ~15% useful. The same data via API: 3.5 KB JSON → ~1k tokens, ~90% useful.
Core Workflow
Step 1: Open the target page
browser(action=open, url="\x3Ctarget_url>", profile=openclaw)
Purpose: establish cookie/session auth. You don't need to read the page.
Step 2: Discover API endpoints
// Evaluate in the browser tab
() => {
const entries = performance.getEntriesByType('resource')
.filter(e => e.name.includes(window.location.hostname) &&
!e.name.match(/\.(js|css|png|jpg|webp|svg|woff|ttf)(\?|$)/))
.map(e => e.name);
return JSON.stringify(entries, null, 2);
}
This returns all API calls the page made during loading — the data sources behind the UI.
Step 3: Identify the data API
Look for URLs containing:
/api/,/v2/,/v3/- Keywords matching your data need (
schema,table,list,detail,query,search) GETendpoints with query params likeid=,name=,type=
Ignore: analytics, tracking, user-info, config, SDK URLs.
Step 4: Test the API via evaluate
// Replace \x3CAPI_PATH> with the path from Step 3
() => {
return fetch('\x3CAPI_PATH>')
.then(r => r.json())
.then(data => {
// Inspect the structure
const keys = Object.keys(data?.data || data || {});
return JSON.stringify({
topLevelKeys: keys,
sample: JSON.stringify(data).substring(0, 1000)
});
});
}
Step 5: Extract structured data
Once you understand the response shape, write a focused extractor:
() => {
return fetch('\x3CAPI_PATH>')
.then(r => r.json())
.then(data => {
// Extract only what you need — return clean JSON
return JSON.stringify({ /* structured result */ });
});
}
Step 6: Close the browser tab
browser(action=close, targetId="\x3CtargetId>")
Param Tuning
Many APIs need specific parameters to return full data. Common pattern:
- Start with the full URL the page used (from Step 2)
- Try removing parameters one at a time
- ⚠️ Some params return empty data instead of errors when missing — always verify field counts
Cross-Environment Variations
Different environments (regions, clusters, staging/prod) may have:
- Different base domains (e.g.,
app.example.comvsapp-eu.example.com) - Different API path prefixes (e.g.,
/api/v2/vs/api_eu/v2/) - Different ID suffixes in query params (e.g.,
@0vs@10)
Always test each environment separately.
When NOT to Use
- Write operations (forms, submissions) — keep using browser automation for safety
- Pages requiring user interaction to load data (click-to-expand, infinite scroll APIs)
- Auth flows that need OAuth redirects — cookie-based auth only
- Frequently changing APIs — snapshot may be more maintainable as fallback
Comparison Reference
See references/comparison.md for detailed benchmark data (token counts, timing, completeness).
After Discovery
- Update the original Skill — replace snapshot steps with evaluate + fetch
- Keep snapshot as fallback — in case the API changes or auth expires
- Document the API — path, required params, response structure, environment differences
- Log to learnings — record the discovery for future reference
- 确保已安装 OpenClaw(本地或 Docker 部署)
- 在对话框中输入安装命令:
/install snapshot-to-api - 安装完成后,直接呼叫该 Skill 的名称或使用
/snapshot-to-api触发 - 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
Snapshot to API 是什么?
Discover hidden APIs behind web pages and replace expensive browser snapshots with lightweight API calls. Saves ~15-20x tokens and 2x speed on browser automa... 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 278 次。
如何安装 Snapshot to API?
在 OpenClaw 或 Claude Code 对话框中运行命令「/install snapshot-to-api」即可一键安装,无需额外配置。
Snapshot to API 是免费的吗?
是的,Snapshot to API 完全免费,采用 MIT-0 许可证,可自由下载、安装和使用。
Snapshot to API 支持哪些平台?
Snapshot to API 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。
谁开发了 Snapshot to API?
由 fafa-ai-data-labs(@ianzlm)开发并维护,当前版本 v1.0.0。