tierproxy — Python SDK
🚧 Preview release. Gateway is not yet generally available. Join the waitlist at hello@tierproxy.com. SDK is functional but
tierproxy doctoragainst a live gateway requires invitation.
Premium multi-provider proxy infrastructure for AI/ML pipelines. Built for engineers who measure cost, latency, and success rate twice — and write Python.
Install
pip install tierproxy
Quickstart — five-second flavor
import tierproxy
r = tierproxy.get("https://example.com", country="US")
print(r.text)
That's it. (Set TIERPROXY_API_KEY env var first.)
Three lines, persistent session
from tierproxy import TierProxy
with TierProxy() as g:
print(g.me.get().client_id)
r = g.get("https://example.com", country="US", session_id="s1")
Auto-pick the cheapest healthy upstream every request
g = TierProxy(routing="cheapest") # also: "fastest", "most_reliable", "balanced"
g.get("https://example.com") # picks via /v1/health/upstreams under the hood
Cost guardrails
g = TierProxy(
monthly_budget_usd=200.0, # raises BudgetExceededError before going over
)
Power-user knobs
import httpx
from tierproxy import TierProxy
from tierproxy.retry import RetryPolicy
g = TierProxy(
api_key="tp_live_...",
base_url="https://my-self-hosted-gw:8444",
timeout=10.0,
retry_policy=RetryPolicy(max_retries=5, retry_on_status=frozenset({500, 502})),
http_client=httpx.Client(verify=False), # custom transport
user_agent_suffix="my-app/2.3", # attribution
)
Raw modes (Playwright, curl, etc.)
from tierproxy import ProxyURL
p = ProxyURL(api_key="tp_live_...", country="US", mode="username_encoding")
print(p.http_url()) # http://customer-tp_live_...-cc-US:x@gw.tierproxy.com:443
Error handling
Every SDK error inherits from tierproxy.TierProxyError and carries a
request_id for support escalation:
from tierproxy import TierProxy, RateLimitError
import time
with TierProxy() as g:
try:
resp = g.get("https://example.com/page")
except RateLimitError as e:
time.sleep(e.retry_after or 5)
resp = g.get("https://example.com/page")
See Errors reference for the full HTTP-status-to-exception mapping.
AI agent integration
The SDK exposes its response models as JSON Schema and as pre-built tool definitions for Anthropic Claude and OpenAI function-calling:
import anthropic
from tierproxy import TierProxy, schemas
with TierProxy() as gw:
anthropic.Anthropic().messages.create(
model="claude-sonnet-4-6",
max_tokens=1024,
tools=schemas.anthropic_tools(),
messages=[{"role": "user", "content": "How much quota is left?"}],
)
See the AI integration guide
and the MCP server in
examples/mcp_claude_desktop.md.
How tierproxy compares
| tierproxy | Smartproxy SDK | Bright Data SDK | Oxylabs SDK | DataImpulse | |
|---|---|---|---|---|---|
| Multi-provider routing | ✅ | ❌ | ❌ | ❌ | ❌ |
| Client-side smart selector (cost-aware) | ✅ | ❌ | ❌ | ❌ | ❌ |
| Live usage streaming (SSE) | ✅ | ❌ | ❌ | ❌ | ❌ |
| MCP server (Claude/Cursor/Cline) | ✅ | ❌ | ❌ | ❌ | ❌ |
| OpenTelemetry built-in | ✅ | ❌ | ❌ | ❌ | ❌ |
| Sync + async parity | ✅ | partial | partial | partial | partial |
| AI/ML framework examples shipped | 8 | 0 | 1 | 0 | 0 |
| Type-safe (Pydantic v2 + mypy strict) | ✅ | ❌ | ❌ | partial | ❌ |
| OpenAPI 3.1 spec | ✅ | ❌ | ❌ | ❌ | ❌ |
Pip-installable CLI (tierproxy doctor) |
✅ | ❌ | ❌ | ❌ | ❌ |
| Per-request cost attribution (lazy) | ✅ | ❌ | ❌ | ❌ | ❌ |
| JA3/JA4 TLS fingerprint rotation | ✅ | ❌ | ❌ | ❌ | ❌ |
| Rate-limit learning + auto-failover | ✅ | ❌ | ❌ | ❌ | ❌ |
| License | Apache 2.0 | proprietary | proprietary | proprietary | proprietary |
Features
- Five-second quickstart —
import tierproxy; tierproxy.get(url, country="US") - Layered API — five integration levels from one-liner to power-user knobs
- Smart routing —
routing="cheapest"auto-picks healthy upstream per request - Cost guardrails —
monthly_budget_usd=refuses requests that would exceed budget - Per-request cost attribution —
client.cost_for(resp)returns USD; lazy 30s cache, no per-request overhead - Client-side response caching —
cache_ttl=300, cache_max_response_size=262144LRU with size cap - Multi-provider auto-failover —
auto_failover=Trueretries with next-best upstream on 429/5xx - Rate-limit learning —
client.rate_limits.get()surfaces gateway-aggregated 429s per target domain - JA3/JA4 TLS rotation — per-upstream fingerprint randomization (gateway side; see tls-fingerprint guide)
- Cookie persistence — cookies stick to
session_idacross multi-step crawls - Streaming responses —
client.get(url, stream=True)returns iterator (large files, SSE) - Live SSE stream —
for delta in g.usage.stream()tails month-to-date bytes - MCP server —
tierproxy-mcpexposes proxy as tools to Claude/Cursor/Cline - 8 framework integrations — LangChain, LlamaIndex, Crawl4AI, Playwright, Firecrawl, Browser-Use, CrewAI
- OpenTelemetry opt-in —
pip install tierproxy[otel]for distributed tracing - Geo + sticky sessions — countries, cities, 1-1440min session pins
- Dual URL syntax — headers (httpx/requests) AND username-encoding (Playwright)
- Type-safe end-to-end — Pydantic v2 models, mypy strict, full IDE autocomplete
See examples/ for LangChain/LlamaIndex/Crawl4AI/Playwright and
examples/levels.py for a runnable demo of every level.
Use with your favorite AI/agent framework
| Framework | Example | Notes |
|---|---|---|
| LangChain | with_langchain.py |
RAG document loaders through proxy |
| LlamaIndex | with_llamaindex.py |
SimpleWebPageReader through proxy |
| Crawl4AI | with_crawl4ai.py |
Playwright crawler + tierproxy |
| Firecrawl (hot) | with_firecrawl.py |
Self-hosted Firecrawl + residential IPs |
| Browser-Use (hot) | with_browser_use.py |
LLM-driven autonomous browser |
| CrewAI (hot) | with_crewai.py |
Multi-agent scraper crew + cost-aware routing |
| Playwright | with_playwright.py |
Direct Playwright with tierproxy |
| MCP (Claude/Cursor/Cline/Windsurf) (unique) | mcp_claude_desktop.md |
Native tool integration via tierproxy-mcp |
MCP server (Claude Desktop / Cursor / Cline / Windsurf)
pip install tierproxy[mcp]
Then add to your MCP client config:
{
"mcpServers": {
"tierproxy": {
"command": "tierproxy-mcp",
"env": { "TIERPROXY_API_KEY": "tp_live_..." }
}
}
}
Now your AI assistant can call fetch_url(url, country="US"), inspect health
and usage, and route through the cheapest healthy upstream — no glue code,
no httpx imports, no boilerplate.
Metadata
Release files for tierproxy 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| tierproxy-0.4.0.tar.gz | 271.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| tierproxy-0.4.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 334.2 kB
Release files / tierproxy-0.4.0.tar.gz
| Download URL | tierproxy-0.4.0.tar.gz |
|---|---|
| Size | 271.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5f437a13327e768d64c96ff142a7054400773295e99d7aaff0d00f2a90a95cbd
|
|
BLAKE2b-256 checksum How to use checksums |
e5ecfb23ee989c80df3c1ad19a484929de8d6c569dba49557ea38e1bed3f4ff8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 19, 2026.
Transparency logRelease files / tierproxy-0.4.0-py3-none-any.whl
| Download URL | tierproxy-0.4.0-py3-none-any.whl |
|---|---|
| Size | 62.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9085852dec961addc517a8addfc197b3736f76233651497abf8cce563ae9f0c3
|
|
BLAKE2b-256 checksum How to use checksums |
057859359457647f4cb0c90ad5bab0c047f2e1a163875a604bff43988fdfa3fd
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on May 19, 2026.
Transparency log