```
## Documentation
## Choosing the right endpoint
Piloterr exposes three complementary ways to fetch a public web page. Pick the **lightest engine that works** for your target site.
| Endpoint | Engine | Credits | Use when |
|---|---|---:|---|
| [Website Crawler](https://www.piloterr.com/library/website-crawler) | HTTP request (no JavaScript) | 1 | The HTML you need is already in the first response: blogs, docs, server-rendered catalog pages, sitemaps. |
| [Website Rendering](https://www.piloterr.com/library/website-rendering) | Headless browser (JavaScript executed) | 2 | Content appears only after JS runs: React/Vue/Angular SPAs, lazy-loaded listings, pages that need `wait_for` or POST `browser_instructions`. |
| [Website WebUnlocker](https://www.piloterr.com/library/website-webunlocker) | Browser + unlock stack | 3 | [Website Rendering](https://www.piloterr.com/library/website-rendering) or [Website Crawler](https://www.piloterr.com/library/website-crawler) hit bot walls (Cloudflare, DataDome, Akamai, PerimeterX) **and** the domain is on Piloterr's approved whitelist. |
**Decision flow**
1. Try **Crawler** first if you do not need client-side rendering. It is the fastest and cheapest option.
2. Switch to **Rendering** when the DOM is empty, prices load asynchronously, or you must wait for a selector / run browser steps.
3. Escalate to **WebUnlocker** only for hardened retail or marketplace domains that block normal browser traffic. Whitelist approval is required before production use.
See also: [Website Scraping guide](https://www.piloterr.com/blog/website-crawler-vs-rendering-vs-webunlocker).
## Overview
[Website Crawler](https://www.piloterr.com/library/website-crawler) sends a direct HTTP GET to a public URL and returns the page HTML. No headless browser runs: there is no JavaScript execution, no DOM rendering, and no anti-bot unlock layer.
That makes Crawler ideal for **volume and speed** on sites that already ship meaningful HTML in the first response. When the page is a SPA, loads data after scroll, or sits behind advanced bot detection, move up to [Website Rendering](https://www.piloterr.com/library/website-rendering) or [Website WebUnlocker](https://www.piloterr.com/library/website-webunlocker) (see table above).
Costs **1 credit** per successful call.
## Quickstart
```
GET https://api.piloterr.com/v2/website/crawler?query=https://example.com
```
## Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| `query` | string | yes | Public URL with `http://` or `https://` |
| `allow_redirects` | boolean | no | Follow redirects when `true` (default). Set `false` to inspect redirect chains |
| `return_page_source` | boolean | no | Return raw HTML source when `true`. Default `false` |
## Response
| Field | Description |
|---|---|
| Response body | HTML string of the fetched page |
## Related endpoints
| Need | Endpoint |
|---|---|
| JavaScript-rendered content | [Website Rendering](https://www.piloterr.com/library/website-rendering) |
| Hard anti-bot on a whitelisted domain | [Website WebUnlocker](https://www.piloterr.com/library/website-webunlocker) |
| Detect protection before scraping | [Website Antibot](https://www.piloterr.com/library/website-antibot) |
## Notes
- Only successful HTTP responses are billed.
- Authenticated or paywalled pages are out of scope.
- If you get empty or skeleton HTML, the site likely needs [Website Rendering](https://www.piloterr.com/library/website-rendering) instead.
## Main use cases
- Bulk-fetch product or listing pages that render on the server
- Monitor static competitor pages for content changes
- Harvest blog posts, directories, and documentation at low latency
- Capture redirect chains with `allow_redirects=false`