Ulta Scraper avatar

Ulta Scraper

Pricing

from $3.50 / 1,000 results

Go to Apify Store
Ulta Scraper

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

Richard Feng

Maintained by Community

Actor stats

3

Bookmarked

32

Total users

4

Monthly active users

0.15 hours

Issues response

3 hours ago

Last modified

Share

Ulta Scraper provide a way to crawl product details of site Ulta.

Features

  1. Support fetch products of category;
  2. Support fetch product detail with prices,descriptions,images and sku info;
  3. Group skus in same product.
  4. 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:

  1. Resolves the page path to a DXL NonCachedPage query.
  2. For listing pages, reads the inlined ProductListingResults items and follows the loadMoreAction to page through all results.
  3. 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 maxVariantFetches to 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:

FieldTypeDescription
startUrlsArrayStart URLs of Ulta site to start the scraper. Category page, product page urls are all supported.
proxyObjectProxies 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.
maxConcurrencyObjectActor running max concurrency, which helps you to not getting blocked.
maxRequestsPerCrawlIntegerMaximum number of requests that can be made by this crawler, 0 to ignore.
maxVariantFetchesIntegerCap 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:

PageExample
Product Detail Pagehttps://www.ulta.com/p/studio-fix-powder-plus-foundation-makeup-xlsImpprod15921242?sku=2510752
Category Pagehttps://www.ulta.com/shop/makeup/face
Brand Pagehttps://www.ulta.com/brand/ulta-beauty-collection
Sale Pagehttps://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 …" }
}
]
}
]
}