Google SERP Scraping Proxies With Country and City Targeting
Quick answer
Google SERP scraping needs residential proxies with precise geo-targeting. Google personalises rankings, local packs, ads and shopping units by the searcher's country and city, and it rate-limits automated queries per IP aggressively. Residential IPs from the market you track return the page a real local user sees, and rotating them per query keeps the limit from stalling the job. If you want parsed rankings instead of HTML, the Scraper API's Google target returns JSON.
Why Google SERP scraping breaks without the right proxies
Google answers repeated queries from one IP with an HTTP 429 or a redirect to a CAPTCHA page, and the tolerance for cloud ranges is lower still. A scraper on a few datacenter addresses can be fully stalled within minutes, with every retry from the same IP extending the block rather than clearing it.
Localisation is the second problem. Rankings for a commercial query differ between the United States and Germany, and between Austin and Seattle. Local packs, "near me" results, shopping units and ad slots all depend on where the request exits. Data gathered from the wrong location is not noisy; it is a different dataset.
Consent and session state is the third. Google sets cookies on the first visit and may show a consent interstitial in some regions. Rotate the IP between consent and query, and you are bounced back to the interstitial.
Which Geonode proxy type fits
For Google SERP scraping the recommended product is Residential Proxies. With 2.5M IPs online and 30 to 50M unique IPs rotating monthly across 195+ countries, you can issue every query from a fresh consumer IP in the exact country, state or city you are tracking. Sticky sessions up to 24 hours hold one IP through consent handling and pagination when a query needs more than one request.
ISP proxies fit a fixed set of static IPs for monitoring a small keyword list over days. Datacenter proxies are not recommended for querying Google directly because of reputation scoring; keep them for fetching the ranked landing pages.
The alternative to running your own SERP scraper is the Scraper API. Its Google target, also available in the Unlimited Scraper, returns results as structured JSON, handles JavaScript rendering, and routes through the residential network for you.
- Residential — Best for: Country and city-targeted SERP collection; IP source: Real user devices, 195+ countries; Session: Rotating or sticky up to 24 h; Price from: $0.27/GB at volume
- ISP (static residential) — Best for: Fixed-IP monitoring of a small keyword set; IP source: Static IPs from real ISPs; Session: Unlimited, static; Price from: $1.25/IP
- Datacenter — Best for: Fetching ranked landing pages, not SERPs; IP source: Rotating datacenter ranges; Session: Rotating; Price from: $0.14/GB
How to set it up
- Create an account, open Residential and copy your credentials. List the countries and cities your rank tracking covers, because each query will carry its own targeting suffix.
- Build the username per query:
-country-usfor national results,-country-us-city-austinfor local results. State and city cannot be combined, so pick one level. - Use rotating sessions for single-page queries. Add
-session-<id>when you need to handle a consent interstitial first or walk several result pages for one keyword. - Send
hlandglparameters and an Accept-Language header that match the exit country. Parse organic results, local pack and ads separately so later layout changes break one parser, not all. - Detect CAPTCHA and consent markers in the body, retry on a new IP with back-off, and log keyword, location, exit IP, status and result count per request.
# verify endpoint against docs.geonode.com before publishing
import requests, uuid
PASS = "PASSWORD"
HOST = "premium-residential.geonode.com:9000"
def serp_proxy(country, city=None, sticky=False):
user = f"USERNAME-country-{country}"
if city:
user += f"-city-{city}"
if sticky:
user += f"-session-{uuid.uuid4().hex[:8]}"
return f"http://{user}:{PASS}@{HOST}"
proxy = serp_proxy("us", city="austin")
r = requests.get(
"https://www.google.com/search",
params={"q": "residential proxies", "hl": "en", "gl": "us", "num": 10},
headers={"Accept-Language": "en-US,en;q=0.9"},
proxies={"http": proxy, "https": proxy},
timeout=30,
)
print(r.status_code, "unusual traffic" in r.text)
Get the exact snippet for your language from the API Code Generator in the dashboard.
Google SERP scraping-specific settings that matter
Location precision
Use country targeting for national rank tracking and city targeting only for keywords with local intent, since narrower targeting draws from a smaller pool. Keep gl, hl, Accept-Language and the proxy country consistent; a mismatch is the most common cause of consent pages and mixed-language results.
Rotating for queries, sticky for pagination
Issue each keyword from a fresh IP so no single address accumulates a query history. Switch to a sticky session only when one keyword needs several requests, such as a consent round-trip followed by two result pages. Drop the session when the keyword is done.
Pacing and concurrency
There is no thread limit on the proxy side, so the pace is set by Google's per-IP tolerance and your pool diversity in each market. Track the CAPTCHA rate per country and slow only where it rises. Running more countries in parallel is usually faster than pushing one harder.
What to log
Store keyword, location, device, exit IP, status code, response size and the count of organic results per request. A sudden drop in result count or response size with a 200 status is the earliest sign of a consent or CAPTCHA page, long before error rates move.
What Geonode gives you for Google SERP scraping
- Residential IPs in 195+ countries with country, state and city targeting.
- 2.5M IPs online and 30 to 50M unique IPs rotating monthly.
- Sticky sessions up to 24 hours for consent handling and pagination.
- Scraper API Google target returning structured JSON rankings.
- No fixed thread limit, 24/7 support, pay-as-you-go billing.
Pricing for Google SERP scraping
Residential proxies are pay-as-you-go with no contract: 10 GB for $7.92 per month, 50 GB for $34.65, and from $0.27/GB at volume, with a 3-day trial for $5. If you prefer parsed results, Scraper API gives 1.5K free requests per month and starts at $3.50 per 10K requests, with monthly plans from $47. ISP proxies start at $1.25 per IP and datacenter at $0.14/GB. Compare options on the pricing page.
FAQ
What proxies are best for Google SERP scraping?
Rotating residential proxies targeted to the country or city you track. They exit from consumer connections with normal reputation and return the localised page a real searcher sees. Datacenter ranges are scored by Google before the first query and stall quickly.
Can I scrape Google results for a specific city?
Yes. Add -city-name with the country to the username and Google receives the request from an IP in that city where available. Pair it with matching gl, hl and Accept-Language values so the local pack and language reflect that location.
How much bandwidth does SERP collection use?
Search result pages are relatively light compared with retail or media pages, but exact usage depends on how many results per page you request and whether you render JavaScript. Log response size during a pilot across your keyword list and extrapolate before choosing a package.
Should I use the Scraper API instead of proxies?
Use the Scraper API Google target when you want rankings as JSON and do not want to maintain a parser, handle consent pages or manage retries. Use residential proxies when you need a custom browser flow or full control over headers and pagination.
Is Google SERP scraping compliant?
Respect Google's terms of service and rate limits, keep request rates reasonable, and collect only publicly visible results. Use accounts only when you own them or have authorisation to manage them. Geonode's acceptable use policy prohibits fraud, spam and credential abuse, and we enforce it.
Do I need mobile proxies for mobile SERPs?
No. Geonode does not sell mobile proxies. Mobile SERP layout is driven by the user agent, not the IP type, so send a mobile user agent through a residential proxy. The IP still carries a consumer reputation, which is what matters for the request.
Start
Pick ten keywords across two countries and run them through the snippet. Get started with a 3-day trial, or Contact sales for large keyword sets or the Scraper API at scale.
Related: Search engine crawling · SEO · SEO strategy refinement