Pricing
FairCrawl uses cost-plus pricing. The price you see is tied to the route or worker method that actually ran.
Core prices
| Action | Typical billed price |
|---|---|
web/scrape | starts at $0.0007 per standard page; volume discounts apply |
web/crawl | based on the underlying page reads |
map | $0.0005 per request |
interact | $0.002 per request |
agent | $0.005 coordination cost before tool usage |
research | $0.007 per successful query; first three successful base actions per authenticated user free; synthesis included; successful enrichment pages separately metered at the canonical scrape rate |
pdf.fast | $0.00065 per page |
pdf.ocr | $0.0065 per page |
Research failures, queries with no results, and failed enrichment pages cost $0.
Method overrides matter
For web/scrape, the final bill can move depending on the worker method:
- direct fetch keeps the cheapest path
playwright/cf_browserescalations cost more than a plain static fetchpdf.fastandpdf.ocrbill per page- premium or proxy-backed fallbacks bill at the cost of the path actually used
Inspect pricing without guessing
Use the endpoint catalog as the public pricing map
```bash
curl https://api.faircompany.ai/v1/crawl/endpoints \
-H "Authorization: Bearer fc_live_xxx"
```
```ts
import FairCrawl from "faircrawl";
const fc = new FairCrawl({ apiKey: process.env.FAIRCRAWL_API_KEY || "fc_live_xxx" });
const catalog = await fc.endpoints();
console.log(catalog.total);
console.log(catalog.platforms.web);
```
```python
from faircrawl import FairCrawl
import httpx
import os
api_key = os.environ.get("FAIRCRAWL_API_KEY", "fc_live_xxx")
response = httpx.get(
"https://api.faircompany.ai/v1/crawl/endpoints",
headers={"Authorization": f"Bearer {api_key}"},
timeout=30,
)
response.raise_for_status()
print(response.json()["total"])
```
```json
{
"tool": "faircrawl_scrape",
"arguments": {
"url": "https://faircrawl.ai/docs/getting-started/authentication/",
"format": "markdown"
}
}
```
Free usage
The current seeded free quota covers these web actions before billing starts:
crawl.singlehas a free quota of5crawl.maphas a free quota of3crawl.interacthas a free quota of2
The authenticated /v1/crawl/endpoints catalog is the source of truth for all
other action prices. A response’s _meta block records what that call cost.
Best practice
Map before you crawl, and scrape before you interact. That keeps your bill aligned with the cheapest endpoint that can answer the question.