Documentation

Ad Configuration

Launching Ads

This is the existing-ad configuration approach: you pick an ad that's already live in your account as the model, and Ads Uploader copies its setup onto your new ads, then creates them in real time with full control over creative enhancements and flexible text.

Overview

This method:

  • Reads the model ad's setup straight from your Meta account
  • Allows browsing and selecting existing ads as templates
  • Creates ads immediately in your account
  • Provides full control over all ad settings
  • Supports multiple headlines and descriptions

Step 1: Select Source Ad

Three-Column Navigation

The ad selector presents your account structure in three columns:

Three-column ad selector showing Campaigns, Ad Sets, and Ads
  1. Campaigns (Left) - Shows all campaigns in your account
  2. Ad Sets (Middle) - Displays ad sets for the selected campaign
  3. Ads (Right) - Lists ads in the selected ad set

Click through each column to drill down to the ad you want to use as a template.

Finding the Right Ad

Each column has filter options:

  • Search box: Type to filter by name
  • Only active: Toggle to show/hide paused items
  • Text size buttons (A A A): Adjust text size in the selector

After selecting an ad, a Configuration Source box confirms your selection showing the campaign, ad set, and ad name. You can Save as Preset for quick reuse or Reset Selection to start over.

Step 2: Configure Campaign Structure

Campaign and ad set options showing checkboxes for creating new campaigns and ad sets

Campaign Options

OptionDescription
Use existing campaign (default)Adds new ads to the selected campaign
Create new campaignGenerates a new campaign with a custom name
Create multiple new campaignsSplit or duplicate ads across multiple campaigns

Ad Set Options

OptionDescription
Use existing ad set (default)All ads go into the selected ad set
Create new ad setCreates a single new ad set with a custom name
Create new ad set per upload or groupCreates individual ad sets per file or variation group
Auto-divide ads into ad setsSplits uploads into ad sets by a fixed count
Build custom ad set configurationManually assign uploads to specific ad sets

See Ad Grouping for details on organizing uploads into ad sets.

Budgets and Spend Limits

New ad sets inherit the source ad set's budget by default. You can override the daily budget (and bid amount, where the bid strategy uses one) in Ad Set Options.

If the source campaign uses Advantage campaign budget (CBO), the budget lives on the campaign instead. When you create a new campaign from a CBO source, a Campaign Daily Budget or Campaign Lifetime Budget field appears under the campaign name; the source amount is shown as a placeholder, and leaving it empty inherits it. Under CBO, the ad set daily budget field is replaced by optional Min Spend and Max Spend limits per ad set. Bid Cap, Cost Per Result Goal, Target Cost, or ROAS Goal remains available when the source bidding strategy uses that control. A toggle switches between fixed currency amounts and a percentage of the campaign budget (5% steps); percentage limits also work when adding ad sets to an existing CBO campaign. Use the X beside a field to remove a limit inherited from the source ad set.

Audience Targeting

New ad sets inherit the source ad set's full audience. To override countries, cities, zip or post codes, age range, gender, or detailed targeting for the new ad sets, enable Show Ad Set Targeting in Account > Defaults, then use the Edit Ad Set Targeting button in Ad Set Options. When the build creates more than one ad set, each one can override the shared default individually. Anything you don't override keeps inheriting from the source. See Ad Set Targeting for the full guide.

Preview Table

A preview table shows the exact campaign structure that will be created, including Campaign ID/Name, Ad Set ID/Name, and Ad Name for every ad.

Step 3: Configure Profile

Profile Options

Select which Facebook Page and Instagram Account your ads will post from. Profile Options is shown by default; you can hide it in Account > Defaults.

Profile Options showing Facebook Page and Instagram Account selectors
SettingDescription
Facebook PageThe page your ads will be published under
Instagram AccountThe Instagram account for Instagram placements (can use "Use Facebook Page" for default)

These default to the profiles from your source ad. Use the Reset link to restore the original values.

For standard uploads, the per-ad-set and per-ad editors in Ad Texts & Settings also let you choose different profiles for individual ad sets or ads. A Threads Profile selector appears when your source ad or preset includes one. For uploaded media in Partnership Ads mode, the Second Identity column lets you select an approved partner for each ad or ad set. Actor profiles and partners can be changed independently. Untouched rows inherit the shared or campaign partner; No Partner removes it from a row, and Reset restores the shared choice. The ad header display setting stays shared across the launch. Posts imported using an ad code or Instagram URL keep their fixed creator identity and do not offer per-row profile or partner overrides.

Partnership ads with your own media

The CLI and MCP can launch uploaded-media partnership ads on Facebook and Instagram. Use your normal image/video media, carousel, flexible, Multi Media, or placement-variant spec and add profile.partnership.enabled: true. Uploaded media follows ordinary assembly with a Second Identity. Omit uploaderMode or set it to false; true selects imported posts and cannot be used with uploads.

Choose your First Identity with profile.pageId and profile.instagramId. The shared partner is the Second Identity:

For videos, mediaItems[].mediaId must be the numeric Facebook video ID: use the upload response’s videoId, not its internal id. videoId is accepted as an alias, and linkedAssets[] follow the same rule. Internal upload IDs are resolved on save only when they belong to the authenticated user and selected account. Without a numeric ID or a batch link, an unresolved video makes the build unlaunchable. See the canonical placement-video item.

{
  "accountId": "act_123",
  "copyFromAd": "SOURCE_AD_ID",
  "adSet": { "id": "EXISTING_AD_SET_ID" },
  "mediaItems": [
    { "mediaName": "one.jpg", "mediaType": "image", "mediaHash": "UPLOADED_IMAGE_HASH_ONE" },
    { "mediaName": "two.jpg", "mediaType": "image", "mediaHash": "UPLOADED_IMAGE_HASH_TWO" }
  ],
  "profile": {
    "pageId": "111",
    "instagramId": "222",
    "partnership": {
      "enabled": true,
      "sponsorPageId": "333",
      "sponsorInstagramId": "444",
      "displayMode": "both"
    }
  },
  "options": { "status": "PAUSED" }
}

For different partners per ad, add this texts block to the same spec. The second row explicitly uses No Partner:

{
  "texts": {
    "mode": "perAd",
    "perAd": {
      "one.jpg": { "sponsorPageId": "555", "sponsorInstagramId": "666" },
      "two.jpg": { "sponsorPageId": null, "sponsorInstagramId": null }
    }
  }
}

For ad-set scopes, use texts.mode: "perAdset" and texts.perAdset, keyed by the final ad-set name/ID or campaign::key. In multi-campaign launches, use profile.campaigns[<id or unambiguous name>] for campaign sponsor overrides. Resolution is shared partner, then campaign, then the active row. Omitted sponsor fields inherit independently; explicitly set both IDs to null for No Partner. Switching only the partner Page does not clear an inherited Instagram ID on uploaded media; set that ID explicitly when changing the pair. Row First Identity fields (pageId, instagramId, threadsId) remain independent.

For an Instagram-only Second Identity, set sponsorPageId: null, sponsorInstagramId to the approved account ID, and sponsorPageUseInstagramAccount: true. A partner Facebook Page is also supported for uploaded media. The restriction on Facebook post imports does not apply to uploaded media.

displayMode applies across the launch: both (default), first, or dynamic. Each effective partner must differ from the First Identity and have approved partnership advertising access. Pending or missing approval is refused with the identity named. Every row needs a complete inherited or explicit partner, or an explicit No Partner override. Enabling partnerships without any sponsor is refused. Approval is rechecked at preview and create; a saved build does not store permission grants.

ads create:preview and ads_preview show each ad's effective partner, approval and header mode, grouped by ad set. Admin-only ads create:test or ads_create with options.testMode: true validates eligible calls with Meta without creating ads and reports passed, failed and not-checked counts. Complete web-saved uploaded-media partnership builds can launch through the CLI and MCP; builds edited through these tools restore Partnership Ads, identities, row partners and header mode in the web uploader.

Partnership ads with uploaded media

In Profile Options, switch from Standard Ads to Partnership Ads. Choose the First Identity and Second Identity, then select Both identities in the header, First identity only in the header, or Dynamic identity optimization. The header choice applies across the launch. If the app asks you to reconnect Facebook for partnership permissions, complete that permission step before selecting partners. The creator must also grant advertising permission; reconnecting your account alone does not grant access to their content.

For uploaded files, you can choose different actors and partners in the per-ad or per-ad-set editor. This uploaded-media partnership workflow is available in the web uploader, the CLI and MCP. An approved-partner identity selector is different from a browser of approved posts; the uploader has no approved-post browser.

Import an existing Instagram post

Click Import by Link, enable Partnership Ads Mode, and use Import by Ad Code or URL. Paste an Instagram partnership ad code, an Instagram post URL, or an Instagram media Post ID, one per row. Optional ad names help identify the rows. A URL or Post ID needs the relevant partnership advertising permission; the paid-partnership label alone does not guarantee permission to boost. A valid code can authorize its associated post. Facebook imports are currently unsupported; Facebook support is under evaluation.

The imported post fixes the creator identity shown under Partner Identity. Choose your sponsoring brand under Your Identity; importing does not replace your selected brand Instagram account. The header choices are Both identities in the header, Partner identity only in the header, and Dynamic identity optimization. Here the second choice means creator-only, not brand-only. Resolve any brand-mismatch warning by selecting the brand authorized for that code or obtaining a matching code.

Use the imported-post Ad Texts & Settings panel for a headline, CTA, website URL, URL parameters and testimonial. Use AI Transparency for AI disclosure. Multi-advertiser enrollment is inherited; the web panel does not expose a separate toggle. Apply common text or edit each imported ad separately; the original organic caption stays unchanged. The creator's profiles cannot be overridden per row. Imported posts cannot be mixed with uploaded files in the same batch. Removing a row removes it from this build; switching partnership import mode off asks you to clear imported rows.

Step 4: Configure Ad Text

Ad Text Options showing text mode radio buttons and Common Text Preset loader

Text Mode Options

ModeDescription
Apply common text to all adsSame text shared across all ads. Fastest setup.
Write unique ad text per ad setDifferent text for each ad set group. Opens editing table.
Write unique ad text for each adComplete control over individual ads with media thumbnails for reference.

You can also load a saved Common Text Preset to quickly apply previously saved text configurations.

Text Fields

FieldDescription
HeadlinesAd headline text. Add multiple with the + button (up to 5).
Primary TextsMain ad body text. Add multiple with the + button (up to 5).
Link DescriptionDescription shown below the headline
Call to ActionButton text (Learn More, Shop Now, Sign Up, etc.)
Website URLDestination link when users click the ad
Display URLShortened URL shown on the ad (e.g., adsuploader.com)

Text fields are pre-filled from your source ad. Click the pencil icon to edit the original text, or type new text to override it.

Flexible vs. Separate Text Strategy

Flexible Texts (Recommended):

  • Meta automatically tests combinations of your headlines, texts, and descriptions
  • Performance tracked at ad level

Separate Ads:

  • Creates individual ad for each text combination
  • Detailed reporting per text variant

Toggle between strategies using the switch above your text inputs.

Save as Preset

Click Save as Preset below the text fields to save your text configuration for reuse. Click Reset All to restore the original text from the source ad.

Step 5: Creative Enhancements

Control Meta's Advantage+ automatic optimizations for your ads. Checkboxes reflect the current settings from your source ad and can be toggled individually. Unchecked enhancements are sent as explicit opt-outs when Meta requires a complete enhancement spec.

Creative enhancements panel showing toggles for Images, Videos, and Carousel enhancements

Quick Controls

ControlDescription
Select AllEnable all available enhancements. Uncheck it to clear all selected enhancements.

Available Enhancements

Enhancements are organized by media type. Available options vary:

EnhancementImagesVideosCarousel
Add musicYesYesYes
Add overlaysYes--
Add video effects-Yes-
Adjust brightness and contrastYes--
Carousel to video--Yes
Dynamic description--Yes
Enhance CTAYesYesYes
Flex mediaYesYes-
Image animationYes--
Optimize card order--Yes
Product tags from sourceYesYes-
Relevant commentsYesYesYes
Reveal details over timeYesYes-
Show end card--Yes
Show spotlightsYesYes-
Text improvementsYesYes-
Translate textYesYes-
Visual touch-upsYesYesYes

Product tags appear only when the selected source ad has a catalog and explicit positioned product tags. The option works for both image and video ads. Leave it selected to copy every tagged product and its position to the new ads, or clear it to create the ads without those tags.

AI-Generated Content Disclosure

The AI Transparency panel lets you self-disclose AI-generated creative content to Meta. It is off by default. When you copy settings from an ad that already carries a disclosure, the setting is carried over; you can still change it per ad or per ad set before launch.

Step 6: Publication Options

Publication options showing pause toggle, scheduling, and test mode
OptionDescription
Create ads in paused statusAds are created but won't run until you manually activate them in Meta Ads Manager
Schedule these adsSet a start date and time, and optionally an end time. Works when creating new ad sets and when adding ads to an existing ad set.
Test ModeAdmin-only. Shows the planned calls and validates eligible requests with Meta without creating ads. Reports passed, failed and not checked.

Test Mode uses Meta validate_only. Requests needing simulated parent or creative IDs are not checked; timeouts and rate limits are not passes. It can save launch records and encrypted partnership codes, but creates no Meta objects. Validation does not confirm delivery, policy approval or appearance.

Scheduling Details

  • Times use your ad account's timezone, and the start time must be at least 15 minutes in the future.
  • Scheduled ads are created paused and go live automatically at the start time. If you set an end time, they stop then.
  • The same schedule applies to every ad in the batch.

Step 7: Create Ads

  1. Click "Create Ads" button
  2. Confirm settings in the confirmation popup
  3. Monitor progress in the real-time progress panel

If you need to abort a running job, use the Stop button in the progress panel. Ads that were already submitted to Meta will still be created; the rest of the batch is skipped.