· 13 min read
DNS-Shop Scraper: 25 Data Fields, Up to 1,000 Free Results/Month
Each record carries 25 output fields including live pricing in RUB, stock availability, ratings, and structured technical specifications directly from dns-shop.ru. At $5.00 per 1,000 results on the free plan, you can extract category listings or retrieve full technical spec sheets for individual SKUs. The collector handles search queries, category navigation, and single product lookups with optional filters for price and rating. This is for teams tracking Russian consumer electronics prices, catalog specifications, and inventory availability. It is not for anyone who needs buyer contact details, which the records do not include.
Try it before you read further. Apify's free plan includes $5.00 of usage every month with no credit card, enough for up to 1,000 results at $0.005 each before platform usage. Open DNS-Shop Scraper on Apify and run the prefilled example.
How reliable is DNS-Shop Scraper in production?
Across the last 30 days of public runs on the Apify platform, DNS-Shop Scraper recorded 140 runs with the following outcomes.
| Outcome | Runs | Share |
|---|---|---|
| Succeeded | 130 | 92.9% |
| Failed | 0 | 0.0% |
| Aborted by the user | 4 | 2.9% |
| Timed out | 6 | 4.3% |
| Total | 140 | 100.0% |
Plan for automated retries or smaller input batches to mitigate the impact of timed-out runs. Runs aborted by users represent manual stops and are not factored into the failure rate.
What does it cost to run DNS-Shop Scraper?
Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.
| Apify plan | Per result | Per 1,000 results |
|---|---|---|
| FREE | $0.005 | $5.00 |
| BRONZE | $0.00433 | $4.33 |
| SILVER | $0.00367 | $3.67 |
| GOLD | $0.003 | $3.00 |
| PLATINUM | $0.003 | $3.00 |
| DIAMOND | $0.003 | $3.00 |
Worked example: collecting 10,000 results costs $50.00 in result charges before run-start fees and platform usage. With 4.3% of runs failing or timing out in the last 30 days, budget for re-running a portion of those batches rather than assuming every run completes.
The maxItems control has the largest effect on the bill because charges are calculated based on the number of results written to the dataset. To find out if the data fits your needs before spending, run the example with maxItems set to 10 to limit result charges to at most $0.05.
How do you run DNS-Shop Scraper from the API?
The schema marks 1 of its 12 controls as required: mode. Every value in the payload below comes from the published schema's own prefills, which means you can paste it, swap the token, and get a real result.
Call the synchronous endpoint to start a run and receive dataset items in one request:
curl -X POST "https://api.apify.com/v2/acts/crawlerbros~dns-shop-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{"mode":"search","searchQuery":"iphone","category":"17a8a01d16404e77|smartfony","productUrl":"https://www.dns-shop.ru/product/00eb38374882ed20/61-smartfon-apple-iphone-15-128-gb-cernyj/","sortBy":"popularity","inStockOnly":false,"maxItems":10,"proxyConfiguration":{"useApifyProxy":false}}'
The same run from Python, using the official client:
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run_input = {
"mode": "search",
"searchQuery": "iphone",
"category": "17a8a01d16404e77|smartfony",
"productUrl": "https://www.dns-shop.ru/product/00eb38374882ed20/61-smartfon-apple-iphone-15-128-gb-cernyj/",
"sortBy": "popularity",
"inStockOnly": False,
"maxItems": 10,
"proxyConfiguration": {
"useApifyProxy": False
}
}
run = client.actor("crawlerbros~dns-shop-scraper").call(run_input=run_input)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)
And from Node.js:
import { ApifyClient } from 'apify-client'
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
const input = {
"mode": "search",
"searchQuery": "iphone",
"category": "17a8a01d16404e77|smartfony",
"productUrl": "https://www.dns-shop.ru/product/00eb38374882ed20/61-smartfon-apple-iphone-15-128-gb-cernyj/",
"sortBy": "popularity",
"inStockOnly": false,
"maxItems": 10,
"proxyConfiguration": {
"useApifyProxy": false
}
}
const run = await client.actor('crawlerbros~dns-shop-scraper').call(input)
const { items } = await client.dataset(run.defaultDatasetId).listItems()
console.log(items)
That endpoint blocks until the run completes. Fine while you are testing a handful of records, risky once a run takes minutes: a dropped connection loses the response even though the run itself finished. Switch to an asynchronous start with polling or a webhook before you schedule anything.
Which DNS-Shop Scraper inputs matter, and which can you skip?
The mode parameter determines whether you are searching by keyword, browsing a category, or extracting data from a specific product URL.
mode(string): What to fetch. Default:"search".searchQuery(string): Free-text query (mode=search), e.g.iphone,ноутбук,телевизор. Default:"iphone".category(string): A curated top-level dns-shop.ru category. For a sub-category not listed here, usecategoryUrlinstead. Default:"".categoryUrl(string): Full dns-shop.ru category URL for a sub-category not in the curated list above, e.g.https://www.dns-shop.ru/catalog/17a8a01d16404e77/smartfony/?brand=apple. Takes priority overcategoryif both are set.productUrl(string): Full dns-shop.ru product URL, e.g.https://www.dns-shop.ru/product/00eb38374882ed20/61-smartfon-apple-iphone-15-128-gb-cernyj/.sortBy(string): Result order for search/byCategory listings. Ignored by mode=productDetails (a single explicit product lookup is never reordered). Default:"popularity".priceMin(integer): Drop products cheaper than this (rubles). Applies to search/byCategory listings only; ignored by mode=productDetails.priceMax(integer): Drop products more expensive than this (rubles). Applies to search/byCategory listings only; ignored by mode=productDetails.minRating(number): Drop products rated below this (0-5 scale). Applies to search/byCategory listings only; ignored by mode=productDetails.inStockOnly(boolean): Only emit products currently available for purchase. Applies to search/byCategory listings only; ignored by mode=productDetails. Default:false.maxItems(integer): Hard cap on emitted records. Default:20.proxyConfiguration(object): Optional. dns-shop.ru's Qrator WAF returns HTTP 401 with a JS challenge on the first request of any session, from any IP - this actor solves it automatically by warming up a real (Camoufox) browser session before scraping, so no proxy is required in normal use. Only set this if your runs start getting consistently blocked, which would indicate the egress IP itself has been reputation-flagged. Default:{"useApifyProxy":false}.
Fixed-choice controls: mode accepts search (Search products), byCategory (Browse a category), productDetails (Lookup a single product by URL); category accepts 30 values (default ""), including 17a8a01d16404e77|smartfony (Смартфоны (Smartphones)), "" ((none - use categoryUrl instead)), af47fe7c3bae7fd7|smartfony-i-gadzety (Смартфоны и гаджеты (Smartphones & gadgets)), 17a892f816404e77|noutbuki (Ноутбуки (Laptops)); sortBy accepts popularity (site default), priceAsc (Price: low to high), priceDesc (Price: high to low), rating, new (Newest).
What does DNS-Shop Scraper return?
The returned records are ideal for catalog synchronization and price monitoring, providing SKU-level pricing and detailed technical attributes. They conspicuously do not contain customer reviews beyond a partial first-page sample or any internal warehouse inventory counts.
productId- dns-shop.ru's internal SKUtitleurl- canonical product page URLprice,currency(RUB)installmentPrice- monthly installment price shown on listing pages, when availablerating- 0-5 aggregate ratingreviewCountratingBreakdown- star-count histogram, e.g.{"5": 36, "4": 3, "3": 0, "2": 0, "1": 1}(mode=productDetailsonly, omitted for products with no reviews yet)subRatings- per-aspect ratings reviewers left, e.g.{"Дисплей": 4.7, "Производительность": 4.7}(mode=productDetailsonly, when the site shows them)priceHistory[]- weekly{period, price}points covering the last several months;priceHistoryMin,priceHistoryMax,priceHistoryRangeText(mode=productDetailsonly)availability-In stock/Out of stock/Available soonimageUrl,images[]- full product gallery (mode=productDetailsonly)brand(mode=productDetailsonly)description(mode=productDetailsonly)categoryPath[]- breadcrumb trail (mode=productDetailsonly)specs- key spec highlights (processor, display, memory, camera, etc.) on every recordfullSpecs- the complete technical spec sheet grouped by section, e.g.{"Процессор": {"Модель процессора": "Intel Core i3-1305U", ...}, "Экран": {...}, ...}(mode=productDetailsonly)variants[]- every sibling SKU of a multi-configuration product (other colors, memory sizes, models, etc.), each with its ownproductId,url,availability, and distinguishingattributes(e.g.{"Цвет": "Голубой", "Память (ГБ)": "256 ГБ"}); the current record's own entry carriesisCurrent: true(mode=productDetailsonly, omitted for single-SKU products with no variant picker)cityName- resolved delivery city, e.g.Москва;deliveryText- the site's own delivery estimate, e.g. "Доставим на дом за 2 часа" (mode=productDetailsonly)storeAvailabilityText- the site's own in-store stock summary, e.g. "В наличии в 277 магазинах";storeCount- number of physical stores currently carrying it (mode=productDetailsonly)reviews[]- individually-authored reviews from the product's first reviews page (a real, if partial, sample - not the exhaustive set for high-review-count products), each withauthor,date,rating(1-5),usageDuration,pros,cons,comment,photoCount(only the fields that reviewer actually filled in) (mode=productDetailsonly, omitted when the page has no reviews)recordType: "product",scrapedAt
These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.
How do you build the workflow end to end?
Open DNS-Shop Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.
- Run a search with mode set to search and searchQuery set to iphone to verify that current price and url fields populate for listing records.
- Execute a byCategory run with a curated category selected and check that availability and rating strings match the site's stock status.
- Input a specific productUrl with mode set to productDetails to confirm that fullSpecs contains a grouped technical spec sheet rather than key highlights.
- Observe the priceHistory array in detail records to verify weekly period and price objects are being captured for the product history.
- Check the variants array to see if other color or memory configurations are correctly identified with their own productId and stock status.
- Apply priceMin or priceMax filters in a listing run to ensure that dns-shop.ru analog replacement cards lacking a price are successfully excluded.
- Set maxItems to a value under 500 before scheduling the run to keep the dataset size within your target bounds.
How do you apply it? Three worked playbooks
These are DNS-Shop Scraper's own documented use cases, each worked through as an operating pattern rather than a description.
Use case 1: Price monitoring
Outcome: Track competitor pricing on electronics across categories
Configure: mode="byCategory", category="17a892f816404e77|noutbuki", sortBy="priceAsc", maxItems=50
Working method: Initiate a category crawl to capture the current price, installmentPrice, and availability for a product range. Match the productId against previous runs to detect price fluctuations.
Deliverable: A dataset of laptops with active pricing, monthly installment figures, and current stock status.
Stop condition: The price field is consistently null across active category listings.
Use case 2: Market research
Outcome: Analyze rating/review distribution for a product category
Configure: mode="search", searchQuery="ноутбук", minRating=4.0, maxItems=100
Working method: Perform a keyword search with a minRating filter to identify high-performing products. Aggregate the reviewCount and ratingBreakdown to measure consumer sentiment.
Deliverable: A collection of highly-rated product records with star-count histograms and per-aspect sub-ratings.
Stop condition: Records are missing ratingBreakdown despite having a positive reviewCount.
Use case 3: Catalog enrichment
Outcome: Pull the full spec sheet and images for a known product URL
Configure: mode="productDetails", productUrl="https://www.dns-shop.ru/product/00eb38374882ed20/61-smartfon-apple-iphone-15-128-gb-cernyj/"
Working method: Run a single lookup using a productUrl to extract the images gallery and the fullSpecs technical sheet. Map the grouped spec sections into your internal inventory system.
Deliverable: A comprehensive product record containing the complete technical specification table and gallery image URLs.
Stop condition: The fullSpecs field returns an empty object for a valid product page.
What breaks, and how do you design around it?
- Over the last 30 days, 0.0% of public runs failed and 4.3% timed out. Build retries and alerting around those rates rather than assuming every run completes.
When browsing large categories that exceed the 500-item cap, use categoryUrl with site-specific filter parameters to segment the data. If you encounter IP-level reputation blocks in your environment, enable proxyConfiguration to change your egress point.
When should you not use DNS-Shop Scraper?
Do not use this Actor if your target data resides on other Russian retail sites. For competing electronics chains, use M.Video Scraper or Technopark.ru Scraper - Products, Categories & Search. If you require hardware and construction catalog items, use Petrovich Building Materials Scraper or Maxidom Scraper. This scraper is also unsuitable if you require an official API with predictable latency, as every run loads live web pages and must solve browser challenges to proceed.
What should you check before trusting the output?
- Verify that price is non-null for all emitted records; filters will exclude price-less analog cards.
- Check that fullSpecs is a populated object with section headings when using productDetails mode.
- Confirm that ratingBreakdown contains integer star counts when reviewCount is greater than zero.
- Ensure the cityName and deliveryText fields are populated in productDetails mode to confirm location-specific data.
- Monitor for consistent HTTP 401 challenges; if the automatic warmup fails, configure proxyConfiguration to rotate the egress IP.
None of this proves a record is correct. It gives a scheduled DNS-Shop Scraper run defined points where it should stop instead of quietly passing bad data downstream.
Frequently asked questions
How reliable is DNS-Shop Scraper for scheduled tasks?
In the last 30 days, 130 of 140 public runs succeeded.
What will 1,000 scraped records cost on the free plan?
At the free-plan price of $5.00 per 1,000 results, result charges total $5.00. This calculation does not include the run-start fee or the platform usage consumed during the run, which are billed separately by Apify.
Do I need to configure a proxy to use this Actor?
No. You only need to set proxyConfiguration if your specific egress IP has been reputation-flagged and your runs are being consistently blocked.
Why does the specs field only show a few highlights?
The specs field contains key spec highlights available on all pages. To get the full technical spec sheet grouped by section, you must use mode set to productDetails, which fetches the fullSpecs field from the specific product's detail page.
Can I scrape a sub-category not in the curated list?
Yes. Use mode set to byCategory and provide the full URL in the categoryUrl field. This allows you to target specific sub-categories or pages with site-side filters applied that are not available in the standard dropdown.
Where to go next
When you are ready to run it, open DNS-Shop Scraper on Apify; the free plan covers up to 1,000 results a month.
Start with the DNS-Shop Scraper Actor page for the current input schema, pricing tier, and run history.
Other Actors we maintain for related data:
- X-Com Shop Scraper: Scrape XCOM-SHOP (xcom-shop.ru) - a major Russian electronics and computer retailer.
- Technopark.ru Scraper - Products, Categories & Search: Scrape Technopark.ru, a major Russian consumer-electronics retailer.
- M.Video Scraper: Scrape mvideo.ru - a major Russian electronics and appliance retailer.
- Holodilnik.ru Scraper: Scrape Holodilnik.ru - a major Russian home-appliance retailer.
- Regard Scraper: Scrape Regard.ru, a Russian computer/electronics retailer since 1992.
- Petrovich Building Materials Scraper: Scrape Petrovich (petrovich.ru) - a major Russian building-materials and DIY retailer.
- Abt Electronics Scraper: Scrape Abt.com - a major US electronics & appliance retailer.
- Maxidom Scraper: Scrape Maxidom.ru - a major Russian home-improvement, DIY and power-tools retailer.
Related guides:
- Amazon Creator Shop Scraper: 3 Practical Use Cases
- Redbubble Scraper: 3 Practical Use Cases and Workflow Guide
- Shopee Scraper Playbook: Extracting Southeast Asian E-Commerce Data
- How to Scrape eBay Item, Store, and Category Data Safely
Resources
Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-25.
Actor last updated by its maintainers on 2026-07-24.
Run outcome figures cover the 30 day public window ending 2026-09-25.
Featured actors
DNS-Shop Scraper
Scrape dns-shop.ru, a major Russian electronics retailer. Search products, browse categories, or fetch a single product's price, rating, images, and specs.
Run on Apify ↗