> ## 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.

# Upload to an Existing Campaign

> Add new ad sets or ads to a live or paused Facebook campaign without touching what is already running.

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>;
};

You can use the Facebook Campaign Launcher to bulk upload new ad sets or ads to an existing campaign — without touching anything that is already live. Use this when you want to expand an active or paused campaign — add fresh creatives to an existing ad set, or launch a new ad set into a campaign that is already running — without rebuilding from scratch or going through Facebook Ads Manager.

***

## Loading an Existing Campaign

<Steps>
  <Step title="Open the launcher and select your Ad Account">
    Open the Facebook Campaign Launcher and select your **Ad Account**.
  </Step>

  <Step title="Switch to Use existing campaign">
    Below the ad account selector, two options appear: **+ Create new campaign** (default) and **Use existing campaign**. Click **Use existing campaign**.
  </Step>

  <Step title="Search for the campaign">
    A search box appears. Search for the campaign by name or ID, then click on it from the list.
  </Step>

  <Step title="Wait for the editor to load">
    Once loaded, the campaign and all its existing ad sets and ads are visible in the left panel tree.
  </Step>
</Steps>

<Frame>
  <img src="https://mintcdn.com/theoptimizer/ZHMpEyoJnNrJjwpl/images/load-existing-campaign-to-the-FB-launcher.png?fit=max&auto=format&n=ZHMpEyoJnNrJjwpl&q=85&s=9c5c18d9f81adfbba370e64c86cccb91" alt="Select Ad Account — Use existing campaign tab showing searchable campaign list" width="1149" height="1016" data-path="images/load-existing-campaign-to-the-FB-launcher.png" />
</Frame>

<Note>
  Everything that already exists in the campaign is **read-only** — you cannot edit existing ad sets or ads. The lock icon on existing items in the tree makes this clear. You can only add new items.
</Note>

***

## Working with Existing Ad Sets

Once an existing campaign is loaded, clicking the three-dot menu (⋯) on any existing ad set in the left panel tree reveals several actions:

<Frame>
  <img src="https://mintcdn.com/theoptimizer/ZHMpEyoJnNrJjwpl/images/existing-ad-set-options.png?fit=max&auto=format&n=ZHMpEyoJnNrJjwpl&q=85&s=7fffae53ba161a23ea1cf8542e9aff05" alt="Ad set context menu — Create Ad, Clone Ad Set, Copy Ad Set, Copy All Ads, and FB ID options" width="1508" height="1110" data-path="images/existing-ad-set-options.png" />
</Frame>

| Option           | What it does                                                                                                                                          |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Create Ad**    | Adds a new ad inside this existing ad set. You can upload creatives and generate variations from it.                                                  |
| **Clone Ad Set** | Creates a full copy of this ad set (including its ads) as a new, editable ad set within the same campaign.                                            |
| **Copy Ad Set**  | Copies the ad set settings to the clipboard so you can paste them into another campaign loaded in the launcher.                                       |
| **Copy All Ads** | Copies all ads from this ad set so you can paste them into a new ad set in another campaign.                                                          |
| **FB ID**        | Displays the Facebook ID of this ad set and provides a one-click copy button. Useful for referencing the ad set in scripts, rules, or external tools. |

***

## Adding a New Ad Set

In the left panel, click the three-dot menu (⋯) on the campaign and select **Create Ad Set**. A new ad set is added to the tree. Configure it as you would when creating a fresh campaign — targeting, budget, placements — then go to the ad level to upload creatives and generate variations.

***

## Adding New Ads to an Existing Ad Set

Click on the existing ad set in the left panel, open its three-dot menu (⋯), and select **Create Ad**. From this single ad entity, you can upload multiple creatives and generate variations exactly as you would when creating a new campaign.

***

## Cloning Instead of Creating from Scratch

If the new ad set or ad you want to add is similar to an existing one, use **Clone Ad Set** instead of **Create Ad Set**. Cloning copies all the settings — targeting, placements, ad copy, creatives — which you can then adjust as needed. This is faster than configuring everything from scratch when only a few things are changing.
