Ulta Scraper
Pricing
from $3.50 / 1,000 results
Ulta Scraper
Ulta web scraper to crawl product information including price and sale price, color, and images.
Pricing
from $3.50 / 1,000 results
Rating
0.0
(0)
Developer
Richard Feng
Maintained by CommunityActor stats
3
Bookmarked
32
Total users
4
Monthly active users
0.15 hours
Issues response
3 hours ago
Last modified
Categories
Share
Ulta Scraper provide a way to crawl product details of site Ulta.
Features
- Support fetch products of category;
- Support fetch product detail with prices,descriptions,images and sku info;
- Group skus in same product.
- Per-shade undertone/finish description, product size, and highlights badges.
The price values are multiplied by 100 to avoiding floating point calculations.
How it works
Instead of scraping the WAF-protected www.ulta.com website HTML, this actor talks
directly to the Ulta mobile app's GraphQL API (api.ulta.com/dxl/graphql). That
endpoint runs the same "DXL" content backend the website uses, but lives on separate
infrastructure that answers anonymous read requests with a static app API key — no
login, no browser, and no bot challenge. The request contract (host, headers, API key,
GraphQL operation) was recovered from the official Android app.
For each start URL the actor:
- Resolves the page path to a DXL
NonCachedPagequery. - For listing pages, reads the inlined
ProductListingResultsitems and follows theloadMoreActionto page through all results. - For product pages, reads the
ProductPricing/ProductVariant/MediaGallery/… modules and re-renders the page per SKU to collect each variant's price and images.
Cost note — all SKUs are merged into one product. Ulta lists every shade/size as a separate SKU. This scraper groups all of them under a single product record (one dataset item with a
variants[]array) rather than emitting one item per SKU. The trade-off is request cost: a product's default SKU comes free with the product page, but every additional SKU needs its own API call to read that variant's own price and images. So a product with N variants costs roughly N requests — and products with many shades (foundations, concealers) dominate the run time and cost.Use
maxVariantFetchesto cap the per-product variant calls. Variants beyond the cap are still included, using the product-level price and their single listing image (no extra call), so you trade some per-variant price/image accuracy for a much cheaper, faster run.
Input Parameters
The input of this scraper shoule be JSON formated. Fields are:
| Field | Type | Description |
|---|---|---|
| startUrls | Array | Start URLs of Ulta site to start the scraper. Category page, product page urls are all supported. |
| proxy | Object | Proxies for the api.ulta.com app API. DATACENTER (or no proxy) is recommended — RESIDENTIAL often adds upstream 502/504/ECONNRESET against this mobile API. Use RESIDENTIAL only if you see blocks. |
| maxConcurrency | Object | Actor running max concurrency, which helps you to not getting blocked. |
| maxRequestsPerCrawl | Integer | Maximum number of requests that can be made by this crawler, 0 to ignore. |
| maxVariantFetches | Integer | Cap of per-product variant detail calls (each non-default shade/size costs one extra API call). Empty = fetch all. |
Supported Pages
Supported of fetch data from below pages:
| Page | Example |
|---|---|
| Product Detail Page | https://www.ulta.com/p/studio-fix-powder-plus-foundation-makeup-xlsImpprod15921242?sku=2510752 |
| Category Page | https://www.ulta.com/shop/makeup/face |
| Brand Page | https://www.ulta.com/brand/ulta-beauty-collection |
| Sale Page | https://www.ulta.com/promotion/sale |
Data storage
Ulta scraper stores the product data to default data set in JSON format.
{"source": {"id": "pimprod2048637","crawlUrl": "https://www.ulta.com/p/radiance-conscious-beauty-kit-pimprod2048637?sku=2630776","canonicalUrl": "https://www.ulta.com/p/radiance-conscious-beauty-kit-pimprod2048637?sku=2630776","retailer": "ulta","currency": "USD"},"brand": "Beauty Finds by ULTA Beauty","title": "Radiance Conscious Beauty Kit","description": {"short_desc": "Unwrap Radiance with Our Beauty Kit! Celebrate the season with the ultimate gift of clean beauty. Our beauty kit features luxurious, eco-friendly products designed to nourish and glow.","full_desc": "#### Includes\n\n- Bubble, Skincare Day Dream Tone + Texture Serum Vitamin C + Niacinamide (0.17 oz)\n- Dermalogica, Special Cleansing Gel (0.5 oz)\n- House Of Lashes, Boudoir Lite Full False Lashes (1 pair)\n- Lolavie, Glossing Detangler (0.85 oz)\n- Nemat, Vanilla Musk Roll-On Fragrance Oil (0.17 oz)\n- ‘Ôrǝbella, NIGHTCAP Parfum (0.05 oz)\n- Peace Out, Acne Dots (4 dot patches)\n- Pür Beauty, Fully Charged Mascara Powered By Magnetic Technology Mini (0.14 oz)\n- St. Tropez, St. Tropez Self Tan Purity Bronzing Water Face Mist (0.47 oz)\n- Sunday Riley, Good Genes All-In-One Lactic Acid Treatment (0.17 oz)\n- Thayers, Thayers PH Cleanser (3.0 oz)\n- Viviscal, Thickening Conditioner (1.7 oz)\n- Viviscal, Thickening Shampoo (1.7 oz)\n\n"},"categories": ["Gifts","By Price","$50 and Under"],"options": [],"variants": [{"id": "2630776","sku": "2630776","options": [],"price": {"list": 4000,"listFormatted": "$40.00","sale": 2400,"stockStatus": "InStock"},"medias": [{"id": "2630776","type": "Image","url": "https://media.ulta.com/i/ulta/2630776","alt": "Beauty Finds by ULTA Beauty Radiance Conscious Beauty Kit #1","width": 2000,"height": 2000},{"id": "2630776_alt01","type": "Image","url": "https://media.ulta.com/i/ulta/2630776_alt01","alt": "Beauty Finds by ULTA Beauty Radiance Conscious Beauty Kit #2","width": 2000,"height": 2000}]}],"stats": {"rating": 4.4,"reviewCount": 7},"price": {"sale": 2400,"list": 4000,"listFormatted": "$40.00","stockStatus": "InStock"}}
Product attributes (undertone / finish, size, highlights)
For makeup with shades, each colour option value carries a description — the
"undertone / finish" line Ulta shows under the swatch. The product also carries a
size (volume/dimension) and a highlights badge row (Clean Ingredients, Cruelty
Free, Vegan, …). description is omitted for shades Ulta doesn't describe (e.g. some
eyeliners), and highlights/size are omitted when the product has none.
{"title": "Double Wear Stay-in-Place Longwear Matte Foundation","size": "1.0 oz","highlights": [{ "label": "Sustainable Packaging", "icon": "SustainablePackaging", "imageUrl": "https://media.ultainc.com/i/ulta/Sustainable-Packagingicon", "description": "..." }],"options": [{"type": "Colour","values": [{"id": "1C1 Cool Bone","name": "1C1 Cool Bone","description": "light with cool rosy-peach undertones","swatchIcon": { "url": "https://media.ultainc.com/i/ulta/2651973_sw", "alt": "1C1 Cool Bone …" },"smooshIcon": { "url": "https://media.ultainc.com/i/ulta/2651973_sm", "alt": "1C1 Cool Bone …" }}]}]}