Food delivery scraping proxies for city-level menu and price data
Quick answer
Food delivery scraping proxies need to be residential and city-targeted. Delivery apps build the menu, price and fee you see from the delivery address and the IP that loads the page, so a datacenter IP in another region returns a different catalogue or none at all. Geonode residential proxies offer city targeting across 195+ countries with sticky sessions, so each run sees what a local customer sees.
Why food delivery data collection breaks without the right proxies
Delivery platforms are location-first. Before showing a restaurant they resolve a delivery zone, and the IP's geolocation is one of the signals that sets it. Load a page from a datacenter range in another state and you get a "not available in your area" screen or the wrong city's catalogue.
The second problem is request volume. Menu pages, fee quotes and availability checks are served from APIs that apply aggressive per-IP rate limiting. After a short burst you start receiving HTTP 429 responses, empty JSON payloads or a CAPTCHA interstitial, often without any explicit error.
The third problem is session consistency. A delivery quote depends on the address and the session cookie that stores it. If the IP changes mid-session, the platform may reset the address, drop the basket or shadow-limit the client with stale cached data. You need an IP that stays in one city for a whole run, then rotates cleanly for the next.
Which Geonode proxy type fits
For this task the recommended product is Residential proxies. The pool has 2.5M IPs online and 30–50M unique IPs rotating monthly, with country, state and city targeting (state and city cannot be combined in one request). That is what lets you collect the Chicago catalogue from a Chicago IP and the Austin catalogue from an Austin IP without any difference in method.
Sticky sessions hold the same IP for up to 24 hours, which covers a full pass over one city's restaurants, including fee quotes that need a persistent address cookie. Drop the session parameter for per-request rotation.
ISP proxies are a fair alternative when you track a small, fixed set of cities and want the same IP every day. They start at $1.25 per IP with unlimited bandwidth, with the location chosen at purchase.
Datacenter proxies at $0.14/GB suit only location-independent pages such as help documentation.
- Residential — Best for: City-level menus, prices, fees, availability; IP source: Real household devices, 195+ countries; Session: Rotating or sticky up to 24 h; Price from: $0.27/GB at volume
- ISP (static residential) — Best for: Fixed city list on a daily schedule; IP source: Static IPs from real ISPs; Session: Unlimited, same IP; Price from: $1.25/IP
- Datacenter — Best for: Non-geo pages, documentation, static profiles; IP source: Rotating datacenter ranges; Session: Rotating; Price from: $0.14/GB
How to set it up
- Define the city list and, for each city, one or more delivery addresses inside the platform's active delivery zone. Store them alongside the target restaurant URLs.
- Create residential credentials in the Geonode dashboard and build a username per city with the country and city targeting suffix plus a session id for sticky runs.
- Open each city run by setting the delivery address first, then crawl restaurant pages and menu endpoints with the same session so the address cookie persists.
- Parse menu items, prices, delivery fees, service fees, minimum order and estimated delivery time into a normalised schema with city, platform and timestamp.
- Rotate the session id between cities, retry 429 and empty responses with back-off, and log the IP's resolved city against the catalogue you received.
# verify endpoint against docs.geonode.com before publishing
import requests
USER = "USERNAME-country-us-city-chicago-session-chi01"
PASS = "PASSWORD"
proxy = f"http://{USER}:{PASS}@premium-residential.geonode.com:9000"
proxies = {"http": proxy, "https": proxy}
r = requests.get(
"https://example-delivery.com/city/chicago/restaurants",
proxies=proxies,
headers={"Accept-Language": "en-US"},
timeout=30,
)
print(r.status_code, len(r.text))
Get the exact snippet for your language from the API Code Generator in the dashboard.
Food delivery-specific settings that matter
City targeting, not just country
A country-level IP often lands in the largest metro, which skews every menu and fee toward one market. Target the city explicitly and verify the resolved location from the platform's zone response. Fall back to state targeting for small cities where inventory is thin.
Sticky sessions per city run
Set one session id per city and keep it for the whole pass. Delivery fees and availability are computed from the address stored in the session, so changing IP halfway through mixes two catalogues. Start a fresh session id for the next city, or the next scheduled run, so IPs do not carry stale cookies.
Concurrency and back-off
Geonode sets no fixed thread limit, but delivery platforms apply strict per-IP limits. Spread concurrency across many sessions rather than many threads on one session, and back off exponentially on HTTP 429, CAPTCHA pages and suspiciously short JSON. Cap retries and move on, so one problematic restaurant does not stall the whole city.
What to log
For every request store the session id, target city, resolved city reported by the platform, response status, byte size, local time slot and whether a CAPTCHA appeared. These fields separate proxy issues from parser issues.
What Geonode gives you for food delivery data
- City, state and country targeting across 195+ countries for local catalogue coverage.
- Sticky sessions up to 24 hours to keep one delivery address per run.
- 2.5M residential IPs online with 30–50M unique IPs rotating monthly.
- HTTP, HTTPS, SOCKS5 and UDP support for any crawler stack.
- Scraper API with JavaScript rendering for app-style menu pages, free 1.5K requests per month.
Pricing for food delivery data
Residential traffic is pay-as-you-go with no contract. Entry is 10 GB for $7.92 per month ($0.792/GB), 50 GB is $34.65, and at volume the rate falls to $0.27/GB. A 3-day trial costs $5, enough to validate one city's catalogue end to end. ISP proxies start at $1.25 per IP with unlimited bandwidth, and rotating datacenter traffic starts at $0.14/GB for non-geo pages. Full plan details are on the pricing page.
FAQ
Do I need city-level food delivery scraping proxies, or is country targeting enough?
Country targeting usually resolves to one large metro, so menus, fees and availability for other cities are wrong or missing. Use city targeting for every market you track, and fall back to state targeting only for small towns with limited residential inventory.
How many IPs do I need to cover one city?
It depends on how many restaurants and how often you poll. Rotation gives you access to the full pool, so you do not reserve IPs. Use one sticky session per city run and spread concurrent runs across separate session ids rather than counting IPs.
Can food delivery scraping proxies keep the same delivery address across a session?
Yes. A sticky session holds the same residential IP for up to 24 hours, so the address cookie set at the start of a run persists. The IP may change earlier if the device goes offline, so log the session and re-set the address if it does.
Should I use the Scraper API instead of raw proxies?
If menu pages render client-side, the Scraper API handles JavaScript rendering and returns HTML, Markdown or JSON, with a free tier of 1.5K requests per month. Many teams combine both: Scraper API for rendered pages and residential proxies for direct JSON endpoints.
Is collecting food delivery data allowed?
Collect only publicly visible menus, prices and availability, respect each platform's terms and rate limits, and never log into or automate accounts you do not own or manage with authorisation. Geonode's acceptable use policy prohibits fraud, spam and credential abuse, and we will not support those uses.
How often should I refresh prices and fees?
Fees and availability change by hour, so sample at fixed local time slots per city. Menu items and base prices change less often, and a daily or weekly pass is usually enough. Store timestamps so comparisons across cities reflect the same slot.
Start
Run one city through the 3-day trial, confirm the resolved location, then scale city by city. Get started with pay-as-you-go residential traffic or Contact sales for multi-city volume pricing.
Related: Price intelligence · Local business data · Grocery price tracking