Tag: CRM data

  • GoHighLevel Duplicate Contacts: When Several Inquiries Belong to One Customer

    GoHighLevel Duplicate Contacts: When Several Inquiries Belong to One Customer

    The same person can call in the morning, submit a form after lunch, open the website chat that evening, and come back through an ad two days later.

    If every event creates another person in the CRM, the business does not have four leads. It has one customer scattered across four records.

    That is the problem behind GoHighLevel duplicate contacts. The account needs an identity rule that decides when a new inbound event belongs to an existing person, when it deserves a new opportunity, and when the match is uncertain enough for review.

    Until that rule is clear, automation can message the same person twice, attribution can split across records, and staff can work from different conversation histories without realizing it.

    One Customer Can Enter Through Several Channels

    A homeowner may call from a Google Business Profile, then use the website form because nobody answered. A prospect may start in web chat and later continue by SMS. An existing customer can return through a paid ad for a different service. A booking tool may send the same person into GoHighLevel after the contact already exists.

    The CRM has to answer one question before it creates more activity: is this a new person, or another event from somebody we already know?

    HighLevel’s Contact Deduplication Preferences can use email or phone as the primary match field and optionally use the other as a secondary field. That gives the platform a matching rule. The business still has to decide whether those fields are reliable enough for its customers.

    BrandLyft’s GoHighLevel Custom Build Layer owns the broader question of when standard configuration stops fitting the business. This article stays narrower. It is about resolving several inbound events to the right customer record before routing, follow-up, attribution, or reporting begins.

    Contact Identity and Opportunity Identity Are Different

    One customer reviewing two separate property keys to represent one contact with multiple legitimate opportunities in GoHighLevel
    One customer can stay as one contact record while still carrying more than one legitimate opportunity when the business context is different.

    One customer record does not mean one opportunity forever.

    A contact represents the person. An opportunity represents a sales event or deal. A returning customer may ask for another service. One homeowner may own two properties. A commercial contact may open a second project.

    The CRM may need one contact with two legitimate opportunities.

    SituationContact decisionOpportunity decision
    Same person submits the same estimate form twiceReuse the existing contactUsually keep the active opportunity
    Existing customer asks for another serviceReuse the customer contactCreate or reopen the appropriate opportunity
    One homeowner requests work for two propertiesUsually keep one person recordSeparate opportunities may make sense
    Two people share one phone numberDo not merge from the phone aloneReview the identities and deals
    An integration retries the same eventReuse the contactDo not create another copy of the same deal

    HighLevel can allow multiple opportunities for one contact, including more than one in the same pipeline when that setting is enabled. That is useful when the business truly has separate deals. It is not a reason to create another contact for the same person.

    Settle the person first. Then decide whether the new inquiry continues existing work or represents a new opportunity.

    Email and Phone Matching Need Clean Inputs

    HighLevel can look for an existing contact by email or phone when duplicate contacts are disabled.

    The setting is simple. Customer data is not.

    Some businesses collect email reliably. Others live on phone calls and SMS. A commercial buyer may use a work email once and a personal email later. Couples can share an email address. Families can share phone numbers. A business main line may represent several people.

    Choose the first matching field based on what the business collects consistently, then test the secondary field against real records.

    The systems feeding GHL should also send identity data in a consistent format. Keep phone numbers in one usable country-code format when the connected tools support it. Trim email values. Map the same identity fields to the same contact fields every time.

    Do not assume two values will match merely because they look equivalent on screen.

    A strong match should create confidence that the records represent the same person. A shared phone number or inbox may need a human decision instead.

    Repeat Form Submissions Should Reuse the Person Before Creating More Sales Work

    Repeat form submissions can mean the prospect clicked twice, changed one detail, returned after no response, or came back later for another service.

    Those cases should not start with another contact when the identity is already known.

    HighLevel’s current Contact Deduplication Preferences can update an existing contact from form submissions when duplicate contacts are disabled and the configured email or phone match succeeds.

    The next question is separate.

    Should the active opportunity stay open? Does the new submission represent another job? Should the system alert the current owner, update the service request, or create a review task?

    “Form submitted” describes the inbound event. It does not decide whether the business has a new person or a new deal.

    A Missed Call Followed by a Form Is Usually Still One Person

    Calls create the same identity problem in a faster form.

    A prospect calls, nobody answers, and missed-call automation sends a text. Ten minutes later the prospect completes the website form using the same phone number. The business now has a call event, an SMS conversation, and a form submission.

    That should not become three customer records.

    When phone is a dependable identity field, the later form should resolve to the existing person. The new form details can add context to the working record instead of making staff choose between two versions of the same lead.

    The opportunity rule still has to ask what the inquiry represents. A missed call followed by a form for the same service usually looks like one active sales event. An existing customer asking about another property may need another opportunity under the same contact.

    Chat-to-SMS Continuity Depends on Identifying the Visitor

    A chat can begin before the business knows who the visitor is. Trouble starts when the conversation later moves to SMS or email and the CRM treats the same person as somebody new.

    HighLevel’s Chat Widget can collect contact details such as name, phone, or email, while supported chat channels route conversations into Conversations. HighLevel also documents automatic merging for Facebook and Instagram contacts when a person later supplies a matching phone or email and duplicate contacts are disabled.

    Collect enough identity before the conversation crosses channels.

    When a visitor supplies a phone number that matches a known customer, the continuing conversation should stay with that person when the match is valid. Staff should not need one record for web chat and another for the SMS follow-up.

    Shared office or family numbers still need an exception path. Identity resolution should reduce split history without forcing unrelated people together.

    Integrations Need a Person ID and an Event ID

    Outside systems add another risk because names are weak identifiers.

    A booking platform, payment tool, job system, lead vendor, or custom application may already have its own stable record ID. Keep that identifier when it matters to the relationship between systems.

    Email and phone help identify the person. A booking ID, job ID, lead ID, or transaction ID identifies the business event.

    That difference matters when the connected platform retries an event. The system may find the same contact correctly and still create a second opportunity for the same appointment or paid lead if it has no way to recognize the event itself.

    For an important connection, define the sequence before launch: find the existing person, create or update the customer record, then check whether the external event already exists before creating another opportunity or downstream record.

    BrandLyft’s CRM & App Development work covers this deeper connection layer when a standard form or native connection is not enough.

    Customer Record Check

    Stop making the CRM choose between several versions of the same person

    BrandLyft can review how calls, forms, chat, and integrations create or update contacts before duplicate records spread into routing, automation, and reporting.

    Review CRM & App Development

    Need the wider implementation path? See BrandLyft’s GoHighLevel Partner service.

    An Existing Customer Can Start New Work Without Becoming a New Contact

    Existing customers expose weak identity rules quickly.

    A pest-control customer may request another service. Roofing customers can come back about another property. Former clients may return after a year. The new inquiry matters, but the person did not become new because another form fired.

    Keep the customer identity stable, then decide whether the inquiry belongs to existing work or starts another opportunity.

    HighLevel’s multiple-opportunity setting supports cases where one contact legitimately has more than one deal. Workflows also need to act on the correct opportunity so the same contact does not receive messages tied to the wrong job.

    BrandLyft’s article on keeping context when a real estate lead changes hands shows a related problem: one person can carry several pieces of context while the team still needs the correct opportunity and next action.

    Do not solve repeat business by cloning the person.

    Keep the Original Source Without Erasing the Return Channel

    Identity resolution creates an attribution question.

    A prospect may first arrive through Google Ads, return later through organic search, and finally call directly. If every return creates another contact, reporting splits one customer journey across several profiles.

    Flattening everything into one source field creates a different problem.

    HighLevel stores first and latest attribution on contact records. First attribution stays tied to the initial recorded interaction, while latest attribution can change as newer supported interactions occur.

    Use those fields for the questions they answer. The original attribution can preserve how the person first entered. Latest attribution can capture a newer recorded touchpoint. A specific opportunity may still need its own source context when the business wants to know what created that sales event.

    One customer can have more than one source story without becoming several people.

    Some Matches Should Go to Review Instead of Auto-Merge

    Automatic matching works when the evidence is strong.

    It gets risky when two real people share a field or the stored data already conflicts.

    Common cases include a shared family phone, a business main line, a shared office inbox, spouses using one email, an old recycled phone number, or a record where the email points to one person while the phone belongs to another.

    Send those matches to review.

    Compare conversation history, contact details, current opportunities, addresses or locations when relevant, and the inbound event that caused the conflict. The result may be a merge. It may be two separate contacts with a corrected field. Another case may need a company or related-record structure instead.

    The identity rule needs an escape hatch for uncertainty.

    Merge Existing Duplicates Only After Choosing the Master Record

    HighLevel provides manual merge controls and a Manage Duplicates tool that can find possible matches by email, phone, or name.

    Choose the record that should survive before confirming anything.

    Compare conflicting contact values, notes, tasks, opportunities, tags, and conversation history. HighLevel combines supported related information into the selected master contact, and its current documentation warns that the merge cannot be undone.

    A newer record is not automatically the better master. The older record may hold the original conversation history and attribution. A newer record may contain the current phone number or active opportunity.

    The goal is one usable customer record, not merely one fewer row in Contacts.

    Duplicate Opportunities Need a Different Review

    Two contacts for the same person usually point to an identity problem.

    Two opportunities for one contact may be correct.

    HighLevel supports multiple opportunities per contact for renewals, add-ons, parallel offers, and other separate deals. It can also run opportunity-based workflows separately for those deals when configured that way.

    Ask what each opportunity represents.

    If both cards describe the same service request, a retry or repeat form may have created extra sales work. Reconcile them before reporting and automation count the same deal twice. If the opportunities represent separate properties, renewals, or services, keep them and make the automation specific enough to act on the right one.

    Do not use one duplicate rule for both people and deals.

    Controlled Duplicate Testing Should Use the Messy Cases

    A clean form submission from a brand-new email proves almost nothing about identity handling.

    Test the paths that normally split records.

    Submit the same form twice with the same email and phone. Call first, then submit a form with the caller’s number. Start a chat, provide contact information, and continue through SMS when that path exists. Submit a new inquiry for an existing customer. Send the same integration event twice using the same external event ID.

    Then test ambiguity: same phone with a different email, same email with a changed phone, a legitimate second opportunity for one contact, and a shared number in a safe test record.

    For each case, inspect the surviving contact, conversation history, attribution, opportunities, owner, workflow enrollment, and outgoing messages.

    The test passes when the system makes the intended identity decision and staff can explain why.

    GoHighLevel Duplicate Contacts Should Be an Identity Decision First

    GoHighLevel duplicate contacts usually become obvious after the database is already messy.

    The better place to solve them is before another record appears.

    Decide what identifies the person. Feed that rule consistent contact data. Keep customer identity separate from opportunity identity. Carry stable external IDs for connected events. Preserve original and later attribution without inventing extra people. Send uncertain matches to review.

    Then test the channels against each other.

    A call followed by a form should still look like one person when the evidence says it is one person. A returning customer can start new work without losing the history already attached to the customer. Two people sharing one phone number should not become one record because automation found a match.

    The CRM becomes easier to trust when the identity rule reflects the people behind the inbound events.

    GoHighLevel Record Review

    Fix the identity rule before duplicate records reach automation and reporting

    BrandLyft can review the contact rules, opportunity logic, inbound channels, and connected-system mappings behind duplicate records in an existing or new GoHighLevel build.

    Book a Discovery Call

    Need implementation help inside the account? Review GoHighLevel Partner support.

  • Moving to GoHighLevel: What Data Is Worth Bringing Into the New CRM

    Moving to GoHighLevel: What Data Is Worth Bringing Into the New CRM

    A CRM export can make a migration look simple. Thousands of contacts fit in a file. Pipeline stages fit into columns just as easily. Old tags, custom fields, notes, owners, and source values all look portable because they already exist somewhere.

    That does not mean they belong in the new account.

    When a business plans to migrate to GoHighLevel, the first useful decision is not the maximum amount an import tool can carry. It is which information the team still needs to sell, follow up, report, and keep active customer relationships intact after the old CRM stops being the daily workspace.

    Dragging every historical choice into the new system can recreate the exact structure the business wanted to leave. The better migration keeps useful context, protects active work, and leaves dead structure behind on purpose.

    Before You Migrate to GoHighLevel, Decide What the New CRM Needs

    The old CRM grew over time. Teams added some fields for campaigns that ended years ago. Different contractors may have created tags for their own work. Pipeline stages may reflect an old sales process. A contact can have three owners because nobody removed earlier assignments. Notes may contain useful customer context mixed with reminders nobody needs anymore.

    An export treats all of that as data.

    The new CRM should treat it as a set of decisions.

    BrandLyft’s article on GoHighLevel buildout cost explains why migration quality affects implementation work. A small file full of conflicting records can take more thought than a much larger clean database. This article goes one level deeper. It is about deciding what deserves to become part of the working CRM at all.

    Start with the record somebody will open when a customer calls tomorrow. The sales team needs a usable status, any promised follow-up, source data that still matters, and enough context to avoid starting the relationship over.

    If a piece of old data cannot answer a current business question or support a current action, it should not automatically earn a place in GoHighLevel.

    Active Relationships Deserve Priority Over Raw Contact Count

    The contact table is usually the biggest export, so it attracts the most attention. Record count is easy to measure. Relationship value is harder.

    An active customer with an open issue, a warm prospect waiting on an estimate, and a five-year-old lead who never replied are all contacts. They are not equally important to the migration.

    Build the first migration group around people the business still has a reason to recognize. Current customers, active prospects, open opportunities, recent leads, referral partners, and contacts with a live follow-up commitment usually deserve closer review.

    Older records need a different test. A dormant contact may still matter because the company runs reactivation campaigns, maintains a long buying cycle, or needs the history for customer service. Another old record may contain nothing except a name, a dead phone number, and three obsolete tags.

    Do not keep the second record merely to say the migration preserved 100 percent of the database.

    HighLevel currently supports contact imports through CSV and lets users map standard and custom fields before the import. Users can leave unmatched columns out. Its contact import documentation makes the technical option clear. The business decision comes earlier: an importable column is not automatically a useful one.

    Dead Pipeline History Does Not Need to Become a Live Opportunity

    Pipeline history creates another trap.

    A business may have years of won, lost, abandoned, duplicated, and half-finished deals in the old CRM. Copying every one into a working GoHighLevel pipeline can make the new account look busy on day one while giving the sales team nothing useful to do.

    Open opportunities need careful treatment because somebody may still owe the prospect a call, appointment, proposal, revision, or decision. Those records should arrive with enough context to continue the work rather than restarting the sale.

    Closed history is different. Some of it may still matter for source analysis, customer value, warranty or service context, salesperson history, or future reactivation. That does not mean every old deal needs to sit beside today’s opportunities.

    A lost opportunity from four years ago can stay in an archive or reporting dataset if the business needs the historical fact. Recreating its exact old stage, task sequence, and obsolete owner inside the live pipeline may add noise without helping anybody act.

    HighLevel can import contacts and opportunities together, and its opportunity import flow maps records to existing pipeline structures. The important word is existing. Build the new pipeline around the process the team intends to use, then decide how old opportunities fit it. Do not rebuild weak stages only because the export contains them.

    Keep Lead Source Data That Still Explains How the Relationship Started

    Source data is easy to damage during migration because several fields may look similar.

    The old CRM may contain Original Source, Latest Source, Campaign, Referrer, UTM values, Lead Vendor, Imported From, or a custom field somebody created for one promotion. Some businesses also overwrite the original source each time a new interaction occurs.

    The migration should protect the fields that still answer a reporting question.

    If leadership needs to know which channels created customers, preserve the best available original-source evidence. Keep campaign identifiers when the business still uses them for reporting. If a value only says “CRM Import” because someone moved the contact between systems three years ago, it probably should not replace the source that describes how the person first found the company.

    This is also a good point to document uncertainty. Old attribution may already be incomplete. A migration should not turn weak historical data into false precision simply because the new CRM has a cleaner field name.

    If old attribution is weak, keep the useful evidence without pretending it became more accurate during migration. New records can start under cleaner source rules after cutover.

    Ownership and Relationship Status Are Operational Data

    A contact owner is not just a name in a column when that person still owes the customer something.

    Moving an active account without its current owner can create a quiet handoff failure. A customer replies after launch, the new CRM has no usable assignment, and several people assume somebody else is handling it.

    Preserve ownership when it reflects a current responsibility. If the old owner left the company, map the relationship to the person or team taking over rather than importing a dead user reference. If assignment will change under the new routing model, document that choice before the import.

    Relationship status matters for the same reason. A current customer should not arrive looking like a cold lead. A former customer should not enter new-lead nurture by accident. An active opportunity should not lose the stage that tells staff what action comes next.

    The useful migration record answers a simple question when staff open it: who is this person to us now?

    Notes Should Carry Context, Not the Entire History of the Company

    Notes can be some of the most valuable information in an old CRM. They can also be some of the worst.

    A good note tells the next person something they would otherwise have to ask again. Maybe the customer prefers afternoon calls. One buyer already rejected a particular option. Another property has a known access issue. A promised callback may be waiting on a document. The team may also need to recognize that a referral partner owns the relationship.

    Other notes are internal debris: “called,” “left VM,” “try Friday,” repeated system messages, old task text, copied email fragments, or comments tied to a process the company no longer uses.

    Do not solve this by pasting every historical note into one giant field.

    HighLevel’s CSV import guidance limits how that flow brings contact notes across. Other migration methods may support different history. For example, HighLevel’s current HubSpot importer can move supported notes and tasks for eligible accounts. The method depends on the source system and the migration route.

    The selection rule stays the same. Preserve context people still need. Keep full history somewhere accessible when there is a business reason. Do not make the working contact record harder to read just to prove the migration kept everything.

    Custom Fields Have to Earn Their Place in GoHighLevel

    Old CRMs collect fields because fields are easy to add and hard to retire.

    One campaign needs a dropdown. A salesperson asks for a checkbox. An integration creates a hidden status. A vendor adds five more fields. Years later, nobody knows which ones control anything.

    Rebuilding every field inside GoHighLevel preserves the clutter and may also preserve old assumptions about the business.

    Review each field by use, not by familiarity. Do staff use it? Could a workflow depend on it? What changes if the field disappears from routing, qualification, reporting, customer service, or an outside integration? Is the value current enough to trust?

    A field that survives this review deserves a clear name, owner, field type, and reason to exist. One that fails can stay in the archived export instead of becoming permanent CRM furniture.

    This matters technically too. HighLevel requires non-standard CSV data to map to existing custom fields if the business wants to import those values. Creating the destination field is a deliberate act. Use that moment to decide whether the field still belongs.

    Migration Scope Check

    Do not rebuild the old CRM inside the new one

    BrandLyft’s Revenue System Build starts with the system the business needs to run now. Migration decisions should support that structure instead of copying old fields, stages, and tags by habit.

    Review the Revenue System Build

    Need implementation support around the new account? See BrandLyft’s GoHighLevel Partner service.

    Consent and Communication Preferences Need More Care Than a Yes or No Field

    Contact data is not only names, phone numbers, and email addresses. The old system may also contain opt-outs, Do Not Disturb settings, channel preferences, consent timestamps, subscription status, or suppression lists.

    Those records can change what the new system sends and which channels it uses.

    Do not infer a fresh permission merely because a contact exists in the export. Preserve the recorded communication preference that the business relies on, and review how that preference maps into the new account.

    HighLevel supports channel-specific DND settings for contacts. Its CSV import documentation also notes an important migration detail: importing a basic DND column applies DND across all channels in that import flow. If the old CRM distinguishes SMS, email, and call preferences, flattening everything into one flag can lose useful information.

    Separate channel controls illustrating why communication preferences should remain distinct when migrating to GoHighLevel.
    Channel-specific preferences lose meaning when several separate communication choices are flattened into one migration status.

    This is a field-mapping issue with a real customer consequence. Treat preference records as operating data, not cleanup noise.

    Upcoming Appointments and Promised Follow-Up Cannot Sit in the Archive

    Some records matter because of what happens next Tuesday.

    An upcoming sales appointment, estimate review, onboarding call, renewal discussion, or promised callback cannot disappear while the team debates historical data. These commitments need their own migration review because they cross the cutover date.

    Identify every future-facing obligation before the old CRM stops being the daily workspace. Confirm the customer, owner, date, time, appointment type, current status, and any context the staff member needs.

    Do the same for open tasks and active follow-up. A task saying “call this week” may be useless without the note that explains why. Recreating a future appointment can also cause trouble if the old calendar keeps sending reminders while the new one starts a second set.

    This article is not a cutover runbook, but the selection principle is clear: anything the business has already promised deserves a controlled transition. The team should not discover a missed commitment after launch because a customer asks why nobody showed up.

    BrandLyft’s GoHighLevel buildout timeline covers the larger launch sequence and testing work after the team settles the migration scope.

    Duplicate Identities Need a Business Decision Before Deduplication

    Duplicate contacts are not always simple duplicates.

    Two records may share a phone number because a couple uses one household number. One person may have a work email and personal email. A property manager may appear under several buildings. Past customers sometimes return years later through another lead source. Another pair of records may truly be the same person created twice by two forms.

    Blindly merging them can destroy context. Blindly keeping them can split conversations, attribution, and ownership.

    Create a rule for identity before cleaning the file. Decide which fields make a match strong enough, what happens when values conflict, how the team treats secondary contact details, and which record wins when two sources disagree.

    HighLevel can match or update contacts during CSV imports based on identifiers and account deduplication settings. That feature does not decide which historical record is more trustworthy. The business still needs the reconciliation rule.

    Do not let the import tool become the first place that rule gets tested.

    Some Historical Data Belongs in an Archive, Not the Working CRM

    Leaving data out of GoHighLevel does not have to mean deleting it.

    A migration can keep a read-only archive of the original exports, reports, or source-system records when the business needs historical access but not daily CRM access. This is often cleaner than forcing every old activity into the live contact timeline.

    Archived history may still support finance, customer service, reporting, dispute resolution, warranty questions, or internal research. The retention need depends on the business and the data involved. The key is separating “we may need to look this up someday” from “our staff needs this field every day.”

    That separation protects the new CRM from becoming a museum.

    It also makes future maintenance easier. If the team treats every imported tag, field, stage, and activity as sacred, nobody wants to remove anything later. Starting with a smaller working record gives staff a clearer system and a known place to look when older context is genuinely needed.

    Migration Complete Means the Team Can Continue the Work

    A successful import count is not the same as a completed migration.

    The project is closer to complete when staff recognize active relationships, open opportunities still have owners and next actions, source data works for the reports the business actually uses, communication preferences survive correctly, the team accounts for upcoming commitments, and staff can find the context they need without reopening the old CRM for ordinary work.

    Test those conditions with real records.

    Pick a small group of real records and make them uncomfortable on purpose. Use a current customer, a recent lead, an opportunity close to a decision, a contact with an opt-out, somebody with a future appointment, and one of the duplicate identities that caused trouble in the old system. Compare the details against the source export and see if staff can tell what happens next.

    HighLevel’s opportunity import documentation warns that CSV opportunity imports cannot simply be undone. That is another reason to test mappings and sample records before treating a large import as the first real QA pass.

    Keep an exception list for records that fail the test. Fix the rule behind the problem before repeating the import across the whole database.

    “Migration complete” should describe a usable business state, not a percentage bar.

    Migrate to GoHighLevel Without Carrying Every Old Decision Forward

    The old CRM contains history. It also contains years of temporary choices, abandoned campaigns, outdated stages, duplicate records, and fields that survived because nobody had a reason to remove them.

    A new GoHighLevel account does not need to inherit all of it.

    The migration should leave staff with enough history to recognize the relationship and enough structure to keep working. The business can keep older information outside the daily CRM when staff may need access later but no longer need a field, tag, stage, or task inside the live account.

    That is a cleaner starting point without pretending the past never happened.

    GoHighLevel Migration Scope

    Move the data the new system actually needs

    BrandLyft can help map the working CRM, migration scope, field structure, pipeline, and launch requirements before the team copies old data into a new account.

    Book a Discovery Call

    Need the wider implementation path? Review GoHighLevel Partner support.