Ulta Beauty Store Data Scraper - Hours & Phone
Pricing
from $0.50 / 1,000 stores
Ulta Beauty Store Data Scraper - Hours & Phone
Scrape Ulta Beauty store details from store URLs - address, phone, latitude/longitude, and hours. Pairs with the Ulta Store Locator. Export to JSON or CSV.
Pricing
from $0.50 / 1,000 stores
Rating
0.0
(0)
Developer
DataCach
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
Share
Ulta Beauty Store Data Scraper
Extract full Ulta Beauty store data — address, phone number, geolocation, weekly hours, curbside hours, mall name, timezone, in-store services, and every brand carried — from any Ulta store page URL. No coding, no CSS selectors, no browser required: just paste in store URLs and run.
What is Ulta Beauty Store Data Scraper?
Ulta Beauty Store Data Scraper is an Apify Actor that turns a list of Ulta Beauty store page URLs into structured JSON data — one clean record per store. It reads the same schema.org / JSON-LD markup and store-locator widget data that Ulta publishes on each store page, so the data is accurate, structured, and ready to export.
Give it URLs like https://www.ulta.com/stores/abilene-tx-409 (typically produced by the Ulta Beauty Store Links Actor) and it returns each store's address, phone, latitude/longitude, timezone, mall name, weekly opening hours, curbside-pickup hours, service availability, and brand assortment — in seconds.
What can Ulta Beauty Store Data Scraper do?
- 📍 Extract full store metadata — address, phone, geolocation, and IANA timezone for every store URL you provide
- 🕒 Pull weekly store hours and curbside-pickup hours as structured day-by-day entries
- 🛍️ Detect in-store services — makeup, hair, brow, and skin services, ear piercing, in-store pickup, curbside pickup, same-day delivery, in-store shopping, wellness shop, and beauty-packaging collection
- 🏷️ List every brand a store carries, plus brands coming soon
- ⚡ Run URLs concurrently with an adjustable
maxConcurrencysetting for faster crawls - 📤 Export to JSON, CSV, Excel, HTML, or XML directly from the Apify platform
- 🕐 Timestamp every record with the exact UTC extraction time, so you always know how fresh the data is
- ☁️ Run on autopilot — schedule recurring runs, trigger via the Apify API, and monitor runs from the Apify Console
- 🔌 Integrate anywhere — connect to Zapier, Make, Google Sheets, and other tools through Apify Integrations, or pull results straight from the Dataset API
- 🌐 Built-in proxy support — route requests through Apify Proxy to stay reliable at scale
Free vs. Premium: how many Ulta stores can I scrape per run?
This is the most important thing to know before you run this Actor:
| Plan | Store URLs processed per run |
|---|---|
| Free / non-paying Apify account | Only the first 5 URLs in your links input are processed — the rest are silently skipped |
| Paid Apify account (Premium) | Unlimited — every URL you provide in links is processed, with no cap |
The Actor checks your Apify account's plan automatically at the start of every run (via Actor.get_env().user_is_paying). If your account is not on a paid plan, it deduplicates your links array and keeps only the first 5 unique URLs, logging a warning in the run log so you know the limit was applied. Paid accounts have this cap fully removed — you can pass in hundreds or thousands of store URLs and every one of them will be scraped, subject only to your maxConcurrency setting and run timeout.
In short: if you want to bulk-extract data for an entire Ulta store directory or a large multi-state list of locations, you'll need a paid Apify plan. For testing the Actor on a handful of stores, the free tier works fine.
What store data does Ulta Beauty Store Data Scraper extract?
| Field | Description |
|---|---|
name | Store brand name |
branch | Ulta's internal store/branch number |
street, city, state, zipcode, country | Full store address |
phone | Store phone number |
latitude, longitude | Store geolocation coordinates |
timezone | Store's IANA timezone (e.g. America/Chicago) |
mall_name | Mall or shopping center name, if applicable |
hours | Weekly opening hours as { day, opens, closes } entries |
curbside_hours | Separate curbside-pickup hours, if published |
makeup_services, hair_services, brow_services, skin_services, ear_piercing | Booleans for available in-store services |
in_store_pickup, curbside_pickup, same_day_delivery, in_store_shopping | Booleans for fulfillment options |
wellness_shop, beauty_packaging_collection | Booleans for additional store features |
brands | Full list of brands currently carried at this store |
brands_coming_soon | Brands scheduled to arrive at this store |
extraction_datetime | UTC timestamp (ISO 8601) of exactly when the record was extracted |
extraction_date | Extraction date in mm-dd-yyyy format, for easy filtering by scrape day |
How do I scrape Ulta Beauty store hours, address, and phone number?
- Get Ulta store page URLs — run the Ulta Beauty Store Links Actor, or collect them yourself from the Ulta store directory.
- Open this Actor's Input tab and paste the URLs into the
linksfield (one per line, or as an array). - Optionally adjust
maxConcurrency— how many store pages fetch in parallel (default5, max20). - Click Start.
- When the run finishes, open the Output tab and export your data as JSON, CSV, Excel, or HTML.
Input
The Actor takes two input fields — see the Input tab for the full form:
links(required) — an array of Ulta Beauty store page URLs to extract data from, e.g.https://www.ulta.com/stores/abilene-tx-409. These typically come straight from the Ulta Beauty Store Links Actor's output.maxConcurrency(optional, default5, max20) — how many store pages to fetch in parallel. Higher values finish faster; lower values are gentler on Ulta's servers and reduce the risk of being rate-limited.
Remember: free-plan accounts only process the first 5 URLs per run — see the Free vs. Premium section above.
Output example
{"url": "https://www.ulta.com/stores/abilene-tx-409","name": "Ulta","branch": "409","street": "4310 Buffalo Gap Road, # 31","city": "Abilene","state": "TX","zipcode": "79606","country": "US","phone": "+1 325-691-1394","latitude": 32.4008496,"longitude": -99.7619005,"timezone": "America/Chicago","mall_name": "Mall of Abilene","hours": [{ "day": "Mon", "opens": "10:00", "closes": "21:00" },{ "day": "Sun", "opens": "10:00", "closes": "19:00" }],"curbside_hours": null,"makeup_services": true,"hair_services": true,"brow_services": null,"skin_services": null,"ear_piercing": true,"in_store_pickup": true,"curbside_pickup": false,"same_day_delivery": false,"in_store_shopping": true,"wellness_shop": true,"beauty_packaging_collection": true,"brands": ["Makeup Revolution", "ARMANI", "CHANEL", "MAC", "..."],"brands_coming_soon": ["Bath & Body Works", "Sam Edelman", "..."],"extraction_datetime": "2026-07-24T14:30:00.123456+00:00","extraction_date": "07-24-2026"}
You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.
Use cases
- Store locator apps — power a store-finder page with live address, hours, and geolocation data
- Competitive & market research — track which brands each Ulta location carries and where new brands are launching first
- Retail location intelligence — build datasets of store density, mall placements, and service availability by region
- Hours and service monitoring — schedule recurring runs to catch changes in curbside pickup, wellness shop availability, or holiday hours
- Data enrichment — append verified phone numbers, timezones, and coordinates to an internal store database
- Beauty brand distribution analysis — see exactly which stores carry a given brand, or which brands are "coming soon" across a region
Ulta Beauty-related Actors
| Actor | What it does |
|---|---|
| Ulta Beauty Store Links | Crawls the Ulta store directory and outputs the store page URLs this Actor needs as input |
FAQ
Is it legal to scrape Ulta Beauty store data?
This Actor only extracts publicly available data — the same structured schema.org/JSON-LD data and store-locator widget data that Ulta Beauty already publishes on its public store pages for search engines and browsers to read. It does not access any account-gated or private information. That said, you're responsible for reviewing Ulta's Terms of Service and applicable laws before scraping, and for how you use the resulting data. See the Apify blog post on the legality of web scraping for more background.
How many stores can I scrape for free?
Free Apify accounts are limited to the first 5 store URLs per run. Upgrading to a paid Apify plan removes this cap entirely — see Free vs. Premium above for full details.
Can I get Ulta store data through an API instead of the Console?
Yes. Every Apify Actor run — including this one — can be triggered and its results retrieved through the Apify API and official SDKs for JavaScript and Python. You can also schedule recurring runs and connect results to Zapier, Make, or Google Sheets via Apify Integrations.
What if a store URL fails or gets blocked?
Links that fail or are blocked by anti-bot protection are automatically skipped and logged — they don't stop the rest of the run. The run only fails if no link succeeds. Check the run log for a summary of how many stores were extracted, blocked, or failed.
Do I need the Ulta Beauty Store Links Actor first?
Not strictly — you can supply any valid Ulta store page URL yourself. But pairing this Actor with Ulta Beauty Store Links lets you go from "every store in a region" to "every store's full metadata" in two clicks, without manually collecting URLs.
Why are some service fields null?
Fields like brow_services or skin_services are null when Ulta doesn't publish that information for a given store — it's not a missing-data error, it simply means the store page doesn't declare that service either way.
Support
Found a bug, a store page format Ulta changed, or a missing field you need? Open an issue on this Actor's Issues tab in Apify Console and it'll be looked at. Need a custom scraper, a different data shape, or ongoing monitoring set up for you? Reach out through the Actor's Contact developer button on its Store page.