Pick the region first
Surfsky runs in two regions, Germany and the United States. Choose the one closest to your automation worker in the dashboard. Each region has its own API base URL; use the one shown for your account. Network latency between the worker and browser adds to the time needed for each CDP command. The region applies to the whole account and can be changed at most once every 24 hours, with no browsers running. Choose the proxy location separately, based on the location required by your task. A browser in Germany can use a US proxy.Reduce command round trips
Collect several values in one page evaluation when they belong to the same read operation. With Playwright, for example:Wait for the content you need
Navigate withdomcontentloaded, then wait for a selector or response that shows the required content is ready:
load when the job needs later resources, such as a screenshot of the complete page. Avoid networkidle on pages with continuous background requests. A short fixed delay can appear fast while returning incomplete data.
If the page loads the required data from a JSON response, capture that response before doing additional DOM queries.
Block unneeded resources
For text extraction, test whether you can omit images, fonts, or media. In the Python SDK:Reuse state where it helps
A persistent profile can avoid repeated logins when its saved state is still valid. Enable the storage types the site needs, and use the default context when reconnecting. A shared cache can reduce repeated downloads across sessions. Measure a warm run and keep cache keys separate for workloads that need independent cache state. Reuse a browser for multiple related pages when the jobs can safely share cookies and storage. This saves startup work, but it also carries state from one job to the next.Scale with a bounded pool
Use the SDK pool with an explicit concurrency setting. Increase it gradually and measure completed results per minute alongside target-site failures and traffic per result. Start the next browser while the current job finishes so startup overlaps with work instead of adding to it. More workers stop helping when browser capacity, API rate limits, proxy throughput, or the target site becomes the bottleneck. See limits for the signals to monitor.Close what you open
Stop the browser when the job ends, including error paths. Chooseinactive_kill_timeout to allow legitimate pauses, and investigate sessions left running after a worker exits.
For long-running pools, retire a browser after a job leaves unexpected state or repeated failures. Do not recycle on an arbitrary schedule without checking whether it improves the workload.
If command round trips dominate after reducing unnecessary calls, move your worker closer to the browser or switch the region. Keep the same proxy and target URLs so the measurement isolates that change.