Store Locator Scraper with Change Detection
Pricing
from $4.00 / 1,000 location scrapeds
Store Locator Scraper with Change Detection
Store locator scraper: every store location of a brand with address, coordinates and hours, plus store openings, closures, moves and hours changes on repeat runs.
Pricing
from $4.00 / 1,000 location scrapeds
Rating
0.0
(0)
Developer
Final Dynamics
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
16 hours ago
Last modified
Categories
Share
Turn a brand's "find a store" page into a clean list of store locations data, and then watch it: run again later and get only the stores that opened, closed, moved or changed hours.
It reads locators that publish their locations in the page itself: Yext, including the
statically generated locations.brand.com sites that chains use, Stockist, Storemapper,
Uberall, common Shopify store-locator apps, and any store page carrying its data as
JSON-LD or microdata. Where a chain publishes a store directory or a sitemap, the actor
walks it and reads each store page.
Checked against 22 well-known chains on 2026-09-17. Working: Chipotle, Wendy's, Family Dollar, Trader Joe's, Taco Bell, Subway, Best Buy, Petco and Dagne Dover. Not working: brands that refuse automated visitors (Kohl's, Home Depot, Sephora and Panera answer 403), brands whose sitemap is broken (Walgreens returns 500, CVS returns 503) and brands that draw their locations only in the browser (Starbucks, Ace Hardware). A run that finds nothing says which of these it hit.
Built for retail analysts and site-selection teams, dealer and stockist research, competitive tracking, and anyone who has been asked for "every location of brand X" or "tell me when they open a new one".
What you get
One row per location. Every field is flat, so the dataset drops straight into Google Sheets, Airtable or a map.
| Field | Example |
|---|---|
brand | dagnedover.com |
storeName | Babylist Showroom |
addressFull, street, city, state, postalCode, country | 211 S Beverly Dr, Beverly Hills, CA, 90212 |
latitude, longitude | 34.0644, -118.3994 |
phone, email, storeUrl | When the locator publishes them |
hours | { "mon": "09:00-17:00", ... } or null |
services | Tags or filters the locator attaches |
locationId | The locator's own stable ID |
locatorPlatform | stockist, yext, storemapper, uberall, shopify, custom |
changeType, changedFields | new, closed, moved, hours_changed, unchanged |
firstSeenAt, lastSeenAt, scrapedAt | UTC timestamps |
sourceUrl | The locator page the row came from |
Anything the locator does not publish is null.
How to use it
Paste the locator page URL and run.
{"locatorUrls": ["https://www.dagnedover.com/pages/store-locator"]}
Add "country": "US" to keep one country, or "maxLocations": 100 for a capped sample.
Get changes since last time (one-off): run once without a cap to build the full list, then run again with the first run's dataset ID:
{"locatorUrls": ["https://www.dagnedover.com/pages/store-locator"],"diffAgainstDatasetId": "DATASET_ID_FROM_THE_FIRST_RUN"}
Each row now says whether the store is new, closed, moved, hours_changed or
unchanged, and which fields changed. The output is a complete list again, so you can use
it as the next baseline. Set emitUnchanged: false if you only want the changed rows in
the dataset.
Watch a brand on a schedule: create a key-value store in Apify Console, select it as
monitorStateStoreId, and schedule the task. The actor keeps its own complete baseline in
that store, so every scheduled run delivers just the changes. Give each monitor its own
store, and let the schedule run one job at a time.
Several brands at once: list up to 100 locator URLs in locatorUrls. Rows carry
sourceUrl so you can tell them apart.
Quick start
No code needed; about two minutes from input to spreadsheet. For a longer walkthrough with example output, read the guide Build a store location spreadsheet and track changes.
- Open the example "All store locations for one brand (Dagne Dover)" on this actor's page, or paste one of the inputs above into the input form.
- Click Start and wait until the run shows Succeeded.
- Open the Output tab to see the locations as a table.
- Click Export, choose CSV or Excel, and download the file.
- In Google Sheets, choose File > Import > Upload and select the file.
Automate it
A weekly location check: save the brand's locator URL in a task. Click Save as a new
task, then add a schedule for that task under Schedules in Apify Console (for
example every Monday at 07:00). Select a key-value store as monitorStateStoreId (see
above) and each scheduled run delivers only openings, closures, moves and hours changes.
Into Google Sheets with n8n: add the Apify node with the On new Apify Event
trigger, choose your task and the succeeded event, then add an Apify node with Get
Dataset Items using the run's defaultDatasetId, and finish with a Google Sheets
node that appends the rows. Every scheduled run then adds its locations to the same sheet.
Make and Zapier have Apify integrations that work the same way.
Pricing
Pay per event. There are no platform usage charges on top.
| Event | Price | When |
|---|---|---|
actor-start | $0.01 | Once per run |
location-scraped | $0.004 | Per location fetched this run |
change-detected | $0.02 | Per opening, closure, move or hours change found against a baseline |
Examples: a brand with 900 stores costs $3.61 to enumerate. A weekly check of those 900
stores that finds 12 openings, 3 moves, 2 hours changes and 4 closures costs $4.03. The
first run of a brand never charges for changes; everything is simply new.
Set a maximum charge on the run if you want a hard ceiling; the actor stops cleanly at the cap.
Good to know
- A
closedrow means the store disappeared from a complete result from the brand's own locator service. It is a strong signal, not a confirmed closure; check before acting on it. - Closures are only reported when the actor is sure it saw the whole list. If the locator errors, blocks the request, or the run was capped, closures are held back rather than guessed.
- Yext, Stockist, Storemapper and Uberall locators give complete lists and support monitoring. Pages where the actor has to read location data out of the HTML still return rows, but cannot be used for closure detection.
- The actor reads public pages and public locator APIs, honours robots rules, and never logs in, solves CAPTCHAs or uses proxies. A page that only draws its map with JavaScript and exposes no data returns no rows.
- Locations are matched by the locator's own ID, or by address when there is none. Suites and units at one street address count as separate locations.
- HTTP redirects are followed for up to five hops. Redirect targets are checked for public
DNS addresses before their robots.txt or page is fetched. The primary page's final URL
becomes
sourceUrland the fixed scope for directory discovery; later page redirects do not expand that scope. A change of registrable domain appears alongside crawl notices. Domain comparison is a heuristic using the last two labels, or three forco.uk,org.uk,gov.uk,ac.uk,co.nz,co.jp,com.auandco.za. - The worker's network permissions cover the locator hosts you pass, their own site
(
locations.brand.comalso reachesbrand.comandwww.brand.com, so the usual redirect works) and the fixed provider hosts. A redirect to a different site is refused and named in the status message; pass that URL directly if you want it read. - Transport errors retain nested causes. TLS, SSL and certificate failures are identified
in the terminal status instead of being reduced to a bare
fetch failedmessage.
FAQ
How do I get a list of all stores of a brand?
Paste the brand's store locator page URL into locatorUrls and run. You get one row per
location with address, coordinates and, if you want them, opening hours.
Can it track store closures and new store openings?
Yes. Select a key-value store as monitorStateStoreId and schedule the task; every run
after the first delivers only openings, closures, moves and hours changes.
Does it work on any website?
It works on the locator platforms most brands use (Yext, Stockist, Storemapper, Uberall and common Shopify apps) and on pages that embed location data. If a page returns nothing, open an issue with the URL.
Related actors
- Florida Business Leads by Industry: Florida businesses by NAICS code and county.
Questions or a locator that returns nothing? Open an issue on the actor page with the page URL.