Brand Store Locator & Stockist Scraper
Pricing
from $6.00 / 1,000 stockist / location rows
Brand Store Locator & Stockist Scraper
Scrape public brand store locators, stockist/where-to-buy pages, retailer lists, and dealer locators into clean location rows for ecommerce, retail, beauty, and DTC market intelligence.
Pricing
from $6.00 / 1,000 stockist / location rows
Rating
0.0
(0)
Developer
The Product Analyst Data
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Brand Store Locator & Stockist Scraper (Beauty, Retail, DTC) ๐๐
Scrape public brand store locators, stockist / where-to-buy pages, retailer lists, and dealer locator pages into clean location rows.
Use it to answer the buyer questions that actually matter: Where is this brand sold? Which chains carry it? Which markets are under-covered? Which stores, salons, retailers, or distributors should I target next?
What you get
- Store locator extraction โ business / stockist name, address, city, state, postal code, phone, coordinates, and source URL.
- Stockist and where-to-buy coverage โ works with public store-locator pages, Stockist-powered widgets, JSON-LD locations, embedded location arrays, and retailer links where available.
- Retail chain normalization โ common retailers like Sephora, Ulta, Nordstrom, Sally Beauty, Target, Walmart, SalonCentric, CosmoProf, Amazon, and more are normalized when possible.
- Metro-area searches โ query Stockist-style map widgets by city, latitude/longitude, and radius.
- Lead-generation ready rows โ export to CSV, Excel, Google Sheets, JSON, or the Apify API for sales, distribution, territory, and market-research workflows.
- Diagnostics instead of silent failure โ unsupported, blocked, or empty locator pages can emit diagnostic rows so you know what happened.
Best use cases
- Scrape a brand's public store locator into a location dataset.
- Map a competitor's retail footprint by city, state, or chain.
- Find distribution gaps where a brand is missing stores, chains, or dealers.
- Build prospect lists for retail buyers, distributors, field reps, wholesale teams, and agencies.
- Monitor public stockist / where-to-buy pages over time.
- Analyze beauty, wellness, DTC, retail, salon, and ecommerce distribution coverage.
Buyer-ready offer
Send 1-3 brand store-locator or where-to-buy URLs. Iโll return a clean location spreadsheet showing where the brand is sold by city, state, chain, and market.
Best buyers: brands, distributors, wholesale teams, retail analysts, agencies, and local operators comparing retail footprint or distribution gaps.
Input example
{"brandUrls": ["https://patternbeauty.com/pages/store-locator","https://olaplex.com/pages/certified-stylists"],"searchAreas": [{ "label": "New York, NY", "latitude": 40.7128, "longitude": -74.0060, "radiusMiles": 25 },{ "label": "Los Angeles, CA", "latitude": 34.0522, "longitude": -118.2437, "radiusMiles": 25 },{ "label": "Atlanta, GA", "latitude": 33.7490, "longitude": -84.3880, "radiusMiles": 25 },{ "label": "Chicago, IL", "latitude": 41.8781, "longitude": -87.6298, "radiusMiles": 25 }],"maxResultsPerBrand": 100,"maxPagesPerBrand": 6,"includeDiagnostics": true,"mode": "stockist"}
| Field | What it controls |
|---|---|
brandUrls required | Brand homepages or direct store-locator / stockist / where-to-buy / dealer-locator URLs. Direct locator URLs work best. |
searchAreas | Metro areas used to query map widgets. Add more cities for wider coverage. |
maxResultsPerBrand | Maximum deduplicated location rows per brand. |
maxPagesPerBrand | Maximum candidate pages to fetch for each brand while discovering locator pages. |
includeDiagnostics | Emit diagnostic rows for unsupported, blocked, or empty locators. |
mode | Use stockist for retail / where-to-buy / store-locator output. |
Sample output
Representative rows from a verified cloud run:
| Brand | Stockist / Store | Type | Address | Provider |
|---|---|---|---|---|
| Patternbeauty | Sephora World Trade Centr | chain retailer | 185 Greenwich Street, Suite LL4305 (C2), New York, NY 10007 | stockist |
| Patternbeauty | Sephora Downtown Brooklyn | chain retailer | 210 Joralemon Street, Brooklyn, NY 11201 | stockist |
| Patternbeauty | Nordstrom Rack New York | chain retailer | 60 E 14th Street, New York, NY 10003 | stockist |
| Olaplex | Laicale | salon | 129 Grand Street, New York, NY 10013 | stockist |
Example row shape:
{"rowType": "stockist","brandName": "Patternbeauty","brandDomain": "patternbeauty.com","stockistName": "Sephora Downtown Brooklyn","stockistType": "chain_retailer","retailerChainNormalized": "Sephora","address": "210 Joralemon Street, Space B","city": "Brooklyn","state": "NY","postalCode": "11201","latitude": 40.6924,"longitude": -73.9905,"locatorProvider": "stockist","searchAreaLabel": "New York, NY","sourceUrl": "https://patternbeauty.com/pages/store-locator","scrapedAt": "2026-07-04T17:47:03.543Z"}
Latest verified cloud smoke:
| Metric | Value |
|---|---|
| Rows | 80 clean / 80 total |
| Location rows | 80 |
| Diagnostic rows | 0 |
| Brands | Patternbeauty 40, Olaplex 40 |
| Runtime | ~4 seconds |
Output fields
brandName, brandDomain, stockistName, stockistType, retailerChainNormalized, address, address2, city, state, postalCode, country, latitude, longitude, phone, buyUrl, locatorProvider, searchAreaLabel, distanceMiles, sourceUrl, scrapedAt.
How it works
This Actor scans supplied URLs for public locator pages and extracts data from:
- Stockist-powered locator widgets.
- JSON-LD
LocalBusiness,Store, and related location data. - Embedded public location arrays.
- Retailer, stockist, dealer, and store-list links where available.
For Stockist widgets, it queries public search endpoints by latitude, longitude, and radius, then deduplicates rows by business, address, and geography.
It does not log in, access private data, scrape customer accounts, or bypass paywalls.
Pricing
This Actor uses Pay per event pricing:
apify-actor-start: $0.00005 per run start.stockist-location-row: $0.006 per real stockist / location row.- Diagnostic rows are emitted for transparency but are not charged as value rows.
Displayed price: from $6.00 / 1,000 location rows.
Limitations
- Works best with direct public store-locator, stockist, dealer-locator, or where-to-buy URLs.
- Stockist-powered locators are queried by
searchAreas; add more cities for national coverage. - Browser-only locator platforms or private APIs may return diagnostics until provider-specific support is added.
- Address quality depends on the source locator data.
- Not affiliated with Stockist, Shopify, or any listed brand. Use responsibly and respect each site's terms.
Beauty Data Toolkit
This Actor is part of a focused beauty-market data toolkit:
| Need | Actor |
|---|---|
| Product drops, prices, variants, discounts | Shopify Product Feed & Price Scraper |
| Brand retail footprint and where-to-buy / store-locator rows | Brand Store Locator & Stockist Scraper |
| Salon, stylist, and certified-pro locator rows | Beauty Salon & Pro Locator Scraper |
Use the three together to map what brands sell, where products are stocked, and which salons/pros carry or certify around professional lines.
FAQ
Can I use this beyond beauty brands?
Yes, when the brand exposes a compatible public locator, stockist, dealer, or where-to-buy page. Beauty and DTC brands are the main examples, but the extraction pattern also fits retail, wellness, salon, ecommerce, and distributor-location research.
Why do I need search areas?
Many locator widgets return nearby locations, not a full national dump. Add metro coordinates for the markets you care about.
Can I scrape multiple brands at once?
Yes. Add multiple brandUrls; each output row includes brandName, brandDomain, and sourceUrl.
What happens if a locator is unsupported?
With includeDiagnostics: true, the Actor emits diagnostic rows explaining what failed or what provider was detected.
Can I export the results?
Yes. Apify datasets can be exported to JSON, CSV, Excel, XML, RSS, Google Sheets integrations, or read through the API.
Quality / verification
This project now ships with a reusable sample input and standard local checks:
npm run checkcp examples/sample-input.json storage/key_value_stores/default/INPUT.jsonCRAWLEE_STORAGE_DIR=./storage APIFY_LOCAL_STORAGE_DIR=./storage node src/main.js
API usage
Run from the Apify CLI:
$apify call fierce_quoll/beauty-stockist-radar --input-file examples/live-input.json
Or use the API tab on the Actor page for language-specific snippets.