Skip to main content
The script that books for one roofing client will probably book for the next. Clone copies a campaign, and optionally its agent, so you start from what works. The copy is yours to change. If you need twenty copies that must stay identical, use a Master Agent instead.

Prerequisites

  • The id of the agent whose campaign you are copying.
  • The locationId of the target project. It can be the same project. See Agencies, projects and sub-accounts.
  • The target project is connected. A disconnected project cannot receive a campaign.
  • An API key with agents:write.

Step 1: Choose what to copy

What each clone choice gives the copy. Clone everything copies the agent and the campaign. Campaign only copies the campaign and makes a new agent. Agent only copies the agent and makes a new campaign. What each clone choice gives the copy. Clone everything copies the agent and the campaign. Campaign only copies the campaign and makes a new agent. Agent only copies the agent and makes a new campaign. Pick everything when in doubt. It is the only mode that copies both the campaign and the agent.

Step 2: Pick the trigger tags

activeTags sets the trigger for the clone. One rule decides them: a tag drives one campaign per sub-account.
  • Cloning into a different sub-account: the same tags are fine, and usually what you want.
  • Cloning into the same sub-account: use different tags, or the two campaigns would compete for the same contacts.
Not just tags. contact_created, “start on a new contact”, follows the same rule, on every CRM: two campaigns in one sub-account that both start on a new contact will not both run, because the matcher fires the first one it finds and does not skip paused campaigns. The clone is refused if it would make a second.

Step 2b: Cloning onto a different CRM

A sub-account keeping its contacts in TFU AI and one on GoHighLevel do not start campaigns on the same events: one has tags and pipelines, the other has new contacts and its own custom fields. So a copy that crosses between them does not inherit what starts the original. It arrives with no trigger, and the go-live gate asks for one.
  • Some triggers cannot cross at all. A campaign that starts when a custom field is set only exists on a sub-account with no CRM, so cloning it onto a CRM sub-account is refused.
  • The agent still crosses fine. Where the script is what you wanted to keep, agent mode is the cleaner copy: it carries the voice and the script and builds the campaign fresh in the target.

Step 3: Clone

Call Clone agent:
The response carries the mode applied, the new campaignId, the agentId that owns it, and the full agent and campaign records. The agentId is always a new agent: a copy of the source in everything and agent mode, a fresh one in campaign mode. Each campaign keeps its own agent. The request accepts an Idempotency-Key header. Send one, and a retry after a timeout returns the same clone instead of a second one.

Step 4: Re-point what does not travel

A copy is not a twin. Three things are per sub-account and need your attention before the clone goes live.
  • Phone numbers. The clone’s fromNumbers is empty. Assign or buy one. See Phone numbers and caller ID.
  • Calendars, tags and fields. Ids are per sub-account. Cloning into a different one clears the bound calendars, on the campaign, on its calendar rules and on any booking step in the workflow, and clears the pipeline stages a stage trigger named, so you re-pick them in the target rather than inherit a binding that points back at the source. A “move to stage” or “set field” step in the workflow still carries its id and has to be re-pointed by hand. Look them up with GoHighLevel resources, or, for a sub-account that keeps its contacts here, on its own calendars and custom fields.
  • Live state. The clone starts paused. Test it, then set active: true.

Next steps