Web scraping has become essential for businesses looking to stay competitive in today's data-driven landscape. But let's be honest—traditional scraping methods often feel like waiting in line at the DMV. You send a request, then sit there polling for results, wasting precious time and resources.
That's where Crawlbase Crawler changes the game. Instead of the old "ask and wait" approach, it works asynchronously—you send URLs through the Crawling API, and the Crawler processes them in the background, delivering fresh data straight to your server's webhook in real-time. No more constant polling, no more bottlenecks. Just fast, efficient data extraction at scale.
Let me walk you through what makes this tool tick and why it might be exactly what your scraping workflow needs.
Before diving in, you'll need to create a crawler from your Crawlbase dashboard. You've got two options here, and picking the right one matters.
TCP Crawler works great for static pages—those traditional websites where content loads directly from the server. Think news sites, blogs, or product catalogs that don't rely heavily on JavaScript.
JavaScript Crawler is your go-to when dealing with modern web apps built on React, Angular, or Vue. If the content you need is dynamically generated in the browser, this is the one you want.
For businesses scraping large volumes of data from diverse sources, 👉 Crawlbase's flexible crawler options handle both static and dynamic content seamlessly, letting you adapt to whatever the web throws at you.
Here's where things get interesting. The webhook is your data delivery endpoint—where Crawlbase sends all that freshly scraped HTML content. Think of it as a mailbox that's always open, ready to receive packages.
Let me show you a simple Django-based webhook receiver. Assuming you've got Python and Django installed, here's the quick setup:
Create your Django project and app:
Start with a fresh project structure where your webhook logic will live.
Build the webhook view:
In your webhook_app/views.py, create a view that catches incoming POST requests from Crawlbase and processes the data. You'll want to extract the HTML body and save it for later parsing.
Configure URL routing:
Wire up your URLs so Django knows where to send webhook requests.
Launch the development server:
Fire up Django on localhost port 8000 and you're in business.
But here's the catch—your local server isn't accessible from the internet yet. That's where ngrok comes in. Run ngrok http 8000 and boom, you've got a public URL that tunnels to your local webhook. Just remember the free version expires after 2 hours, so plan accordingly.
With ngrok running and spitting out your public forwarding URL, head over to the Crawlbase dashboard to create your crawler. You'll paste in that ngrok URL as your webhook endpoint.
Now, if managing your own webhook sounds like too much overhead, Crawlbase offers a slick alternative. When setting up your crawler, you can select Crawlbase Storage instead. This means your scraped data gets automatically stored in a secure cloud environment managed by Crawlbase—one less thing for you to maintain. The Storage API handles all the heavy lifting, giving you easy access whenever you need it.
Let's say you created a crawler named "test-crawler." Time to feed it some URLs. You'll use the Crawling API with two key parameters: crawler=test-crawler and callback=true. This tells Crawlbase to queue your URLs asynchronously.
Here's a Python example using the official Crawlbase library:
python
from crawlbase import CrawlingAPI
api = CrawlingAPI({'token': 'YOUR_TOKEN'})
urls = ['https://example.com/page1', 'https://example.com/page2', 'https://example.com/page3']
for url in urls:
response = api.get(url, {'crawler': 'test-crawler', 'callback': 'true'})
print(response)
Run this code and you'll notice something interesting—you only get back request IDs (rid), not the actual scraped content. That's the beauty of asynchronous processing. 👉 The Crawler queues your requests instantly without making you wait, freeing you up to keep sending more URLs while it handles the heavy lifting in the background.
By default, you can send up to 30 URLs per second. Need more? Just reach out to Crawlbase support and they can adjust your limits.
One important note: The total queue across all your crawlers is capped at 1 million pages. If you hit that limit, submissions pause automatically and you'll get an email notification. Once the queue drops below 1 million, everything resumes on its own.
After the Crawler processes each URL, it sends the scraped HTML to your webhook. You can receive this data in two formats: raw HTML (default) or JSON (just add format=json to your Crawling API request).
The JSON response gives you structured data including the HTML body, headers, and metadata—super handy for programmatic processing.
In our Django webhook example, we coded it to save each incoming request body to a text file. Open that file and you'll see the complete HTML content, ready for parsing based on your specific needs.
What happens if your webhook goes down or fails to respond? Crawlbase has you covered. The Crawler will retry delivery automatically—though these retries count as successful requests and are billed accordingly. Plus, the monitoring bot keeps an eye on your webhook's health. If it detects persistent failures, your crawler pauses automatically and resumes once your webhook is back online.
You can update your webhook URL anytime from the dashboard, giving you flexibility as your infrastructure evolves.
Need to pass along additional metadata with your scraped results? Crawlbase supports custom callback headers through the callback_headers parameter.
The format looks like this:
HEADER-NAME:VALUE|HEADER-NAME2:VALUE2
For example, to send { "id": 123, "type": "product" }, you'd encode it as:
&callback_headers=id%3A123%7Ctype%3Aproduct
These custom headers show up in the response headers when Crawlbase hits your webhook, making it easy to track which data belongs to which scraping job or client.
Crawlbase Crawler delivers a comprehensive solution for large-scale web scraping. The asynchronous architecture, real-time webhook delivery, and flexible configuration options make it possible to collect massive amounts of data without the usual headaches of managing scraping infrastructure.
Whether you're monitoring competitor prices, aggregating product data, or building datasets for machine learning, having a reliable scraping tool matters. The Crawler handles the technical complexity—proxies, JavaScript rendering, retry logic—so you can focus on what to do with the data.
Just remember: with great scraping power comes great responsibility. Always respect website terms of service, scrape ethically, and use rate limits that won't hammer target servers. A healthy web ecosystem benefits everyone.
What's the advantage of using the Crawler versus not using it?
The Crawler eliminates the polling problem entirely. Instead of constantly checking "Is my data ready yet?", you send URLs and move on. Results arrive at your webhook automatically when they're ready, letting you scale data collection without wasting server resources on polling loops.
Why should I use the Crawler?
It simplifies web data extraction, improves data accessibility, and provides valuable insights for making informed business decisions. The asynchronous workflow means faster data acquisition and the ability to process larger volumes efficiently.
Do I need to use Python to use the Crawler?
Not at all. While I showed Python examples here, Crawlbase provides libraries for JavaScript, Java, Ruby, and other popular languages. You can also interact directly with the REST API from any language that can make HTTP requests. Choose whatever fits your existing tech stack best.