Skip to content
No per-contact pricing, ever

Manage Unlimited Contacts for Free

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.

Find anyone in one box

Type a surname, a company, a partial phone number or a city. Then narrow it with filters when one box is not enough.

  • Search Name, email, phone, city, all at once A single box matches across the fields you would actually search by, plus dedicated filters for each one when you want to be precise about it.
  • Do not call A flag the record carries Set it once and it travels with the contact everywhere it appears, rather than living in a note somebody else will not read.
  • Accounts A contact can sit on more than one There is a primary account on the record and a separate many-to-many that lets one person belong to several. Both are real, and the list shows what the contact is actually attached to.
[ APP.BOTTLECRM.IO/CONTACTS ]
Moving in

An import you can undo by not committing it

The part of a CRM migration that goes wrong is the first bulk load. This one shows you the damage before it happens.

Start from the template

Download a CSV with the right headers so the mapping step has nothing to guess at.

Preview before anything is written

The import runs in two halves. Preview tells you what matched, what looks like a duplicate and what will fail, and nothing is saved until you commit.

Duplicates checked on the way in

Incoming rows are compared against your existing contacts on normalised phone numbers and email domains, not on exact string equality.

Failures come back as a file

Download a CSV of what went wrong: row number, field and the reason for each one, so you fix them in your spreadsheet rather than reading a log.

Moving from another CRM

What is not built yet

The export gap is the one worth knowing about before you commit a list to us. The API and your own database both give you everything, but there is no download button.

If any of these matter to you, the repository takes pull requests.

  • CSV export of your contact list
  • Saved searches and dynamic segments
  • Auto-tagging and tag hierarchies
  • Scheduled or automated exports
  • Contact photos
  • An engagement or activity score
Questions

Before you move your list

Check it yourself

The contact model, the importer and the duplicate matcher are all in the open repository.

How many contacts can I store?

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 rather than ours to bill for.

Can I import contacts from another CRM?

Yes. Export a CSV from whatever you are leaving, download our template so the headers line up, and run the import. It works in two steps: a preview that shows what matched and what would fail, then a commit. Duplicate detection runs against your existing contacts first, comparing normalised phone numbers and email domains rather than exact text.

Can I get my contacts back out?

Not as a CSV from the interface today, which is a real gap and we would rather say so than imply otherwise. What you do have is the REST API, which returns every contact and every custom field, and direct access to your own Postgres database if you self-host. Your data is genuinely yours, but the one-click export button is not built yet.

What can I add beyond the built-in fields?

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.

Your contacts, on your own database

No per-contact fee, no seat count, no trial clock. Host it yourself, or let MicroPyramid run it.

MIT licensed Unlimited contacts 100% data ownership