"Duplicate facebook ad sets in bulk" is a search with two very different people behind it. One wants the mechanics: which checkbox, which button, what gets copied. The other has already done that a hundred times and is quietly asking whether there is a faster way to live than rebuilding ad sets every week. This page answers both, from the launch side, and it is honest about where a tool helps and where it does not.
Before uplads existed, the team I build for kept a Notion page full of "duplicate this ad set ten times, change one thing" macros for client accounts. Killing that page was the unofficial north star. So this is not theory. The native duplicate is genuinely good at what it does. The reason the macro existed anyway is that copying the ad set was never the expensive part.
How do you duplicate Facebook ad sets in bulk?
Open the ad set table in Meta Ads Manager, tick the checkbox next to every ad set you want to copy, click Duplicate, and choose whether the copies land in the original campaign, an existing campaign, or a new campaign.
That is the whole native flow, and it is the answer to the literal search. Meta's own help center for duplicating in Ads Manager documents it: from the campaign, ad set, or ad table you can duplicate multiple campaigns, ad sets, or ads at once into an original, existing, or new campaign. No spreadsheet, no CSV, no third-party tool, no cost. For copying the structure of many ad sets at once, this is the right tool and you should use it.
What a duplicated ad set actually carries over is the part worth being precise about. The copy inherits the source ad set's audience targeting, placements, optimization goal, and budget, plus the ads that were inside it at the moment you clicked Duplicate. It does not inherit the original's delivery history. That distinction is the whole reason the next two sections exist.
Should you duplicate at the campaign, ad set, or ad level?
Duplicate at the level that matches what you are actually changing: campaign for a parallel structure, ad set for a new audience or a budget step, ad for moving one creative into an existing set.
Meta lets you duplicate at all three levels, and people conflate them constantly. Campaign duplication copies everything beneath it and is for standing up a whole second structure, for example a new-market clone of a proven campaign. Ad set duplication is the one most "duplicate facebook ad sets in bulk" searchers want: it copies targeting, placements, optimization, and the ads in that set, which makes it the standard move for testing a different audience segment or scaling a winning ad set. Ad duplication copies a single ad creative into a chosen campaign and ad set.
There is a recurring confusion worth clearing up, because it shows up in every forum thread on this topic: duplicated ad sets versus linked copies. Duplicating an ad set produces independent ad sets. Editing one does not touch the other. The linked behavior people get burned by happens at the ad level: when you duplicate an ad and reuse the existing post by its post ID, every copy points at the same underlying post, so likes and comments pool together but a single post edit propagates everywhere. If you want fully independent ads, you create new ads instead of reusing one post ID. Ad set duplication by itself is not the thing that links them.
Why teams duplicate ad sets, and when it actually helps
Teams duplicate ad sets for two honest reasons: to scale a proven set with a clean budget step, and to spin up a grid of identical test cells. Both work, and both have a cost.
The scaling debate is the most argued question in this whole search: do you raise the budget on a winning ad set, or duplicate it at a higher budget? The case for duplicating is that a fresh ad set sidesteps the delivery disruption of editing budget on a set that has already exited learning. The case against is that the duplicate is a new ad set, so it enters its own Meta learning phase and has to relearn from zero with none of the original's optimization data. Neither answer is universal. What is universal is the tradeoff: duplication buys you a clean budget step and costs you a relearn. Decide with that in front of you, not on autopilot.
None of that strategy is what makes the weekly version of this painful, though. Scaling a single winner is an occasional decision. The thing that turns "duplicate facebook ad sets in bulk" into a recurring search is the test grid: the same set of audiences, recreated every week so each one can hold this week's new creative. The structure barely changes. The creative changes constantly. And that is exactly where the native duplicate stops helping.
The part bulk duplication does not solve
The native duplicate copies the empty structure for free. It does not fill the duplicated ad sets with this week's creative, and that fill step is where the week actually goes.
Do the multiplication once. A normal creative-test week is a handful of concepts, each produced in the aspect ratios its placements need, fanned across the ad sets that make up the test. The duplicate gave you the ad sets in one click. Now every concept has to become a correctly named, correctly placed ad inside every one of those ad sets, by hand, in Ads Manager. That workload scales with the creative and the ad sets, not with how fast you clicked Duplicate.
5
Cloned in one native multi-select duplicate
5
This week's distinct hooks or angles
2
4×5 Feed + 9×16 Stories and Reels
50
The manual fill step, every week
Source: Worked example: one standard week after the ad sets are duplicated
The duplicate was the cheap ten percent. The fifty-ad fill is the expensive ninety, and it repeats every seven days. This is the same math behind why "launch 50 facebook ads at once" is its own recurring search. Bulk-duplicating the ad sets and then launching fifty ads into them are two halves of one problem.

Duplicate one ad set inside the launch, then fill them all in one upload
uplads does not bulk-duplicate ad sets. It has a single-source clone for the one-more-ad-set case, and it removes the fill step entirely by fanning one upload across every ad set you selected.
Here is the honest version with the boundaries drawn. For copying many ad sets at once, you use Meta's native multi-select duplicate, because that is what it is for and it is free. What uplads adds is the step after: you point at your existing campaign, checkbox the existing ad sets that make up the test, drop the week's creatives once, and the whole batch is created across every selected ad set in a single launch.
The launch step after the ad sets exist
- 1
Need one more identical ad set
Inside the launch flow you can duplicate one of your existing ad sets. uplads copies its targeting, budget, and bid exactly as they already were into one new paused ad set. It never invents an audience or a budget, and the copy stays paused until you decide.
- 2
Point at the existing campaign and ad sets
Select the existing campaign and checkbox the existing ad sets. uplads does not create campaigns or audiences in the launch flow.
- 3
Drop the week's creatives once
Drag the full batch of images and videos into the browser. Files upload directly to secure cloud storage and duplicates are recognized automatically, so re-launching a proven creative costs nothing.
- 4
Naming and placements resolve automatically
A naming template set once at the account level is applied to every ad in the batch, so reporting stays readable. Aspect-ratio variants of one concept (4×5, 9×16) are grouped into a single ad that serves the right ratio per placement.
- 5
Launch and walk away
One concept across ten ad sets becomes the right number of live ads from one upload. If one ad is rejected on a policy hit, the rest still go live and the launch finishes as partial. You fix the one, not the fifty.
The part that matters is the fan-out: one uploaded creative is created into every ad set you selected, in one launch. uplads stays deliberately narrow about the rest. It does not bulk-duplicate ad sets, it does not set or pace budgets or bids, it does not create campaigns or audiences, and it does not generate creative or write copy. Those are the marketing decisions and they stay with you and Meta. The single-source ad-set clone exists only so you do not have to leave the launch screen to add one more identical test cell, and even then it copies what was already there rather than inventing anything.
Stop rebuilding every duplicated ad set by hand
Duplicate the structure in Meta, then fan this week's creatives across every ad set in one upload, naming and placements handled automatically.
Native duplicate, manual rebuild, or a launcher
Use Meta's native duplicate to clone the ad set structure, then decide how you fill it: rebuild every ad by hand, maintain a CSV, or fan one upload across all of them.
| Step | uplads | Meta native duplicate | Manual rebuild | CSV / bulk import |
|---|---|---|---|---|
| Duplicate the ad-set structure | Single-source clone only | Multi-select, free | Rebuild from scratch | Re-row the sheet |
| Fill every ad set with new creative | One upload, auto fan-out | Not handled | Build each ad by hand | One row per ad |
| Multi-placement aspect ratios | Grouped into one ad | Manual customization | Manual per ad | Not handled |
| Naming convention | Auto-applied at launch | Typed by hand | Typed by hand | Typed per row |
| One ad fails | Rest still launch | n/a | Redo that ad | Import can break |
| Best for | The weekly fill step | Cloning structure | A handful of ads | One disciplined one-off |
Meta's native duplicate and uplads are not competitors here. They do different jobs. The native duplicate is the correct, free way to clone ad sets in bulk. uplads is for the step the duplicate never touched: getting this week's creative into all of those ad sets without building each ad by hand. A CSV import can work for a single careful launch, but it has no per-ad failure isolation, so one malformed row can fail the batch and you find out after. The deciding question is never whether it can be done by hand. It is how many Mondays a year you are willing to spend doing it.
What this looks like in a real week
The point of separating the two steps is that duplicating the structure stops being the thing you optimize, because it was never the bottleneck.
A sustainable week looks like this: clone or keep the ad-set grid once, then every week drop the new creatives, fan them across every ad set in one launch, let the data accumulate, read it, cut losers, scale winners, repeat. The structure is stable. The creative moves. When the fill step is a single upload instead of a four-hour rebuild, the cadence holds, and the cadence is what actually moves a Meta account. For the strategy side of scaling the winners this loop produces, the scaling Facebook ad creatives guide covers what to do with them, and the weekly creative test workflow is the same loop viewed from the testing side. When you want to see the launch layer itself, uplads pricing is one flat plan with no percentage of managed spend.
Duplicating Facebook ad sets in bulk is a solved problem: Meta does it natively, for free, in a few clicks. The unsolved problem is everything that has to happen inside those duplicated ad sets afterward, every single week. Fix that step and the duplicate goes back to being the one-click formality it should have been all along.
