A connected data source refreshes on its own, as often as you choose in the source settings: every hour, or once a day. Between runs your map keeps serving the locations it already has, so a slow or unreachable spreadsheet never empties it. This is what one run does.
Each run first checks that your sheet still looks the way you mapped it: the header row is there, no header is duplicated, a column is mapped to name, and every column you mapped earlier is still present. If a check fails, the run stops before a single row is written, the source is paused, and you get an email saying what failed, with a link to the source settings. Fix the sheet, unpause the source, and the next run continues as before.
The app keeps a progus_id column in your sheet and creates it the first time it needs it. That is how a row keeps its identity: it is recognised on the next run, so your edits update the existing location instead of adding a second copy. Rows without a name are skipped and counted, so one unfinished row never stops the rest. The sheet is the source of truth, so a row you delete removes its location on the next run. Shopify Locations works the same way.
Rows are read in batches with a pause between them, which keeps a large sheet inside the Google API limits. A batch that fails for a temporary reason is retried up to five times, and the run picks up where it stopped. Runs are queued and the queue survives a restart, so a job in flight is finished rather than lost, and a source already running never starts on top of itself. A run that cannot finish never deletes anything, because removals happen only once the whole sheet has been read: the rows it managed to read stay imported, and the next run picks up the rest.
The error is recorded on that run and emailed to the store owner with the details and a link to the source. If three runs in a row end with an error, the source is paused so it stops retrying a sheet that needs your attention.
Open Locations and pick your source to see its runs. Each entry shows how many locations that run added, updated and removed, and any error it hit. A run with nothing to change creates no entry, so every line in the list means something actually happened.
A Shopify Locations source mirrors the locations on your store: new added, changed updated, removed deleted. Inactive locations are brought in too, switched off, so they stay off your map until you activate them. Coordinates Shopify already holds are used as they are. Queue, retries, alerts and the import log are the same as for a sheet.
Setting a source up for the first time? See How to Connect a Google Spreadsheet to Progus Store Locator.
Keep the progus_id column in the sheet: it is what lets rows update instead of duplicate.
Stuck on any of this? Open the chat in the bottom right corner of the app and we will help you set it up.