Importing data
CSV import
Contacts → Import (the web app), or Settings → Backup & Export → Import contacts on desktop.
- Drop your file
- Map your columns to Groundbase fields. Columns with recognisable names — first name, email, phone, company, tags, street — are matched for you; the rest you pick from a list, or leave as Skip.
- Give the import a label. Every row gets a tag imported · your label, which is the way to find that batch again. Add up to ten more tags to apply to every row if you like.
- Click Import
Big imports process in chunks — you'll see progress as it goes. Rows are written in batches on the server, so a few hundred contacts import in seconds.
What we accept
- CSV with commas, semicolons or tabs between the columns. Excel in much of Europe and French Canada saves CSV with semicolons; that is read as it is. Both UTF-8 files and Excel's plain CSV format (Windows-1252) keep their accented letters. Desktop also reads Excel (.xlsx) files for contacts, including workbooks with several sheets.
- On desktop, plain-CSV accents (all imports) and semicolons in company and deal files need the next desktop build. Until then, save as CSV UTF-8 with commas there, or import on the web app.
- Any header names — you map them yourself, so column order doesn't matter
- Phone numbers in any format. Brackets, spaces and dashes are stripped and the digits kept; texting and calling handle the country code.
- One address per row (street, city, province, postal code, country). More addresses per contact can be added in the app afterwards.
- Custom fields: map a column to any custom field you have created. A value that doesn't fit the field — text in a number field, an option the field doesn't have — is left empty and the import tells you which rows.
- A row with no first name and no email but a phone number is imported, named by the number as it was typed. If the number matches a contact you already have, that contact keeps its name and only its blank fields are filled in; nothing it already has is replaced.
- A row with no first name, no email and no phone is skipped. A row with an email and no first name uses the part before the @ as the name.
Matching existing contacts
Check before you import. On the column-matching step, What this import will do shows how many new contacts the file makes, how many existing ones it updates, how many empty rows are skipped, rows that repeat a person already in the file (same email, or same phone when there is no email), emails that aren't valid addresses, and new companies, with the first few rows as they'll come in. It updates as you change the columns, and nothing is saved until you press Import. In the desktop app the same counts appear on the last step, before Import.
Email is the key. A row whose email matches a contact you already have updates that contact instead of creating a second one (matching ignores capital letters, so Ann@Example.com and ann@example.com are the same person) — there is no setting for this, it is always how it works. A row with no email is matched by phone number instead: the last ten digits, against a contact's main or second phone, so (604) 555-0100 and +1 604 555 0100 are the same. A row with no email whose number matches nobody is created new.
On an update, filled cells replace and empty cells don't. A file with just an email and a city changes the city and nothing else. Tags in the file are added to the contact's tags, never removed. Notes in the file are added to the contact's notes rather than replacing them, and a company or an address is only filled in on a contact that has none. The same person twice in one file counts once (the same email, or for rows with no email the same phone number): the first row creates, the later rows update.
To bring a list back in after editing it elsewhere, export it (below), change what you need, and import the file: matched people are updated, nobody is duplicated.
Importing companies and deals
Companies → Import and Deals → Import take a spreadsheet (CSV) the same way contacts do: choose the file, check which column goes where, look at What this import will do, then import.
- Companies are matched by name, ignoring capital letters and spaces. A company you already have is updated (filled cells replace, empty ones don't); a new name is added. Every company in the file gets an imported tag so you can find the batch. Columns: name, industry, website, city, state/province, country, tags, notes, and your company custom fields.
- Deals are always added as new. The stage is matched by name; a blank or unknown stage puts the deal in your first open stage, and the preview lists any stage names it didn't recognise. The contact is found by email and the company by name (a company that doesn't exist yet is created). Values like
$12,500.00and dates likeNov 3, 2026are understood. Columns: deal name, value, stage, contact email, company, close date, notes, and your deal custom fields.
Editing many contacts at once
Select contacts in the list (tick the boxes, or select all) and press Edit in the bar that appears. Pick a field (city, source, position, company, or any contact custom field) and type the new value; it goes on every selected contact, replacing what was there. Leave the value blank to clear that field. A bulk edit doesn't start workflows that run on "contact updated", so a big edit can't set off hundreds of automations.
Merging duplicates
Duplicates still happen: a person who texted from one number and filled in a form with another email, or a list imported before email matching. Contacts → Duplicates lists every set of contacts sharing an email address or a phone number. Pick the one to keep and press Merge: the others' deals, tasks, notes, texts, calls, emails, invoices, quotes, tags, custom fields and history move onto it, and any details it's missing are filled in from them. The kept contact's own details are never overwritten. If any of them had unsubscribed, the kept contact is unsubscribed too.
A different phone number or email is not lost. The first other phone number becomes the kept contact's second phone if that is empty; any phone numbers and email addresses still left over are written into a note on the kept contact.
The merged contacts are then removed. They don't go to Recently deleted and can't be restored: everything they had now lives on the kept contact, so a restored one would be an empty copy, a duplicate again.
People can share a phone number (a household, an office line), so in a phone-number group you can untick anyone who is a different person, and only the ticked ones are merged; an email group merges everyone in it. One merge takes up to ten contacts into the kept one, so a group shows at most eleven; merge those, then reload to see the rest. Duplicates is not in the Android app.
Exporting
Settings → Backup & Export has a CSV download for contacts, companies, deals and tasks. The contacts file uses the same column names the import wizard recognises, and includes tags, the primary address and whether the person has opted out of texts or email — so a Groundbase file imports back into Groundbase with nothing to map, and anyone who said stop stays stopped.
From the Contacts list, select rows → Export downloads just those.
Backup and restore
Export everything (JSON) on the same page writes one file with every record in your account: contacts, companies, deals, tasks, notes, tags, custom fields, texts, emails, calls and recording references, campaigns, workflows, invoices and payments, meeting types. Your connected accounts and their credentials are deliberately not in it. The file says at the top if any table could not be read, so a partial backup never looks like a complete one.
Restore loads a file made by Export everything, in one of two ways:
- Merge keeps what you have and adds any record from the file that isn't already there. Restoring your own backup twice changes nothing.
- Replace deletes your records first, then loads the file, all in one step: if anything in the file fails, nothing is changed. It keeps your setup, as Reset to empty database does (below): setup in the file that you don't already have is added, and the rest of your setup is left as it is. A type of record the file doesn't hold in full is kept as well rather than emptied: one missing from the file (a backup from an older version) or one the export could not read. When the restore finishes it names the types it kept. The do-not-text list and email unsubscribes survive on purpose, because a person who opted out after the backup was taken must stay opted out.
Restore only ever writes into the account that runs it, whatever the file says — a backup from one account cannot be loaded into another.
Reset to empty database removes every record — contacts, companies, deals, tasks, notes, messages and the rest — and keeps your setup: connected mailboxes and send-as addresses, deal stages, custom field definitions, saved views, templates, your settings, and invoicing setup (invoice settings, saved items and their prices, currencies, and numbering, so the next invoice continues the sequence rather than starting again at 1), plus your subscription, your Twilio, Resend and calendar connections, the do-not-text list and unsubscribes. It asks you to type a confirmation.
Reset and a Replace restore also ask for your account password, and, if two-factor is on, your authenticator code or one of your recovery codes (a recovery code used here is used up). A Merge restore doesn't ask. On desktop this needs version 2.1.14 or later; older desktop versions can't Reset or Replace, so use the web app or update. Reset does not close your account; for that see Billing.