Meta Ads Manager's native bulk editor accepts an XLSX template that lets you create or edit campaigns, ad sets, and ads by filling in a spreadsheet and importing it. You open it in Ads Manager from the More menu (or the import/export icon) above your campaigns table. The feature is free, ships with every ad account, and is the same XLSX format Meta uses internally for its export/re-import workflow.
This is the reference guide to that template. Every column, every required vs optional field, how to bulk create campaigns and bulk edit existing ads, the image hash and zip-upload mechanics, the row-level error messages and what they actually mean, and the export → clear IDs → re-import pattern for moving campaigns between accounts.
Third-party bulk launchers that publish via the Marketing API instead of XLSX are a separate decision with its own comparison. This guide stays on the native spreadsheet workflow, with a short section at the end on when a bulk upload tool makes more sense.
What is the Native Bulk Editor?
The native bulk editor is Meta Ads Manager's built-in Import & Export feature. It accepts an XLSX template (CSV also works for simpler files) containing, in most files, one row per ad, with that ad's campaign and ad set settings on the same row. It creates or updates everything in the file in one import.
It sits at Ads Manager > More > Import ads in bulk, works on desktop only, and it's available on every ad account at no cost. Originally part of Facebook's Power Editor - the desktop-only tool legacy advertisers used through the mid-2010s - the bulk editor was folded into Ads Manager when Power Editor was retired, which is why some teams still refer to the XLSX as the "Power Editor template."
It handles both creation (rows with blank ID columns) and updates (rows with the original Campaign / Ad Set / Ad IDs intact). The same file can mix the two: blank IDs create, filled IDs update, and Meta processes the file row by row.
How Does Facebook Ads Bulk Upload Work?
The bulk upload process works through structured spreadsheets that communicate ad data to Facebook's system. Here's how it functions:
1. Spreadsheet Template
First, you fill out a template Excel sheet with columns for campaigns, ad sets, and ads. Each row represents one object with all its details. Facebook provides templates with the correct column names, which differ slightly from the UI (for example, "Body" for ad text, "Title" for headline).
2. Importing the File
In Ads Manager, click the Import/Export button and choose "Import Ads in Bulk." You can either upload your Excel/CSV file or paste the data as text. The system parses the spreadsheet and creates or updates the specified campaigns, ad sets, and ads.
3. Uploading Creatives
For images and videos, you have two options:
- Reference existing assets using their Image Hash or Video ID
- Upload new assets alongside the spreadsheet, either individually or as a zip file
The key is matching file names in your spreadsheet to the actual files you upload.
4. Processing and Validation
Facebook processes the data and shows a summary of what was imported, including any warnings or errors. Minor issues appear as warnings, while serious problems become blocking errors that prevent import.
5. Review and Publish
After successful import, campaigns appear in Ads Manager as drafts. You can review everything before clicking "Publish" to make the ads live.
The file size limit is approximately 2 MB, which typically allows for several hundred ads per import.
The Bulk Upload Template: Every Column Explained
The Meta ads bulk upload template is the Excel file you get from Download Excel template in Ads Manager, or from exporting a campaign you already run. Its column names differ from the Ads Manager UI labels in ways that trip up new users. "Body" is primary text. "Title" is the headline. "Link Description" is the text under the headline, not the ad description. "Link Object ID" is your Facebook Page.
The reference below follows Meta's own column list wherever it covers a column. Targeting, placement, and conversion headers change more often than the rest, so copy those from an export of your own account rather than typing them by hand.
Campaign-level columns
| Column | Meaning | Format |
|---|---|---|
| Campaign ID | Existing campaign ID for updates | Leave blank to create new |
| Campaign Name | Campaign label | Free text |
| Campaign Objective | Buying objective | Awareness, Traffic, Engagement, Leads, Sales, or App promotion. Required for new campaigns |
| Campaign Status | Campaign on/off | Active or Paused |
| Buying Type | How you pay | Auction. Required for new campaigns. Reservation campaigns can't be exported and re-imported |
| Campaign Daily Budget | Daily budget at campaign level | Amount in your account currency, no currency symbol (e.g. 50.00) |
| Campaign Lifetime Budget | Lifetime budget at campaign level | Same format as daily |
| Campaign Bid Strategy | Optimization strategy | LOWEST_COST_WITHOUT_CAP, LOWEST_COST_WITH_BID_CAP, COST_CAP |
| Special Ad Categories | Restricted categories | Financial products and services (which now covers credit), employment, housing, or social issues, elections or politics. Blank if none. Copy the exact value from an export |
Ad-set-level columns
| Column | Meaning | Format |
|---|---|---|
| Ad Set ID | Existing ad set ID for updates | Leave blank to create new |
| Ad Set Name | Ad set label | Free text |
| Ad Set Daily Budget | Daily budget at ad set level | Amount in your account currency, no currency symbol (e.g. 50.00) |
| Ad Set Lifetime Budget | Lifetime budget at ad set level | Same format as daily |
| Ad Set Run Status | Ad set on/off | Active or Paused |
| Ad Set Time Start | Schedule start | Date and time, MM/DD/YY HH:MM in Meta's column list. Match the format in your export |
| End time column | Schedule end | Same format as the start time. Copy the exact header from an export |
| Optimization Goal | What Meta optimizes for | OFFSITE_CONVERSIONS, LINK_CLICKS, REACH, IMPRESSIONS, THRUPLAY, etc. |
| Billing Event | When you get charged | IMPRESSIONS, LINK_CLICKS, THRUPLAY |
| Bid Amount | Bid for capped strategies | Amount in your account currency, no currency symbol (e.g. 2.50). Blank for lowest cost |
| Pixel ID | Conversion pixel | Required for OFFSITE_CONVERSIONS |
| Conversion Event | Pixel event optimized for | PURCHASE, LEAD, COMPLETE_REGISTRATION, etc. |
| Conversion Window | Attribution window | 1d_view, 7d_click, 1d_click_1d_view, etc. |
| Countries | Geo targeting | ISO country codes, comma-separated (e.g. US, CA, GB). Required |
| Cities | City targeting | Semicolon between cities (e.g. Palo Alto, CA; New York, NY). Leave blank when targeting several countries |
| Age Min / Age Max | Age range | Integers 13-65 |
| Gender | Gender targeting | Men or Women. Leave blank for all genders |
| Locales | Language targeting | Languages, comma-separated |
| Interests | Detailed targeting | Comma-separated interest IDs |
| Custom Audiences | Included audiences | ID:Name pairs, comma-separated (e.g. 123:Customers, 321:Other Customers) |
| Excluded Custom Audiences | Excluded audiences | Same ID:Name format |
| Placements | Where ads run | Comma-separated (e.g. facebook_feed, instagram_feed, facebook_reels, instagram_stories) |
| Device Platforms | Device targeting | mobile, desktop, or both |
Ad-level columns
| Column | Meaning | Format |
|---|---|---|
| Ad ID | Existing ad ID for updates | Leave blank to create new |
| Ad Name | Ad label | Free text |
| Ad Status | Ad on/off | ACTIVE or PAUSED |
| Title | Headline text | One headline per row, or multiple for DCO |
| Body | Primary text | The main copy above the creative |
| Link | Destination URL | Full URL with https:// |
| Display Link | Shortened display URL | Optional vanity URL |
| Link Description | Text under the headline | Optional secondary text |
| Call to Action | CTA button | SHOP_NOW, LEARN_MORE, SIGN_UP, GET_OFFER, etc. |
| Creative Type | Ad format | e.g. Link Page Post Ad or Video Page Post Ad. Copy the value from an export |
| Image Hash | Library image reference | 32-char hex hash |
| Video ID | Library video reference | Meta video ID with a v: prefix (e.g. v:123456789) |
| Image File Name | New image upload reference | Must match a filename in the upload bundle (Meta's column list calls this the Image column) |
| Video File Name | New video upload reference | Must match an uploaded video file. Up to 10 videos per import, 10 MB each |
| Story ID | Existing Page post | Runs the ad from that post and ignores the creative columns. Leave blank to build a new post |
| Video Thumbnail URL | Video thumbnail override | Full URL |
| URL Tags | Append to destination URL | utm_source=facebook&utm_medium=cpc-style strings |
| Tracking Pixel IDs | Conversion tracking | Pixel IDs that should fire for this ad |
| Instagram Account ID | IG identity | Required for IG placements |
| Link Object ID | Facebook Page identity | o: plus your Page ID (e.g. o:123456789). Required for all Meta ads |
For Dynamic Creative ad sets, exports add repeating variant columns: Additional Title 1-4, Additional Body 1-4, Additional Link Description 1-4, Additional CallToAction 1-4, Additional Image 1-9 Hash, and Additional Video 1-9 ID. A Use Dynamic Creative column must be set to Yes on import, or Meta ignores the extra assets. Since June 2024, Meta may not offer dynamic creative on new Sales or App promotion ad sets and points advertisers to the flexible ad format instead.
Required columns shift based on objective. The cleanest workflow is to manually create one minimal ad in your target objective, export it as a starting template, and use that exported file as your baseline - every required column will already be populated with the correct format.
What the XLSX Workflow Is Good At (and What It Isn't)
The native XLSX bulk editor is purpose-built for a few specific jobs and clumsy at others. Knowing the difference saves hours of fighting the template.
Strong fits:
- Bulk edits across many ads - updating destination URLs, UTM tags, ad copy, or budgets across hundreds of rows by editing one column.
- Templated campaign rebuilds - replicating a known-good structure for a new market or client.
- Cross-account transfer - exporting from one account, clearing IDs, and re-importing elsewhere.
- Offline review and version control - sharing a campaign plan via XLSX, tracking diffs, getting sign-off before publish.
Awkward fits:
- Features Meta doesn't round-trip - Meta keeps a list of features that break on export and import. A/B tests, offers, and branded content partner Pages are removed, ads with multiple text options lose the extra options, and reservation campaigns or carousels with customized placements come back as drafts with errors that can't be published.
- High-velocity testing - the copy-paste-between-sheet-and-Ads-Manager loop adds friction once you're launching more than ~20 ads per week.
- Per-creative thumbnail control - you can set a thumbnail URL, but you can't preview frames or pick from generated options the way the UI does.
- Post engagement - rows built from the creative columns create new posts, so likes and comments start at zero unless you paste the original post's ID into the Story ID column.
For everything in the "Strong fits" column, the native XLSX is the right tool and there's no reason to look further.
Step-by-Step Guide to Bulk Upload
Step 1: Download the Template
In Ads Manager, open the Campaigns, Ad sets, or Ads tab and click the import/export icon above the table (or More, if the icon isn't showing). Choose "Download Excel template" for new campaigns. To modify existing ones, select them and choose Export > Export selected > Export as .xlsx.

Step 2: Fill in Your Data
Open the Excel file and input your campaign, ad set, and ad details. Key points:
- Leave ID fields blank for new items
- Include IDs when editing existing items
- Ensure all required fields are complete
- Match image file names exactly
Step 3: Import to Ads Manager
Click More and select "Import ads in bulk." Click Choose file to add your spreadsheet, add new images in the Images tab (one by one or as a zip file) and new videos in the Videos section, then click Import.
Launch More. Click Less.
Upload hundreds of creatives at once, auto-match thumbnails to videos, and publish straight to your ad accounts through Meta's API.
Try Ads Uploader FreeNo credit card required • 7-day free trial
Step 4: Review Import Summary
Check for successes, warnings, and blocking errors. Click "View errors in Excel" to see what went wrong, fix those rows in your spreadsheet, and re-import if needed.
Step 5: Publish Changes
Click "Review and publish," check the items you want to go live, and click "Publish."
Pro Tip: Start with a small test batch to ensure your format is correct before scaling up to hundreds of ads.)
How to Bulk Create Facebook Campaigns
You don't need a separate campaign file to bulk create Facebook campaigns. Each ad row in the template also carries the campaign and ad set it belongs to, so the campaign structure comes from the names you put on each row.
The rule that makes this work is how Meta handles a blank Campaign ID. It looks for a campaign with the same Campaign Name in the account. If it finds one, the row goes into that campaign. If it doesn't, it creates a new campaign. Ad sets work the same way with Ad Set Name. That's also the trap: reuse a name that already exists in the account and your "new" ads land in an old campaign. Give every new campaign and ad set a name the account hasn't used.
- Build one campaign by hand and export it. Set the objective, one ad set, and one ad the way you want every campaign to look, then export it as .xlsx. The file comes back with every column that objective needs.
- Clear the IDs. Delete the values in Campaign ID, Ad Set ID, and Ad ID. Keep the header row.
- Copy the rows once per campaign. Give each copy its own Campaign Name and Ad Set Name.
- Change what differs per campaign. Usually budget, Countries, Link, and the creative columns. New campaigns need a Campaign Objective and Buying Type, and each new ad set needs a country and a budget.
- Import and publish. More > Import ads in bulk, then Review and publish.
Here's what three rows that create two campaigns look like (all other columns stay as they came out of your export):
| Campaign Name | Campaign Objective | Ad Set Name | Countries | Ad Name | Image File Name |
|---|---|---|---|---|---|
| US - Prospecting - Oct | Sales | US - Broad | US | US - Hook A | hook_a.jpg |
| US - Prospecting - Oct | Sales | US - Broad | US | US - Hook B | hook_b.jpg |
| UK - Prospecting - Oct | Sales | UK - Broad | GB | UK - Hook A | hook_a.jpg |
Rows one and two are meant to share a campaign and an ad set, and row three to create a second campaign with its own ad set. Because Meta matches rows by name, check that the import preview shows two new campaigns, not three, before you publish.
How to Bulk Edit Facebook Ads
There are two native ways to bulk edit Facebook ads, and they suit different jobs.
Select and edit in Ads Manager. Check the boxes next to the campaigns, ad sets, or ads you want to change and click Edit. The side panel applies budget, optimization, and creative changes to everything you selected, and "Edit each ad set" or "Edit each ad" lets you change them one at a time without leaving the panel. This is the quicker route when the change is the same for every item.
Export, edit, re-import. Export the ads as .xlsx, change the cells, keep the IDs, and import the file. Meta lets you change any field in the file except Ad ID, Campaign ID, and Image Hash. This is the better route when every row gets a different value, like new URLs with per-ad UTM tags.
Either way, editing some settings can restart the learning phase or send the ad back through review, and you can't change the objective of a published campaign.
Image Hashes, Video IDs, and the Zip Workflow
Creatives are the most failure-prone part of XLSX imports because there are three ways to attach media to a row and they don't behave the same way.
Three ways to attach a creative
1. Image Hash (existing library asset). Every image you've ever uploaded to a Meta ad account gets a 32-character hex hash. Drop that into the Image Hash column and the row points at the existing asset - no re-upload, no zip file. Find a hash by manually creating one ad with the image, exporting that ad as XLSX, and copying the hash from the export. The Marketing API exposes hashes directly via /act_{account_id}/adimages, but pulling them through the UI is the no-code route.
2. Video ID (existing library asset). Same idea for video. The Video ID is a long numeric string Meta assigns when you upload to the account's video library. Reference it in the Video ID column and you skip re-uploading.
3. Filename match (new asset upload). Put a filename (e.g. summer_promo_4x5.jpg) in the Image File Name column. In the Import ads in bulk window, the Images tab takes either the loose files or a single zip archive containing all referenced filenames. Filenames must match character-for-character, extension included, case-sensitive. New videos work the same way through the Video File Name column and the Videos section, but Meta caps that at 10 videos per import, up to 10 MB each.
Common silent failures
- Trailing whitespace in the Image File Name cell - Excel preserves invisible spaces that break the match. Trim cells before saving.
- Mac archive metadata - zipping on macOS adds
__MACOSX/and.DS_Storeentries. Meta usually ignores these, but some zip tools include resource forks (._filename.jpg) that look like filenames to the matcher. Usezip -Xfrom the terminal, or strip metadata before uploading. - Mismatched case -
Summer_promo.jpgin the spreadsheet vssummer_promo.jpgon disk silently fails. Standardize on lowercase. - Mixed references in one row - filling both Image Hash and Image File Name on the same row produces undefined behavior. Pick one per row.
Hard errors
- File total exceeds 2 MB XLSX cap → split the import.
- Filename referenced but not uploaded → row blocked until resolved.
- Bare Image Hash from a different ad account → blocked, because a hash on its own is looked up in the account you're importing into. Meta's column guide also documents an account-prefixed form (source ad account ID, a colon, then the hash) for images stored in another account.
- More than 10 new videos, or a video over 10 MB → the import errors out. Split the videos across imports or reference them by Video ID.
- Video ID still processing → row blocked with a "video not ready" error.
For repeated batches with the same assets, paste hashes and IDs rather than re-uploading. It sidesteps the 10-video upload cap and removes a whole class of filename errors.
Reading the Import Summary: Errors vs Warnings
After upload, Meta shows a summary of what was imported, plus any warnings and blocking errors. Click "View errors in Excel" (or "View details") to see which rows failed and why. The messages below are paraphrased, since Meta's exact wording changes. Two outcomes matter:
Warnings let the import proceed. Common ones:
- "Placement not available for selected objective" - Meta will publish the ad but skip the unsupported placement. Often safe to ignore, but worth checking that the placement you wanted didn't quietly get dropped.
- "Bid amount unusually low" - informational only, the bid is accepted as-is.
- "Field will be ignored for this objective" - you filled in a column that doesn't apply (e.g. Conversion Event on a TRAFFIC campaign). Harmless.
Errors block the import. Common ones and the row-level fix:
- "Invalid combination of objective and optimization goal" - your Optimization Goal column doesn't match the Campaign Objective. Re-export one valid ad set with the target objective to see which optimization goals Meta accepts.
- "Pixel not found" - the Pixel ID in the row doesn't belong to this ad account, or the account doesn't have the right asset permission. Confirm the pixel is shared with the account in Business Settings.
- "Image hash not found" - hash from a different account, or the asset was deleted. Either re-upload via Image File Name, or copy the hash from a new export of the source account.
- "Filename not provided" - Image File Name references a file that wasn't included in the attached zip or loose uploads.
- "Cannot update fields on existing object" - you're trying to change an immutable field (e.g. Campaign Objective on an existing campaign). Clear the ID columns to create a new campaign instead, or revert that cell to its original value.
- "Ad set conflicts with campaign budget optimization" - the campaign uses CBO so Ad Set Daily Budget / Lifetime Budget must be blank. Clear those columns on conflicting rows.
- "Special Ad Category restricted targeting" - financial products and services, employment, and housing campaigns disallow age, gender, and detailed targeting fields. Strip those columns for those rows.
Re-import after fixing; warnings carry over from the previous attempt only for unchanged rows.
Cross-Account Campaign Transfer via Export → Re-Import
Meta has no "copy campaign to another ad account" button. The XLSX export → clear IDs → re-import pattern is the official workaround.
Step-by-step
- Export the source campaign. In the Ads tab, check the ads you want to copy, then Export > Selected > Export as .xlsx.
- Open the file and clear all ID columns. Delete every value in Campaign ID, Ad Set ID, and Ad ID. Leave the column headers intact. Filled IDs would try to update, not create.
- Swap account-specific identifiers. These do not travel between accounts:
- Page ID (the Link Object ID column) - replace with the destination account's Facebook Page ID.
- Pixel ID - replace with the destination account's pixel (or share the source pixel via Business Settings if you want shared attribution).
- Instagram Account ID - replace with the destination account's IG identity.
- Custom Audience IDs - replace with destination-account audiences. Custom Audiences don't transfer unless shared via Business Manager asset sharing.
- Catalog ID - replace if using DPA / Advantage+ Catalog.
- Swap or clear placement targeting if the destination account doesn't have access to the same placements.
- Import into the destination account. Switch ad accounts in Ads Manager first, then Import Ads in Bulk.
- Re-upload or re-reference creatives. Image hashes and Video IDs belong to the account they were uploaded to. Either upload the files fresh, copy them across via Meta's Media Library, or, for images, use the account-prefixed hash format Meta documents for images stored in another account.
- Review the draft and publish.
Save Hours on Creative Testing
Stop uploading ads one by one. Bulk process unlimited creatives with automatic media matching and direct API publishing.
Try Ads Uploader FreeNo credit card required • 7-day free trial
What doesn't travel
- Learning phase data - the new campaign restarts learning from zero.
- Post engagement - likes, comments, and shares stay attached to the source post. Rows built from the creative columns create new posts. The only way to keep the engagement is to reference the original post in the Story ID column, which needs the destination account to run ads for the same Page.
- Historical performance - Insights for the source campaign stay in the source account.
- Account-level optimization signals - the destination account's pixel only has the conversion history it has accumulated independently.
The transfer pattern is reliable enough to be the recommended workflow for white-label agency offboarding. See our white-label Facebook ads guide for the broader handover playbook.
Common Mistakes to Avoid
Mixing Create vs Update
Blank IDs create, filled IDs update. Mixing them in one file is fine - but accidentally leaving an ID in a row you intended to duplicate will overwrite the original ad instead.
Wrong Column Formats
Required columns shift by objective. Always export a working ad in the target objective and use that as your baseline.
Mismatched File Names
Case, underscores, extensions, and trailing whitespace all matter. Standardize on lowercase, no spaces, and trim cells before saving.
Ignoring Error Messages
Errors are row-level and explicit. Read the row number and column, fix that cell, re-import.
Exceeding File Size
The 2 MB XLSX limit hits surprisingly fast on Dynamic Creative campaigns with many variant columns. Split into smaller batches.
Attempting to Edit Immutable Fields
Campaign Objective, Buying Type, and a few other fields are immutable once set. The import will block the row. Create a new campaign with the new value instead.
When You Need a Facebook Bulk Upload Tool
The XLSX route is excellent up to roughly 20 ads per week. Above that, you'll spend more time copy-pasting between the sheet and Ads Manager than the format saves - Image Hash lookups, error iterations, filename matching, the 2 MB cap, and the 10-video limit all start to dominate. Teams launching at higher volume typically move to a bulk upload tool that publishes through Meta's Marketing API and skips the spreadsheet step entirely.
Ads Uploader is ours, so weigh this accordingly. It's a web app that launches through Meta's API, and it replaces the spreadsheet steps above like this:
- Start from an ad you already run. Pick a live ad and the whole build is modeled on it, with its audience and campaign, ad set, and ad settings copied. No template to export and clean.
- Build any structure. New campaigns, new ad sets inside existing campaigns, or new ads into ad sets you already have.
- Web app, CLI, and MCP on one backbone. The same builds run from the browser, the terminal, or an AI agent, and AI actions wait for your approval before anything launches.
- Automatic placement routing. Upload the 9:16, 4:5, and 1:1 versions of a creative and each one goes to the placements it fits.
- Post ID duplication. Duplicate hundreds of ads from their existing posts at once, so the copies keep their likes and comments.
- Per-seat pricing. $59/month for one user and per-seat Team plans, with no percentage of ad spend and no ad account limits.
For a side-by-side of the other options, see our bulk ad launcher comparison.
Frequently Asked Questions
Is Facebook bulk upload free to use?
Yes. Meta Ads Manager's native bulk upload (Import & Export) is free for every advertiser. It's built into Ads Manager on desktop.
How many ads can I upload at once?
The practical limit is several hundred ads per file because of the 2 MB file size cap. For larger volumes, split your work across multiple imports.
What's the exact column name for ad primary text in the XLSX template?
Body. The template uses Body for primary text, Title for headline, Link Description for the text under the headline, Display Link for the shortened URL, and Link Object ID for your Facebook Page. The column names differ from the labels you see in the Ads Manager UI, so always check the exported template, not the in-app field labels.
Why does my XLSX import keep failing on filename mismatch?
The Image File Name column has to match the uploaded filename character-for-character, including extension and case. A single underscore, a trailing space, or a capital letter difference will silently break the link between your spreadsheet row and the asset. Either upload assets in a zip with the exact names referenced, or paste the Image Hash / Video ID instead of using filenames.
Do I need a different XLSX template for conversion vs traffic campaigns?
You use the same template, but the required columns differ by objective. Conversion campaigns need Pixel ID, Conversion Event, and Conversion Window columns filled in. Traffic and engagement objectives can leave those blank. The cleanest workflow is to first create one ad set manually in the chosen objective, then export it as your starting template so all required columns are pre-populated.
Can I edit existing ads with bulk upload?
Yes. Export the ads you want to change, edit the cells in the spreadsheet, leave the Ad ID / Ad Set ID / Campaign ID values intact, and re-import. Filled IDs tell Meta to update; blank IDs tell Meta to create.
Can I keep my Post ID engagement when re-importing an ad?
Only if the row points at the original post. The template has a Story ID column: fill it in and Ads Manager runs the ad from that existing Page post and ignores the creative columns on that row. Rows built from Title, Body and an image or video create a new post, so likes, comments, and shares start at zero. See our Facebook Post ID guide for how to find post IDs.
Can I bulk upload images and videos?
Yes. You can either reference existing library assets by their Image Hash or Video ID, or upload new files during the import. Images go in one by one or as a zip file, with filenames matching the Image File Name column. Videos go in the Videos section and are capped at 10 per import, up to 10 MB each.
Can I duplicate campaigns across different ad accounts?
Yes. Export from the source account, clear all ID columns, swap account-specific values (Page ID, Pixel ID, Custom Audience IDs, Instagram Account ID), then import into the destination account. Performance history and post engagement do not travel with the copy.
What if I encounter errors during import?
Meta returns row-level error messages with the offending column. Fix the cells the summary calls out, save the XLSX, and re-import. Warnings let the import proceed; errors block it until resolved.
Conclusion
The native XLSX bulk editor is the right tool for templated rebuilds, mass edits, cross-account transfers, and any workflow where offline review and version control matter. The column glossary, image-hash mechanics, and error-summary patterns above are the reference you'll come back to whenever the template behaves unexpectedly.
If your weekly launch volume has outgrown the spreadsheet workflow, the comparison of Marketing-API bulk launchers lives in a separate guide. Otherwise the native bulk editor remains free, Meta-supported, and fully sufficient for everything it was designed to do.
