In Crawlee 3.14, ProxyConfiguration can pair a session identifier with a selected proxy URL:

import { ProxyConfiguration } from 'crawlee';

const proxies = new ProxyConfiguration({
  proxyUrls: [
    'http://proxy-a.example:8080',
    'http://proxy-b.example:8080',
  ],
});
const first = await proxies.newUrl('checkout-a');
const sameRoute = await proxies.newUrl('checkout-a');
const anotherSession = await proxies.newUrl('checkout-b');

The HTTP proxy list supplies public candidates for proxyUrls. Repeated calls with the same session ID return its paired URL. With no session ID, the supplied list rotates round-robin. This selects a configured endpoint; an upstream service that rotates exits behind one URL still controls its own exit behavior.

For crawler-managed sessions, use the crawler's session pool and cookie-persistence arrangement. Lowering maxConcurrency to one is not a substitute for defining which requests belong to the same session.

Retiring a session creates a new identity boundary. Keep its route, cookies and workload state consistent instead of rotating only one field during a login or multi-step operation.

The major version matters. Crawlee's v4 migration documentation removes the sessionId argument from newUrl and moves proxy pairing into Session ownership. The example above intentionally uses the v3 interface; do not copy its argument into another major version without adapting that lifecycle.

Ũhoro ũhĩtĩte