Scrape the web.
Switch providers.
One TypeScript client to scrape, search, crawl, extract, and automate across 7 engines with automatic failover.
Writeonescrapecall.Usetheprovideryouhave.FailoverquietlywhenanAPIgoesdown.
Write one scrape call. Run it through any adapter.
Scrape SDK gives your application one typed client and one result shape across Firecrawl, TinyFish, Jina, Tavily, Spider, Browserbase, and local Cheerio.
import { createScrapeClient } from "scrape-sdk";
import { firecrawl } from "scrape-sdk/firecrawl";
import { tinyfish } from "scrape-sdk/tinyfish";
import { jina } from "scrape-sdk/jina";
import { local } from "scrape-sdk/local";
const scraper = createScrapeClient({
providers: [
firecrawl({}),
tinyfish({ apiKey: process.env.TINYFISH_API_KEY! }),
jina(),
local(),
],
});
const page = await scraper.scrape("https://stripe.com/docs");
console.log(page.markdown);stripe.com/pricingrescued (200 OK)Silent circuit recovery
When a provider rate-limits or times out, Scrape SDK routes down your fallback list within a single deadline before throwing unhandled errors.
firecrawl()jina()local()Five unified capabilities. Zero boilerplate.
One client handles individual pages, search discovery, multi-page crawling, sitemap indexing, and structured JSON Schema extraction.
URL ➔ MarkdownClean Page Markdown
Converts web pages into clean ATX markdown, automatically stripping scripts, styles, navigation, and DOM bloat.
await scraper.scrape("https://stripe.com")Query ➔ PagesLive Web Search
Searches the live web without a starting URL, querying real-time provider indexes (TinyFish, Tavily, Jina) in one call.
await scraper.search("typescript web scraping")Domain ➔ CorpusRecursive Site Crawling
Traverses entire domains recursively, managing depth bounds, concurrency limits, and async job polling.
await scraper.crawl(url, { maxDepth: 2 })Site ➔ URLsFast URL Discovery
Discovers all URLs on a site, indexing sitemaps and paths fast without downloading full HTML bodies.
await scraper.map(url, { limit: 100 })Page ➔ Structured JSONStructured JSON Schema Extraction
Extracts type-safe structured JSON, validating extracted page fields against your Zod or JSON Schema.
await scraper.extract(url, { schema: PricingSchema })Interactive Extraction Sandbox
Test live extraction directly in the browser.
Why developers switch from single-vendor SDKs
- ✕Vendor Lock-in: Rewriting callers whenever you swap or add a new scraping service.
- ✕Fragile Quotas: Rate limits (429) or proxy outages immediately crash your backend.
- ✕CI / Offline Failures: Local tests and CI pipelines require active cloud SaaS API keys.
- ✓One Typed Contract: Same function calls and result shapes across all 7 backends.
- ✓Automatic Failover: Seamlessly cascades down your fallback list within a single deadline.
- ✓Free Local Fallback: Static Cheerio parser runs anywhere with zero API keys required.
Ready for agents & SDKs
import { scrape } from "scrape-sdk";
const page = await scrape("https://stripe.com/docs");
console.log(page.markdown);
console.log(`via ${page.provider} in ${page.latencyMs}ms`);UNIFIED WEB EXTRACTION FOR TYPESCRIPT
Never let a rate limit
crash your backend.
Add Scrape SDK in seconds. Switch engines or layer fallbacks without rewriting a single line of application code.
