clawfetch
Python SDK for ClawFetch — Web Intelligence API for AI Agents.
Pay-per-request via x402 (gasless USDC on Base). No API keys, no subscriptions.
Install
pip install clawfetch
Quick Start
Sync
from clawfetch import ClawFetch
with ClawFetch(private_key="0x...") as cf:
# Fetch any URL as clean markdown ($0.001)
page = cf.fetch("https://example.com")
# Extract structured data ($0.008)
btc = cf.extract("https://coingecko.com/en/coins/bitcoin")
print(btc["data"])
# Multi-source research ($0.02)
report = cf.research("latest AI agent frameworks")
Async
import asyncio
from clawfetch import AsyncClawFetch
async def main():
async with AsyncClawFetch(private_key="0x...") as cf:
page = await cf.fetch("https://example.com")
btc = await cf.extract("https://coingecko.com/en/coins/bitcoin")
report = await cf.research("latest AI agent frameworks")
asyncio.run(main())
Both clients have identical APIs — all 7 endpoints, full x402 payment flow, retry with exponential backoff, and typed error hierarchy.
API
| Method | Price | Description |
|---|---|---|
fetch(url) |
$0.001 | URL → clean markdown |
render(url) |
$0.005 | JS-rendered page → markdown |
extract(url) |
$0.008 | Structured data from 17+ sites |
research(topic) |
$0.02 | Multi-source topic research |
domains_check(domains) |
$0.008 | Domain availability check |
domains_suggest(query) |
$0.008 | Domain name suggestions |
parse(source) |
$0.005 | Office document (docx/pptx/xlsx/pdf/…) → markdown |
extractors() |
$0.001 | List available extractors |
health() |
Free | API status check |
Error Handling
from clawfetch import (
ClawFetch,
ClawFetchError, # Base class
PaymentError, # 402 — insufficient USDC
NetworkError, # Connection/timeout failures
RateLimitError, # 429 — includes retry_after_ms
ApiError, # Other 4xx/5xx errors
)
Configuration
from clawfetch import ClawFetch, RetryOptions
cf = ClawFetch(
private_key="0x...",
base_url="https://api.clawfetch.ai", # default
timeout=30.0, # seconds
retry=RetryOptions(
max_retries=3,
initial_delay_ms=500,
max_delay_ms=10000,
backoff_multiplier=2.0,
),
debug=False,
)
Requirements
- Python 3.9+
- A wallet with USDC on Base (even $1 gives you 1,000+ requests)
License
MIT
Original README below
Python SDK for ClawFetch — Web Intelligence API for AI Agents.
Pay-per-request via x402 (gasless USDC on Base). No API keys, no subscriptions.
Install
pip install clawfetch
Quick Start
from clawfetch import ClawFetch
cf = ClawFetch(private_key="0x...")
# Fetch any URL as clean markdown ($0.001)
page = cf.fetch("https://example.com")
# Extract structured data ($0.008)
btc = cf.extract("https://coingecko.com/en/coins/bitcoin")
print(btc["data"]) # {'name': 'Bitcoin', 'price': 98432.12, ...}
# JS-rendered pages ($0.005)
rendered = cf.render("https://app.uniswap.org")
# Multi-source research ($0.02)
report = cf.research("latest AI agent frameworks")
# Domain availability ($0.008)
domains = cf.domains_check(["coolstartup.com", "coolstartup.ai"])
# List extractors ($0.001)
extractors = cf.extractors()
Configuration
from clawfetch import ClawFetch, RetryOptions
cf = ClawFetch(
private_key="0x...",
base_url="https://api.clawfetch.ai", # default
timeout=30.0, # request timeout in seconds
retry=RetryOptions( # or False to disable retries
max_retries=3,
initial_delay_ms=500,
max_delay_ms=10_000,
backoff_multiplier=2.0,
),
debug=False, # enable debug logging
)
Error Handling
All errors extend ClawFetchError for easy catching:
from clawfetch import ClawFetch, ClawFetchError, PaymentError, NetworkError, RateLimitError, ApiError
cf = ClawFetch(private_key="0x...")
try:
result = cf.fetch("https://example.com")
except PaymentError as e:
print(f"Payment failed ({e.status_code}): {e}")
except RateLimitError as e:
print(f"Rate limited, retry after {e.retry_after_ms}ms")
except NetworkError as e:
print(f"Network error: {e}")
except ApiError as e:
print(f"API error {e.status_code}: {e}")
except ClawFetchError as e:
print(f"ClawFetch error: {e}")
| Error | Status | Retried |
|---|---|---|
PaymentError |
402 | No |
RateLimitError |
429 | Yes (with Retry-After) |
ApiError |
400, 401, 404 | No |
ApiError |
500, 502, 503, 504 | Yes |
NetworkError |
Connection/timeout | Yes |
Retry Behavior
By default, retries are enabled with exponential backoff + jitter:
| Attempt | Delay |
|---|---|
| 1st retry | ~500ms |
| 2nd retry | ~1,000ms |
| 3rd retry | ~2,000ms |
Respects Retry-After headers on 429 responses. Non-retryable errors (400, 401, 402, 404) fail immediately.
Disable retries:
cf = ClawFetch(private_key="0x...", retry=False)
How It Works
- SDK makes a request to ClawFetch
- Server returns
402 Payment Requiredwith USDC amount - SDK auto-signs an EIP-3009 gasless USDC transfer on Base
- Request is retried with payment header
- You get structured data back
No gas fees. No API keys. Just USDC on Base.
Context Manager
with ClawFetch(private_key="0x...") as cf:
data = cf.extract("https://coingecko.com/en/coins/bitcoin")
# Client is automatically closed
Requirements
- Python 3.9+
- A wallet with USDC on Base (even $1 gives you 1,000+ requests)
Development
pip install -e ".[dev]"
pytest tests/ -v
License
MIT
Metadata
Release files for clawfetch 0.2.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| clawfetch-0.2.1.tar.gz | 20.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| clawfetch-0.2.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 34.7 kB
Release files / clawfetch-0.2.1.tar.gz
| Download URL | clawfetch-0.2.1.tar.gz |
|---|---|
| Size | 20.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
4b4a876a248e7543a266e79e29426cf7d1d5f228ce0057cf1e4171c09ad9d6ed
|
|
BLAKE2b-256 checksum How to use checksums |
7903672d3ee6be42af39319ef7f6a0d6e0389767b66adfeb7dbdc0ae61fe821f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.13
|
Release files / clawfetch-0.2.1-py3-none-any.whl
| Download URL | clawfetch-0.2.1-py3-none-any.whl |
|---|---|
| Size | 14.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
8ca631a2585d6dc2ff6dc1e8ab8d376aac59164ebc3dcebca746f97d6f327bf2
|
|
BLAKE2b-256 checksum How to use checksums |
c14948bfd6bacfdfc8d71c4a7a15e70bd9be46add5efa83b773c4d6ddb50ebb7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.13
|