1 GB
$3.80/ GB
$3.80one-time purchase
Collect web data, monitor prices and run browser automation through residential IPs. Choose your country, rotate between tasks or keep a sticky session.


Buy residential proxy bandwidth in one-time packages. Top up when you need more, with no monthly commitment.
$3.80/ GB
$3.80one-time purchase
$3.50/ GB
$17.50one-time purchase
$3.00/ GB
$60.00one-time purchase
$2.50/ GB
$250.00one-time purchase
$2.00/ GB
$400.00one-time purchase
$1.60/ GB
$480.00one-time purchase
$1.30/ GB
$650.00one-time purchase
$1.00/ GB
$1,000.00one-time purchase
Lowest rateUpload and download count toward bandwidth. Proxy GB and HasData API credits are separate balances.
Collect local prices, search results and public pages from the markets that matter to your project.
Choose a country and collect the prices, listings and pages shown in that market.
Run multiple scrapers and browser sessions at once. Your bandwidth package does not limit concurrent connections.
Use HTTP or SOCKS5 proxy authentication with your own scripts and browsers. HTTP CONNECT supports HTTPS destinations.
Create separate connections for your projects while sharing the residential bandwidth balance within your workspace.
Check usage by connection in the app. Keep research jobs, production collectors and testing traffic easy to distinguish.
Buy another package as your workload grows. Optional low-balance alerts and automatic top-ups are available in the app.
A new connection can use a different residential IP. Run independent collection jobs without carrying one session between them.
Reuse the same session ID across connections to keep your exit IP while your browser or script follows a sequence of pages.
Route scraping requests through residential IPs without rebuilding your collectors.
Collect public product pages from the country relevant to your market. Use rotating connections across independent collection tasks.
Collect search results through IPs in the country you track. Feed the pages into your own rank-monitoring workflow.
Connect your browser tooling through the gateway. Use sticky sessions for workflows that need IP continuity across connections.
Copy a connection URL from the app into your existing script, scraper or browser tool.
Before running an example, set HASDATA_PROXY_URL to the HTTP connection URL copied from the app.
python -m pip install requests
import os
import requests
proxy_url = os.environ["HASDATA_PROXY_URL"]
if not proxy_url:
raise ValueError("Set HASDATA_PROXY_URL")
response = requests.get(
"https://httpbin.org/ip",
proxies={"https": proxy_url},
timeout=30,
)
response.raise_for_status()
print(response.text)Python proxy guide npm install axios https-proxy-agent
import axios from "axios";
import { HttpsProxyAgent } from "https-proxy-agent";
const response = await axios.get("https://httpbin.org/ip", {
httpsAgent: new HttpsProxyAgent(process.env.HASDATA_PROXY_URL),
proxy: false,
timeout: 30_000,
});
console.log(response.data);HTTPS proxy agent curl --fail --silent --show-error --max-time 30 \
--noproxy "" \
--proxy "${HASDATA_PROXY_URL:?Set HASDATA_PROXY_URL}" \
https://httpbin.org/ipcURL proxy guide PHP 8+ with cURL
<?php
$proxy = getenv('HASDATA_PROXY_URL') ?: throw new RuntimeException('Set HASDATA_PROXY_URL');
$ch = curl_init('https://httpbin.org/ip');
curl_setopt_array($ch, [
CURLOPT_PROXY => $proxy,
CURLOPT_NOPROXY => '',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_FAILONERROR => true,
CURLOPT_TIMEOUT => 30,
]);
$body = curl_exec($ch);
if ($body === false) {
throw new RuntimeException(curl_error($ch));
}
echo $body;
curl_close($ch);PHP cURL options Standard library
package main
import (
"io"
"net/http"
"net/url"
"os"
"time"
)
func main() {
proxy, err := url.Parse(os.Getenv("HASDATA_PROXY_URL"))
if err != nil { panic(err) }
if proxy.Scheme != "http" || proxy.Host == "" { panic("Set HASDATA_PROXY_URL to an HTTP proxy URL") }
transport := http.DefaultTransport.(*http.Transport).Clone()
transport.Proxy = http.ProxyURL(proxy)
client := &http.Client{Transport: transport, Timeout: 30 * time.Second}
response, err := client.Get("https://httpbin.org/ip")
if err != nil { panic(err) }
defer response.Body.Close()
if response.StatusCode != http.StatusOK { panic(response.Status) }
if _, err := io.Copy(os.Stdout, response.Body); err != nil { panic(err) }
}Go HTTP proxy support org.apache.httpcomponents.client5:httpclient5
import java.net.URI;
import org.apache.hc.client5.http.auth.*;
import org.apache.hc.client5.http.classic.methods.HttpGet;
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
import org.apache.hc.client5.http.impl.classic.*;
import org.apache.hc.core5.http.HttpHost;
public class ProxyCheck {
public static void main(String[] args) throws Exception {
URI uri = URI.create(System.getenv("HASDATA_PROXY_URL"));
HttpHost proxy = new HttpHost(uri.getScheme(), uri.getHost(), uri.getPort());
var credentials = new BasicCredentialsProvider();
if (uri.getUserInfo() != null) {
String[] auth = uri.getUserInfo().split(":", 2);
credentials.setCredentials(new AuthScope(proxy),
new UsernamePasswordCredentials(auth[0], auth.length > 1 ? auth[1].toCharArray() : new char[0]));
}
try (var client = HttpClients.custom().setProxy(proxy)
.setDefaultCredentialsProvider(credentials).build()) {
System.out.println(client.execute(new HttpGet("https://httpbin.org/ip"),
new BasicHttpClientResponseHandler()));
}
}
}Apache proxy authentication .NET 8+
using System.Net;
var uri = new Uri(Environment.GetEnvironmentVariable("HASDATA_PROXY_URL")
?? throw new InvalidOperationException("Set HASDATA_PROXY_URL"));
var proxy = new WebProxy(uri);
if (uri.UserInfo.Length > 0)
{
var auth = uri.UserInfo.Split(':', 2);
proxy.Credentials = new NetworkCredential(
Uri.UnescapeDataString(auth[0]),
auth.Length > 1 ? Uri.UnescapeDataString(auth[1]) : "");
}
using var handler = new HttpClientHandler { Proxy = proxy, UseProxy = true };
using var client = new HttpClient(handler) { Timeout = TimeSpan.FromSeconds(30) };
Console.WriteLine(await client.GetStringAsync("https://httpbin.org/ip"));.NET proxy credentials Standard library
require "net/http"
require "uri"
proxy = URI(ENV.fetch("HASDATA_PROXY_URL"))
raise "Set HASDATA_PROXY_URL to an HTTP proxy URL" unless proxy.scheme == "http" && proxy.host
target = URI("https://httpbin.org/ip")
decode = ->(value) { value && URI::DEFAULT_PARSER.unescape(value) }
response = Net::HTTP.start(
target.host, target.port, proxy.host, proxy.port,
decode.call(proxy.user), decode.call(proxy.password),
use_ssl: true, open_timeout: 30, read_timeout: 30
) { |http| http.get(target.request_uri) }
response.value
puts response.bodyRuby HTTP proxy support Choose a package for your project.
Choose the country and IP mode.
Copy the generated settings.
Residential proxies route requests through IP addresses assigned by internet service providers (ISPs) to household connections. The destination sees the residential exit IP instead of your direct connection.
Rotating mode selects an exit when a new connection opens. An existing connection keeps its exit. Sticky mode uses a session ID to reuse an exit across connections while that session remains active. A sticky session is not a permanent static IP reservation.
Sticky sessions last 30 minutes. Reuse the same session ID to keep the exit IP across connections during that session.
Yes. Choose a country in the connection generator. Targeting is at country level. The gateway needs an available route for the selected country.
The gateway supports HTTP proxying, CONNECT tunnels for HTTPS destinations, and SOCKS5. Connections use a username and password. Supported destination ports are 80 and 443.
Your bandwidth package does not impose a concurrency limit. You can run parallel connections across your projects.
The smallest package is 1 GB for $3.80. Larger packages have lower prices per GB. The table above shows the full one-time purchase price and the price per GB for every package.
No monthly subscription is required. Bandwidth packages are one-time purchases. You can choose to enable automatic top-ups in the app, or buy another package yourself when you need it.
Bandwidth is valid for 12 months from your last top-up. A top-up before expiry adds bandwidth and extends the validity of your remaining balance.
Traffic transferred in both directions counts toward your balance, including data transferred by requests that later fail. A connection that never establishes does not consume bandwidth. A GB is 1,000,000,000 bytes.
Residential proxy bandwidth is purchased separately from API credits. Proxy purchases add GB to the residential balance in your workspace.
Yes. Connections have separate credentials and usage reporting while sharing the residential product balance in your workspace.
1 GB for $3.80. No monthly subscription.
Get residential proxies