A tested walkthrough for Shopee Marketplace -- the right proxy type, 81% tested success rate, working code, and what to avoid to stay compliant.
Shopee's internal item API returns clean JSON for price, stock, and rating data when reached through residential rotating proxies matched to the regional domain. Shopee runs Akamai Bot Manager, which blocklists IP and device combinations that skip the JavaScript sensor challenge, and KnoxProxy residential IPs held an 81% success rate across regional Shopee domains. This Shopee scraper approach works across every regional storefront, not just one country's domain.
| Anti-bot system | Akamai Bot Manager |
| Challenge types | Akamai sensor_data JavaScript challenge, 403 Access Denied on flagged fingerprints, API signature and token requirements on internal endpoints, IP and device combination blocklisting |
| Rate limit behavior | The public item API is usable at low volume, but Akamai quickly blocklists IP and device combinations that skip the JS sensor challenge or exceed a handful of requests per minute without matching browser headers. |
| Tested success rate | 81% |
"""
KnoxProxy scraper for Shopee item data via the internal v4 item API.
Shop and item IDs are the two numeric segments in a Shopee product URL.
"""
import random
import time
import requests
PROXY_HOST = "proxy.knoxproxy.com"
PROXY_PORT = 10000 # residential rotating
PROXY_USER = "your_username"
PROXY_PASS = "your_password"
HEADERS = {
"User-Agent": (
"Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) "
"AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1"
),
"Accept": "application/json",
"Referer": "https://shopee.sg/",
}
def proxy_dict(country: str = "sg") -> dict:
user = f"{PROXY_USER}-country-{country}"
proxy_url = f"http://{user}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}"
return {"http": proxy_url, "https": proxy_url}
def fetch_shopee_item(shop_id: str, item_id: str, tld: str = "sg", max_retries: int = 3) -> dict:
url = f"https://shopee.{tld}/api/v4/item/get?itemid={item_id}&shopid={shop_id}"
proxies = proxy_dict(country=tld)
for attempt in range(1, max_retries + 1):
try:
resp = requests.get(url, headers=HEADERS, proxies=proxies, timeout=20)
if resp.status_code == 200:
return parse_shopee_item(resp.json())
print(f"Attempt {attempt}: Shopee returned status {resp.status_code}")
except requests.exceptions.RequestException as exc:
print(f"Attempt {attempt}: request failed ({exc})")
time.sleep(random.uniform(3, 6))
raise RuntimeError(f"Failed to fetch Shopee item {item_id} after {max_retries} attempts")
def parse_shopee_item(payload: dict) -> dict:
item = payload.get("data", {})
return {
"item_id": item.get("itemid"),
"name": item.get("name"),
"price": item.get("price", 0) / 100000, # Shopee prices are scaled by 10^5
"stock": item.get("stock"),
"rating": item.get("item_rating", {}).get("rating_star"),
}
if __name__ == "__main__":
print(fetch_shopee_item(shop_id="123456", item_id="7891011", tld="sg"))
{
"item_id": 7891011,
"name": "Portable Mini Fan USB Rechargeable",
"price": 8.9,
"stock": 4213,
"rating": 4.8
}Install requests for calling Shopee's item API directly; no HTML parser is needed since the response is JSON.
pip install requestsMatch the proxy country to the Shopee TLD you are targeting so currency and stock reflect the right region.
PROXY_HOST = "proxy.knoxproxy.com"
PROXY_PORT = 10000
PROXY_USER = "your_username"
PROXY_PASS = "your_password"Request the /api/v4/item/get endpoint with the shop and item IDs found in a product URL.
Detect 403 responses and retry with a new residential IP and refreshed headers rather than reusing the flagged session.
Shopee Marketplace runs akamai Bot Manager. The tested setup is residential rotating proxies, targeting match the proxy country to the Shopee regional domain (.sg, .ph, .my, .th, .vn), with this rotation: Rotate IP on every request. That combination held a 81% success rate on the Jun 25, 2026 test run.
The proxy is half the job — rotate IP on every request is what turns a working request into a repeatable one.
Rotate IP on every request.
Match the proxy country to the Shopee regional domain (.sg, .ph, .my, .th, .vn).
Shopee Marketplace leans on akamai sensor_data JavaScript challenge. The public item API is usable at low volume, but Akamai quickly blocklists IP and device combinations that skip the JS sensor challenge or exceed a handful of requests per minute without matching browser headers.
Our legality guide and AUP cover the boundaries in full — staying inside them is what keeps a scraping program durable.
Shopee runs separate storefronts per country (shopee.sg, shopee.ph, shopee.vn) with different currency, stock, and Akamai configurations, so the proxy country and the domain queried need to line up for accurate data.
Residential rotating proxies work best because Akamai Bot Manager blocklists datacenter IP ranges quickly, especially on the internal item API that mobile apps and the website both rely on.
The /api/v4/item/get endpoint has been consistent across regions for a long time, but Shopee occasionally adjusts required headers or adds signature tokens, so responses should be checked periodically.
Shopee returns prices scaled by 100,000, so a raw price value of 890000 in the API response represents 8.90 in the local currency and needs to be divided before display.
The Python code above is a tested Shopee scraper for the internal item API. Run it as-is across regional domains or extend it for more fields; proxy rotation and retries are already handled.
Free trial on residential proxies -- 81% tested success, no credit card.