DNS Shop APIdns-shop.ru ↗
Access DNS Shop product listings, technical specs, customer reviews, category hierarchies, and Russian store locations with coordinates and hours via REST API.
What is the DNS Shop API?
The DNS Shop API provides 7 endpoints covering the full product catalog of dns-shop.ru, Russia's largest electronics retail chain. Use get_product_details to retrieve price, images, article number, and structured specs for any product, get_product_reviews to pull paginated customer opinions, and get_stores to get every physical DNS location in Russia with GPS coordinates, phone numbers, and operating hours.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/1bf6ff65-49f0-48c3-bd2a-a78f2dec40aa/get_catalog_categories' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace dns-shop-ru-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""DNS Shop API — find physical store locations across Russia."""
from parse_apis.dns_shop_api import DnsShop, ShopType, StoreDataUnavailable
client = DnsShop()
# List all stores, capped to 10 for demonstration
for store in client.stores.list(limit=10):
print(store.name, store.address, store.shop_type)
# Grab one store and inspect its details
store = client.stores.list(limit=1).first()
if store:
print(store.name, store.address, store.lat, store.lon, store.time)
# Filter for DNS Hyper stores client-side
hyper_stores = [s for s in client.stores.list(limit=50) if s.shop_type == ShopType.DNS_HYPER]
print(f"Found {len(hyper_stores)} DNS Hyper stores in first 50")
# Handle a potential upstream error
try:
for s in client.stores.list(limit=3):
print(s.name, s.city_id)
except StoreDataUnavailable as exc:
print(f"Store data unavailable: {exc}")
print("exercised: stores.list / ShopType enum filter / StoreDataUnavailable error handling")
Returns all top-level and subcategories from the catalog. Note: Behind Qrator antibot, may be intermittently blocked.
No input parameters required.
{
"type": "object",
"fields": {
"categories": "array"
},
"sample": {
"status": "blocked",
"message": "Qrator JS challenge - site requires browser-based JavaScript challenge solving",
"block_type": "ip_ban"
}
}About the DNS Shop API
Product Catalog and Search
The search_products endpoint accepts a query string and an optional page integer, returning a list of matching products alongside total_results and the current page. To browse by category rather than keyword, use get_products_by_category with a category_id (either a short ID or a full category URL). The top-level and nested category tree is available through get_catalog_categories, which returns the full categories array with no required inputs. Note that all five catalog-facing endpoints sit behind Qrator antibot protection and may return intermittent errors depending on traffic conditions.
Product Details, Specs, and Reviews
get_product_details takes a product_id (product UUID or full URL) and returns id, url, price (integer, in rubles), title, article, images (array), and a specs object with structured technical attributes. If you only need the specifications without the full product record, get_product_specs returns a specs object keyed by attribute group. For user-generated content, get_product_reviews accepts a product UUID plus optional limit and offset integers for pagination, and returns a total count alongside an opinions array containing individual review records.
Physical Store Locations
get_stores requires no inputs and returns every DNS retail location across Russia. Each store object includes id, name, address, phone, time (working hours string), mark (a landmark or description), lat and lon coordinates, metroInfo, and city. The response also includes total_stores as a top-level integer. This endpoint is sourced from a different subdomain and is not subject to the Qrator antibot restrictions that affect the catalog endpoints.
The DNS Shop API is a managed, monitored endpoint for dns-shop.ru — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when dns-shop.ru changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official dns-shop.ru API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a price-tracking tool that monitors
pricechanges on specific DNS products over time usingget_product_details. - Map all DNS store locations in a given city using
lat,lon, andcityfields fromget_stores. - Aggregate customer sentiment by collecting
opinionsacross product lines withget_product_reviews. - Populate a product comparison table with structured attribute data from
get_product_specs. - Index the full DNS catalog for search by iterating categories via
get_catalog_categoriesandget_products_by_category. - Build a store-finder feature showing
phone,time, andaddressfor the nearest DNS location. - Extract
articlenumbers fromget_product_detailsto cross-reference DNS inventory against other Russian retailers.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does dns-shop.ru have an official public developer API?+
What does get_stores return and does it cover all Russian regions?+
get_stores returns the full list of DNS physical locations nationwide. Each record includes id, name, address, phone, time (working hours), mark (landmark note), lat/lon coordinates, metroInfo, and city. The total_stores field tells you the total count in the response. Coverage reflects what DNS publishes for their store network, which spans most major Russian cities and regions.Are product availability or stock levels returned by any endpoint?+
price, specs, images, and title, but per-store stock or online availability status is not included in the response. You can fork this API on Parse and revise it to add a stock-checking endpoint if that data is needed.Why do catalog endpoints sometimes fail while get_stores works reliably?+
get_catalog_categories, search_products, get_products_by_category, get_product_details, get_product_specs) are subject to Qrator antibot protection on dns-shop.ru and may be intermittently blocked. get_stores pulls from a separate subdomain that does not have the same restrictions, making it consistently available.