Bulk Import Your Existing Accounts

Fill in one template and OpsVara brings your whole list over in one pass, with anyone you no longer service already archived.

Updated September 30, 2026

Moving to OpsVara from spreadsheets or another system starts with your customer list. You fill one CSV template with your customers and their service sites, send it to your OpsVara onboarding contact, and they import it for you in one pass: customers, contacts, billing addresses, sites with their map pins, and details such as pool volume or acreage. Customers you no longer service can come along too, already archived, so their history is kept without cluttering your active lists.

Service contracts are a separate, second pass once your customers are in. See After the import.

Before you start

  • Export your customer list from your current system, or gather it in a spreadsheet.
  • Every customer needs a contact first name, last name, and email address. The import stops on any customer missing one.
  • Every site needs a full street address, city, two-letter state, and ZIP code. OpsVara pins each site on the map from its address.

Fill and send the template

  1. Download the template for your industry

    Open SettingsSetup Wizard and go to the Bulk Import step. Click Download Template. The file carries the site types and site detail columns for your industry, plus three sample rows you can overwrite. The step also lists every column with a short description.

  2. Add one row per site

    Each row is one site. For a customer with two sites, add two rows, repeat the customer columns exactly, and change only the site columns. Rows with the same customer name and contact email become one customer with several sites.

  3. Mark former customers inactive

    In the status column, put inactive on every row for a customer you no longer service. Leave it blank or put active for everyone else. See The status column.

  4. Save as CSV and send it

    Save the file as CSV and send it to your OpsVara onboarding contact. They run the import and let you know when your customers are in.

The columns

Required on every row

ColumnWhat to put in it
customer_nameThe account name, such as a person, household, HOA, or business. Up to 255 characters.
contact_first_name, contact_last_nameThe main contact's name.
contact_emailThe main contact's email. Must be a valid address.
billing_address_line1, billing_cityThe billing street and city.
billing_stateTwo-letter US state code, such as FL.
billing_zipFive-digit ZIP, or ZIP+4.
site_nameWhat you call the site, such as "Backyard Pool" or "Cimarron Ponds".
site_typeThe kind of site. See the table below for your industry's values.
site_address_line1, site_city, site_state, site_zipThe service address, same formats as billing.
IndustryAccepted site_type values
Pool serviceinground, above_ground, spa, commercial
Aquatic weed and lake managementpond, lake, fountain_site, other
Lawn careresidential, commercial, common_area
Other field serviceresidential, commercial

Optional, about the customer

ColumnWhat it does
contact_phoneThe main contact's phone.
billing_address_line2, billing_countrySuite or unit, and country.
tagsComma-separated labels, such as hoa, net 30. Useful for finding groups of customers later.
notesNotes on the customer record.
active_yearsEvery year the customer was active, comma-separated, such as 2022, 2023, 2025.
customer_sinceThe first year they were a customer, such as 2019.
last_active_yearThe most recent year they were active. Used together with customer_since when active_years is blank.
statusactive or inactive. Blank means active.

Optional, about the site

ColumnWhat it does
site_address_line2, site_countryUnit or gate line, and country.
same_as_billingtrue makes the site use the billing address. Fill the site address columns anyway, because they are still required.
site_notesNotes on the site, such as gate codes or access instructions.
Site detailsPool tenants get site_pool_volume_gallons, site_pool_sanitizer (chlorine, salt, or automated), and site_pool_surface (plaster, vinyl, or fiberglass). Lawn and aquatic tenants get site_acreage, in acres, not square feet. Aquatic tenants also get depth, alkalinity, fountain model, irrigation, and the lakeshore permit columns. Every industry gets site_pricing_tier, from 1 to 5.

The template you download lists only the detail columns for your industry. Any detail you leave blank can be filled in on the site later.

The status column

Put inactive in the status column for customers you no longer service. They are imported archived, the same state as clicking Archive on a customer. The customer and every one of their sites are archived together.

Archived customers:

  • Are hidden from DirectoriesCustomers until you set Status to Archived or Active + archived.
  • Are left out of campaign audiences, which start at Active customers, unless a campaign deliberately targets Archived customers.
  • Cannot have their sites put under a service contract until the sites are activated again.
  • Keep their contacts, addresses, notes, tags, and active years, so a win-back campaign can pick out, for example, customers active in 2024 but not since, using Customer years (optional) on the campaign audience.

The status column accepts active and inactive, in any capitalization. archived is also accepted as a way to write inactive. Anything else, such as Cancelled, stops the import with a message naming the row, so an unexpected value is never imported as active by mistake. When a customer has several rows, every row that states a status must agree. Blank rows follow the row that states one.

Activating a customer does not activate their sites

If a former customer comes back, open DirectoriesCustomers, set Status to Archived, and click Activate customer on their row. Then open DirectoriesSites, show archived sites, and click Activate site on each of their sites. Until the sites are active, they cannot be put under a service contract.

What happens to your file

Your onboarding contact runs four checks before anything is created:

  1. Review. Every customer is listed with its sites. Values the import is unsure of are highlighted, and customers marked inactive show Archived on import.
  2. Duplicates. A customer that already exists in your account is flagged, and your contact either skips the row or creates it anyway.
  3. Map pins. Every site is placed on the map from its address. An address that cannot be found is pinned by hand. Nothing is imported until every site has a pin.
  4. Confirm. The final summary shows how many customers and sites will be created, and how many will arrive archived.

A file in the template's format is read exactly as written. A CSV in another layout, or a PDF, is read by AI instead. That works, but every value it is unsure of has to be checked by hand, so the template is faster and more accurate.

After the import

  • Open DirectoriesCustomers and spot-check a few customers and their sites.
  • Set Status to Archived to confirm your former customers arrived there.
  • Every imported customer starts as residential. Change Customer type on the edit form for commercial, HOA, and municipal accounts.
  • Service contracts come next, as a second import for your active customers. Archived customers are not offered contracts, which is why former customers need no contract rows.
  • The contract file carries a price per month (monthly_rate) or per visit (visit_rate), the first month OpsVara bills (first_billing_month), whether the invoice on the 1st covers the month just finished (bill_last_month; a visit_rate row on a monthly schedule always does), and an optional visit schedule per row (visit_days with every_n_weeks, or visits_per_week / visits_per_month). Rows for the same customer, work type, and season merge into one contract that covers every listed site at its own rate — how a property manager's homes become one plan and one monthly invoice. Each imported contract gets one Service Scope row named for the work type, Billed as: Included because it is the agreement itself; a visit_rate row is Add-on, because it bills each completed visit, and so is a merged contract's row priced site by site. See Bill the Month Just Finished and Bill Per Visit on a Monthly Invoice.

Troubleshooting

Message or problemFix
A row says a required column is missingFill that column on that row. Every customer needs a first name, last name, and email, and every site a full address.
billing_state or site_state must be a 2-letter US state codeReplace state names with codes, such as FL instead of Florida.
ZIP must be 5 or 9 digitsSpreadsheets drop leading zeros from ZIP codes. Format the column as text and retype the ZIP.
site_type must be one of your industry's valuesUse a value from the table above, spelled exactly.
status must be active or inactiveChange the value to active or inactive, or clear it.
status disagrees with an earlier rowOne customer has rows marked both active and inactive. Pick one status for the customer.
One customer became twoThe customer name or contact email differs between their rows. Make both identical on every row.

Frequently asked questions

Can I send an Excel file?

Save it as CSV first. The import reads CSV files, which is what the template is, and PDFs. Any spreadsheet program can save a sheet as CSV, and the column headers carry over unchanged.

What if my file is an export from my old software and does not match the template?

Send it anyway. A CSV with other column names, or a PDF, is read by AI and every value it is unsure of is highlighted for review before anything is created. It is slower and less exact than the template, so copying your data into the template columns is still the better route when you can.

Two of my customers share one email address. Will they be merged?

No. Rows only become one customer when both the customer name and the contact email match. Customers under one property manager can share the manager's email as long as their names differ.

Why import former customers at all?

Their history stays with you. Imported inactive, they are archived from day one, so they stay out of your directory and your campaigns, but you can still find them, see the years they were active, and bring any of them back with one click when they return.

A customer I imported as inactive came back. How do I restore them?

Open Directories → Customers, set Status to Archived, and click Activate customer on their row. Then open Directories → Sites, set the status filter to Archived, and click Activate site on each of their sites. Activating a customer does not reactivate their sites on its own.

Are imported customers residential or commercial?

Every imported customer starts as residential. For commercial, HOA, or municipal accounts, change Customer type on the customer's edit form after the import.

Related guides