ETM Electrical Equipment Scraper
Pricing
from $3.00 / 1,000 results
ETM Electrical Equipment Scraper
Scrape ETM.ru - a major Russian B2B electrical-equipment retailer. Search products, browse categories, or fetch full product details: prices, specifications, images, certificates, package/logistics data, per-warehouse stock, and analog products.
Pricing
from $3.00 / 1,000 results
Rating
0.0
(0)
Developer
Crawler Bros
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
a day ago
Last modified
Categories
Share
ETM Scraper
Scrape ETM.ru — one of Russia's largest B2B electrical-equipment distributors, selling circuit breakers, cables, sockets, luminaires, tools, and industrial-automation components. Search by keyword, browse any product category, or pull full product details: price, specifications, images, certificates, and stock availability.
What this actor does
- Four modes:
search,byCategory,productDetails,categoryFacets - Search — free-text keyword search across ETM's full catalog
- Category browsing — paginate any category by its id/slug or catalog URL, optionally filtered to a single manufacturer/brand
- Product details — full specs, certificates, technical documents, package/logistics data, structured per-warehouse stock, and real analog/substitute products
- Category/search facets — the real subcategory and brand breakdown (with ETM's own
live product counts per facet) for a category or search query, useful for discovering
narrower categories/brands to feed back into
byCategory - Empty fields are omitted — every record only contains fields ETM actually returned
Output per product
Search / category listing records:
productId,sku,namebrand,brandSeries,brandSlugcountryOfOrigin,packaging,unitprice,currency,priceLabel(e.g. "promotional price")availabilityText,pickupTextcategoryCodethumbnailUrl,imageUrlisNew— only present when ETM flags the product as newly listedproductUrlscrapedAt
Product-detail records additionally include:
description,etmCode,packagingInfo,warranty,paymentMethodsbrandId(ETM's internal manufacturer id)priceRetail,cashbackAmount(ETM loyalty cashback, RUB, when offered)categoryPath[],category,categoryUrl— full breadcrumb trailimages[](full-size)specifications[]—{name, value}pairs (power, voltage, dimensions, IP rating, etc.)certificates[]—{name, type, fileUrl}(EAC/GOST conformity certificates, PDF)technicalDocuments[]—{name, type, url}(datasheets, manuals, PDF)packages[]—{unit, quantity, weightKg, lengthM, widthM, heightM, volumeL}per packaging unit (single item, factory box, pallet, etc.) — real logistics data for freight/shipping calculationsstockByWarehouse[]—{warehouseType, quantity, deliveryTime}(orfor backorder/made-to-order items) — a structured breakdown per ETM warehouse network (supplier distribution center, local warehouse, etc.), not just one combined text label{warehouseType, status}analogs[]— real substitute/equivalent products ETM itself recommends, shaped identically to a listing record (productId,name,brand,price,productUrl, …) so it's a drop-in swap for cross-brand sourcingratingValue,reviewCount— only present when the product has actual customer reviews (omitted rather than emitted as0/0on the vast majority of products that have none yet)discontinued,isNewexternalArt,certificateName,relatedProducts[]— occasionally present instead ofbrandId/warranty/paymentMethods/packages[]/stockByWarehouse[]/ratingValue/analogs[]on an older ETM page shape; whichever shape a given product page returns determines which of these two field groups you getscrapedAt
Category/search facet records (mode=categoryFacets) contain instead:
queryType(categoryorsearch),query(the input you gave)categoryCode,categoryName,categoryUrl,categoryPath[]— the category itself and its breadcrumb (only forcategoryqueries; omitted for free-textsearchqueries)subcategories[]—{categoryCode, categoryName, categorySlug, productCount, categoryUrl}for every subcategory ETM shows within the current result set, each with its own live product countbrands[]—{brandId, brandName, brandSlug, productCount, brandFilter}for every manufacturer ETM shows within the current result set, each with its own live product count —brandFilteris a ready-to-use value for thebyCategorymode'sbrandinputscrapedAt
Input
| Field | Type | Default | Description |
|---|---|---|---|
mode | select | search | search / byCategory / productDetails / categoryFacets |
searchQuery | string | автомат | Free-text query (mode=search, or mode=categoryFacets) |
category | string | – | Category id+slug or catalog URL (mode=byCategory, or mode=categoryFacets) |
brand | string | – | Optional brand filter, <brandId>_<brandSlug> or a brand-filtered catalog URL (mode=byCategory only) |
productUrls | array | – | Product URLs or numeric IDs (mode=productDetails) |
maxItems | int | 10 | Hard cap on emitted records (1–500) |
proxyConfiguration | proxy | Residential (RU) | Required — see "Why is residential proxy required?" in the FAQ |
Example: search for circuit breakers
{"mode": "search","searchQuery": "автомат","maxItems": 20}
Example: browse a category
{"mode": "byCategory","category": "501010_avtomaticheskie_vykljuchateli","maxItems": 50}
Example: fetch specific products
{"mode": "productDetails","productUrls": ["https://www.etm.ru/cat/nn/7416742","6187756"]}
Example: browse a category filtered to one brand
{"mode": "byCategory","category": "5004_avtomaticheskie_vykljuchateli","brand": "432_iek","maxItems": 50}
Example: get subcategory/brand breakdown for a category
{"mode": "categoryFacets","category": "5004_avtomaticheskie_vykljuchateli"}
Use cases
- Price monitoring — track electrical-equipment pricing across brands
- Catalog enrichment — pull specifications and certificates for procurement systems
- Market research — analyze category assortment and brand coverage
- Sourcing — find in-stock alternatives across manufacturers for a given product class
- Compliance — verify EAC/GOST certification documents for imported equipment
Other Russian marketplace actors by CrawlerBros
FAQ
Why does this actor require a residential proxy? ETM.ru's own block page states the reason: it geo-restricts access to Russian IP ranges. This isn't a workaround for scraping etiquette — non-Russian visitors (VPN users included) get the same block in a normal browser.
Can I search in English? ETM's catalog is Russian-language; search terms
should be in Russian (e.g. автомат, кабель, розетка) for relevant
results. Product data returned (names, specs) is also in Russian, matching
the site's audience.
What does category accept? Either the bare <code>_<slug> identifier
(e.g. 501010_avtomaticheskie_vykljuchateli) or a full catalog URL from
etm.ru — both are accepted interchangeably.
Why are some products missing priceRetail? ETM shows a single price for
most SKUs; priceRetail only appears when the site returns a distinct retail
price alongside the wholesale/contract price.
Are prices in rubles? Yes — all price fields are in RUB (Russian rubles),
matching ETM's own currency.
What if a product has no listed price? ETM occasionally omits price for
discontinued or made-to-order items; the price field is omitted rather than
set to 0 or null in that case.
What are analogs[]? ETM's own substitute/equivalent-product
recommendations for the item (e.g. an alternative manufacturer's version of
the same lamp/breaker/socket) — useful for sourcing when a specific brand is
out of stock. Only present when ETM lists at least one analog for that SKU.
What is stockByWarehouse[]? ETM tracks availability per warehouse
network (its own distribution center vs. a local regional warehouse vs.
made-to-order), each with its own quantity and delivery estimate. This field
gives that breakdown as structured data instead of a single combined text
string; availabilityText still carries the human-readable summary for
convenience.
How do I find the right brand value for byCategory? Run
mode=categoryFacets on the category first — every entry in its brands[]
array includes a brandFilter value (e.g. 432_iek) ready to paste into the
brand input.
Does the brand filter work on mode=search? No — it's only supported on
mode=byCategory. ETM's brand-filtered URL pattern is category-scoped
(<categoryCode>_<categorySlug>-<brandId>_<brandSlug>); free-text search
doesn't expose the same URL-level filter.
Is the brand filter on mode=byCategory guaranteed accurate? Yes — ETM's
own brand-filtered category URL isn't consistently honored server-side for
every category (it can silently return the full, unfiltered category page),
so the actor additionally checks every product's manufacturer against the
requested brand before including it in the output. You will only ever see
products from the brand you asked for, even on categories where ETM's URL
filter itself doesn't take effect (in that case the actor pages further into
the category, as needed, to keep finding matches). If a brand is requested
that genuinely has no products in the category (typo, wrong id, or a brand
that just isn't sold in that category — some ETM categories carry 10,000+
products across dozens of brands), the actor stops after several consecutive
fully-empty pages rather than paging through the entire category, and reports
this via the run's status message instead of silently returning nothing.
What if I pass a productUrls numeric ID that doesn't exist? ETM's own
product page for an unrecognized bare ID (e.g. 1) can resolve to an
unrelated fallback product rather than a 404 — this is the site's own
behavior, not the actor's. The output record always reflects whichever real
product ETM actually returned for that URL/ID; double-check the returned
productUrl against what you intended if you're passing bare numeric IDs
that weren't sourced from a search/category/facets result first.
Are categoryFacets product counts accurate? Yes — productCount on each
subcategory/brand facet is ETM's own live count for that facet within the
current category or search result set, not an estimate.