skills/firecrawl/SKILL.md
Use when scraping web pages, extracting content from JS-rendered sites or SPAs, running search-plus-scrape workflows, or mapping entire site URL trees. Produces clean LLM-friendly Markdown. Prefer over WebFetch when JavaScript execution is required. Keywords: web scraping, fetch URL, scrape website, search web, extract content, SPA, JS-rendered, site map, crawl, Firecrawl.
npx skillsauth add acedergren/agentic-tools firecrawlInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Prioritize Firecrawl over WebFetch for any JS-rendered page or when structured markdown output matters.
.firecrawl/*.md output file into context without checking size first — scraped pages routinely exceed 5000 lines. Use wc -l then grep/head to extract what you need.gh).-o flag — without it, output goes to stdout only and isn't persisted. Credits wasted, re-scraping required.firecrawl --status before authenticated scraping — silent auth failures return empty output, not errors.Need web content?
│
├─ Single known URL
│ ├─ Static HTML → WebFetch (faster, free)
│ ├─ JS-rendered / SPA → Firecrawl --wait-for
│ ├─ Need structured markdown → Firecrawl
│ └─ Behind auth/paywall → Firecrawl (after firecrawl login)
│
├─ Search + scrape
│ ├─ Just URLs/titles → WebSearch (lighter, faster)
│ ├─ Top 5-10 results with content → firecrawl search --scrape
│ └─ Deep research (20+ sources) → parallel Firecrawl
│
├─ Discover all pages on a domain → firecrawl map
│
└─ Real-time data → Direct API only
| Page count | Approach |
|------------|----------|
| 1–5 | Serial with -o flags |
| 6–50 | Parallel with & and wait |
| 50+ | xargs -P 10 with concurrency check first |
Always check capacity before bulk runs: firecrawl --status shows Concurrency: X/100.
# Search the web
firecrawl search "query" -o .firecrawl/search.json --json
firecrawl search "query" --scrape -o .firecrawl/results.json --json
firecrawl search "AI news" --tbs qdr:d -o .firecrawl/today.json --json # Past day
# Scrape single page
firecrawl scrape https://example.com -o .firecrawl/example.md
firecrawl scrape https://example.com --only-main-content -o .firecrawl/clean.md
firecrawl scrape https://spa.com --wait-for 3000 -o .firecrawl/spa.md
# Map a site
firecrawl map https://example.com -o .firecrawl/urls.txt
firecrawl map https://example.com --search "blog" -o .firecrawl/blog-urls.txt
# Small batch — & with wait
firecrawl scrape site1.com -o .firecrawl/1.md &
firecrawl scrape site2.com -o .firecrawl/2.md &
firecrawl scrape site3.com -o .firecrawl/3.md &
wait
# Large batch — xargs
cat urls.txt | xargs -P 10 -I {} sh -c 'firecrawl scrape "{}" -o ".firecrawl/$(echo {} | md5).md"'
# Post-scrape extraction
grep "^# " .firecrawl/*.md # All H1 headings
grep -l "keyword" .firecrawl/*.md # Files matching keyword
jq -r '.data.web[].title' .firecrawl/*.json # JSON title extraction
firecrawl --status # Check auth and credit status
firecrawl login --browser # Auto-opens browser — don't ask user to run manually
export FIRECRAWL_API_KEY=your_key # Fallback if browser auth fails
| Error | First check | Fix |
|-------|-------------|-----|
| Not authenticated | firecrawl --status | firecrawl login --browser |
| Concurrency limit | firecrawl --status (shows X/100) | wait for jobs, reduce -P value |
| Page failed to load | curl -I URL (basic connectivity) | Add --wait-for 5000; try --format html to inspect raw HTML |
| Output file empty | head -20 output.md | Add --only-main-content; try --include-tags article,main |
Always write to .firecrawl/ directory (add to .gitignore):
.firecrawl/example.com.md
.firecrawl/search-ai-news.json
.firecrawl/docs-sitemap.txt
Load references/cli-options.md when: troubleshooting 3+ unknown flags, header injection, cookie handling, sitemap modes, or custom user-agents.
Load references/output-processing.md when: building 3+ step transformation pipelines, parsing nested JSON from search results, or combining/deduplicating 10+ scraped files.
Do NOT load references for basic search/scrape/map with standard flags.
$ARGUMENTS: Search query, URL, or scraping objective. Empty = ask what to scrape.
development
--- name: api-audit description: "Use when auditing API routes for schema drift, missing auth, or validation gaps. Scans routes against shared TypeScript types to find mismatches, missing middleware, and undocumented endpoints. Read-only — produces a severity-grouped report. Keywords: audit routes, schema drift, auth gaps, missing validation, type mismatch, orphaned schemas. Triggers on "audit API routes" or "find schema drift"." --- # API Route & Type Audit Skill ## When to Use Load this skil
development
Use when drafting, translating, polishing, or reviewing Swedish text so it sounds natural, fluent, contemporary, and appropriate for its audience. Triggers include "write better Swedish", "make this sound natural in Swedish", "translate into Swedish", "polish this Swedish", "tech company Swedish", "contemporary Swedish words", "Swedish developer docs", and "avoid Anglicisms".
development
Use when working with shadcn-svelte components, TanStack Table in Svelte 5, or Tailwind v4.1. Covers non-obvious reactivity bugs, library selection trade-offs, and migration pitfalls not in the official docs. Keywords: shadcn-svelte, TanStack Table, Tailwind v4.1, Svelte 5 runes, bits-ui, superforms, data table, svelte-check.
data-ai
Use when mapping IDCS claims to org membership after OAuth login succeeds. Covers mapProfileToUser, session.create.before, session.create.after hooks, MERGE INTO upserts, tenant-org mapping, and first-admin bootstrap. Keywords: IDCS groups, org_members, provisioning, session hooks, tenant map, MERGE INTO.