How to Bulk Upload ChatGPT Ads
Published September 5, 2026 · 4 min read
OpenAI Ads Manager Beta lets you create campaigns at scale via Create → Upload bulk instead of the step-by-step flow. You fill in one workbook with three tabs - campaigns, ad groups, and ads - and OpenAI publishes a checklist to catch formatting errors before you upload. Grab our pre-filled ads-tab template below and skip the blank-file guesswork.
The 3-tab structure
Every bulk upload workbook mirrors the same structure Ads Manager uses everywhere else: a campaign defines objective, budget, dates, and targeting; ad groups sit underneath it; ads sit underneath their ad group. Keep the tab names exactly as-is - OpenAI's checklist explicitly fails files where tabs or column headers have been renamed.
One row per campaign. Objective must be Views or Clicks, dates in YYYY-MM-DD, budget filled in, country as JSON.
One row per ad group, linked to a campaign by exact name. Targeting "context hints" go in as a JSON array, e.g. ["running shoes","marathon training"].
The template above: ad_id, ad_group_id, adgroup_name, ad_name, title, copy, link, image_url, image_file_id.
Filling in the ads tab
title is capped at 50 characters, copy at 100, and link (your landing page URL) can run up to 2,048 characters. For the creative, provide either image_url (a public link) or image_file_id for an image already uploaded to your account - you don't need both. Images currently max out at 1200 × 1200px, and must be hosted via a Google Drive link, an AWS-hosted link (S3 or CloudFront), or a URL on your own domain or CDN.
- Tabs are still named campaigns, ad groups, and ads, and no column headers have been renamed.
- Campaign and ad group names are unique, and match exactly wherever they're referenced across tabs.
- Every required field is filled in - objective, budget, dates, and country (JSON) on campaigns; context hints (JSON) on ad groups.
- Images meet the size/format requirements and are hosted somewhere OpenAI can actually fetch them from.
- You're under the account caps - 5,000 non-archived campaigns, 5,000 ad groups, 5,000 active/paused ads.
No. A full workbook has three tabs, and every ad row must reference a valid ad_group_id from the ad groups tab. Uploading only an ads sheet works only if those ad groups already exist in your account.
No - OpenAI's checklist calls this out specifically. Renamed tabs or headers fail validation.
Google Drive links, AWS-hosted links (S3 or CloudFront), or a self-hosted URL on your own domain or CDN, up to 1200 × 1200px.
Source: Bulk Upload Campaign Schema Checklist, OpenAI Help Center.
Book a free strategy call
We'll set up your campaign structure and bulk upload file so you launch clean the first time.
