The spreadsheet you already have
An .xlsx or a .csv, straight out of Excel, Google Sheets, Google Contacts, Outlook or another CRM. There is no template to copy your data into first.
Every person you deal with, searchable in one box, with the fields your business actually uses rather than the ones a vendor decided on.
Unlimited contacts and unlimited users. MIT licensed, self-host it anywhere.
Type a surname, a company, a partial phone number or a city. Then narrow it with filters when one box is not enough.
The part of a CRM migration that goes wrong is the first bulk load. This one shows you the damage before it happens.
An .xlsx or a .csv, straight out of Excel, Google Sheets, Google Contacts, Outlook or another CRM. There is no template to copy your data into first.
Each column is matched to a field from its header, with sample values beside it, and you can change or ignore any of them before anything is read.
See how many people will come in and which rows will be skipped and why, from the Import button on the web or the phone. Nothing is saved until you import.
Incoming rows are compared against your existing contacts, and against each other, on email address, then phone number, then full name when a row has neither.
A malformed email or date is dropped and counted, and the person still comes in. Importing the same file twice creates nobody new.
Download a CSV of the rows that were skipped, each with its reason, so you fix them in your spreadsheet rather than reading a log.
None of these stops you getting your list back out: the contact list exports to CSV, and the API and your own database give you everything else.
If any of these matter to you, the repository takes pull requests.
The contact model, the importer and the duplicate matcher are all in the open repository.
There is no limit in the software and no per-contact price. You are bounded by the database you run it on, which is Postgres, and by nothing else. Self-hosting means the capacity question is yours to answer.
Yes. Export a spreadsheet from whatever you are leaving, as .xlsx or .csv, and run the import from the web app or the phone. Each column is matched to a field from its header, and the headers of Google Contacts, Outlook and HubSpot exports are recognised. The preview shows who will come in and which rows will be skipped and why before anything is saved. Duplicates are checked against your existing contacts on email, phone and name. Up to 5,000 rows a file.
Yes. The Export button on the contact list, on the web or the phone, downloads a CSV of the list as you have it filtered, every page of it, and only the contacts you are allowed to see. A cell that starts like a spreadsheet formula is written as plain text, so a value somebody typed into a form cannot run when the file is opened. The REST API and, if you self-host, your own Postgres database are there for anything the list does not show.
Custom fields per organisation, in text, number, date, dropdown and checkbox types. They render in the web and mobile forms, they filter in the list, and they come back through the API. The built-in set already covers job title, department, company, address, LinkedIn, a do-not-call flag and free-text notes.
No per-contact fee, no seat count, no trial clock. Host it yourself, or let RunCode run it.