Bulk editing and CSV import
Updated August 24, 2026
Two tools save you from opening locations one at a time. Bulk edit applies a single property — a phone number, a description, a schedule, a logo — to as many locations as you select. It can push the change to your Google listings in the same pass. Import (CSV) exports every location you can see as a spreadsheet, then takes it back with any number of fields changed. New locations come in as extra rows.
Before you start
- Bulk edit requires Locations: full access covering every location you select.
- Import (CSV) requires Locations: full and a team with Global scope. Users on a scoped team do not see the button.
- A CSV that updates locations you are not an administrator of is rejected in full. So is a CSV containing new rows, if you do not have full access across the account.
- Creating new locations still consumes your plan’s location quota.
Where to find it
Locations → Manage locations (https://app.pluspoint.io/locations/manage).
Bulk editing one property across many locations
- Select Bulk edit.
- In Locations, choose the locations to change.
- In Select property, choose what to change and fill in the editor. One bulk operation edits one property — to change two things, run it twice.
- Switch on Sync changes with external profiles if the change should also be pushed to connected Google listings.
- Select Apply to N location(s).
Properties you can bulk edit
| Property | Editor | Rules |
|---|---|---|
| Location name | Text | Required |
| Status | Open / Closed | No external sync |
| Primary phone and Ext. | Phone field | International format |
| Text | Must be a valid email address | |
| Website | Text | Must start http:// or https:// |
| Business hours | The seven-day editor | Replaces the whole weekly schedule |
| Special hours | The date-row editor | Merged into each location’s existing future dates |
| Short description | Multiline | 75 characters, no links |
| Medium description | Multiline | 500 characters, no links |
| Long description | Multiline | 750 characters, no links |
| Opening date | Date picker | |
| Services | Up to 4 rows | |
| Payment methods | Checkbox grid | |
| Social link: Facebook, Social link: Instagram, and one entry each for X, LinkedIn, Pinterest, YouTube and TikTok | Prefixed input | Must be a non-empty absolute URL |
| Logo | Image uploader | Up to 500 KB |
| Cover photo | Image uploader | Up to 5 MB |
Rules worth knowing before you apply
- Bulk edit always sets a value; it never clears one. There is no way to blank a field across many locations — a social link bulk edit, for example, requires a non-empty URL. To empty a field, edit the locations individually.
- Business hours replace the whole week on every selected location, and switch Enable business hours on when at least one day is open.
- Special hours merge. Dates you supply overwrite the same date; existing future dates you did not mention are kept; past dates are dropped.
- The Payment methods grid here is not filtered by industry or country, so check your selection makes sense for every location in the batch.
- The Opening date picker here does not stop you choosing a future date, while the single-location form caps it at today. Keep bulk values in the past.
- Select your locations before uploading a logo or cover photo. Uploading first produces an error.
- You get one Successfully updated toast for the whole batch. Individual per-location failures are not listed, so if a location looks unchanged afterwards, open it and check.
What “Sync changes with external profiles” pushes to Google
The push happens after the Pluspoint save succeeds, and only for locations that have a connected Google profile.
| Bulk property | Pushed to Google |
|---|---|
| Location name | Yes, as the listing title |
| Short, Medium, Long description | Yes — Google receives a single description: the long one if set, otherwise medium, otherwise short |
| Primary phone and Ext. | Yes |
| Website | Yes |
| Business hours | Yes |
| Special hours | Yes |
| Opening date | Yes |
| Logo, Cover photo | Yes |
| Social links | Yes, as Google location attributes. Only the platform you edited is written, so the others are left alone |
| Email, Services, Payment methods, Status | No — these have no Google equivalent and are never pushed |
Exporting your locations
The export is the first step of the import flow, not a separate button.
- Select Import (CSV).
- Under Download template, select Download.
You get locations_import_example.csv, already filled in with every location you have access to. This is both your export and your import template — the header row is what the importer reads.
Importing a CSV
- Select Import (CSV) and download the template if you have not already.
- Edit the file. Leave the Id cell filled to update that location; clear it, or add a brand-new row without an Id, to create one.
- Under Upload file, select Upload and choose your file.
- Check the Locations to update and Locations to add counts that appear.
- Select Validate.
- Review the table — cells that fail validation are highlighted. Turn on Show errors only to see just the problem rows.
- Fix the problems: delete offending rows with the trash icon, or select Back, correct the file and upload it again.
- Select Import N location(s).
Note Save your file as
.csv. The file picker will let you choose a spreadsheet, but only CSV is accepted, and the file must be under 5 MB.
Import N location(s) stays disabled while any row still has a validation error, or while the new rows would exceed your plan’s location limit.
Only the columns you send are changed
The importer builds its update list from your header row, not from the cells. A column that is not in the file is left untouched on every location. That makes cut-down files the safest way to work: a file containing only Id and Primary Phone updates phone numbers and nothing else.
A few groups are treated as a unit — include any column from the group and the whole group is replaced:
| Group | Columns that trigger it |
|---|---|
| Categories | Any Category N column |
| Services | Any Service N column |
| Business hours | Any weekday column |
| Payment methods | Any payment method column |
Template columns
| Group | Columns |
|---|---|
| Identity | Id, Type, Internal Name, Location Name, Geomodifier, Closed |
| Contact | Primary Phone, Phone Extension, Email, Website, Google URL, Facebook URL |
| Address | Show Address, Latitude, Longitude, Address Line 1, Address Line 2, City, Postal Code, Region, Country |
| Descriptions | Short Description, Medium Description, Long Description, Opening Date |
| Featured message | Featured Message, Featured Message URL |
| Hours | Show Hours, Mon, Tue, Wed, Thu, Fri, Sat, Sun |
| Images | Logo, Cover |
| Categories and services | Category 1 … Category 10, Service 1 … Service 4 |
| Payment methods | Insurance, Cash, Visa, Mastercard, Apple Pay, Android Pay, PayPal, American Express, Discover, Invoice, Bitcoin, Travelers Check, Diners Club |
| Social links | Social Facebook, Social Instagram, Social X, Social LinkedIn, Social Pinterest, Social YouTube, Social TikTok |
Accounts whose industry is Healthcare and Dental and whose country is the United States get a wider template. It adds First Name, Last Name, Degree, National Health Provider Id, Certifications, Office and Headshot.
Column values
| Column | Accepted value |
|---|---|
Id | The Pluspoint location id. Filled = update that location. Empty = create a new one |
Type | Location, HealthcareFacility, HealthcareProfessional, Hotel or Restaurant, case-insensitive. Blank leaves the type unchanged |
Closed | true or false. true sets Status to Closed; blank means Open |
Show Address, Show Hours, payment method columns | true or false. Blank counts as false |
Mon … Sun | HH:mm-HH:mm, with multiple ranges separated by ; — for example 09:00-13:00;15:00-19:00. All day is 00:00-24:00. A blank cell means closed that day |
Opening Date | yyyy-MM-dd. Any other format is ignored |
Latitude | A number between −90 and 90 |
Longitude | A number between −180 and 180 |
Category 1 … Category 10 | Google category ids (gcid: values; the categories/gcid: prefix is optional). Category 1 is the primary category. Values Google does not recognise are dropped |
Service 1 … Service 4 | Free text |
Degree | The degree’s short code or its full description, case-insensitive |
Certifications | A comma-separated, quoted list inside the single cell. Curly quotes are handled. Up to 10 entries of up to 256 characters each |
Social * | Absolute http:// or https:// URLs |
Primary Phone | 7–15 digits once punctuation is removed. A number without a + prefix needs the Country column filled in |
Note Three things cannot be set by CSV: special hours, the time zone (it is derived from the coordinates) and the brand. Set special hours on the location form or through Bulk edit, and brands in the location form or under Settings → Brands.
Troubleshooting
| Symptom | Cause | Fix |
|---|---|---|
| Import (CSV) is not on the page | Your team scope is not Global, or you do not have Locations: full | Ask an account owner to widen your access. See Users and permissions |
| Validate stays disabled | No file uploaded, or the file parsed to zero rows | Check the file has a header row and at least one data row, and is saved as .csv |
| Incorrect file format | A header or field could not be parsed — usually a weekday cell that is not HH:mm-HH:mm, a description containing a link, an invalid social URL, or too many or over-long certifications | Fix the file and upload it again. Nothing was written |
| Phone number must be in international format if country is not specified | A row has a phone number without a + prefix and an empty Country cell | Add the country, or write the number as +<country code><number> |
| You don’t have rights to update company | The file targets a location you are not an administrator of | Remove those rows, or have someone with wider access run the import |
| You don’t have rights to create company | The file contains rows with an empty Id and you do not have full access across the account | Remove the new rows, or have an account owner run the import |
| Adding N new location(s) exceeds your limit of M. | The new rows would take you past your plan’s location quota | Delete some new rows, or raise the limit under Settings → Billing |
| A whole column you sent was ignored | The header name does not match the template exactly | Re-download the template and copy the header row from it verbatim |
| A field you did not include was wiped | A column from the same group was present — categories, services, hours and payment methods are replaced as a unit | Include the whole group’s columns whenever you send any of them |
| Categories vanished after an import | The values were not recognised Google category ids | Use gcid: values, or set categories on the location form where you can search them by name |
| One or more locations were modified by another user | Someone saved one of the selected locations while the batch was running | Re-run the bulk edit for the affected locations |
| A bulk edit reported success but one location is unchanged | Per-location failures are not listed individually | Open that location and apply the change directly |
| Google still shows the old value after a bulk edit | Sync changes with external profiles was off, the location has no connected Google profile, or the property is one Google never receives | Check the sync table above, then re-run with the toggle on |