All scrapers

E-commerce

Smyths Toys Scraper

smythstoys.com

100% Success rate
1s Avg response
Imperva Incapsula Protection
5,000 calls Measured over

Smyths Toys is one of the largest toy retailers in the UK and Ireland, and smythstoys.com sits behind Imperva's bot protection, which refuses plain HTTP clients and even a real browser that calls the store's data API without the store's own request headers. A dedicated plugin endpoint returns the JSON Smyths' storefront reads for a product page: the price with any was-price, RRP and discount, the home delivery stock status and message, the click & collect stock status and message, pre-order flags and expected stock dates, the age suitability and the delivery type. Pass a product code, a smythstoys.com product or bundle link or a product-inventory API link; the JSON comes back unchanged, so code written against Smyths' own response keeps working. With mode=details the same code returns what the product page shows, again as Smyths' own JSON: the description, the key features, the safety warnings, the brand and EAN, and the full image gallery with any videos. No codes yet? The same endpoint searches Smyths or lists a category and returns every product's code, name, link, price and rating, 60 per page and up to 600 per call. One product (stock or details), or one listing page, is one request, and a code Smyths does not know comes back as Smyths' own error at no charge. No Smyths account, login or API key is involved.

What you can extract

  • Product code and type
  • Price, value, was-price, then-price, RRP and discount percentage, in GBP
  • Home delivery stock: stock status (in stock, out of stock), stock message, delivery messages, pre-order flag and expected stock date
  • Click & collect stock: stock status, stock message and collection message
  • Age suitability, delivery type and marketing messages
  • Product page details (mode=details): name, brand, EAN, description, key features, safety warnings and the full image gallery with videos
  • Search and category listings: product code, name, link, price, image, rating and bundle flag, 60 per page
  • Category breadcrumbs and subcategories with product counts
  • Smyths' own product-inventory and product page JSON, unchanged

Dedicated endpoints

/marketplace/smyths-inventory

Smyths Toys product stock, details, search and categories

code (a Smyths UK product code such as 156809, a smythstoys.com product or bundle link or a product-inventory API link) returns Smyths' product-inventory JSON: code, type, prices (price, value, wasPrice, thenPrice, rrpPrice, discountedPercentage), hdSection (stockStatus, stockMessage, guestDeliveryMessage, isAvailableForDelivery, isPreOrder, expectedStockDate), ccSection (stockStatus, stockMessage, deliveryMessage), ageSuitabilities, carrierType and marketing messages; bundles are recognised on their own. mode=details with the same code returns the JSON Smyths' product page is built from: name, brand, ean, description (HTML), webFeatures, the safety warnings euWarning, safetyText, urgentSafetyTextHeading and urgentSafetyTextDescription, productImages (thumbnail, original and zoom per gallery slot, videos as youtubeUrl), prices, averageRating, numberOfReviews and breadcrumb; a bundle adds subProducts. A code Smyths does not know answers 502 with Smyths' own JSON error and X-Origin-Status: 500, not billed. query (a search, up to Smyths' 240 best matches) or category (a category code such as SM0601 or a category link) returns products with code, name, url, prices, currency, image, averageRating, productType and decals, plus totalResults, totalPages and nextPage; a category adds title, breadcrumbs and subcategories with their product counts. sort, page and max_results (1-600, 60 per page) page through; each listing page is one request.

How to scrape it

curl -X POST \
  -H "X-ScrapeUnblocker-Key: $SU_API_KEY" \
  "https://api.scrapeunblocker.com/marketplace/smyths-inventory?code=156809"
import requests

resp = requests.post(
    "https://api.scrapeunblocker.com/marketplace/smyths-inventory",
    headers={"X-ScrapeUnblocker-Key": SU_API_KEY},
    params={"code": "156809"},
)
print(resp.text)
import { ScrapeUnblockerClient } from 'scrapeunblocker';

const su = new ScrapeUnblockerClient({ apiKey: process.env.SU_API_KEY });

const item = await su.smythsInventory('156809');
console.log(item.prices.price, item.hdSection.stockStatus, item.ccSection.stockStatus);
console.log(item);

Requests are POST and take their parameters in the query string. Browser rendering always happens - there is no flag to enable.

Example response

{
  "code": "156809",
  "type": "REGULAR",
  "ageSuitabilities": [ "5 Years +" ],
  "primaryMarketingMessage": null,
  "hdSection": {
    "stockStatus": "INSTOCK",
    "stockMessage": "In Stock",
    "guestDeliveryMessage": "Free delivery on orders over £20",
    "registeredDeliveryMessage": "Free delivery on orders over £20",
    "isAvailableForDelivery": true,
    "isPreOrder": false,
    "inStore": false,
    "expectedStockDate": null
  },
  "ccSection": {
    "stockStatus": "INSTOCK",
    "stockMessage": "In Stock",
    "deliveryMessage": "FREE collection within 2 hours",
    "storeName": null,
    "isPreOrder": false,
    "expectedStockDate": null,
    "storeClosed": false,
    "isAvailableForDelivery": true
  },
  "carrierType": {
    "name": "REGULAR",
    "isGuestFreeDelivery": false,
    "isRegisteredFreeDelivery": false,
    "isSpecialDelivery": false
  },
  "prices": {
    "price": "£9.99",
    "thenPrice": null,
    "wasPrice": null,
    "rrpPrice": null,
    "value": "9.99",
    "discountedPercentage": null
  },
  "decals": null,
  "paymentMessage": { "currency": "GBP", "country": "GB" }
}

Read the API docs

Frequently asked questions

Is it legal to scrape Smyths Toys?

Collecting publicly available Smyths data such as product prices and stock status is lawful in many jurisdictions, but the rules depend on your country, the data you collect and how you use it. ScrapeUnblocker returns the public product data; what you collect and how you use it is your responsibility.

How do I scrape Smyths Toys without getting blocked?

Smyths sits behind Imperva's bot protection. Its data API answers only a session that has passed Imperva's browser check, from the same IP address, and only when the request carries the headers Smyths' own store sends; anything else gets a 403 or a request held open until it times out. The /marketplace/smyths-inventory plugin keeps a pool of such sessions on ISP exits, each made by a real Chrome and used for a limited number of calls, and moves to a fresh session when Imperva refuses one. In ScrapeUnblocker's benchmark it returned data on 100% of 5,000 calls for 5,000 different products, about 1.0s per call at 20 concurrent requests.

What Smyths Toys data can I get?

For each product: the price with value, was-price, then-price, RRP and discount percentage, the home delivery stock status, stock message and delivery messages, whether it is a pre-order and the expected stock date, the click & collect stock status and collection message, the age suitability, the delivery type and any marketing messages. It is the same JSON Smyths' storefront reads for its product page. With mode=details you also get the product page itself: name, brand, EAN, description, key features, safety warnings and the full image gallery with videos.

Can I get the product description, features, safety warnings and images?

Yes: call the same endpoint with mode=details and the product code or link. It returns the JSON Smyths' product page is built from, unchanged: name, brand, ean, description (HTML), webFeatures (the key features list), the safety warnings (euWarning, safetyText, urgentSafetyTextHeading, urgentSafetyTextDescription), productImages (every gallery image as thumbnail, original and zoom, and videos as YouTube links), prices, rating and review count, and for a bundle the products it holds (subProducts). Bundles are found on their own, and one product is one request.

I don't have product codes. How do I find them?

Search with query, or list a category with category: a code such as SM0601 (Toys), SM0602 (Baby), SM0603 (Outdoor) or SM0604 (Gaming & Tech), or any smythstoys.com category link. Each listing returns the products' codes, names, links, prices, images and ratings and marks bundles, 60 per page and up to 600 per call, and a category also lists its subcategories with their product counts. Smyths' search returns its best 240 matches, while a category lists every product it holds, so the top categories together give the whole catalogue. Each listing page is one request; then pass the codes as code for stock and price.

I already have Smyths product-inventory URLs. Can I use them as they are?

Yes: pass each one as code to the plugin, unchanged. A product or bundle page link and a bare product code work too. /getPageSource does not serve Smyths product, search or category data; it answers such URLs with a 400 that names the plugin endpoint and the parameters to use (mode=details for a product page).

What happens with a product code that does not exist?

Smyths answers a code it does not know with its own JSON error and HTTP 500. The plugin passes that JSON on unchanged with status 502 and the header X-Origin-Status: 500, and the call is not billed. Smyths sends the same error during an outage on its side, so retry a code that worked before.

How much does it cost to scrape Smyths Toys?

One product (stock or details), or one listing page of up to 60 products, is one request. 1 request = 1 credit, EUR 1.00 per 1,000 on pay as you go, down to about EUR 0.55 per 1,000 on the Ultimate plan. Blocks, timeouts, codes Smyths does not know and unknown categories are not billed, and the free trial includes 500 requests with no card.

Related scrapers

Smyths Toys and other names and marks of smythstoys.com belong to their owner and are used here only to identify the website this API works with. ScrapeUnblocker is an independent service, not affiliated with, endorsed by or sponsored by the owner of smythstoys.com.

Start scraping this site today

Free tier included. No credit card required to test it.