a11y-auditor
Audit web pages for accessibility issues in a real browser. Checks contrast, font sizes, focus indicators, keyboard navigation, ARIA labels, and semantic HTML…
Extract structured data from websites into CSV or JSON. Use when the user wants to scrape a list, table, directory, or repeated elements from one or more pages — especially pages that require login, handle CAPTCHAs, or load content dynamically. Examples: "pull all company names
$ npx -y skills add hanzili/hanzi-browse --skill data-extractor --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/data-extractorContext preview
The summary Claude sees to decide when to auto-load this skill.
Extract structured data from websites into CSV or JSON. Use when the user wants to scrape a list, table, directory, or repeated elements from one or more pages — especially pages that require login, handle CAPTCHAs, or load content dynamically. Examples: "pull all company names
name: data-extractor description: Extract structured data from websites into CSV or JSON. Use when the user wants to scrape a list, table, directory, or repeated elements from one or more pages — especially pages that require login, handle CAPTCHAs, or load content dynamically. Examples: "pull all company names and emails from this directory", "export this table to CSV", "collect job listings from my recruiter dashboard". category: productivity
You extract structured data from websites into CSV or JSON. You navigate real pages in a browser — handling auth, pagination, and dynamic content — and output clean, usable data files.
Try calling `browser_status` to verify the browser extension is reachable. If the tool doesn't exist or returns an error:
> **Hanzi isn't set up yet.** This skill needs the hanzi browser extension running in Chrome. > > 1. Install from the Chrome Web Store: https://chromewebstore.google.com/detail/hanzi-browse/iklpkemlmbhemkiojndpbhoakgikpmcd > 2. The extension will walk you through setup (~1 minute) > 3. Then come back and run this again
---
Before opening a browser, confirm:
1. **Target URL** — the starting page (e.g., a directory, search results, dashboard) 2. **Fields to extract** — exactly which data points: column names, what they mean 3. **Scope** — one page, multiple pages, or all pages up to a limit? 4. **Output format** — CSV or JSON? Where to save it (file path or clipboard)? 5. **Auth** — is the user already logged in, or do they need to log in first?
If any of these are unclear, ask before proceeding. A wrong assumption wastes time and may extract the wrong data.
---
Data extraction can touch sensitive information. Before starting:
**Always confirm scope with the user:**
**Rate limiting:**
**Never extract:**
---
Before extracting anything, study the page structure.
1. **Navigate to the target URL** and observe:
2. **Check if login is needed**: Try loading the page. If it redirects to login, the user needs to be logged in first. Tell them: "This page requires login — please make sure you're signed in to Chrome before I start."
3. **Identify the exact fields**: Locate where each requested field appears in the DOM. Note any that are missing, hidden behind a click, or inconsistently present.
4. **Estimate total records**: If possible, check the total count shown on the page ("1,240 results") and agree with the user on how many to extract.
Present a brief plan:
Target: [url] Structure: [table / card grid / list] Fields found: [field1, field2, field3] Pages: [single page / N pages / infinite scroll] Estimated records: ~[N] Output: [CSV / JSON] → [file path] Proceed?
---
Use `browser_start` to run the extraction. Be specific in the task description.
browser_start({
task: "Extract all rows from the table on this page. For each row, collect: company name, email, phone number. Navigate through all pagination pages until there are no more. Return the data as a JSON array with keys: company, email, phone.",
url: "https://example.com/directory",
context: "The table has class 'results-table'. Each row is a <tr>. Pagination uses a 'Next' button. Stop after 5 pages max."
})**Tips for the task description:**
**Handling common issues:**
| Problem | What to do | |---------|-----------| | Infinite scroll | Ask agent to scroll down N times, collect after each scroll | | Data behind a click (e.g., expand row) | Instruct agent to click each item before reading | | Login wall mid-extraction | Stop, tell user to re-authenticate, resume with `browser_message` | | CAPTCHA | Stop immediately. Tell the user. Do not retry automatically. | | Rate limit / 429 page | Stop. Wait for user to confirm before resuming. | | Missing fields on some rows | Collect `null` for missing values — don't skip the row |
**For multi-page extraction**, use `browser_message` to continue across pages if `browser_start` times out:
browser_message({
session_id: result.session_id,
message: "Continue to the next page and keep collecting. We have [N] records so far."
})---
Once collected, format and save the data.
browser_start({
task: "Format the extracted datThe context layer for browsing agents. Your browsing agent keeps failing on real sites — X uses Draft.js, LinkedIn hides the connect button, Gmail needs keyboard shortcuts.
Repo: hanzili/hanzi-browse
Audit web pages for accessibility issues in a real browser. Checks contrast, font sizes, focus indicators, keyboard navigation, ARIA labels, and semantic HTML…
Search for apartments across multiple real estate platforms, compare listings side by side, and help submit inquiries or applications. Use when the user wants…
Monitor competitor websites for changes. Visit a list of URLs, extract pricing, features, positioning, and key content, compare against previous snapshots…
Research SaaS and AI-tool competitors in a real browser. Visit competitor sites, pricing pages, feature pages, and review platforms to extract pricing,…
Test a web app like a QA person — open it in a real browser, click through flows, and report what's broken with screenshots and code references. Works on…
Delegates a browsing task to a sub-agent running in the USER'S OWN Chrome — the browser they have open right now, already signed into everything. Give it a…