Three ways to bring customers in
The Import Wizard (Import in the sidebar, or the "Bulk Import" button on the Customers page) accepts a CSV file, an Excel file (.xlsx or .xls straight from your old software — no need to convert), or even a screenshot of your old software's customer list. You can also sync customers directly from QuickBooks Online.
Imports create customers and service locations — not jobs. If your file also has service details (price, day, frequency, technician), those are kept and used to pre-fill Add Service in Bulk, so you review and confirm the jobs instead of retyping a rate and a day for every pool.
Import from a spreadsheet or screenshot

- 1Open the Import Wizard (or click Bulk Import on the Customers page).
- 2Upload your CSV or Excel file, or a screenshot of your old software's customer list — AI extracts the data either way.
- 3Review what was found. The collapsible Column mapping panel shows each file column with a dropdown to remap it to a Pool Founder field or "Don't import" — and there's a text box where you can describe a fix in plain English and let AI remap it.
- 4Fix anything in the Needs your attention list — rows missing a name (or an address, for locations) have inline fields to fill in, and then join the "Ready to import" table.
- 5Click Import N of M rows. Every valid row imports; unfixed rows are skipped, never imported incomplete.
How rows become customers and locations
- Rows sharing an email import as one customer with multiple service locations — so exports with one row per pool (like Skimmer's) work as-is.
- Extra email columns become the customer's additional emails; extra info columns (gate codes, secondary phones, lead source) are kept as notes.
- Phone and email are optional — customers import fine without them. Contact info is only needed later for emailed invoices and the customer portal, and can be added any time.
- Addresses in one column are fine, with or without commas ("123 Main St Naples FL 34102" works).
- Customers already in Pool Founder aren't duplicated — any new locations in your file are added to the existing customer.
- Files that only have addresses (like a route-assignment export with no customer names) still work — each pool imports as a customer named after its address, renameable later.
Service details come across too
Route exports usually carry the whole service arrangement next to each pool — price, how often, which day, which technician, and whether it's a flat monthly rate or per visit. Pool Founder reads those columns and keeps them. They do not create jobs on their own; they wait for you in Add Service in Bulk with every field already filled in.
- The review table gains a Service column showing what each row will carry over, e.g. "$120/mo · Thu · Nick Gikas", so you can confirm nothing is being dropped before you import.
- Columns recognised: service price, charge type (flat monthly vs per visit), frequency, service day, assigned technician, route name, and whether chemicals are billed separately.
- After the import, a card offers Set up service — it opens Add Service in Bulk with those pools already checked and their price, day and technician filled in.
- If you have no job template yet, Build the template from my file creates one from what your file said (cadence, flat-rate vs per-visit, and a representative price).
- Technicians are matched by name — the full name, ignoring middle initials and suffixes, or just a first or last name when only one person on your team has it. Anyone the file names who isn't on your team is listed by name on the setup screen, and those rows are left on "Any tech" rather than guessed at.
- Anything the file was ambiguous about is left blank rather than guessed. "Twice a month" is not the same as every other week, so Pool Founder leaves the frequency for you to pick.
Switching from Skimmer
Skimmer's customer export lets you choose which columns to include, so before you download, add the columns that carry your service arrangement — that's the difference between re-typing every pool and just confirming it.
- Include the Rate and Rate Type columns. Skimmer's Rate Type reads like "Per Month With Chemicals" or "Per Visit" — Pool Founder reads it as both the charge type (flat monthly vs per visit) and whether chemicals are already in the price, so it fills those in for you.
- Include the Service Day column if your export offers it, so each pool arrives with its day already set.
- Everything else Skimmer carries — gate codes, dog names, tags, location notes, secondary phones and emails — comes across automatically as notes and contact info.
Skimmer's customer export does not include how often you visit or which technician is assigned — those live on Skimmer's route screen, not the customer file. So Pool Founder can't read the frequency or tech from a Skimmer file; you set the frequency and pick the technician once, per template, in Add Service in Bulk.
Banners and warnings you might see
- Dimmed rows marked "Already exists — new pools still added" — the review table greys out rows that match a customer already in Pool Founder. That customer isn't re-imported, but any new service locations in those rows are still added to their account.
- "Data extracted from screenshot" — when you upload a screenshot, a blue banner names the source software AI detected and asks you to review the extracted data carefully before importing.
- The Needs your attention list shows at most 30 fix-it cards. If more rows are missing the same info, a note counts the rest — when a whole column is empty, it's faster to fix the file and re-upload. Unfixed rows are simply skipped, never imported broken.
- "Rate limit reached" — AI analysis is limited to 10 file uploads and 10 plain-English mapping refinements per rolling 24 hours. If you hit it, wait and try again; the final import itself is not limited.
- "No pool addresses came through" — shown after an import that created customers but zero service locations. Jobs can't be scheduled until each pool has an address, so either re-import with the address column mapped (Import Another File) or add a service location to each customer.
Import from QuickBooks
Click Connect QuickBooks on the Customers page (a one-click sign-in with Intuit). Once connected, use Import from QuickBooks on the Customers page and pick which customers to bring over. Sync settings live on the QuickBooks page — see QuickBooks sync.
After the import: schedule the service
Imports create customers and service locations only. To get the pools onto a schedule, use Add Service in Bulk — it applies one job template to many locations at once, with per-row overrides for rate, preferred day, preferred technician, and visits per week. If your file had service details, those overrides arrive already filled in and a green banner says how many pools were pre-filled. The Jobs page shows a banner counting pools with no service scheduled that links straight to it.
Frequently asked questions
Do I need to clean up my spreadsheet first?
Usually not. AI maps your columns automatically, addresses can live in a single column, and rows missing required fields are flagged for inline fixes instead of failing the import.
Will importing create duplicate customers?
No. Rows that match a customer already in Pool Founder are not duplicated — any new service locations in the file are added to the existing customer.
Does the import create jobs too?
No — imports create customers and service locations only. If your file has service details, they are carried over and used to pre-fill Add Service in Bulk, where you review the table and create every job in one pass. Nothing bills or schedules until you do that.
My file has the price and route day in it. Do I have to retype those?
No. Price, charge type, frequency, service day, technician and route name are all read from the file and pre-filled into Add Service in Bulk. Technicians are matched by name, so add your team before setting up service if you want those assignments to land.