> ## Documentation Index
> Fetch the complete documentation index at: https://docs.theoptimizer.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Creating a Simple Campaign

> An overview of the Facebook Campaign Creator interface — the three panels and the launch flow — plus a complete walkthrough for launching a campaign with one ad set and multiple ads.

export const ArcadeVideoButton = ({id, title = "Watch interactive demo", label = "Watch Video"}) => {
  const [open, setOpen] = useState(false);
  return <div style={{
    display: 'inline-block'
  }}>
      <button type="button" onClick={() => setOpen(true)} style={{
    display: 'inline-flex',
    alignItems: 'center',
    gap: '8px',
    backgroundColor: '#3e47ec',
    color: '#ffffff',
    border: 'none',
    padding: '10px 18px',
    borderRadius: '8px',
    fontSize: '15px',
    fontWeight: '600',
    cursor: 'pointer'
  }}>
        <svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="white">
          <polygon points="5,3 19,12 5,21" />
        </svg>
        {label}
      </button>

      {open && <div onClick={() => setOpen(false)} style={{
    position: 'fixed',
    top: 0,
    left: 0,
    width: '100%',
    height: '100%',
    backgroundColor: 'rgba(0, 0, 0, 0.85)',
    zIndex: 9999999,
    display: 'flex',
    alignItems: 'center',
    justifyContent: 'center'
  }}>
          <div onClick={e => e.stopPropagation()} style={{
    width: '90%',
    maxWidth: '1100px',
    aspectRatio: '16 / 9',
    borderRadius: '12px',
    overflow: 'hidden',
    position: 'relative'
  }}>
            <iframe src={`https://demo.arcade.software/${id}?embed&embed_mobile=tab&embed_desktop=inline&show_copy_link=true`} title={title} frameBorder="0" loading="lazy" allowFullScreen allow="clipboard-write" style={{
    width: '100%',
    height: '100%',
    border: 'none',
    colorScheme: 'light'
  }} />
          </div>

          <button type="button" onClick={() => setOpen(false)} style={{
    position: 'fixed',
    top: '20px',
    right: '24px',
    background: 'rgba(255,255,255,0.15)',
    border: 'none',
    color: '#ffffff',
    fontSize: '24px',
    lineHeight: 1,
    width: '40px',
    height: '40px',
    borderRadius: '50%',
    cursor: 'pointer',
    display: 'flex',
    alignItems: 'center',
    justifyContent: 'center'
  }}>
            ✕
          </button>
        </div>}
    </div>;
};

export const ArcadePopoutModal = ({id, title = "Interactive demo"}) => {
  const [isPopout, setIsPopout] = useState(false);
  const iframeRef = useRef(null);
  useEffect(() => {
    function onArcadeIframeMessage(e) {
      if (e.origin !== 'https://demo.arcade.software' || !e.isTrusted) return;
      if (!iframeRef.current || !iframeRef.current.contentWindow) return;
      if (e.data.event === 'arcade-init') {
        iframeRef.current.contentWindow.postMessage({
          event: 'register-popout-handler'
        }, '*');
      }
      if (e.data.event === 'arcade-popout-open') {
        setIsPopout(true);
      }
      if (e.data.event === 'arcade-popout-close') {
        setIsPopout(false);
      }
    }
    window.addEventListener('message', onArcadeIframeMessage);
    return () => window.removeEventListener('message', onArcadeIframeMessage);
  }, []);
  return <div style={{
    position: 'relative',
    paddingBottom: 'calc(54.4737% + 41px)',
    height: 0,
    width: '100%'
  }}>
      <iframe ref={iframeRef} src={`https://demo.arcade.software/${id}?embed&embed_mobile=tab&embed_desktop=modal&show_copy_link=true`} title={title} frameBorder="0" loading="lazy" allowFullScreen allow="clipboard-write" style={{
    position: isPopout ? 'fixed' : 'absolute',
    top: 0,
    left: 0,
    width: '100%',
    height: '100%',
    zIndex: isPopout ? 9999999 : 'auto',
    colorScheme: 'light'
  }} />
    </div>;
};

To open the Facebook Campaign Creator, go to **Campaign Creator** in the left-hand navigation menu and click the **Facebook** card. This opens the launcher in a full-screen dialog.

***

## The Three Panels

**Left panel — Campaign tree.** A tree structure showing your campaign hierarchy: Campaign → Ad Set → Ad. Click any level to navigate to its settings. Use the three-dot menu (⋯) on any item to duplicate, create new, or rename.

**Centre panel — Settings.** This is where you configure everything for the currently selected level. The options mirror what you see in Facebook Ads Manager — campaign objective, budget, audience targeting, placements, creatives, and so on.

**Right panel — My Space & Variation Preview.** Two tabs:

* **My Space** — contextual helpers that change based on which level you are on. At the campaign level you see saved templates. At the ad set level you see recently used targeting configurations you can apply with one click. At the ad level you see your most recently active ads that you can reuse.
* **Variation Preview** — a live counter showing how many campaigns, ad sets, and ads will be created based on your current configuration, including any groups and restructuring settings you have applied.

***

## The Three-Step Launch Flow

At the bottom of the screen, a progress bar shows the three main steps:

**1. Create Campaign** — configure the campaign, ad set, and ad settings. Upload your creatives and define any groups (multiple audiences, budgets, placements, etc.). At the very beginning of this step, you also define your **campaign structure** and **ad set structure** — deciding upfront how variations will be distributed across campaigns and ad sets.

**2. Review Variations** — a full-screen summary of everything that will be created. A header row of information cards shows totals (campaigns, ad sets, budgets, ads, headlines, descriptions). Below is the complete campaign tree — Campaign → Ad Set → Ad — with toggle switches to enable or disable individual variations and naming templates visible throughout. No restructuring is done here; that has been moved to Step 1.

**3. Add Automation & Publish** — attach automation rules to your campaigns before they go live, review the full campaign list, and click Publish.

***

## Starting From a Template

If you have previously saved a campaign template, you do not need to configure everything from scratch. At the campaign level, open the **My Space** tab on the right panel and click **Apply Template** next to the template you want to load. The entire structure — campaign settings, ad sets, ads, groups, restructuring settings, and automation assignments — loads instantly.

From there, you typically only need to swap in new creatives, adjust a budget, or update the ad account.

See [Save Your Work as a Template & Reuse](/ad-networks/facebook/campaign-uploader/templates) for details on creating and managing templates.

***

The walkthrough below covers a straightforward campaign with one ad set and multiple ads — no groups, no restructuring. This is the foundation. All advanced features build on top of this base.

***

## Campaign Level

Click on the campaign in the left panel tree and configure the following:

| Field                     | Description                                               |
| ------------------------- | --------------------------------------------------------- |
| **Ad Account**            | The Facebook ad account to create the campaign in         |
| **Campaign Name**         | A name for the campaign, or use a dynamic naming template |
| **Status**                | Whether the campaign is uploaded as Active or Paused      |
| **Special Ad Categories** | Select if applicable (Housing, Credit, Employment, etc.)  |
| **Buying Type**           | Auction (the only type currently supported)               |
| **Campaign Objective**    | Sales, Traffic, Leads, or Engagement                      |

<Tip>
  Upload campaigns as **Paused** if your team uses a two-step workflow where one person prepares campaigns and a reviewer activates them after QA.
</Tip>

***

### Campaign Budget

The **Budget** section at the campaign level has two modes:

<Frame>
  <img src="https://mintcdn.com/theoptimizer/ZHMpEyoJnNrJjwpl/images/campaign-budget-group-fb-launcher.png?fit=max&auto=format&n=ZHMpEyoJnNrJjwpl&q=85&s=c2d32e4ca428ff4e4bdc2f5d7cdf4df8" alt="Campaign-level Budget section — Campaign budget vs Ad set budget strategy, Budget Variant, and Bid Strategy" width="1027" height="1214" data-path="images/campaign-budget-group-fb-launcher.png" />
</Frame>

**Budget Strategy — choose one:**

* **Campaign budget** (Advantage+ Campaign Budget) — Facebook automatically distributes the total budget across your ad sets, allocating more to the best-performing ones. This is the recommended option for most use cases.
* **Ad set budget** — each ad set gets its own independent budget, which you configure individually at the ad set level. Use this when you need strict budget control per ad set.

**Budget Variants** — if Campaign budget is selected, the budget amount is set here via Budget Variants. Each group card represents a separate budget variation. Click **+ Add Budget** within a group to add multiple budget amounts to the same group if needed. When you add more Budget groups (by clicking **+** next to the group cards), each group generates a separate campaign variation — one campaign per budget.

**Campaign Bid Strategy** — controls how Facebook bids for your ads:

| Strategy                 | How it works                                                                   |
| ------------------------ | ------------------------------------------------------------------------------ |
| **Highest Volume**       | Spends the full budget to get as many results as possible                      |
| **Cost Per Result Goal** | Targets a specific average cost per result (soft cap — Facebook may exceed it) |
| **Bid Cap**              | Sets a maximum bid per auction (hard cap — stricter delivery constraints)      |
| **ROAS Goal**            | Targets a minimum return on ad spend                                           |

***

## Ad Set Level

Click on the Ad Set in the left panel tree and configure the following:

| Field                    | Description                                                                                                           |
| ------------------------ | --------------------------------------------------------------------------------------------------------------------- |
| **Ad Set Name**          | A name for the ad set, or use a naming template                                                                       |
| **Conversions Location** | Website, App, Website and App, or Calls                                                                               |
| **Performance Goal**     | For example, Maximize Number of Conversions or Maximize Value of Conversions                                          |
| **Pixel**                | The Facebook pixel to use for optimisation                                                                            |
| **Conversion Event**     | The conversion event to optimise toward                                                                               |
| **Beneficiary**          | Enter the beneficiary for ad transparency. If left blank, TheOptimizer uses the default from your ad account settings |

***

### Budget & Schedule

<Frame>
  <img src="https://mintcdn.com/theoptimizer/ZHMpEyoJnNrJjwpl/images/adset-budget-schedule-group-fb-launcher.png?fit=max&auto=format&n=ZHMpEyoJnNrJjwpl&q=85&s=ba96a0f60c5d4df8bd635113521ac6bc" alt="Ad Set Budget & Schedule — group card, schedule with specific date and time, and Ad Set spending limits" width="1024" height="911" data-path="images/adset-budget-schedule-group-fb-launcher.png" />
</Frame>

**Budget** — if you selected **Ad set budget** at the campaign level, the per-ad-set budget is configured here. If you selected Campaign budget (Advantage+), the budget section at the ad set level shows an informational note and is not editable — return to the campaign level to change it.

**Schedule:**

| Option              | Description                                                                                                                     |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------- |
| **Start Date**      | Choose **Specific Date** to set an exact date and time for the ad set to go live, or leave it to start immediately upon publish |
| **Set an end Date** | Optionally tick this checkbox to define when the ad set should stop running                                                     |

**Ad Set spending limits** — tick this checkbox to set a maximum and/or minimum amount Facebook can spend on this ad set over its lifetime, regardless of the campaign budget. Useful when using Advantage Campaign Budget and you want to protect or guarantee spend for specific ad sets.

<Tip>
  Under the **My Space** tab on the right panel, you will see a list of your most frequently used targeting configurations with an **Apply** button next to each. One click applies a previous targeting setup — no need to reconfigure locations, age, gender, and placements from scratch.
</Tip>

***

### Audience Controls

<Frame>
  <img src="https://mintcdn.com/theoptimizer/ZHMpEyoJnNrJjwpl/images/adset-audience-group-fb-launcher.png?fit=max&auto=format&n=ZHMpEyoJnNrJjwpl&q=85&s=9186cc9690d954d13fe19159e0ff9063" alt="Audience Controls — Locations (include/exclude), Age, Gender, Language, and Custom Audiences" width="1141" height="1659" data-path="images/adset-audience-group-fb-launcher.png" />
</Frame>

The Audience Controls section defines who sees your ads. Each audience group card at the top represents a separate audience variation — add more groups by clicking **+**.

**Locations:**

* **Include** — add countries, regions, cities, or postal codes. Use the **Location Variant** field to apply a location preset (e.g., "Worldwide, country\_group" to target all countries at once) or search and select specific locations.
* **Exclude** — remove specific locations from your targeting. Useful for blocking countries where you are not set up to take orders, or removing existing customer locations from a prospecting campaign.

**Age** — drag the Age Variant slider to set your minimum and maximum target age (18–65+).

**Gender** — select Male, Female, or All.

**Language** — optionally restrict delivery to users whose Facebook language matches a specific language. Leave empty to target all languages.

**Target Custom Audiences** — select previously created Custom Audiences from Facebook to include or exclude. Typical uses: retargeting website visitors, targeting existing customer lists, or excluding current customers from prospecting campaigns.

<Note>
  TheOptimizer does not currently support creating Custom Audiences. If you work with custom or lookalike audiences, create them in Facebook Ads Manager first — they will then appear in the audience selector here.
</Note>

***

### Placements

<Frame>
  <img src="https://mintcdn.com/theoptimizer/ZHMpEyoJnNrJjwpl/images/adset-placement-group-fb-launcher.png?fit=max&auto=format&n=ZHMpEyoJnNrJjwpl&q=85&s=a994348574aac879dbba2a16e3780d55" alt="Placement — Advantage+ placements (recommended) vs Manual placements" width="1133" height="819" data-path="images/adset-placement-group-fb-launcher.png" />
</Frame>

Each placement group card represents a separate placement variation — add more groups with **+** to test different placement configurations against each other.

| Option                                  | Description                                                                                                                                                                                                                                                             |
| --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Advantage+ placements** (recommended) | Facebook's delivery system automatically allocates your budget across all eligible placements — Feed, Stories, Reels, Audience Network, Messenger, etc. — based on where your ads are likely to perform best. Typically delivers the best cost efficiency.              |
| **Manual placements**                   | You choose exactly which platforms (Facebook, Instagram, Audience Network, Messenger) and positions (Feed, Stories, Reels, In-stream, etc.) to run on. Use this when you have a specific reason to exclude certain placements or want to isolate placement performance. |

***

## Ad Level

Click on the ad in the left panel tree and configure the following:

***

### Identity

<Frame>
  <img src="https://mintcdn.com/theoptimizer/ZHMpEyoJnNrJjwpl/images/ad-identity-group-fb-launcher.png?fit=max&auto=format&n=ZHMpEyoJnNrJjwpl&q=85&s=08439dc889014138b1b121178745f65c" alt="Identity section — Facebook Page and Instagram Account selectors, with group card" width="1155" height="817" data-path="images/ad-identity-group-fb-launcher.png" />
</Frame>

| Field                 | Description                                                                                                                                                                                                                    |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Facebook page**     | The Facebook Page your ad will appear to come from. Required for all ads.                                                                                                                                                      |
| **Instagram account** | The Instagram account your ad will be associated with when running on Instagram placements. If you do not have an Instagram account, select your Facebook Page — Facebook will use it to represent your business on Instagram. |

Each identity group card represents a separate Identity variation — add more groups with **+** to test running the same ads from different Pages or Instagram accounts. This is useful for agencies managing multiple brands, or for testing how audience perception varies by Page identity.

***

### Ad Creative

<Frame>
  <img src="https://mintcdn.com/theoptimizer/ZHMpEyoJnNrJjwpl/images/ad-creative-group-fb-launcher.png?fit=max&auto=format&n=ZHMpEyoJnNrJjwpl&q=85&s=96832481dafef409fe08b8b0d2ebb542" alt="Ad creative section — Media upload with AI generation, Primary text, and Headline with AI generation" width="1146" height="1534" data-path="images/ad-creative-group-fb-launcher.png" />
</Frame>

**Ad Name and Format:**

| Field         | Description                                         |
| ------------- | --------------------------------------------------- |
| **Ad Name**   | A name for the ad, or use a naming template         |
| **Status**    | Active or Paused                                    |
| **Ad Format** | Single Image or Video, Catalog Ads, or Flexible Ads |

**Media** — click **+ Add Media** to open the media browser where you can:

* **Browse existing creatives** — TheOptimizer displays all images and videos from your active campaigns across all connected Facebook accounts. Sort by newest, oldest, highest spend, highest EPC, most used, or least used. Filter by Creative Library tags.
* **Upload new media** — click **Upload** to add new images or videos directly.
* **Generate with AI** — click **✨ Generate with AI** to create new image variations using an AI prompt or example images. Useful for quickly producing creative variants without leaving the launcher.

Each uploaded image or video generates one ad. If you upload five images, five ads are created — the count updates immediately in the **Variation Preview** panel.

**Per-creative options:**

* **Enhance with AI** — generate a new version of any image by providing a prompt or example images.
* **Customize by Placement** — assign a different image for specific placements (for example, a different crop for Instagram Stories). You can do this per image, or use **Bulk Placement Customization** at the bottom of the media section to apply placement overrides across all ads at once.

**Ad copy:**

| Field              | Notes                                                                                                                                 |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------- |
| **Primary Text**   | The main body copy. Click **+ Add Text** to add one or more variations, or **✨ Generate with AI** to generate copy based on a prompt. |
| **Headline**       | Short headline below the media. Click **+ Add Headline** to add variations, or **✨ Generate with AI** to generate options.            |
| **Description**    | Optional additional text. Add one or more variations.                                                                                 |
| **Call to Action** | Select from available options (Learn More, Shop Now, etc.)                                                                            |

**Destination:**

| Field               | Notes                                            |
| ------------------- | ------------------------------------------------ |
| **Destination URL** | The landing page for the ad                      |
| **Pixel**           | The tracking pixel for this ad                   |
| **URL Parameters**  | Add tracking parameters for third-party trackers |

<Tip>
  For the best workflow, upload and tag your creatives in the **Creative Library** first, then come back to the Campaign Creator and filter by tag. This is especially useful when your creative team and media buying team are separate — creatives upload and tag assets, media buyers pull them in by tag.
</Tip>

***

### Apply to All Groups

When you are working with multiple Creative groups, you can push the content of any media, primary text, headline, or description field to every other group in one click. Click the **three-dot menu (⋯)** on any media item, text field, headline, or description and select **Apply to All Groups**. This copies that value into the same field across all other Creative groups — useful when you want all groups to start from the same base creative or copy and then make minor tweaks per group.

***

### Auto-Match Images by Filename to Placements

When you need different image crops for different placements (e.g., square for Feed, vertical for Stories, landscape for Right Column), you can have TheOptimizer assign them automatically based on the image filenames.

Include the aspect ratio in each image's filename before uploading:

| Filename pattern                         | Placement it maps to                         |
| ---------------------------------------- | -------------------------------------------- |
| `image_1x1.jpg` or `image_1×1.jpg`       | Feeds, In-stream, Search results (square)    |
| `image_9x16.jpg` or `image_9×16.jpg`     | Stories and Reels, Apps and sites (vertical) |
| `image_1.91x1.jpg` or `image_1.91×1.jpg` | Right column, Search results (landscape)     |

In the **Select Images** dialog, enable the **Auto-match by filename** toggle at the bottom. When you click **Next**, TheOptimizer automatically assigns each image to the matching placement column based on the ratio in its filename.

<Frame>
  <img src="https://mintcdn.com/theoptimizer/O8iFyEbm57dw8ihy/images/automatic-placement-matching-by-file-name.png?fit=max&auto=format&n=O8iFyEbm57dw8ihy&q=85&s=251b46da68e39ba4c59a302f5e53ab07" alt="Select Images dialog — Auto-match by filename toggle at the bottom, enabled, with images named with aspect ratios" width="2656" height="1808" data-path="images/automatic-placement-matching-by-file-name.png" />
</Frame>

The next screen (**Edit Placements**) shows the result: each placement column already has the matching image pre-assigned, with the matched filename shown under the placement name.

<Frame>
  <img src="https://mintcdn.com/theoptimizer/O8iFyEbm57dw8ihy/images/automatic-placement-matching-by-file-name-next.png?fit=max&auto=format&n=O8iFyEbm57dw8ihy&q=85&s=014e490bcc1f6a66a45269ece0d95e8f" alt="Edit Placements dialog — three placement columns each showing the auto-matched image from the filename" width="2656" height="1808" data-path="images/automatic-placement-matching-by-file-name-next.png" />
</Frame>

<Tip>
  Prepare your image set with consistent naming before upload — for example, `creative1_1x1.jpg`, `creative1_9x16.jpg`, `creative1_1.91x1.jpg` — and the entire placement assignment across all creatives is done automatically in one step.
</Tip>

***

### Tagging Images from the Campaign Creator

You can tag uploaded images directly from the media browser inside the Campaign Creator — no need to go to the Creative Library first.

After selecting the **Uploaded Media** tab in the **Select Images** dialog, click the **# Add Tags** button at the top right. Select the images you want to tag (or use "Select All"), choose your tags, and confirm. Tags are applied to the images in your Creative Library and will be available for filtering in future sessions.

<Frame>
  <img src="https://mintcdn.com/theoptimizer/O8iFyEbm57dw8ihy/images/add-tags-during-uploading.png?fit=max&auto=format&n=O8iFyEbm57dw8ihy&q=85&s=8fd2652fcc168b99a127961f4036dbfa" alt="Select Images dialog — Add Tags button in the top right, highlighted with an arrow" width="2656" height="1808" data-path="images/add-tags-during-uploading.png" />
</Frame>

***

### New Ad Formats: Catalog Ads and Flexible Ads

Two new ad format options are now available in the **Ad Format** selector.

**Catalog Ads** — connects the ad directly to a Facebook Product Catalog. When selected, the media section is replaced with a catalog and segment selector — choose the catalog and the product set to use. The ad dynamically pulls images, names, and prices from your catalog.

**Flexible Ads** — allows you to organise images into groups within a single ad creative. Each Creative group can contain a different set of images, and you can drag and drop images to reorder them within each group. This is useful when you want to test different image batches while keeping the same ad set structure.

***

## What Happens When You Upload Multiple Images

Every image or video you upload becomes a separate ad. If you upload 10 images, you get 10 ads. This is the simplest way to test multiple creatives — one ad per creative, all in the same ad set, sharing the same targeting and budget.

The **Variation Preview** panel on the right updates in real time as you add media. Always check the totals before moving to the next step.

***

## Next: Generate Campaign Variations

Once your base campaign is configured, you can move to [Generate Campaign Variations](/ad-networks/facebook/campaign-uploader/variations) to multiply this structure into dozens or hundreds of campaigns using Groups, Restructuring, and Duplication.

<Note>
  **Structure your campaigns and ad sets before you configure them.** The restructuring options — which decide how your ad sets and ads are distributed across campaigns — appear at the very top of Step 1, immediately after selecting your ad account and campaign name. It is worth reading the [Generate Campaign Variations](/ad-networks/facebook/campaign-uploader/variations) page before you start, so you can plan your structure upfront rather than needing to come back and adjust it later.
</Note>
