Summary and result
If you run paid social for a fintech, you know the pattern. A campaign works, so it gets copied for a new audience, a new market or a new creative test, and then it gets copied again. This case study covers Meta ads campaign duplication automation for the user acquisition team at a fintech company, and what it did to a task the team puts at about 90 minutes per campaign.
In the 30 days from 12 October to 10 November 2026, the system duplicated 29 campaigns and none of the runs failed. At the 90 minutes the team stated, that is about 43.3 hours of hand work, or about 1,518 USD at 35 USD an hour. Those two figures are modeled, and the last section explains how.
This is a small process on purpose. It has one step and 29 runs in the window, so we do not call it high volume. The story is time per campaign, runs that did not fail, and platform limits that the automation handles so nobody has to count ads by hand.
- Campaigns duplicated
- 29 campaigns duplicated
- Measured from run logs, 12 Oct to 10 Nov 2026
- Failed runs
- 0 failed runs
- Measured, same 30 days
- By hand, per campaign
- 90 minutes by hand per campaign
- Client stated, not timed by us
- Modeled hours saved
- 43.3 hours
- Modeled: 29 runs x about 89.75 minutes saved
The process before
The user acquisition team copies campaigns constantly. A winning structure is reused for a new country, a new audience or a new conversion goal, and the team needs the copy to look like the original in every way except the one thing under test. Done by hand in the ads manager, the work follows the same path each time:
- Find the source campaign among the many in the ad account.
- Copy the campaign settings and targeting.
- Copy the ad sets one at a time, and rename each one to the team’s naming convention.
- Check how many ads each ad set holds against the platform’s limit of 150 ads per ad set.
- Check the copy, then publish it.
The team put this at about 90 minutes per campaign, done by one person. That is the client’s own estimate and we did not stopwatch it. They gave us one figure for the whole task and not a time per step, so the map below shows the work as a single block and does not split the 90 minutes into invented pieces.
Two things make a long task worse. The platform’s own bulk copy call rejects any request with more than three child objects, so a campaign with real structure cannot be copied in one go. And the damage from a slip is quiet: a wrong ad set name or an ad set pushed past the ad limit does not announce itself until someone goes looking.
- 1
Duplicate a campaign with its ad sets and ads in Meta
Manual Paid social manager. 29 runs, 90 min each.
- 2
Replace ad copy in bulk across ad accounts
Manual Paid social manager. 4 runs, 90 min each.
The numbers behind this figure
| Step | Who | Work | Runs | Median minutes | Goes to |
|---|---|---|---|---|---|
| Duplicate a campaign with its ad sets and ads in Meta | Paid social manager | Manual | 29 | 90 | End |
| Replace ad copy in bulk across ad accounts | Paid social manager | Manual | 4 | 90 | End |
What we built
We did not replace the person who decides which campaign to copy and why. We replaced the keystrokes between that decision and a finished, paused copy. The system takes one trigger and does the rest. Every run is logged, which is how we know the counts in this article.
How the Meta ads campaign duplication automation works
The person creates a new campaign record that points at the source campaign and starts the run. A few optional fields change what the copy looks like: a new campaign name, a different objective, a naming template for the ad sets, a start date, and whether to copy only active ad sets or active and inactive ones. The default copies everything, including paused ad sets.
The copy is created paused. When it finishes, the system writes the new campaign name and the platform’s campaign ID back to the record and marks it as a draft. Nothing goes live until a person switches it on.
Because the bulk copy call caps at three child objects, the system copies the campaign first, then each ad set, then each ad, as separate calls. Large campaigns do not fit inside one run, so the work is done in chunks with a time budget under the platform’s five minute limit. When ads remain, the run starts a fresh run of itself, which resumes from a saved checkpoint. That is why this Meta ads campaign duplication automation handles a large campaign as reliably as a small one.
The ad limit, objectives and tracking
The 150 ads per ad set limit is the rule people trip over. The system counts the ads in each source ad set and splits any ad set that would exceed the limit into several, so nobody counts by hand. For campaigns with certain objectives, such as leads and app promotion, the platform caps ad sets at 50 ads, and the system applies that cap instead.
Changing the campaign objective is a case where copying does not work at all, because the platform rejects copies across different objectives. In that case the system rebuilds the campaign, its ad sets and its ads from scratch instead of copying them. The same applies when the team wants a different conversion goal, because the platform locks that setting once an ad set is created and it can only be set correctly at creation.
On every duplicated ad, the system rewrites the campaign and content tracking parameters in the destination link so that reporting follows the new names. It also drops fields the platform no longer accepts, retries on transient server errors and applies the team’s standard creative enhancement settings to each ad. One honest limit: the learning phase does not carry over to a copy, whatever copy method is used. The new campaign starts delivery optimization from scratch.
Duplicate and change in one step, for rapid tests
A test usually needs the same campaign with one thing different: another conversion event, another performance goal, another dataset, another attribution window or another start day. Normally you copy the campaign and then open each ad set to edit it. The platform makes that worse, because it locks the optimization goal and conversion settings of an ad set once it exists, so those cannot be edited on a copy afterwards.
Here the changes are set on the same record that triggers the copy, so the new campaign arrives with them already applied. The options on that record are:
- Performance goal, dataset and conversion event. Each is applied to every ad set in the copy. Because the platform will not allow an edit later, the system creates those ad sets fresh with the new values instead of copying them.
- Click and view attribution windows. These are set per copy for sales, leads and app promotion campaigns. Left blank, the copy keeps the source ad set’s window.
- Start date. The campaign and every ad set are scheduled to start at midnight in the ad account’s timezone, so a split test can be lined up the day before.
- Ad set naming template. Each ad set gets a sequential number in its name, so the test cells are easy to tell apart in reporting.
The system picks the route on its own. If only names or dates change, it uses the fast copy. If the objective or the conversion settings change, it builds the affected objects from scratch. The person fills in what should differ and does not choose a method. The copy is still created paused, so you check it before it spends anything.
We have no timing data for these test variants on their own. The 90 minutes in this case study is the client’s estimate for the whole task, and we did not measure the variants separately.
Bulk ad copy find and replace
The same team had a second repeated task, changing a headline, a call to action, a primary text or a description across many ads. The system finds exact matches, after trimming spaces, on active and paused ads, and swaps them for the new text across one, several or all ad accounts. On large accounts it chains itself across runs, and it was verified end to end on an account of about 40,000 ads. In the same 30 days it ran 4 times with no failed runs.
The process after
After the build, the manual block is one trigger. The automation does the copying, naming, ad limit handling and tracking rewrite, and a person reviews the paused copy before it goes live. The map shows the logged run time of about 15 seconds for a duplication run. We build no claim on it. The point of the after map is that the 90 minutes of hand work are gone and the copy waits for review.
- 1
Duplicate a campaign with its ad sets and ads in Meta
Automated Paid social manager. 29 runs, 0.3 min each.
- 2
Replace ad copy in bulk across ad accounts
Automated Paid social manager. 4 runs, 1 min each.
The numbers behind this figure
| Step | Who | Work | Runs | Median minutes | Goes to |
|---|---|---|---|---|---|
| Duplicate a campaign with its ad sets and ads in Meta | Paid social manager | Automated | 29 | 0.3 | End |
| Replace ad copy in bulk across ad accounts | Paid social manager | Automated | 4 | 1 | End |
Result in numbers
Campaign duplication carries almost all of the modeled saving: about 43.3 hours across 29 runs. Bulk ad copy find and replace adds about 5.9 hours across 4 runs, on the same 90 minute client stated basis. Together that is about 49 modeled hours in the window.
manual automated
The numbers behind this figure
| Automation | Work | Modeled hours saved |
|---|---|---|
| Campaign duplication, 29 runs | automated | 43.3 |
| Bulk ad copy find and replace, 4 runs | automated | 5.9 |
| Total | 49.2 |
Volume was uneven. Of the 29 campaigns, 13 fell in the 7-day block starting 26 October, and 3 each fell in the first two blocks. Read this as a distribution of recorded cases and not as a trend. There are only five points and the last block covers 2 days. Campaign copying also follows the team’s testing calendar, which is lumpy by nature.
manual automated
The numbers behind this figure
| 7-day block starting | Work | Campaigns duplicated |
|---|---|---|
| 12 Oct | automated | 3 |
| 19 Oct | automated | 3 |
| 26 Oct | automated | 13 |
| 2 Nov | automated | 5 |
| 9 Nov (2 days) | automated | 5 |
| Total | 29 |
Zero failed runs is a good result, but treat it as a good month and not a guarantee. A sample of 29 is small, and the platform changes its rules often enough that new rejections do appear. When one does, the run is logged with the error and the fix goes into the system once, which is the reason to keep a system like this maintained and not to build it and forget it.
What we left manual
- Choosing what to copy and why. The person picks the source campaign and decides whether the copy changes the objective, the conversion goal or the audience. That is a marketing judgment and we did not automate it.
- Reviewing the paused copy. The system never switches a campaign on. A person checks the copy and activates it. We did not time this review, so the article does not turn it into a number.
- Creative and budget decisions. What runs in the copy, and with what budget, stays with the team.
Leaving these steps manual keeps the people who own spend in control of it. If you are weighing a similar build, our view is that a good automation shortens the manual part of the chain and does not hide it. We take the same position in our earlier case on time entry audit automation for a field services firm, and in the argument for why most AI pilots never reach production.
How we calculated this
Every number in this article comes from the run logs of two automations and from the process model of the two processes. Counts are measured. Hours and dollars are modeled.
- Window: 30 days, 12 October to 10 November 2026, counted by day. Run counts are 29 campaign duplication runs, all successful, and 4 bulk ad copy find and replace runs, all successful.
- Minutes by hand: 90 per campaign and 90 per bulk replace job, stated by the client. We did not time them.
- Minutes saved per run: the 90 minutes stated, less the logged run time of about 15 seconds for duplication and 1 minute for find and replace. That gives about 43.3 hours for 29 duplication runs and about 5.9 hours for 4 replace runs.
- Where figures conflicted, we used the lower one. The monitoring tool defaults to 100 minutes saved per run and 40 USD an hour, while the process record states 90 minutes and 35 USD. We used 90 and 35. On the tool’s default figures the same 29 runs would show about 48.3 hours, and we do not use that.
- Rate: 35 USD per hour, for the paid social manager role. At that rate 43.3 hours is about 1,518 USD. That is the value of time at that rate, not money the client saved or banked.
- Case counts: we count distinct campaign records in the window. The process has event streams under more than one key, and we did not add their counts together.
- What we did not use: the creative production automations that sit in the same workflow have different minutes per step and different run counts, so we left them out and kept this article to one process and its sibling.
For the longer argument on how we count hours across client automations, read how automation saves clients thousands of hours.
Company name, stack and the numbers behind this are shared on the audit call.