| name | firecrawl-migration-deep-dive |
| description | Migrate to Firecrawl from Puppeteer, Playwright, Cheerio, or other scraping tools.
Use when replacing custom scraping code with Firecrawl, migrating between
scraping APIs, or re-platforming content ingestion pipelines.
Trigger with phrases like "migrate to firecrawl", "replace puppeteer with firecrawl",
"switch to firecrawl", "firecrawl vs puppeteer", "firecrawl migration".
|
| allowed-tools | Read, Write, Edit, Bash(npm:*), Bash(node:*), Grep |
| version | 1.11.0 |
| license | MIT |
| author | Jeremy Longshore <jeremy@intentsolutions.io> |
| tags | ["saas","firecrawl","migration"] |
| compatibility | Designed for Claude Code, also compatible with Codex and OpenClaw |
Firecrawl Migration Deep Dive
Current State
!npm list puppeteer playwright cheerio 2>/dev/null | grep -E "puppeteer|playwright|cheerio" || echo 'No scraping libs found'
Overview
Migrate from custom scraping (Puppeteer, Playwright, Cheerio) or competing APIs to Firecrawl. Firecrawl eliminates browser management, anti-bot handling, and JS rendering infrastructure. This skill shows equivalent code for common scraping patterns.
Migration Comparison
| Feature | Puppeteer/Playwright | Cheerio | Firecrawl |
|---|
| JS rendering | Manual browser | No | Automatic |
| Anti-bot bypass | DIY (stealth plugin) | No | Built-in |
| Output format | Raw HTML | Parsed HTML | Markdown/JSON/HTML |
| Infrastructure | Browser instances | None | API call |
| Concurrent scraping | Manage browser pool | Simple | Managed by Firecrawl |
| Cost model | Compute (CPU/RAM) | Free | Credits per page |
Instructions
Step 1: Replace Puppeteer Single-Page Scrape
import puppeteer from "puppeteer";
async function scrapePuppeteer(url: string) {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto(url, { waitUntil: "networkidle2" });
const html = await page.();
title = page.();
browser.();
{ html, title };
}
;
firecrawl = ({ : process..! });
() {
result = firecrawl.(url, {
: [],
: ,
: ,
});
{ : result., : result.?. };
}