Get your stores into WP Store Locator
Drop your spreadsheet. Get back the exact file it imports.
Drop your spreadsheet hereChoose your spreadsheet
or
Read on your computer, never uploaded.
No file?
Try one:
Pick one to see what CSV Mapper does with it.
What WP Store Locator needsYou don't have to do any of it
- Every store needs a name, an address and a town. Rows missing one are skipped without a message.
- Each store has an ID (wpsl_id). Keep it and a re-import updates the store. Leave it blank and you get a second copy.
- Lowercase headings, 20 columns in a set order, saved as UTF-8, or accents break.
You don't have to do any of this. Drop your file and we do all three. If you already have stores there, we'll ask for your export.
Also for: StockistAgile Store LocatorStorepointGoogle Business ProfileYour own template
The CSV Manager add-on reads a comma-separated file with lowercase headers, from wpsl_id to category. Drop in your own spreadsheet above and we give you back that exact file.
The exact headers
These are the 20 columns of the official sample file, in order. The add-on also documents status, permalink, author and date, and custom meta box fields use the meta field name as their header. Header case is not documented, so we use lowercase exactly as listed.
wpsl_id,name,description,excerpt,address,address2,city,state,zip,country,country_iso,lat,lng,phone,fax,email,url,hours,image,categoryDownload this header row as a CSV
What WP Store Locator needs
- name, address and city must be filled. Rows with any of them empty are skipped.
- The address is split: address, address2, city, state, zip, country and country_iso. country_iso is the 2-letter code, like US.
- lat and lng are optional. Empty ones are looked up with Google's Geocoding API during import.
- Several categories go in one category cell, separated by a pipe: my category|my category b.
- An empty hours cell uses the default hours from Settings > Store Editor. Otherwise write each day like monday: 09:00-15:00 17:00-21:00. with a full stop after each day.
- status defaults to publish. date must be Y-m-d H:i:s.
How updates and duplicates work
wpsl_id is the WordPress post ID of each store.
An empty wpsl_id creates a new store. There is no matching on name or address, so importing the same rows twice duplicates them.
A wpsl_id that belongs to a store updates it. A wpsl_id that matches nothing is skipped with "Update failed! The provided wpsl_id doesn't belong to a store location". Blank that cell or unmap the column.
So export first, edit, and import again with wpsl_id kept. In the tool, compare with that export and we copy each store's wpsl_id onto the matching row.
To delete stores, the add-on takes a file with only the wpsl_id values filled and every other column blank. It reports "Removed x locations".
Encoding and file size
The file must be comma-delimited and UTF-8. Another encoding fails with errors like "400 Bad Request" from the Geocode API or "Could not insert post".
Large files can hit PHP memory and execution limits. The vendor advises splitting them.
What fails and why
- OVER_QUERY_LIMIT: empty lat and lng are geocoded at import. The vendor doc gives a free quota of about 2,500 lookups per IP address per 24 hours, an undated figure. On shared hosting other sites may use the same IP.
- "Update failed! The provided wpsl_id doesn't belong to a store location": the wpsl_id is not a store on this site.
- "Invalid date": a spreadsheet changed the date format. Unmap the date column.
- "400 Bad Request" or "Could not insert post": the file is not UTF-8.
- Fatal errors in the add-on on PHP 8 are reported in support threads from 2024. That is a plugin problem a cleaner file will not fix.
Questions
Why does the import say "Update failed! The provided wpsl_id doesn't belong to a store location"?
The row has a wpsl_id that is not a store on your site, often because the file came from another site or the store was deleted. Blank the wpsl_id to add it as a new store, or unmap the column.
Why does the import stop with OVER_QUERY_LIMIT?
Rows without lat and lng are geocoded through Google during import, and the free quota ran out. Fill lat and lng where you have them, or import the rest the next day.
Why do my dates show "Invalid date"?
The date column must be Y-m-d H:i:s, and spreadsheets often reformat it. Unmap the date column if you do not need it.
Related
Sources
Last checked against the vendor docs on 2 October 2026. Platforms change their importers, so check the source if something looks different.