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.003 | Domain availability check |
domains_suggest(keywords) |
$0.003 | 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.003)
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.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| clawfetch-0.2.2.tar.gz | 23.3 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| clawfetch-0.2.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 38.6 kB
Release files / clawfetch-0.2.2.tar.gz
| Download URL | clawfetch-0.2.2.tar.gz |
|---|---|
| Size | 23.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
a2658f8645b18d73ef4019c1f9bd8db1af57ac979c2d3de15a32758be01ad813
|
|
BLAKE2b-256 checksum How to use checksums |
031bcd82b2343d182d8a3a08a51a411dd7aeaf016f0b18ebc161027f9532d5a0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.15
|
Release files / clawfetch-0.2.2-py3-none-any.whl
| Download URL | clawfetch-0.2.2-py3-none-any.whl |
|---|---|
| Size | 15.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cfd70cbd45b4e1b89df62e22bcacfcd3cd8e4c3b9129f7cd036dee6b7310afb3
|
|
BLAKE2b-256 checksum How to use checksums |
cc84919c735c5a60e3f505bd69c549b601af12904bd34ca11db68c1027c608ac
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.15
|
Security for clawfetch 0.2.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.