How matching works

How matching works

Every time a sync brings in a person (someone who booked a ticket, placed an order, registered for an event or subscribed to the newsletter), Mocca looks for that person’s Contact before it creates a new one. It checks, in this order:

  1. The same id in the same system. If the Shopify customer has Shopify ID 12345 and a Contact already holds Shopify ID 12345, that is the person.
  2. The same email address. Emails are compared lowercased and without surrounding spaces, so Ana.Lopez@Example.com and ana.lopez@example.com match.
  3. The same phone number. Phones are compared in international format, so (201) 555-0142 and +1 201 555 0142 match. An extension is ignored for matching.

If none of those finds a Contact, Mocca creates one. If more than one Contact matches, the oldest one wins.

When Mocca finds the person, it also fills in what was missing: the new system’s id, and an email or phone the Contact did not have yet (added as an extra row, not replacing the primary one).

What Mocca ignores

  • Placeholder emails such as none@none.com, test@test.com or noemail@...: they are not stored and never match.
  • Invalid or placeholder phones, such as 000-000-0000 or a number made of one repeated digit.

When two systems disagree

If a Contact already holds a different id for the same system (for example, it has Peek Pro ID A and a new booking arrives with Peek Pro ID B but the same email), Mocca keeps the existing id and writes a Contact identity conflict entry in the Error Log. An administrator decides whether these are really the same person.

Why duplicates still happen

Two records of the same person end up as two Contacts when they share nothing Mocca can compare: a different email in each system and no phone, for example. Mocca lists likely duplicates for review; see Merging duplicates.

Every email and phone is stored in the same normalised form when you save a contact by hand too, so typing an email in capitals in the CRM does not create a mismatch.