El sitio no ve tu portátil
Ve la IP de salida. Cambias la salida, cambia la página — precios, SERP, locator, paywall.
Cada dispositivo en internet tiene una dirección. Buscadores, tiendas, anuncios y medios la usan para decidir qué ves — moneda, idioma, rankings, incluso si la página carga. Un agente en un datacenter tiene una sola dirección: ese datacenter. Sin una salida local, cada fetch parece salir del mismo edificio.
Pides un país o una ciudad. IP Router elige una salida ahí, manda la petición por esa IP y te devuelve la página. El mismo cerebro para un agente JSON y un browser de verdad.
Ve la IP de salida. Cambias la salida, cambia la página — precios, SERP, locator, paywall.
cc-JP te pone en una IP japonesa. lang-ja le dice al sitio que lees japonés. Casi siempre quieres ambos.
Logins, carritos y cookies mueren si la IP cambia a mitad. Un sessid te clava a una salida hasta que caduca.
Los agentes hacen POST JSON a /api/v1/fetch. Browsers y curl hablan CONNECT en :7777. Ambos llaman selectRoute.
Elige la puerta según cómo habla tu cliente. El targeting es el mismo en las dos.
Úsala cuando tu cliente envía JSON: una tool de LLM, un script, un nodo de n8n, el playground.
POST /api/v1/fetch con una clave Bearer. Pon el país, la ciudad, el idioma y la sesión en el body. La respuesta incluye la página, el geo de la salida y route.reason, para que veas por qué se eligió ese hop.
Pide una URL y devuelve el body. No hace clic, no rellena formularios ni guarda el cookie jar de un navegador de verdad. Para un checkout en un navegador real, usa el gateway.
Úsala cuando el cliente ya habla proxy HTTP: curl -x, Playwright, Chrome, un scraper que espera CONNECT.
Apunta el proxy a host:7777. El username es iprouter-{keyId}-cc-GB-city-london-sessid-job1. La contraseña es la clave API. Los mismos tokens de targeting que el body del fetch, solo que en el username.
CONNECT no puede reescribir headers HTTPS. Si necesitas Accept-Language en un sitio TLS, tiene que enviarlo el navegador (o la Fetch API). lang- en el username es una pista para el enrutado y para HTTP, no una inyección mágica de HTTPS.
| Si eres | Usa |
|---|---|
| Agente JSON / tool de LLM | Fetch API |
| Playground / probar una URL | Fetch API |
| curl, Playwright, un navegador de verdad | Gateway :7777 |
| Login y luego rastrear la misma sesión | Cualquiera de las dos, más un sessid |
Una salida es el punto por donde la petición sale a internet, tal como lo ve el sitio. Necesitas al menos una que no sea “esta máquina” para que las páginas geo cambien.
Viene con el nodo. Las peticiones responden al momento para que el playground funcione. route.reason dirá “direct” o “direct fallback (no geo node)”. El sitio sigue viendo la IP de tu host.
Consola → Pool de proxies. Cada nodo tiene un país, una ciudad opcional y un tipo. Pides Londres; gana un nodo de pool de Londres. Pides GB sin ciudad; gana cualquier nodo de GB.
Añades un solo gateway. IP Router inyecta el targeting en el username (-cc-DE-city-berlin-sessid-s1). Úsalo cuando compras ancho de banda a un proveedor en vez de listar cada IP.
Monta teléfonos Android, etiqueta el sitio con un país y una ciudad, y fija cuántas conexiones están en vivo. Los agentes salen por esa última milla. Se factura por conexión al mes. Una prueba de 14 días cubre el primer teléfono.
Cuando nombras un país, el router prueba en este orden: city pool match → country pool match → backconnect geo injection → direct fallback. Si no hay ningún proxy activado, es un 422, no un fallo en silencio.
Hazlo una vez para que el resto de la guía no sea abstracto. Cinco minutos. Aún no necesitas una salida de pago.
Landing → Abrir consola. En local no hay registro. Caes en Resumen.
El playground viene rellenado con el echo local. Elige un país (US vale). Deja la sesión en agent-demo. Envía. Echo siempre te devuelve un 200 — esto prueba la puerta, no el geo.
ok debería ser true. route.reason te dice qué salida se eligió. geo.exit es la IP que vería el exterior — vacía, o la de tu máquina si es direct.
Añade un nodo de pool o de backconnect en Pool de proxies, o una IP farm en una ciudad que te importe. Envía otra vez. reason ya no debería decir “direct fallback”.
Claves API para la Fetch API. Endpoints monta el username del gateway. Agentes tiene el schema de la tool de LLM. El mismo targeting, tres pieles.
Los mismos mandos cada vez: país, ciudad, idioma, sticky, type. El trabajo solo cambia cuáles giras y por qué puerta entras. Elige una fila.
Google (y Bing, y maps) no muestran un solo internet. Muestran el internet desde donde estás. Rankings, local pack, anuncios, hasta la ortografía — todo depende de la IP de salida y del idioma. Si tu agente fetcha desde un datacenter US, estás midiendo una página US aunque preguntes “¿cómo se ve en Manchester?”
Te sale el SERP del país del host. Una consulta de Londres desde una VM de Virginia sigue siendo una página de Virginia con un query string con forma de Londres.
cc-GB + city-london + lang-en_GB. El hop sale por una salida del Reino Unido, Accept-Language es inglés británico, y la página es la que vería un visitante de Londres.
Cualquier puerta. Fetch si el agente manda JSON; gateway si el cliente habla CONNECT.
{
"url": "https://www.google.com/search?q=best+coffee+near+me",
"geo": { "country": "GB", "city": "London", "language": "en-GB" },
"session": "serp-london"
}curl -x http://iprouter-key_dev-cc-GB-city-london-lang-en_GB-sessid-serp-london:ipr_live_dev_key@127.0.0.1:7777 https://www.google.com/search?q=best+coffee+near+me
route.reason es un acierto geo, geo.exit no es tu host, y el pack local nombra negocios de Londres — no los de al lado de tu servidor.
Una IP de Japón con un Accept-Language en inglés a menudo sigue sirviendo inglés. Pon lang (o language en el body del fetch) además de cc.
Si la cadena de sesión cambia, eres otra persona. Los logins se caen. Reutiliza el mismo sessid en todo el trabajo.
Un 200 del echo en esta máquina no demuestra el geo. Lee route.reason. Si dice direct fallback, el sitio siguió viendo tu host.
Algunos orígenes hacen fingerprint del ASN. Si la página es un muro de captcha o una página en blanco de “datacenter detected”, pon type-residential o usa una IP farm.
El gateway no puede inyectar Accept-Language en un túnel CONNECT de HTTPS. Envía el header desde el cliente, o usa la Fetch API.
Si todos los nodos están desactivados, recibes un 422 “No enabled proxies in the pool.” Activa el nodo direct o añade uno que esté encendido.