Migration

Keap to GoHighLevel migration service

Keap keeps its logic on a canvas, where goals admit contacts into sequences and tags stand in for state. GoHighLevel has no canvas: a workflow starts from something that happened to a contact and runs against that contact. Records and tags export cleanly enough. The goal that admitted somebody to a sequence, the order form that started a subscription, and the referral partner ledger behind your affiliates are the parts a person has to decide before anything is loaded.

The mechanics

What happens to a goal-and-sequence campaign on the way across?

It gets taken apart. A Keap campaign is a canvas: goals admit a contact, sequences run them through timers and emails, and the contact sits inside a sequence until something moves them on. A GoHighLevel workflow has no canvas and no sitting-inside. Each goal becomes a trigger, each sequence becomes the steps after it, and the two are rebuilt together.

Keap's shape. A contact carries standard and custom fields, tags grouped into tag categories, and an email status that decides whether the contact is marketable at all. A company is its own record with its own fields. Opportunities sit in stages with a value and an owner. Above that sits Campaign Builder — the legacy sequence model that most long-running Keap and Infusionsoft accounts still run on — where a campaign is a diagram of goals (a form submitted, a tag applied, a product purchased, a link clicked) connected to sequences of timers, emails, tasks and tag actions. Underneath all of it is the part people forget until cutover week: a product catalogue, order forms, invoices, subscription plans and a referral partner programme with its own commission ledger.

The campaign is the thing that does not export. Contacts, companies, tags, custom field values and opportunities come out as data. A campaign is a diagram plus the position of every contact inside it, and neither has an export format anything else can read. That is why this crossing is a rebuild, and why the object map matters more than the import tool.

GoHighLevel's shape. The contact is the record and everything hangs off it. Tags exist but have no categories. There is no company record with its own fields — a business name sits on the contact. Consent is held as do-not-disturb flags per channel rather than as one marketable status. Workflows are contact-scoped: the trigger is a contact event such as a tag added, a form submitted, an order placed or a pipeline stage changed, and every action runs against that contact. Nothing waits on a canvas; a contact is either in a workflow or it is not.

How each Keap object lands in GoHighLevel, and the decision it forces
Keap object How Keap models it Where it lands in GoHighLevel The decision it forces
Contact Standard and custom fields, tags, an owner, and an email status that governs whether they can be marketed to The contact — the primary record everything else points at Which contacts import at all: non-marketable, hard-bounced and never-engaged records are excluded or imported already flagged
Company A separate record with its own fields, linked to contacts A business name on the contact, not a record with its own fields Which company fields get copied onto every contact, and who keeps them current once there is no single place to edit them
Tag and tag category Free-text labels grouped into categories, applied by campaigns and used as the account's state Flat tags on the contact, with no category layer Which tags are live state, which are historical breadcrumbs, and what naming convention replaces the categories
Custom field Typed fields defined separately for contacts, companies, opportunities and orders Custom fields on the contact or the opportunity, created before any import Which record each field belongs to once companies and orders no longer have their own
Opportunity One stage, one value, one owner, one contact, with stage-specific fields An opportunity in a pipeline with a stage, value, owner and status Whether won and lost opportunities travel, and where a lost reason lands so the reporting survives
Campaign goal An entry or exit point on the canvas: a form, a tag, a purchase, a link click, an API call A workflow trigger, or a goal event inside a workflow Which goals are real entry points and which were only there to move contacts between sequences
Sequence An ordered run of timers, emails, tasks and tag actions that a contact sits inside The steps of a workflow, with waits instead of timers Which sequences merge, which are rebuilt as they are, and which are retired outright
Sequence timers and delays Day, time and business-hour rules evaluated inside the sequence Wait steps plus the workflow's own send window Whether the old timing rules are reproduced exactly or simplified to something the team can maintain
Web forms, landing pages and order forms Keap-hosted forms and pages wired directly into campaign goals GoHighLevel forms, funnels and order forms, rebuilt and re-embedded What replaces each embedded form on sites you own, and the date the old one stops accepting submissions
Products, orders and invoices A product catalogue with one-off orders, quotes and invoices attached to the contact Products and order forms rebuilt; historical orders land as reference data at best Whether order history travels as records, as a lifetime-value field, or stays in an archived export
Subscription plans Recurring billing scheduled by Keap against your connected merchant account Nothing automatic: the recurring charge belongs to the payment gateway, not the CRM Whether active subscribers keep billing in place, are re-created, or are moved by the processor itself
Referral partners (affiliates) Partners, commission programmes, tracking links and a payout ledger Partners re-enrolled with new links; the commission ledger has no destination record How partners are re-enrolled, what happens to in-flight referrals, and where the historical ledger is archived
Sending domain An authenticated domain with a reputation built on Keap's sending infrastructure A new dedicated sending domain with no history at any mailbox provider How fast volume ramps, which contacts go first, and who watches the bounce and complaint rates daily

Marketability is the one mapping you cannot get wrong. Keap holds a single opt-in state per contact, with a reason and a date behind it; GoHighLevel holds do-not-disturb flags per channel. The safe rule is that anything not explicitly marketable in Keap arrives flagged, and the opt-in reason text travels into a field so the evidence survives the move. We reconcile those counts as their own step, against the baseline in the FTC's CAN-SPAM compliance guide (opens in new window), and nothing sends until the two numbers agree.

Sequence

How does a legacy Keap campaign become a set of workflows?

One goal at a time. Every goal on the canvas is examined for whether it admits contacts from outside or merely hands them between sequences. The first kind becomes a workflow trigger; the second becomes a step inside a workflow that already exists. Getting that distinction wrong is how a rebuild ends up with forty workflows nobody can follow.

Object map before any export

Tags, tag categories, custom fields, pipelines, campaigns, products and partners listed on one page, each with a named destination. A tag nothing reads is decided now, not discovered mid-import.

Scaffold the destination

Users, pipelines, stages, custom fields, every dropdown option and every tag created first. Import a value into a field that does not exist yet and it is dropped without an error.

Sample import and reconcile

A few hundred contacts first, counted in and counted out, with tags, owners and do-not-disturb flags checked by hand. Duplicate handling differs between the platforms, and this is where merges surface.

Goals, sequences and the contacts sitting inside them

The awkward part of leaving Campaign Builder is not the diagram, it is the people standing in the middle of it. On cutover day some contacts are three days into a five-email sequence, and there is no way to import that position. Each running sequence gets a decision made in advance: let it finish in Keap while the new workflows only take new entrants, re-enrol the in-flight contacts at a chosen step, or stop it and accept the gap. Written down per sequence, that is a half-hour conversation. Discovered on the morning of cutover, it is the reason somebody gets email four twice.

Tags were the state, so tags decide the rebuild

Long-lived Keap accounts hold their business logic in tags, because a tag is what a goal watches and what a sequence applies. The rebuild separates them into two piles. State tags — active client, trial expired, nurture paused — are rebuilt with the workflow or smart list that reads them, because a tag nothing reads is decoration. History tags — attended the 2023 webinar, bought the old bundle — are kept only where a segment or a report still depends on them. Tag categories have no equivalent in the destination, so the category becomes a prefix in the tag name, agreed once and applied consistently rather than invented three times by three people.

Order forms, subscriptions and the affiliate ledger

This is the part other migration pages on this site do not have to deal with, and it is where a Keap move most often goes wrong. Products and order forms are a rebuild: the catalogue is re-created, the checkout is rebuilt as a GoHighLevel order form, and every place the old form is embedded gets repointed with a date attached. Subscriptions are not a CRM object at all — the recurring charge is scheduled against your merchant account, so what happens to an active subscriber depends entirely on the gateway, and the safe default is to leave existing subscriptions billing where they are while new sales start in the new platform. We do not move card data. The referral programme is the third piece: partners can be re-enrolled and given new tracking links, but the commission ledger and payout history have no destination record, so they are exported and archived, and the rule for in-flight referrals is agreed in writing before anyone's link changes.

The sending domain starts from nothing

Reputation belongs to the domain and infrastructure that earned it, and the new GoHighLevel sending domain has no history with any mailbox provider. Authentication records are published and verified before the first send, because the bulk-sender requirements in Google's email sender guidelines (opens in new window) treat missing authentication, a high reported spam rate and a missing one-click unsubscribe as reasons to filter or reject outright. Then volume ramps in steps from the most recently engaged contacts outward, with bounce and complaint rates checked before each step. SMS has its own gate: a new number needs A2P 10DLC brand and campaign registration before US carriers deliver reliably, and that starts at the scaffold stage rather than on launch day.

Where this sits next to the rest of the work

This page is about leaving Keap specifically — the campaign canvas, the tags that carry state, and the commerce objects underneath. If you are leaving HubSpot instead, the problem is companies and deals flattening onto a contact, which our HubSpot to GoHighLevel migration page covers. If you are leaving ActiveCampaign, the problem is a separate automation builder and per-list consent, and our ActiveCampaign to GoHighLevel migration page is written for that crossing. If you are leaving Zoho CRM, the problem is custom modules, subforms and Deluge scripts with no slot waiting for them, and our Zoho CRM to GoHighLevel migration page covers that crossing. Once you have landed and the question becomes how the account should be built — snapshots, sub-accounts, workflow architecture, the sending rails — our GoHighLevel automation consultant page covers that ongoing work. And if the pair you are moving between is not on this page at all, the CRM migration services overview sets out which crossings we cover and the method that stays the same across all of them.

Some of what Keap was doing should not be rebuilt inside a CRM at all. Logic that needs real retries, that reconciles two systems both claiming to own a field, or that has to read unstructured text and decide something belongs in a workflow platform you also own — the territory of workflow automation proper, called from a webhook action. How engagements work explains how a scope gets agreed before any of it starts.

The honest part

What genuinely cannot come across from Keap?

The history, the money and the position. Contacts, companies, tags, custom field values and open opportunities move. Order and invoice history, broadcast statistics, campaign run history and the commission ledger stay behind, because they belong to the system that recorded them. Campaigns are never imported; every one worth keeping is rebuilt.

What moves, what is rebuilt, and what stays behind
What Treatment Why
Contact fields, tags and owners Moves They export cleanly once every tag, custom field and dropdown option exists in the destination first
Open opportunities and stage position Moves One contact, one stage, one value and one owner land on an opportunity once pipelines and users exist
Company records Moves deliberately There is no company record to land in, so the fields worth keeping are copied onto each contact by an agreed rule
Marketable status and opt-in evidence Moves deliberately One opt-in state becomes per-channel do-not-disturb flags, with the opt-in reason and date carried into a field
Notes, tasks and appointments Moves deliberately They transfer as notes and tasks on the contact, not as the activity stream Keap displays
Campaign Builder campaigns Rebuilt A canvas of goals and sequences has no export format, and the destination has no canvas to import it into
Contacts mid-sequence Decided per sequence Sequence position cannot be imported, so each running sequence is finished, re-entered at a chosen step, or stopped
Products, order forms and checkout Rebuilt The catalogue and the checkout are re-created, and every embedded form is repointed with a cutover date
Active subscriptions Handled with your processor The recurring charge lives with the merchant account and gateway; it is not a CRM field and card data is never ours to move
Order, invoice and payment history Stays behind There is no matching record to import it into; it is exported and archived, with lifetime value carried as a field if it is used
Referral partner commission ledger Stays behind Partners can be re-enrolled, but commission history and payout records have no destination record
Broadcast statistics and campaign run history Stays behind Send-level opens, clicks and run logs belong to the system that did the sending
Sending reputation Rebuilt Reputation belongs to the sending domain and infrastructure; the new domain starts from nothing and is warmed up
Legacy web forms and landing pages Replaced Anything still pointing at Keap keeps creating contacts and orders there after cutover

You own the result outright: contacts in your own account, workflows documented against the trigger that starts them, an object map showing where every tag, field and campaign went, a written decision per running sequence, an archived export of the order and commission history, and a note of what was deliberately left behind. We are an independent consultancy working inside your account through the platform's own builder and API; we hold no partner or certification badge from either vendor and will not imply one. If your own team would rather run the import, we build the object map and the scaffold and stay on as backup — and if the honest answer on the call is that your Keap account is doing its job and you should stay, that is what you will hear.

Questions

Common questions before leaving Keap

Do Campaign Builder campaigns import into GoHighLevel?

No. A Keap campaign is a canvas of goals and sequences, GoHighLevel has no canvas of that shape, and nothing converts between them. Each campaign is opened, every goal that admits a contact is written down as a real trigger, and the sequences behind it are rebuilt as workflows. It is also the moment sequences nobody has needed in a year get retired rather than carried.

What happens to tags Keap was using to hold state?

They are separated into state and history before anything is loaded. A tag such as active-client is state that something reads; a tag applied by a sequence four years ago is a breadcrumb. State tags are rebuilt with the workflow or filter that reads them, historical tags are kept only where a report depends on them, and tag categories become a naming convention because GoHighLevel has no category layer.

Can Keap order forms, products and subscriptions move across?

Products and order forms are rebuilt; subscriptions are a payments question, not a CRM one. The recurring charge lives with your merchant account and gateway, so what happens to an active subscription depends on whether that gateway is reconnected to the new platform. We never move card data, and the safe default is to let existing subscriptions keep billing where they are while new sales start in GoHighLevel.

Does the Keap affiliate program come across?

Partly, and the ledger does not. Referral partners can be re-enrolled and given new tracking links, but Keap's commission history, payout records and the referral tracking window behind them have no destination record. That history is exported and archived before cutover, and how partners are paid during the overlap is agreed in writing first because it is the part that generates the angriest emails.

Does Keap have to stay switched on after the move?

For a lookback period, yes, and read-only wherever the plan allows it. Order and invoice history, broadcast statistics and campaign run history do not migrate, and active subscriptions may still be billing there. What stops on cutover day is writing: web forms, order forms and landing pages are repointed so nothing new lands in the account you are leaving.

Free consultation

Tell us what is costing you the most time

Describe the process. You get a straight read on whether it is worth automating, roughly what it would take, and what we would tackle first — on a call that costs nothing.

  • Under an hour, free, and no obligation
  • Fixed price per stage, agreed before any work starts
  • You own everything we build, documented and in your accounts
  • If you do not need us, we will say so on that call

The form is the fastest way to reach us — we reply from a real person, usually within one business day.

All fields are required.

We reply within one business day. No newsletters, no drip campaigns.