Managing campaigns: duplicate, versions, settings
This article explains how to fork a campaign into a new draft, roll back a segment bundle to a previous checkpoint, and tune per-campaign settings like pacing, contact limits, and deduplication windows.
Overview
The campaign detail page (/campaigns/[id]) is the central workspace for a running or draft campaign. From the detail header and the actions sidebar you can:
- Duplicate a campaign into a fresh draft - copying configuration only, or configuration plus leads.
- View and revert version history for any segment's email sequence, prompts, and targeting using the version history popover in the sequence editor.
- Adjust settings - contact limit, daily email cap, deduplication policy, sending schedule, and tags - through the Settings panel in the actions sidebar.
Each of these operations is available directly from /campaigns and requires you to open a specific campaign's detail view.
Before you start
- Role required: You must have write access to the campaign's client workspace. Settings, versioning, and duplication are all gated by the same write-access check on the backend. Read-only users can view version history but cannot revert or save a new version.
- Campaign state: Duplication works on any campaign status. Settings and version history are accessible on launched, paused, and draft campaigns. Reverting a version on a live campaign is supported - use the preview feature to confirm the change before committing.
How to duplicate a campaign
- Open the campaign you want to copy at
/campaigns. - In the campaign detail header, click the Copy icon (between the refresh button and the pencil/edit icon).
- A confirmation dialog titled "Duplicate this campaign?" appears with the description: "A draft copy will be created. Choose whether to copy its leads too."
- Review the Import Leads toggle at the bottom of the dialog. It is off by default.
- Leave it off to copy only the campaign configuration (segments, sequences, qualification prompts, AI personalization variables, sender configs, enrichment settings). Use this when you want the same framework with a fresh list.
- Turn it on to also copy all leads from the source campaign into the new draft. The leads copy runs as a background job - the draft opens immediately and a toast message reads "Campaign duplicated. Leads are copying in the background." Use this when you want the same audience with updated messaging.
- Click Duplicate.
- You are taken directly to the new draft campaign, named "Copy of [source name]".
Notes on the duplicate
- The copy is always created as a draft, regardless of the source campaign's status.
- You cannot rename the campaign during duplication. Rename it from Settings after the draft opens.
- Duplicating from the campaigns list is not supported - the Copy icon is only in the campaign detail header.
- If you duplicate with leads and the source campaign has tens of thousands of leads, the draft is still immediately editable. Lead count updates as the background copy progresses.
- The Import Leads toggle resets to off every time the dialog opens, so a previous choice never carries over silently.
How to view and revert version history
Version history is available within any segment's sequence editor inside the Actions panel.
- Open a campaign and click Sequence (or the relevant segment) in the actions sidebar.
- In the sequence editor, locate the split Save control in the top-right corner. It has a Save button on the left and a History (clock icon) button on the right.
- Click the History button to open the version history popover. The list shows past checkpoints with version number, timestamp, and the email of the user who saved it.
- To save the current state as a new checkpoint, click Save New Version at the bottom of the popover.
- To preview what a checkpoint would restore before committing, click the Eye icon next to a version row. A read-only preview dialog shows what the segment, email sequence, and prompt bundle looked like at that point.
- To revert to a checkpoint, click the version row. A confirmation dialog titled "Revert to this version?" appears with the warning "Your current unsaved edits will be replaced."
- Click Yes, revert to confirm. A toast confirms the revert. The current version indicator (a blue checkmark) moves to the reverted version.
- If a cascade warning appears (for example, "No email sequence checkpoint existed at this point in time - the live email sequence was left unchanged"), read it carefully before closing. It tells you exactly which part of the bundle did not roll back.
What a version bundle covers
One revert rolls back three things together:
- The segment definition (targeting criteria, A/B split configuration, filter rules)
- The email sequence (all steps and content for that segment)
- The prompt bundle (personalization prompts and AI variables)
If you only want to view old versions without reverting, use the Eye preview to inspect any checkpoint without making changes.
How to change campaign settings
- Open a campaign and select Settings from the actions sidebar.
- The Settings panel loads with the following fields.
Campaign name and limits
- Campaign Name - the display name; required.
- Contact Limit - the maximum number of contacts the campaign will process; required.
- Max Emails per Day - an optional cap on daily email volume across all senders in this campaign. Leave blank for no cap.
Deduplication
The Deduplication section has three controls:
- Don't allow duplicates in the same campaign - always checked and cannot be changed. Same-campaign dedup is enforced automatically.
- Don't allow duplicates from other campaigns - when checked, a contact already present in any other campaign under this client is treated as a duplicate and blocked at import time.
- Don't allow contacts emailed in the last [N] days - enable this checkbox to skip anyone the client has already emailed within a recency window. The number field accepts 1 to 3650 days and defaults to 90 when you first enable the checkbox. The field stays visible but greyed out when the rule is disabled, so you can see what the window would be before enabling it.
Sending schedule
The Sending Schedule card lets you pick which days of the week emails are sent (Su Mo Tu We Th Fr Sa), and the start/end time with timezone.
Save
Click Save Settings at the bottom of the panel to apply all changes.
How it works
Duplication
When you duplicate a campaign, the backend performs a deep-copy of the campaign configuration: campaign row, AI workflows, model configs, data sources, sender configs, enrichment and verification settings, campaign-level prompts, segments with their filter criteria and segment prompts, email sequences with all steps, and redirect links. Every cloned entity gets a new ID.
The copy is intentionally stateless: send history, export IDs, email-sending and processing status counters, and all email-verification results are wiped. This means the duplicate re-verifies email addresses from scratch and re-warms as a brand-new campaign rather than inheriting deliverability history from the source.
If you duplicate with leads enabled, the backend starts an async background job that copies leads in batches. The personalization graph for each lead (AI qualification results, segment assignments, personalization lines) is also copied and re-mapped to the cloned campaign's prompts and steps - so the copy keeps its qualification verdicts and personalization work while pointing at the new campaign's own resources.
Deduplication during lead copy: Same-client duplicates bypass the client blocklist (the leads are a literal copy of the source). Cross-client duplicates run every lead through the target client's do-not-contact blocklist, including subdomain-aware domain matching.
Version history
Version history is anchored on segment versions. One revert call tells the backend to restore a segment checkpoint, and the backend automatically cascades to restore the email sequence and prompt bundle by finding the latest child version saved at or before the segment checkpoint's timestamp. This means one revert always restores the three resources in a consistent state without any client-side timestamp matching.
Checkpoints are written with a strict save order (sequence first, then prompts, then segment) to guarantee timestamps are monotonically increasing. This ensures a future revert always finds the correct prompt and sequence versions for any given segment checkpoint.
Snapshots include the AI model configuration from the time the checkpoint was created (model, vendor, reasoning level), so reverting an old checkpoint also restores the model settings that were live at that point.
Settings and deduplication policy
The deduplication rules are enforced at two points: at import time (when new leads enter the campaign) and again at launch time (right before leads are uploaded to the sending platform). The double enforcement catches contacts that were added to a sibling campaign after this campaign was already built.
The recently-emailed window is calculated from real send events, including both automated sequence emails and manually sent emails. A contact with any send event within the configured window is treated as a duplicate anchor, even on campaigns where the global dedup policy is otherwise permissive.
When you save the recently-emailed dedup rule as disabled, the platform receives an explicit "off" signal. This prevents any ambiguity between "turned off" and "not changed."
Troubleshooting & debugging
Duplicate dialog does not appear when clicking the Copy icon
- Confirm you are on the campaign detail page (the URL includes
/campaigns/[id]), not the campaigns list. The Copy button is only in the detail header. - Check your role. If the button is absent entirely, you may not have write access to this client workspace.
"Leads are copying in the background" toast - how long should it take?
- For campaigns with a few hundred leads, expect seconds to a couple of minutes. For campaigns with tens of thousands of leads, allow 5 to 15 minutes. If the campaign shows an "Error" processing flag after several minutes, the background copy failed. Check the campaign's processing status. The failed import is automatically cleaned up on the backend.
Duplicated campaign shows 0 contacts even after the background copy should have finished
- Refresh the campaign detail page. The contacts count is not pushed in real time.
- If the count remains 0 after 15 minutes, check whether the source campaign actually had leads in a ready/valid state. Leads that were in an error or importing state in the source campaign may not have been eligible for copy.
Version history popover shows "No saved versions yet"
- No checkpoint has been saved for this segment. Click Save New Version to create the first one.
- If you expect versions to exist (they were saved in a previous session), check whether you are looking at the correct segment. The history is per-segment.
After a revert, a cascade warning appears
- "No email sequence checkpoint existed at this point in time" - the email sequence did not have a checkpoint at or before the reverted segment checkpoint. The live sequence was left unchanged. Save New Version to create a current checkpoint before reverting further.
- "The live prompts are newer than this checkpoint" - your prompts were saved more recently than the target version and were not rolled back. This is expected if you saved prompt changes after the segment checkpoint you selected.
- "Skipped empty snapshot" - an intermediate version had no steps and was skipped to avoid wiping live steps. The next-oldest valid version was used instead.
- If a version cannot be reverted because of an error, the revert toast will show the error. Retry once. If it fails again, check the campaign's write-access status.
Settings save shows "Settings Save Blocked"
- This means a configuration contract error was detected. The error message in the panel explains the specific conflict (for example, a sender configuration that is no longer valid). Resolve the indicated conflict and retry.
"Failed To Load Settings" error in the Settings panel
- This is a network or authorization error. Click Retry. If it persists, confirm the campaign still exists and that your session is authenticated.
Recently-emailed dedup enabled but contacts are not being suppressed
- Confirm the setting was saved (click Save Settings after enabling the checkbox).
- The window is enforced at import time and at launch time. Contacts already in the campaign before you enabled the setting are not retroactively removed.
- The window is calculated from
ContactEmailStats.LastSentAt, which is updated by a background sync job. There may be a short lag before very recent sends are reflected.
FAQ
Can I rename a campaign during duplication? No. The copy is always named "Copy of [original name]" automatically. Rename it from the Campaign Name field in Settings after the draft opens.
Does duplicating a campaign with leads copy the AI personalization work too? Yes. When "Import Leads" is on, the full personalization graph is copied - qualification verdicts, segmentation reasoning, and personalization lines - remapped to the new campaign's own prompts and steps.
Can I revert to an old version on a campaign that is currently live and sending? Yes. Version history remains accessible on launched campaigns. Use the Eye icon to preview the change first, then revert. The backend role checks still apply - you need write access to commit the revert.
What happens if I save new version and the sequence save fails? The Save New Version operation stops immediately if the sequence step fails. No checkpoint is written. You will see an error toast. The segment and prompt saves are skipped, so no partial checkpoint is created that could appear in the history list.
Does the recently-emailed dedup window apply even when I have "Don't allow duplicates from other campaigns" turned off? Yes. The recently-emailed window is an independent rule that applies on top of the structural dedup settings. You can have structural dedup off while still suppressing anyone contacted in the last 90 days.
How many versions are shown in the history popover? The first 20 versions are loaded when you open the popover. Click "Load more" at the bottom to load additional pages.