A tested walkthrough for Target Products -- the right proxy type, 86% tested success rate, working code, and what to avoid to stay compliant.
Target's RedSky product API returns structured price, availability, and rating data directly and pairs well with residential rotating proxies. Target runs Akamai Bot Manager, which blocklists IPs quickly once request velocity exceeds a few calls per second without a matching browser fingerprint, and KnoxProxy residential IPs held an 86% success rate. A Target scraper built around the RedSky endpoint is more durable than parsing rendered HTML.
| Anti-bot system | Akamai Bot Manager |
| Challenge types | Akamai sensor_data JavaScript challenge, 403 block page for missing or invalid sensor data, Rate-based throttling per IP, API request signature checks on the RedSky endpoints |
| Rate limit behavior | Target's RedSky product API is reachable directly, but Akamai blocklists IPs quickly once request velocity exceeds a few calls per second without matching browser TLS and HTTP/2 fingerprints. |
| Tested success rate | 86% |
"""
KnoxProxy scraper for Target product data via the public RedSky API.
The tcin is Target's internal item ID, visible in any 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 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 "
"(KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36"
),
"Accept": "application/json",
}
REDSKY_API_KEY = "9f36aeafbe60771e321a7cc95a78140772ab3e96" # Target's public web client key
def proxy_dict() -> dict:
proxy_url = f"http://{PROXY_USER}:{PROXY_PASS}@{PROXY_HOST}:{PROXY_PORT}"
return {"http": proxy_url, "https": proxy_url}
def fetch_target_product(tcin: str, max_retries: int = 3) -> dict:
url = "https://redsky.target.com/redsky_aggregations/v1/web/pdp_client_v1"
params = {"key": REDSKY_API_KEY, "tcin": tcin, "pricing_store_id": "3991"}
for attempt in range(1, max_retries + 1):
try:
resp = requests.get(url, headers=HEADERS, params=params, proxies=proxy_dict(), timeout=20)
if resp.status_code == 200:
return parse_target_response(resp.json(), tcin)
print(f"Attempt {attempt}: Target returned status {resp.status_code}")
except requests.exceptions.RequestException as exc:
print(f"Attempt {attempt}: request failed ({exc})")
time.sleep(random.uniform(2, 5))
raise RuntimeError(f"Failed to fetch Target tcin {tcin} after {max_retries} attempts")
def parse_target_response(payload: dict, tcin: str) -> dict:
product = payload.get("data", {}).get("product", {})
item = product.get("item", {})
price = product.get("price", {})
return {
"tcin": tcin,
"title": item.get("product_description", {}).get("title"),
"price": price.get("formatted_current_price"),
"in_stock": product.get("fulfillment", {}).get("shipping_options", {}).get("availability_status"),
}
if __name__ == "__main__":
for tcin in ["87401692"]:
print(fetch_target_product(tcin))
time.sleep(random.uniform(2, 5))
{
"tcin": "87401692",
"title": "Keurig K-Mini Single-Serve Coffee Maker",
"price": "$59.99",
"in_stock": "IN_STOCK"
}Install requests; the RedSky API returns JSON directly so no HTML parser is required.
pip install requestsRoute the RedSky API calls through KnoxProxy's residential rotating gateway.
PROXY_HOST = "proxy.knoxproxy.com"
PROXY_PORT = 10000
PROXY_USER = "your_username"
PROXY_PASS = "your_password"Request pdp_client_v1 with the tcin (Target's internal item ID found in a product URL) as a query parameter.
Read structured JSON fields directly rather than scraping rendered HTML.
Target Products runs akamai Bot Manager. The tested setup is residential rotating proxies, targeting uS residential IPs, with this rotation: Rotate IP on every request. That combination held a 86% success rate on the Jul 3, 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.
US residential IPs.
Target Products leans on akamai sensor_data JavaScript challenge. Target's RedSky product API is reachable directly, but Akamai blocklists IPs quickly once request velocity exceeds a few calls per second without matching browser TLS and HTTP/2 fingerprints.
Our legality guide and AUP cover the boundaries in full — staying inside them is what keeps a scraping program durable.
RedSky is Target's internal API that powers its own website and app; it is not officially published for third-party use, but its endpoints and public web client key are visible in any browser's network tab.
Residential rotating proxies work best because Akamai Bot Manager blocklists datacenter IPs quickly once request velocity looks automated.
Yes, passing a different pricing_store_id parameter can return store-specific pricing and availability, since Target adjusts both by fulfillment location.
Rotate a residential IP on every request, send realistic browser headers, and stay under roughly 1-2 requests per second per IP to avoid the velocity threshold that triggers a 403 response.
The Python code above is a tested Target scraper that calls the RedSky API directly. Run it as-is or extend the field list; proxy rotation and retry handling are already included.
Free trial on residential proxies -- 86% tested success, no credit card.