langchain-proxmint
LangChain integration for Proxmint proxies: let an agent read web pages from residential, datacenter or 4G/5G mobile IPs, or load pages into Documents the same way. Pick the exit country, state, city, ZIP or ASN, and keep one IP for up to two hours when a site needs it.
ProxmintFetchTool: an agent tool. The agent passes a URL and, optionally, a country, and gets back the final URL, status, title and the page as readable text.ProxmintLoader: a document loader that fetches a list of URLs intoDocuments.
Requests go straight from your machine to the Proxmint gateway (gw.proxmint.com). Nothing else sits in
between, and bandwidth comes out of your own Proxmint account.
Install
pip install langchain-proxmint
Credentials
Create an API key under Settings in the Proxmint dashboard and export it:
export PROXMINT_API_KEY="pmk_..."
The key reads the proxy login for the product you choose (residential by default). You can pass the proxy
login instead, with PROXMINT_USERNAME and PROXMINT_PASSWORD or the username / password arguments.
Use the tool in an agent
from langchain.agents import create_agent
from langchain_proxmint import ProxmintFetchTool
tool = ProxmintFetchTool(product="residential")
agent = create_agent("anthropic:claude-sonnet-5-5", tools=[tool])
agent.invoke({"messages": [{"role": "user", "content": "What does the front page of example.com say when visited from Germany?"}]})
Or call it directly:
print(tool.invoke({"url": "https://example.com", "country": "de"}))
Options on ProxmintFetchTool:
| Option | Default | What it does |
|---|---|---|
product |
"residential" |
residential, premium-residential, datacenter or mobile |
country |
any | Default exit country (two-letter code) when a call doesn't name one |
state, city, zip_code, asn |
none | Finer targeting; needs country |
session_minutes |
none | Keep one exit IP across calls for 1 to 120 minutes. Default: a new IP on every call |
output |
"text" |
"text" for readable text, "html" for the raw page |
max_chars |
50000 |
Cut longer pages |
timeout |
60 |
Seconds per request |
Gateway refusals (no bandwidth left, no IP matching the targeting, a blocked site) come back to the agent as a short message saying what to change, instead of an exception.
Load pages into Documents
from langchain_proxmint import ProxmintLoader
loader = ProxmintLoader(
["https://example.com", "https://example.org"],
country="us",
city="New York",
session_minutes=30, # every page from one IP
)
docs = loader.load()
print(docs[0].metadata) # source, requested_url, status, title, content_type, country
Each URL gets a new IP unless session_minutes is set. Failed URLs are logged and skipped; pass
continue_on_failure=False to raise instead.
Good to know
- Web traffic works on destination ports 80, 443, 8080, 8443, 8888 and 8090 (port access).
- A short list of sites, mostly banking and government, is refused by the network (blocked websites).
- City, state, ZIP and ASN targeting meter at 2x on residential, datacenter and mobile (targeting).
- Each product allows up to 2,000 concurrent connections.
Full guide: proxmint.com/docs/langchain. Pricing: proxmint.com/pricing. Bandwidth is billed per GB and never expires.
Development
uv run --group test pytest
The tests run offline against a stand-in for the gateway.
License
MIT
Metadata
Release files for langchain-proxmint 0.1.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 | |
|---|---|---|---|
| langchain_proxmint-0.1.0.tar.gz | 11.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| langchain_proxmint-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.2 kB
Release files / langchain_proxmint-0.1.0.tar.gz
| Download URL | langchain_proxmint-0.1.0.tar.gz |
|---|---|
| Size | 11.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7f541931d2124ddc2a2dc615e028fe625812fd13013eb9ccef7a304d44e1d653
|
|
BLAKE2b-256 checksum How to use checksums |
d71274a7153eef57a07d5c006d40257a78c46770b50755628f9de475ba3c8b5b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / langchain_proxmint-0.1.0-py3-none-any.whl
| Download URL | langchain_proxmint-0.1.0-py3-none-any.whl |
|---|---|
| Size | 11.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
3a204cdb09ae8c022aa8d9de06db019b0f5e78fc2bb9992278a88446fa28e063
|
|
BLAKE2b-256 checksum How to use checksums |
d5b3bbf140aba551d4d6156922467e056350252601a7fa78f53faf2791d98531
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.1 {"installer":{"name":"uv","version":"0.13.1","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|