Fixed barcode and nutrition still coming back empty on small runs at times when the store refuses most connections. A refused product page now tries more fresh connections before giving up.
Fixed detailed product data (barcode, nutrition and other detail fields) coming back empty on some products when the store refused part of the requests. A connection that works is now reused for the rest of the run.
Added product fields: stockQuantity, discountAmount, promotionTag, variant, isMarketplaceProduct, longDescription, preparationInstructions and safetyWarning (null when the store does not provide them).
Fixed category and subcategory showing internal codes instead of names. Names now come from detailed product data; the codes are kept in attributes.categoryCodes.
Fixed brand, regular price and availability being empty on some products, and detail pages now return the full image gallery. Because brand and regular price changed for these products, incremental runs may report them as UPDATED once.
Arabic-language detail pages now return allergens, package type, description and storage conditions.
Fixed a basket of barcodes (GTIN/EAN) in Product IDs returning no products. Barcodes are now matched to the store's products, and barcodes the store does not sell are named in the run log.
Webhook and notification deliveries now go out directly instead of through the scraping proxy, so they arrive more reliably.
Fixed the ingredient filter returning no products unless detailed product data was switched on. The filter now reads full product details automatically.
Fixed detailed product data (barcode, brand, ingredients, nutrition, allergens, description) coming back empty, and product URL / product ID inputs returning no products, after a change on the store's website.
Runs now stop collecting once your maximum cost per run is reached, so they finish cleanly instead of being aborted.