langchain-proxyhat
Read the web in LangChain through ProxyHat residential proxies — a document loader and an agent tool with rotating IPs, geo-targeting, and sticky sessions.
Why
LLM pipelines that read the open web from datacenter IPs get blocked, rate-limited, and served bot-detection pages instead of content. This package routes LangChain's web reads through ProxyHat's residential IPs (50M+ across 148+ countries) — a fresh IP per page by default, or one pinned IP for a whole multi-page load. Two first-class LangChain components:
ProxyHatLoader— aBaseLoaderthat fetches URLs and yieldsDocumentobjects for RAG, indexing, or summarization.ProxyHatFetchTool— aBaseToolthat lets an agent fetch a page's text from a residential IP.
Install
pip install langchain-proxyhat
langchain-core is a peer — bring your own version (>=0.3), the same one your app and other LangChain integrations already use.
Quick start
Load pages as Document objects:
from langchain_proxyhat import ProxyHatLoader
# An API key auto-selects an active residential sub-user:
docs = ProxyHatLoader(
["https://example.com", "https://example.org"],
api_key="ph_your_api_key",
country="us",
).load()
for doc in docs:
print(doc.metadata["source"], doc.metadata["status_code"], len(doc.page_content))
Give an agent a residential-IP fetch tool:
from langchain_proxyhat import ProxyHatFetchTool
tool = ProxyHatFetchTool(api_key="ph_your_api_key", country="us")
# Use directly...
html = tool.invoke({"url": "https://example.com"})
# ...or hand it to an agent alongside your other tools.
# from langchain.agents import create_agent
# agent = create_agent(model, tools=[tool])
Get an API key at proxyhat.com.
Credentials
Pass them explicitly or via environment variables — options win over env:
| Option | Env var | Notes |
|---|---|---|
api_key |
PROXYHAT_API_KEY |
Auto-selects an active sub-user with remaining traffic |
sub_user |
PROXYHAT_SUBUSER |
Pick a specific sub-user by uuid or name (with an API key) |
username |
PROXYHAT_USERNAME |
Explicit gateway proxy_username (skips the API) |
password |
PROXYHAT_PASSWORD |
Explicit gateway proxy_password |
Targeting
The same knobs are available on both the loader and the tool:
ProxyHatLoader(
["https://example.com"],
api_key="ph_your_api_key",
country="us", # ISO code or "any" (default)
region="california",
city="new_york",
filter="high", # AI IP-quality tier
sticky="30m", # keep one IP across the whole load; omit for rotating
protocol="http", # or "socks5"
)
Rotating vs sticky
By default the loader is rotating: each page is fetched over a new connection with a stable gateway username, so ProxyHat hands out a fresh residential IP per page. Set sticky (e.g. sticky="30m" or sticky=True) to pin one residential IP across every page in the load — the right choice for paginated sites, logged-in sessions, or anything that must look like a single user. On ProxyHatFetchTool, sticky keeps the same IP across the agent's successive calls.
How it works
Both components resolve your gateway credentials once (via the official proxyhat SDK — an API key auto-picks an active sub-user, or you supply username/password directly), then build a ProxyHat gateway connection URL with the SDK's targeting grammar and fetch through it with httpx. Rotating loads reuse a stable username so the gateway rotates the IP per connection; sticky loads reuse one session id so every request exits from the same IP.
Publishing to the LangChain integrations registry is a planned follow-up.
License
MIT © ProxyHat
Metadata
Release files for langchain-proxyhat 0.1.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 | |
|---|---|---|---|
| langchain_proxyhat-0.1.1.tar.gz | 10.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| langchain_proxyhat-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 19.5 kB
Release files / langchain_proxyhat-0.1.1.tar.gz
| Download URL | langchain_proxyhat-0.1.1.tar.gz |
|---|---|
| Size | 10.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f66ea8aa5e20822499845a6fb55bb3abd21054d628628889abf9afe1727528bc
|
|
BLAKE2b-256 checksum How to use checksums |
1365313fd99473954678b6867394c02daf49fadb50f47a1bfd75af2e8c28f325
|
| 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 Jul 14, 2026.
Transparency logRelease files / langchain_proxyhat-0.1.1-py3-none-any.whl
| Download URL | langchain_proxyhat-0.1.1-py3-none-any.whl |
|---|---|
| Size | 8.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
56b08cec97eaafd82fd4a6308a9d0318719fc02d6ce45cdda110dbd6a1f44a92
|
|
BLAKE2b-256 checksum How to use checksums |
cc94ad6368825f586e164804959d9accd6ee6db6e73819ec0e67d8758d7a2fe8
|
| 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 Jul 14, 2026.
Transparency log