Engineering
Engineering Sep 19, 2026 3 min read
~ / ben-werner ❯

Firecrawl Alternative: How I Cut Scraping Costs by 90%

Firecrawl Alternative: How I Cut Scraping Costs by 90%

I made a Firecrawl alternative by deploying a small Python service on a Freestyle VM with a residential proxy. My monthly scraping bill dropped by about 90%: from around $1,000 for Firecrawl + Scrape.do to roughly $100 for the Freestyle VM and proxy.

Why I needed a Firecrawl alternative

I’ve been building a movie app on the side called The Movie Watch. It helps people get tickets to sold-out movies. It blew up around The Odyssey, when tickets became a scalping mess.

For a while, I used Firecrawl and Scrape.do to get the data the app needed. It kept breaking, and each provider had different quirks, so I split the workload between them.

After a ton of frustration, my CTO suggested running my own scraper on a Freestyle VM with a residential proxy. It turned out to be an excellent idea.

Cheaper and Faster

Running my own scraper on Freestyle cut my bill by about 90% and gave me control over my proxy setup. For my scraping workload, the recorded median latencies were 9.2 seconds to fetch and parse with Scrape.do, versus 3.9 seconds to fetch with my scraper on Freestyle.

Firecrawl vs. running your own scraper on Freestyle

Firecrawl’s hosted API handles scraping and offers formats like Markdown, HTML, and JSON. On Freestyle, I run the scraping code myself and connect it to a residential proxy.

Firecrawl hosted APIMy scraper on Freestyle
SetupIntegrate a scraping APIDeploy your own service
OutputBuilt-in extraction formatsData your code extracts
ControlConfigure the API’s optionsChoose your client, parsing, retries, and proxies

How to build a Firecrawl alternative

For pages that need JavaScript or clicks, you can build your Firecrawl alternative around a browser. Freestyle runs Chromium and your scraping service, with requests routed through a residential proxy. I used Evomi for the proxy.

A VM lets you install browser dependencies, keep the browser running between jobs, and expose an API your app can call. Here’s how to run Chromium on Freestyle.

Freestyle also has built-in SOCKS5 proxy support. You can connect a proxy provider and let Freestyle handle authentication, keeping the provider’s credentials out of the VM.

For a browser-level proxy setup, run this on the VM with Playwright and its Chromium browser installed. Set the proxy environment variables using your provider’s connection details and replace the example URL.

scraper.py
import os
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch(proxy={
        "server": os.environ["PROXY_SERVER"],
        "username": os.environ["PROXY_USERNAME"],
        "password": os.environ["PROXY_PASSWORD"],
    })
    page = browser.new_page()
    page.goto("https://example.com")
    print(page.locator("body").inner_text())
    browser.close()

This opens the page through a residential proxy and prints its rendered text. Add the clicks and selectors your site needs.

Should I roll my own Firecrawl?

I was pretty shocked how simple it was, so at the very least give it a shot!

Ask your agent to do it, and I think you'll be suprised, and you'll certainly save some money!

esc