Residential Proxies for Web Scraping
PreProx provides rotating and sticky residential proxies for authorized web scraping and public-data collection. Choose country, state, city, ZIP code, and ASN targeting from current inventory, with HTTP/S and SOCKS5 connection options.
Plan Your Data Collection Workflow
Start with a small authorized sample. Measure response times, error rates, and data usage before increasing your request volume.
Controlled Concurrency
Increase parallel requests gradually within your account capacity and each destination's limits. Use measured responses to choose a sustainable request rate.
Measured Response Times
Latency varies with the residential peer, selected location, destination, and network conditions. Set timeouts and monitor your own request timings.
Observable Request Results
Measure response codes, timeouts, and retry behavior in your own authorized workflow instead of relying on a universal success-rate claim.
package main
import (
"fmt"
"log"
"net"
"net/http"
"net/url"
"os"
"time"
)
func main() {
if err := check(); err != nil {
log.Fatal(err)
}
}
func check() error {
host := os.Getenv("PREPROX_PROXY_HOST")
port := os.Getenv("PREPROX_PROXY_PORT")
username := os.Getenv("PREPROX_PROXY_USERNAME")
password := os.Getenv("PREPROX_PROXY_PASSWORD")
if host == "" || port == "" || username == "" || password == "" {
return fmt.Errorf("set the four PREPROX_PROXY_* variables")
}
proxyURL := &url.URL{
Scheme: "http", Host: net.JoinHostPort(host, port),
User: url.UserPassword(username, password),
}
transport := &http.Transport{Proxy: http.ProxyURL(proxyURL)}
defer transport.CloseIdleConnections()
client := &http.Client{Transport: transport, Timeout: 30 * time.Second}
target := os.Getenv("TARGET_URL")
if target == "" {
target = "https://example.com/"
}
resp, err := client.Get(target)
if err != nil {
return fmt.Errorf("request failed; check the endpoint and target")
}
defer resp.Body.Close()
fmt.Printf("HTTP %d\n", resp.StatusCode)
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
return fmt.Errorf("target returned HTTP %d", resp.StatusCode)
}
return nil
}
Use Your Dashboard Connection Settings
Configure location, rotation, and sticky sessions in the dashboard, then use its generated host, port, username, and complete password. Choose timed rotation in whole-minute intervals from 1 to 120 minutes, or sticky mode with no scheduled rotation. A sticky IP can still change if its residential peer disconnects or the targeting changes.
For this Go example, select an HTTP-capable endpoint and set PREPROX_PROXY_HOST, PREPROX_PROXY_PORT, PREPROX_PROXY_USERNAME, and PREPROX_PROXY_PASSWORD. Copy the complete generated username and password without removing targeting parameters. Set TARGET_URL to a permitted URL, or leave it unset to check https://example.com/.
- Dashboard-configured rotation
- Sticky sessions without scheduled rotation
- Country, state, city, ZIP code, and ASN options where available
- SOCKS5 Support for Advanced Scrapers
Data Scraping FAQ
Ready to Scale Your Scraping?
Test the locations and session settings your collection workflow needs, then expand based on measured results.