A contact ID is the unique identifier GoHighLevel gives every contact record. It's a random string of letters and numbers that never changes, even when the contact's name, email or phone changes. The API, webhooks and most integrations identify contacts by this ID, and it's also available as the {{contact.id}} merge tag.
Contact IDs are unique per sub-account. The same person in two sub-accounts has two different contact IDs, and copying a contact into another sub-account creates a new ID there.
In practice
The quickest way to find a contact's ID is to open the contact and look at the browser address bar. The ID is the last part of the URL after /contacts/detail/ (as of October 2026). Workflow webhooks and outbound webhook payloads also include it.
Contact IDs are what tie exported data together. A contact export, a message export and a list of downloaded files only line up reliably if each row carries the contact ID, because names get misspelled and emails change. When you move data between systems, or between sub-accounts, keep a column mapping old IDs to new ones.
Where it shows up in RGS Tools
Conversation Exporter puts contact, conversation and message IDs on every row of its SMS and email export and its call export. Backup & Insights's file backup writes a manifest that ties each file to its contact, opportunity or conversation, so backed-up files line up with your CSV exports.