Cloudsteading
Product image still needed. This listing has source documentation, but no reviewed screenshot yet.

workers-firecrawl

Serve Firecrawl-style search, map and scrape endpoints from a Cloudflare Worker.

workers-firecrawl is a self-hosted Apify/Firecrawl alternative built on Cloudflare (Browser Rendering, Workers). Paid services required. Inspect the source and license in the linked repository.

Source & license

Upstream license: MIT

License TL;DR

You can use it, change it, self-host it and sell it. Keep the original copyright and license notice with copies of the code. You don’t have to publish your changes. The authors don’t promise it will work.

Explain MIT in plain English →

Summary of the main license. Separate packages and assets can have different terms.

Inspect repository ↗Read this project’s actual license ↗

Repository owner

@G4brym

See the upstream repository for the original creator and contributors.

Maintain this project? Maintainer verification →

Cloudflare hosting

Paid services required

workers-firecrawl has a documented low-volume paid Cloudflare path beginning with Workers Paid ($5 USD/account/month), with separately metered usage. The upstream setup requires Paid; browser hours and concurrency must remain bounded.

Hosting requirements
  • Use the documented Workers Paid setup, starting at $5 USD/account/month; browser usage above ten hours/month or ten concurrent sessions adds charges.
  • Workers Paid starts at $5 USD/account/month and includes 10 million requests/month plus 30 million CPU milliseconds/month; higher CPU limits do not make execution unmetered.
  • Workers Paid Browser Rendering includes ten browser hours/month and ten concurrent sessions averaged monthly; excess hours and concurrency are billed.
  • Use a small personal or team workload; domain registration and optional third-party providers are separate costs. Provision your own IDs, secrets and migrations.
Check current pricing ↗
Sources checked 01/10/2026

Repository snapshot: f53a0dc. Hosting eligibility reflects the deployment documentation and listed assumptions.

  • firecrawl ↗

    `workers-firecrawl` is a Cloudflare Workers implementation of the Firecrawl API, specifically designed to replicate the `/search` endpoint. It uses Cloudflare's Browser Rendering API to perform web searches and extract content from web pages, all within the Cloudflare environment. This project enables developers to self-host a Firecrawl-compatible search service with minimal setup.

  • apify ↗

    `workers-firecrawl` is a Cloudflare Workers implementation of the Firecrawl API, specifically designed to replicate the `/search` endpoint. It uses Cloudflare's Browser Rendering API to perform web searches and extract content from web pages, all within the Cloudflare environment. This project enables developers to self-host a Firecrawl-compatible search service with minimal setup.

  • workers ↗

    #:schema node_modules/wrangler/config-schema.json name = "workers-firecrawl" main = "src/index.ts" compatibility_date = "2025-01-28" compatibility_flags = [ "nodejs_compat" ] workers_dev = true [observability] enabled = true [browser] binding = "BROWSER"

  • browser-rendering ↗

    compatibility_date = "2025-01-28" compatibility_flags = [ "nodejs_compat" ] workers_dev = true [observability] enabled = true [browser] binding = "BROWSER"

  • paid ↗

    #:schema node_modules/wrangler/config-schema.json name = "workers-firecrawl" main = "src/index.ts" compatibility_date = "2025-01-28" compatibility_flags = [ "nodejs_compat" ] workers_dev = true [observability] enabled = true [browser] binding = "BROWSER"

  • paid ↗

    compatibility_date = "2025-01-28" compatibility_flags = [ "nodejs_compat" ] workers_dev = true [observability] enabled = true [browser] binding = "BROWSER"

  • paid ↗

    up>1, 2, 3, 4</sup> | Duration | CPU time | | --- | --- | --- | --- | | **Free** | 100,000 per day | No charge for duration | 10 milliseconds of CPU time per invocation | | **Standard** | 10 million included per month <br> +$0.30 per additional million | No charge or limit for duration | 30 million CPU milliseconds included per month<br> +$0.02 per additional million CPU milliseconds<br><br> Max of [5 minutes of CPU time](https://developers.cloudflare.com/workers/platform/limits/#account-plan-limits) per invocation (default: 30 seconds)<br> Max of 15 minutes of CPU time per [Cron Trigger](https://developers.cloudflare.com/workers/configuration/cron-triggers/) or [Queue Consumer](https://developers.cloudflare.co

  • paid ↗

    all methods. | | Workers Free | Workers Paid | | --- | --- | --- | | Browser hours | 10 minutes per day | 10 hours per month, then $0.09 per additional hour | | Concurrent browsers (Browser Sessions only) | 3 browsers | 10 browsers ([averaged monthly](#how-is-the-number-of-concurrent-browsers-calculated)), then $2.00 per additional browser | To view or change your plan, go to the **Workers plans** page in the Cloudflare dashboard: [Go to **Workers plans** ↗](https://dash.cloudflare.com/?to=/:account/workers/plans) ## Examples of Workers Paid pricing #### Example: Quick Actions pricing If a Workers Paid user uses Quick Actions for 50 hours during the month, the estimated cost for the month is as follows.

  • paid ↗

    es Functions, Workers KV, Hyperdrive, and Durable Objects usage for a minimum charge of $5 USD per month for an account. The plan includes increased initial usage allotments, with clear charges for usage that exceeds the base plan. There are no additional charges for data transfer (egress) or throughput (bandwidth). All included usage is on a monthly basis. Pages Functions billing All [Pages Functions](https://developers.cloudflare.com/pages/functions/) are billed as Workers. All pricing and inclusions in this document apply to Pages Functions. Refer to [Functions Pricing](https://developers.cloudflare.com/pages/functions/pricing/) for more information on Pages Functions pricing. ## Workers Users on the Wo

  • MIT ↗

    MIT License Copyright (c) 2025 Gabriel Massadas Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON

  • architecture ↗

    #:schema node_modules/wrangler/config-schema.json name = "workers-firecrawl" main = "src/index.ts" compatibility_date = "2025-01-28" compatibility_flags = [ "nodejs_compat" ] workers_dev = true [observability] enabled = true [browser] binding = "BROWSER"

  • architecture ↗

    compatibility_date = "2025-01-28" compatibility_flags = [ "nodejs_compat" ] workers_dev = true [observability] enabled = true [browser] binding = "BROWSER"

What it can replace

Compare the workflow you need. These mappings describe overlap; full feature parity requires a separate comparison.

Firecrawl logoFirecrawl ↗

Search, link mapping and single-page browser scraping/content extraction; full crawl-job orchestration, LLM extraction and Apify actor-platform parity are excluded.

See supporting source ↗
Apify logoApify ↗

Search, link mapping and single-page browser scraping/content extraction; full crawl-job orchestration, LLM extraction and Apify actor-platform parity are excluded.

See supporting source ↗
external SaaS target
varies
→ Browser Rendering + Workers
external SaaS target
varies
→ Browser Rendering + Workers

How it works

The shape of workers-firecrawl on Cloudflare, and how it stacks up against the rented tools it replaces.

Architecture

Diagram of deployment declarations at the reviewed commit. Each app has its own entrypoint; declared resources do not prove runtime calls. Follow file and line sources below.

View upstream source ↗
Public interface
Configured entry points1
workers-firecrawl
wrangler.toml
↓
App
workers-firecrawl
entry
Cloudflare Workers
Entrypoint: src/index.ts
↓

Configuration and workflow sources

Reviewed commit f53a0dc01502. Files were read as data; upstream applications and CI jobs were not executed.

Partial source coverage: 0 files outside collection bounds; 1 collection or parsing issues. Dynamic imports and generated entrypoints may need manual review.

Deployment configuration · 2 files
wrangler.toml ↗

Cloudflare Workers · compatibility 2025-01-28

workers-firecrawl · default

Entrypoint: src/index.ts

  • BROWSER → Browser Rendering
tests/wrangler.toml ↗

Cloudflare Workers · example/template, excluded from overview · compatibility 2025-01-28

test · default

Entrypoint: index.ts

    No resource bindings declared in this scope.

    Named environments are separate deployments. Bindings are shown only where declared. Configured routes are URL patterns, not verified application endpoints.

    Runtime source · handlers, binding usage and workflow steps

    Observed TypeScript/JavaScript declarations from Worker entrypoints and resolved relative imports. Calls and workflow steps may run conditionally; their listed order is not a proven end-to-end request flow. Router declarations may be mounted under a prefix or may not be registered. This shows code wiring, not a successful deployment or runtime test. Dynamic wiring, aliases and generated code may not resolve.

    src/index.ts ↗
    • L16 · app.use("*")
    tests/index.ts ↗
    • L2 · fetch handler exported
    src/authorization.ts ↗
    • L3 · authorizationMiddleware calls (conditional paths may differ): c.req.header, Response.json, next

    Environment references: c.env.AUTHORIZATION_KEY

    src/webMap.ts ↗
    • L6 · getBrowser calls (conditional paths may differ): puppeteer.launch
    • L10 · discoverLinks calls (conditional paths may differ): browser.newPage, page.goto, page.evaluate, Array.from, document.querySelectorAll, href.startsWith, linkHost.endsWith, hrefs.push, parsed.toString, normalized.endsWith, normalized.slice, seen.has, seen.add, result.push, console.error, page.close
    • L78 · parseSitemap calls (conditional paths may differ): fetch, response.text, locRegex.exec, trim, loc.startsWith, urls.push

    Environment references: env.BROWSER

    src/webSearch.ts ↗
    • L8 · performSearch calls (conditional paths may differ): browser.newPage, encodeURIComponent, page.goto, page.waitForSelector, page.evaluate, Array.from, document.querySelectorAll, filter, links.map, url.startsWith, urls.slice, page.close
    src/browser.ts ↗
    • L13 · getBrowser calls (conditional paths may differ): puppeteer.launch
    • L17 · extractContent calls (conditional paths may differ): browser.newPage, page.setExtraHTTPHeaders, page.goto, response.status, page.evaluate, filter, Array.from, document.querySelectorAll, includes, el.textContent.toLowerCase, el.textContent.includes, closeButtons.forEach, btn.click, page.waitForTimeout, document.querySelector, metaDescription.getAttribute, document.body.cloneNode, forEach, body.querySelectorAll, el.remove

    Environment references: env.BROWSER

    Build and deployment pipeline · 2 GitHub Actions workflows

    Repository CI declarations, separate from runtime request processing. Job dependencies and conditions are shown as written; long commands are shortened with an ellipsis; a workflow file does not prove a recent successful run.

    Changeset Check · .github/workflows/changeset-check.yml ↗

    Triggers: pull_request

    changeset-check · no job dependencies declared

    Condition: github.head_ref != 'changeset-release/main'

    1. actions/checkout@v4actions/checkout@v4
    2. actions/setup-node@v4actions/setup-node@v4
    3. Shell commandnpm ci
    4. Check for changesetsnpx changeset status --since=origin/main
    CI · .github/workflows/ci.yml ↗

    Triggers: push, pull_request

    test · no job dependencies declared

    1. actions/checkout@v4actions/checkout@v4
    2. actions/setup-node@v4actions/setup-node@v4
    3. Shell commandnpm install
    4. Shell commandnpm run lint
    5. Shell commandnpm test

    Full upstream document by @G4brym · README.md · snapshot f53a0dc

    workers-firecrawl

    Deploy to Cloudflare

    Overview

    workers-firecrawl is a Cloudflare Workers implementation of the Firecrawl API, specifically designed to replicate the /search endpoint. It uses Cloudflare's Browser Rendering API to perform web searches and extract content from web pages, all within the Cloudflare environment. This project enables developers to self-host a Firecrawl-compatible search service with minimal setup.

    Purpose

    This project focuses on providing a lightweight, self-hosted alternative to Firecrawl’s /search endpoint. By leveraging Cloudflare Workers, it offers a simple API interface for web search capabilities, making it an ideal drop-in replacement for existing Firecrawl SDK integrations. Update just one line in your codebase to point to your Worker, and you’re ready to go!

    Features

    • /search Endpoint: Perform web searches and retrieve structured results, compatible with Firecrawl SDKs.
    • /map Endpoint: Discover all URLs on a website by extracting links from the page and optionally parsing its sitemap.xml.
    • /scrape Endpoint: Scrape a single URL and extract content in multiple formats (markdown, HTML, links, screenshot).
    • Cloudflare Browser Rendering: Powers real-time web scraping and content extraction.
    • Firecrawl SDK Compatibility: Seamlessly integrates with existing Firecrawl-based applications.
    • Format Filtering: Request only the content formats you need via scrapeOptions.formats to reduce payload size and improve performance.
    • Screenshot Capture: Capture viewport or full-page screenshots of search results as base64 data URIs.

    Additional endpoints or features can be requested via GitHub Issues.

    Supported scrapeOptions.formats

    The /v1/search endpoint supports the scrapeOptions.formats parameter to control which content formats are returned per result. When omitted, the default formats are ["markdown", "html", "rawHtml", "links"].

    Format Description
    markdown Page content converted to Markdown
    html Cleaned HTML content (scripts, styles, nav, header, footer removed)
    rawHtml Full raw HTML of the page
    links Array of all link URLs found on the page
    screenshot Viewport screenshot as a data:image/png;base64,... data URI
    screenshot@fullPage Full-page screenshot as a data:image/png;base64,... data URI
    extract Accepted by the schema but not yet implemented (requires LLM integration)

    Example — request only markdown:

    const results = await firecrawl.search('test query', {
        scrapeOptions: { formats: ['markdown'] }
    });
    

    Example — request markdown with a screenshot:

    const results = await firecrawl.search('test query', {
        scrapeOptions: { formats: ['markdown', 'screenshot'] }
    });
    

    Basic Usage

    Prerequisites

    • A Cloudflare account with a Workers Paid Plan ($ 5/month) to use Browser Rendering.

    Setup for Local Development

    1. Clone the Repository

      git clone git@github.com:G4brym/workers-firecrawl.git
      cd workers-firecrawl
      
    2. Install Dependencies

      npm install
      
    3. Log in to Cloudflare

      Authenticate with your Cloudflare account:

      npx wrangler login
      
    4. Deploy the Worker

      Deploy to Cloudflare:

      npx wrangler deploy
      

      After deployment, you’ll see a URL in your terminal, e.g., https://workers-firecrawl.{your-user}.workers.dev. This is your Worker’s endpoint.

    5. Test the Worker

      Open the URL in your browser to access a Swagger UI for testing the /search endpoint directly. Use this URL in your Firecrawl SDK configuration.

    6. Authorization (Optional)

      By default, this worker will accept requests from everyone, so its recommended that you setup authorization, For this, just set the AUTHORIZATION_KEY secret in your worker, with the desired api key you want to use.

      npx wrangler secret put AUTHORIZATION_KEY
      

    Making Requests

    Integrate with the Firecrawl SDK by updating the apiUrl to your Worker’s URL:

    const {FirecrawlApp} = require('@mendable/firecrawl-js');
    
    const firecrawl = new FirecrawlApp({
        apiKey: 'your-api-key', // Only if AUTHORIZATION_KEY is defined in the worker
        apiUrl: 'https://workers-firecrawl.{your-user}.workers.dev'
    });
    
    // Example search
    const results = await firecrawl.search('test query');
    console.log(results);
    
    // Example map — discover all URLs on a website
    const mapResult = await firecrawl.map('https://example.com');
    console.log(mapResult);
    
    // Example scrape
    const result = await firecrawl.scrapeUrl('https://example.com', {
        formats: ['markdown', 'links'],
    });
    console.log(result);
    

    Customization

    • Custom Domain: Assign a custom domain via the Cloudflare dashboard under Workers > Your Worker > Triggers.
    • Cloudflare Access: Add security by configuring Cloudflare Access for authenticated access under Access > Applications.

    License

    This project is licensed under the MIT License. See LICENSE for details.

    Frequently asked about workers-firecrawl

    What is workers-firecrawl?+

    workers-firecrawl is a self-hosted Apify/Firecrawl alternative built on the Cloudflare developer platform. Serve Firecrawl-style search, map and scrape endpoints from a Cloudflare Worker.

    What does workers-firecrawl replace?+

    workers-firecrawl is listed as an alternative to Apify, Firecrawl. Compare the features and tradeoffs before migrating.

    What Cloudflare primitives does workers-firecrawl use?+

    workers-firecrawl is built on Browser Rendering, Workers.

    How much does workers-firecrawl cost to run?+

    workers-firecrawl has a documented low-volume paid Cloudflare path beginning with Workers Paid ($5 USD/account/month), with separately metered usage. The upstream setup requires Paid; browser hours and concurrency must remain bounded. Use the documented Workers Paid setup, starting at $5 USD/account/month; browser usage above ten hours/month or ten concurrent sessions adds charges. Workers Paid starts at $5 USD/account/month and includes 10 million requests/month plus 30 million CPU milliseconds/month; higher CPU limits do not make execution unmetered. Workers Paid Browser Rendering includes ten browser hours/month and ten concurrent sessions averaged monthly; excess hours and concurrency are billed. Use a small personal or team workload; domain registration and optional third-party providers are separate costs. Provision your own IDs, secrets and migrations. Check current Cloudflare pricing before deploying.

    Is workers-firecrawl open source?+

    The upstream repository declares the MIT license. Read its terms at https://raw.githubusercontent.com/G4brym/workers-firecrawl/f53a0dc01502401bf790ccb382d41014b8713afb/LICENSE. Source code and contributor credit are available at https://github.com/G4brym/workers-firecrawl.

    Discussion · 0

    sign in to comment →
    No comments yet — be the first.