The customer import brings a whole customer list into PortaPro at once:
customers, their sites, contacts, rate-card lines and opening balances. Every
import can be undone in one step.
Open Customers, then ⋮ → Customer Import.
Two ways in
Paste Your Customer Data (the window opens on this): paste from a
spreadsheet, an email or your notes, in any format, and click Preview
Import. PortaPro reads the paste, maps it to the right fields and shows
everything in the same review steps a file goes through before anything is
saved.
a paste of ten does.
the preview opens with everything else and says so, for example "3 lines of
your paste couldn't be read. Review the preview and add anything missing."
balances are filled only when your paste states them; blanks are asked in
the Billing & Tax step.
downloads instructions that turn your list into a ready-made import file.
Import via CSV or Excel: click Upload File for a `.csv`, `.xlsx` or
`.xls` file (a workbook with several sheets asks which sheet holds your
customers), or Download Template to see every supported column with two
sample rows. `customer_name` and `customer_type` are the required columns.
Addresses can be one combined field or split into street, city, state and
ZIP, not both.
You can also ask the PortaPro connector in Claude or ChatGPT to prepare the
file (see Claude and ChatGPT connector);
you still upload it here.
The review steps
Steps appear only when your data needs them:
| Step | What you do |
|---|---|
| Review Names | Confirm company names that looked odd. |
| Fix Issues | Review warnings on individual rows. |
| Duplicates | Incoming customers that look like ones you already have: merge into the existing customer (its sites are attached to it) or create a new one. |
| Parent Accounts | Confirm groupings when the file files accounts under an umbrella account (below). |
| Match Equipment | Pair each unit type in your file with a product in your catalog, or mark it Service only, no equipment. Rate-card lines must be matched before you can go on. |
| Account Type | Mark unclassified customers Residential or Commercial. PortaPro sorts them into "Looks residential", "Looks commercial" and undecided groups so you can confirm a whole group with All Residential or All Commercial. This step never blocks the import. |
| Billing & Tax | Billing start dates, the Invoice cadence for rows without one (it starts on your company's billing cycle), tax on imported rate-card rows, and opening and credit balances. |
| Import | Confirm and import. |
PortaPro remembers the unit types you matched, so your next import of the
same list needs no matching.
Opening balances and credit balances
If your file has an opening balance column (a QuickBooks "open balance"
export works directly), the sign decides what PortaPro creates:
| Value in the file | Meaning | What the import creates |
|---|---|---|
| Positive (e.g. `805`) | The customer owes you | A sent invoice dated as of the balance date, so your A/R aging matches your old system from day one |
| Negative (e.g. `-115` or `(115.00)`) | The customer has a credit | An account credit that applies itself to their future invoices |
The Billing & Tax step previews both, with counts and totals, before you
commit.
For credit balances it also asks How were these prepayments made?
(Check, Cash, ACH / bank transfer, Credit card, Not sure /
mixed). Under the Cash Discount Program, credit paid by check, cash or ACH
earns the cash price when it is applied; card or unknown credit pays the card
price. A `prepaid_via` column in your file answers it per customer and wins
over the step's answer. Not sure never blocks the import.
Customers merging into an existing profile are skipped for both, because
their balances already live in PortaPro. Add those by hand with Issue
credit on the customer's Financial tab.
Parent accounts in an import
If some accounts in your file are divisions of one umbrella account (a
general contractor over its subdivisions), the import can file them that way:
| Source | What to do |
|---|---|
| A `parent_customer` column | Put the umbrella account's name in it. Leave it blank for a normal account. |
| A QuickBooks export | Nothing. QuickBooks writes a sub-customer's full name as `Leaf Building:Subdivision A`, and the import splits that into the account name and its parent. |
The Parent Accounts step lists each grouping before anything is saved.
Switch a grouping off to import those accounts as ordinary top-level
customers instead.
part of the import, so undoing the import removes it.
top-level account, and the step says so.
keep what they have.
Grouping changes nothing about billing: every division keeps its own billing
address, rate card, sites and invoices. See Parent Accounts.
Undo an import
Right after a large import, a banner on the Customers page says what was
imported and offers Undo this import for a few days. After that, open
⋮ → Customer Import and use Recent imports, which lists past imports
with Roll back.
Undoing removes the customers, sites, contacts, rate-card lines and the
things PortaPro made from them (unstarted jobs, draft invoices). It refuses
when real work has happened since: placed map pins, started jobs, sent
invoices, recorded payments, or an imported credit that has already been
applied. The dialog says This import can't be undone and why.
After the import
The success screen lists anything worth a look, such as customers with no
phone number, rate-card rows missing a service frequency or not linked to a
product, and sites not yet located on the map. Financials → Rate Cards
has filters for the same gaps with bulk fixes.
