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 Bot Manager configurations, so the proxy country and the domain queried need to line up for accurate data. A mismatched pair, such as a Singapore IP hitting shopee.vn, raises the odds of a 403 from a flagged fingerprint.
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. Rotate the IP on every request and match the proxy country to the Shopee regional domain (.sg, .ph, .my, .th, .vn) being queried.
The /api/v4/item/get endpoint has been consistent across regions for a long time, and KnoxProxy residential IPs held an 81% success rate against it in the last test cycle. Shopee occasionally adjusts required headers or adds signature tokens, though, so parsed responses should be checked periodically rather than trusted to run unmonitored indefinitely.
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 parser above handles this with a single division, price / 100000, right when it reads the item payload, so downstream code never sees the scaled figure.
The Python code above is a tested Shopee scraper for the internal item API that held an 81% success rate across regional domains in the last test cycle. Run it as-is across shopee.sg, shopee.ph, or any other regional domain, or extend it for more fields; proxy rotation and retries are already handled.
residential proxies -- 81% tested success, instant activation, 14-day money-back guarantee.