A store locator app for Shopify is a data problem long before it is a map.
Nobody opens a store locator app for Shopify to look at a map. They want one answer: which shop near me has this, and is it open now. That answer comes out of your location records, and the map is only how you draw it. The same ranking problem sits under marketplace apps, where nearest and in stock beat prettiest every time.
This page covers which fields Shopify already holds for every location, which ones it does not hold at all, how to rank the nearest shop without paying for geocoding, and exactly where the free options stop being usable.
See what free geocoding actually allowsThe short version
Shopify already knows where your shops are, it does not know when they open.
Every location in a Shopify store carries a full postal address, and that address carries latitude and longitude as well. So the half of a store finder that people budget for, turning addresses into points on a map, is often already done before you write a line of code.
What is missing is most of what a shopper actually asks. Opening hours, holiday closures, whether there is parking, which services that branch offers, a photo of the front door. None of those is a field on a location, so the real build is deciding where the extra facts live and who keeps them true.
What Shopify already stores about each location
Start by reading what you have. In the Admin API a location carries a name, an address, an isActive flag, a fulfillsOnlineOrders flag and local pickup settings. The address is its own object, and it holds address1, address2, city, province and provinceCode, country and countryCode, zip, phone, a formatted version, and latitude and longitude as floating point numbers.
Latitude and longitude are the two worth pausing on. Both are nullable, so a location can exist without them, but where they are filled in you do not need a geocoder for your own shops at all. You geocode what the shopper types, not what you already store. That single fact removes most of the cost people plan for in a shopify store locator.
The gap is hours. There is no opening hours field on a location and no holiday calendar either. A location does support metafields, so hours can be attached there as structured data and stay editable in the Shopify admin. The alternative is your own table keyed by location id. Either works. What does not work is a hard coded list inside the app, because the first time a branch changes its Saturday closing you are shipping a new build to fix it.
Free maps, free geocoding, and where free ends
Yes, there is a free geocoding option with a documented API and no card. It is Nominatim, the geocoder the OpenStreetMap Foundation runs on OpenStreetMap data. No account, no key, no billing details. The published terms are strict, and they are worth reading before you design anything around them.
The usage policy sets an absolute maximum of one request per second, requires a valid HTTP Referer or User-Agent that identifies your application, requires visible attribution, and states that results must be cached on your side. The data is under the ODbL licence, which carries a share alike requirement. Bulk work is limited to a single thread on one machine, and scripts that run longer than a day or on a schedule are held to four requests per minute.
One line in that policy decides the shape of your search box: auto-complete search is not permitted. So a free geocoder can turn a submitted postcode into a point, and it can backfill coordinates for any shop whose address you hold, once, cached. It cannot power a store finder app that fires a lookup on every keystroke. If you want typeahead, that is a paid geocoder or your own index of your own place names.
The map itself is a separate question with separate terms. The renderer is genuinely free: MapLibre GL JS is open source and costs nothing to use. The tiles it draws are served by somebody, and that somebody sets the terms, whether that is a community service with a usage policy or a vendor with a bill. So the honest answer is yes for geocoding on the conditions above, and yes for the map only once you have read the tile terms you are actually using.
OpenStreetMap Foundation, Nominatim usage policy
Try it
How many geocoding requests your design needs
Storing coordinates on the shop record takes the whole store list out of the count. Only what the shopper types is left.
3,000 against 123,000 requests a month
Coordinates stored on the shop record, set against geocoding the whole list on every search. Backfilling 40 shops once takes about 40 seconds at one request a second. One lookup per submitted search is the shape the free policy can carry.
Ranking the nearest shop
Sorting by distance is not the hard part. With coordinates already on every location, a haversine calculation over a few hundred rows runs instantly on a phone and never needs a server. Hold the list on the device, rank it on the device, and the nearest shop appears before a network request would have come back.
Shopify does offer proximity sorting of its own. The Storefront API has a locations query that takes a near argument and a DISTANCE sort key, and a product variant exposes store availability at nearby locations with a stock count and a pickup time. Check the scope and the scope of the result before you build on it: the query needs unauthenticated read access to product pickup locations, and it returns only the locations that support in store pickup. A shop that is not set up for pickup will simply not be in the list.
That constraint is why a lot of builds end up copying the full location list out of the Admin API into their own store and serving it to the app from there. It also gives you somewhere to put the fields Shopify has no room for. A loyalty card app usually needs the same list for the same reason, because it has to know which branch the customer walked into.
The last piece is the shopper position. Location permission on a phone is a prompt the customer can refuse, so a postcode or town box has to work just as well as the blue dot. Build the typed path first and treat the permission as a shortcut, not a requirement.
The list is only as good as the person updating it
A store locator goes wrong slowly. A branch changes its Sunday hours, a unit moves two doors down, one shop closes for a refit. Nobody tells whoever owns the app, and the retail location app quietly starts sending people to a shuttered door. Every locator that stays accurate has one thing in common: the people in the shops can change their own entry.
That means a second, small surface for staff. A manager opens the app, changes today's hours, adds a note that the car park is closed, and it is live. Keep it to the fields that genuinely change, and record who changed what and when, because that is the record you want when a customer says the app told them otherwise.
Delivery is the usual next question, and it is a different app with a different shape. Whether a branch delivers, how far it goes and what it charges sits much closer to a local delivery app than to a finder. Keep the two separate in the data even when they share a screen.
All of this needs somewhere to sit: the copied locations, the hours, the staff edits, the history of changes. That is a backend question rather than an app question, and it is worth reading about where the store list lives before you commit to one.
What each approach gives the shopper
| Option | Ranks by distance | Follows your Shopify locations | Shows stock at that shop | No card needed to start |
|---|---|---|---|---|
| A static page of addresses | No | No | No | Yes |
| Commercial map embed | Yes | No | No | varies by vendor |
| Locator app from the Shopify App Store | Yes | depends on the app | depends on the app | varies by app |
| Free map plus free geocoding | Yes | only if you sync it | No | Yes |
| A locator app you build | Yes | Yes | Yes | depends on your map |
Building one around your own shops
Most Shopify locator tools are built for one job: a map widget on a storefront page. That is the right tool if a map on the website is the whole ask. It stops fitting the moment you want a phone app, with a saved home shop, a notification when the nearest branch gets stock back, a list that still works with no signal, and a staff screen for changing today's hours.
Newly is an AI app builder. You describe the app in plain English, including the fields your shops actually need, and it writes a real React Native and Expo project you own. Plans are $25 a month and there is no free plan. iOS builds go to TestFlight through App Store Connect using your own Apple Developer account, and the Deploy tab has an Android section that builds, signs and uploads to Google Play internal testing in one press, and also produces a standalone release APK you can install straight onto a phone. That last part matters here, because the staff screen tends to land on whatever handset is already sitting behind the counter.
It does not sell map data, it does not come with payments, and it is not a Shopify app in the app store sense. It is what you reach for when the widget on the website was never the thing you needed.
Questions people ask about Shopify store locators
It is an app that takes the locations already set up in a Shopify store and helps a shopper find the right one: the nearest, the one that is open, the one that has the item. The names, addresses and coordinates come from Shopify. Hours, photos and service notes have to be added, because Shopify has no field for them.
Describe the shops your customers actually ask about
Write down what a shopper needs to know before they set off, and what the person behind the counter should be able to change without calling anyone.
Start building