This question accumulated quite a lot of answers over time, so I think maybe an up-to-date recap would be useful.
If you already have a contact ID, you can build a URL with the following structure -
https://contacts.google.com/contact/CONTACT_ID
Thing is, Google is phasing out the Contacts API in favor of the People API - so I imagen that many people are facing (like me) the need to build a link using the person ID. Turns out the idea is the same -
https://contacts.google.com/person/PERSON_ID
Notice that the People API returns a field called resourceName
, and that the value is the person ID prefixed with people/
(e.g. people/c858934384269370260
). So by splitting the resourceName
and taking the last part you can extract the ID you need to build the URL.
Similar to how the data-sourceid
HTML attribute contains the contact ID and can be used to extract the ID and manually build a link (see Indy's answer), there's also the data-id
attribute containing the person ID, which can be used to do the same. I don't care for manual labour, so I created a TamperMonkey script that can be used to add a little "open link" button to every contact entry. Looks something like this -

The past happened. Things were different, and today they are even differenter.
If you are
or
- a person from the past that somehow got delorean-esque access to modern-day internet and you're trying to build a link for a platform that in the current time is not available anymore
feel free to read the many other answers that explain how things used to be.