ChatGPT Ads bulk upload: product feed campaigns and review status
ChatGPT Ads bulk creation for product feed campaigns lets you build many product feed campaigns and their ad groups from one spreadsheet in Ads Manager, with ad templates generated automatically. You reach it under Campaigns → Bulk uploads → Bulk sheet, where you download the “Product feed” template. OpenAI shipped it in the week of 25 September 2026 alongside a second feed feature: product review status in the Products tab, which shows where each product sits in review and why products were rejected. This guide covers both — what OpenAI has actually published, what it has not, and the operating workflow I use to take a catalog from one hand-built campaign to a structured, reviewable account.
The short version
- What shipped: bulk creation of product feed campaigns and ad groups from a spreadsheet. Ad templates are generated automatically for you.
- Where: Campaigns → Bulk uploads → choose “Bulk sheet” → download the “Product feed” template.
- Not published: the template's column names and any row limits. Always work from a freshly downloaded template rather than a copy someone sent you.
- Product review status: accounts running product feed campaigns can now see each product's review status in the Products tab, including why a product was rejected.
- The play: design the campaign structure first, fill the sheet second, upload a small pilot, then check the Products tab before scaling. Structure is the decision; the sheet is just the delivery mechanism.
What is bulk creation for product feed campaigns?
Bulk creation is a spreadsheet workflow inside ChatGPT Ads Manager that creates multiple product feed campaigns and ad groups in a single upload. Instead of clicking through the campaign builder once per campaign, you fill a “Product feed” bulk sheet template and upload it; Ads Manager generates the ad templates automatically. It launched in the week of 25 September 2026.
Before this, product feed campaigns were built one at a time in the interface. That was fine for a merchant testing a single catalog segment. It was painful for anyone with real catalog breadth: a retailer splitting by category, price band, margin tier, or brand quickly ends up wanting ten, twenty or fifty ad groups, and hand-building each one invited inconsistency — mismatched budgets, a forgotten setting, naming that nobody could read three weeks later.
The bulk sheet moves the work to where media buyers already plan: a spreadsheet. You can draft the structure, have a colleague review it, keep it under version control, and push it in one step. That is the practical value. It does not change how product feed campaigns serve or bid; it changes how fast and how consistently you can build them.
Where do you find the bulk sheet in Ads Manager?
Open Ads Manager, go to Campaigns, choose Bulk uploads, select Bulk sheet, and download the Product feed template. That template is the only one designed for feed campaigns; fill it in, then upload it through the same Bulk uploads area. Your ad account needs a connected product feed first.
- Confirm the feed is connected. Product feed campaigns draw on the Ads Manager feed (Tools → Feeds). If you have not set one up, start with our product feed guide and the Ads Manager setup walkthrough.
- Go to Campaigns → Bulk uploads. This is the area for spreadsheet-based creation.
- Choose “Bulk sheet”.
- Download the “Product feed” template. Download it fresh each time you start a new build. Templates change as features ship, and an old copy is the most common source of avoidable upload errors in any ad platform.
- Fill the template following the column guidance inside it.
- Upload through Bulk uploads, review what Ads Manager reports back, and fix any rows it flags.
- Check the Products tab for review status once the campaigns exist.
Because the column names are not published, I will not reproduce a column list here. What I can give you is the planning layer that should exist before you open the template — which is where most of the value, and most of the mistakes, sit.
Done for you: ChatGPT Ads for ecommerce
If you would rather hand over the catalog build, our ChatGPT Ads for ecommerce service designs the feed campaign structure, builds it through the bulk sheet, and runs the review-status triage for you — quote-only, scoped to catalog size.
When should you use the bulk sheet instead of the campaign builder?
Use the bulk sheet when you are creating more than a handful of feed campaigns or ad groups, when you need identical settings replicated across segments, or when a structure must be reviewed before launch. Use the interface builder for a single test campaign or a one-off change. The sheet wins on consistency and speed; the builder wins on immediacy.
| Situation | Bulk sheet | Campaign builder (UI) |
|---|---|---|
| First-ever feed test, one campaign | Overkill | Better — see every setting as you go |
| Splitting a catalog into 5+ segments | Better — one upload, consistent settings | Slow and error-prone |
| Agency building for several clients | Better — templated structure per client | Workable only for small accounts |
| Structure needs sign-off before launch | Better — the sheet is the review document | Hard to review before it exists |
| Editing one budget mid-flight | Unnecessary | Better |
| Seasonal rebuilds (new ranges, sale events) | Better — clone the sheet, change the deltas | Repetitive |
One nuance: the feature is described as creating campaigns and ad groups. OpenAI has not published whether the same bulk sheet can edit existing feed campaigns. Plan on it as a creation tool until you have confirmed otherwise in your own account.
How should you structure product feed campaigns before filling the sheet?
Decide the segmentation logic before touching the template. Group products by the dimension that changes what you are willing to pay: margin, price band, category, or brand. Each campaign should represent a budget decision; each ad group should represent a product set you want to read separately. If two segments would get identical budgets and bids, merge them.
This is the part the spreadsheet cannot do for you. A bulk sheet with a bad structure just creates a bad account faster. I work through four questions, in order:
- What decisions will I make from the reporting? If you will never move budget between two product groups, they do not need to be separate campaigns. Structure follows decisions, not taxonomy.
- Where does economics genuinely differ? High-margin and low-margin products tolerate different costs per click. Separate them so one does not subsidise the other invisibly.
- How much volume does each segment have? Very thin segments starve. ChatGPT is still a small channel for most merchants; splitting a catalog into forty slivers usually produces forty campaigns with no signal.
- Which segments need their own conversion read? If you run conversion-optimised feed campaigns, each campaign needs enough conversions for the system to learn. Fewer, fuller campaigns learn faster.
Common structures that work
| Structure | Campaign = | Ad group = | Best for |
|---|---|---|---|
| Margin-tiered | Margin tier (high / mid / low) | Category within the tier | Retailers with wide margin spread |
| Category-led | Top-level category | Subcategory or price band | Department-style catalogs |
| Brand-led | Brand or brand family | Product line | Multi-brand resellers, brands with sub-lines |
| Hero plus long tail | Heroes vs. everything else | Hero SKU groups vs. categories | DTC brands where a few products drive most revenue |
| Market-split | Market (one per ad account) | Category | Multi-country sellers — see the note below |
On market splits: country, currency and time zone are fixed when an ad account is created, so multi-country merchants usually need one ad account per market rather than one campaign per market. The bulk sheet then becomes the tool that keeps structure identical across those accounts. Our guide to account setup, brand and legal names covers the account-per-market decision in detail, and the Southeast Asia and Taiwan guide applies it to the newest markets.
Naming conventions matter more in bulk
When you build one campaign, you remember what it is. When you build thirty, you will not. Put the segmentation logic in the name so anyone reading a report knows what they are looking at. A pattern I use: FEED | market | segment-type | segment | objective | yyyy-mm, for example FEED | UK | margin | high | conv | 2026-10. Keep separators consistent so names can be split in a spreadsheet later. This also makes the Insights API reporting far easier to join back to your own planning sheet.
What is the step-by-step bulk upload workflow?
Plan the structure, download a fresh Product feed template, fill a pilot of two or three rows, upload, verify the created campaigns and ad groups match the plan, check product review status, then upload the remainder. Piloting first catches template misunderstandings before they multiply across dozens of rows.
- Write the structure plan in your own sheet: every campaign, every ad group, budget, objective, and the product set each ad group should cover. This is your source of truth.
- Download the Product feed template from Campaigns → Bulk uploads → Bulk sheet.
- Read the template's own guidance before filling anything. Treat the template, not a blog post, as the authority on columns and accepted values.
- Fill a pilot — two or three rows representing different segment types.
- Upload the pilot and read the result carefully. Fix any flagged rows in the sheet, not by hand in the UI, so the sheet stays the source of truth.
- Inspect what was created. Open each campaign and ad group. Confirm settings, product sets and the automatically generated ad templates look the way you intended.
- Check the Products tab for review status on the products in those ad groups.
- Fill and upload the rest once the pilot is clean.
- Archive the uploaded sheet with a date. It is your build record and the starting point for the next seasonal rebuild.
Why pilot when the feature is designed for scale?
Because the cost of a misunderstanding scales too. If one column is interpreted differently from what you expected, a pilot surfaces it in three rows. A full upload surfaces it in fifty — and now you are cleaning up fifty campaigns. Ten minutes of piloting is cheap insurance.
What are the automatically generated ad templates?
When you bulk-create product feed campaigns, Ads Manager generates the ad templates automatically. For feed campaigns that is natural: the ad content is assembled from product data — titles, images, prices — rather than written ad by ad. Your leverage over what the ads look like therefore sits mainly in the feed itself.
OpenAI has not published the internal logic of template generation, so I will not describe it. The operational implication is clear, though: if your product titles are vague, your images weak or your prices stale, bulk creation will faithfully produce many ads carrying those same weaknesses. Before any bulk build, run a feed quality pass:
- Titles that say what the product is in plain language — brand, product type, the distinguishing attribute.
- Images that are clean, high-resolution and actually show the product.
- Prices and availability that match the landing page exactly. Mismatches are a classic rejection cause across every commerce ad platform.
- Landing pages that resolve, load quickly and show the same product.
- Eligibility flags set correctly —
is_ads_eligiblecontrols whether a product can serve ads (see the feed spec section).
For how feed ads actually render in the conversation and what makes one worth clicking, see the anatomy of a ChatGPT ad and our creative guide.
What is product review status in the Products tab?
Product review status is a view in the Products tab, available to accounts with product feed campaigns, that shows where each product sits in OpenAI's review process and why a product was rejected. It turns review from a black box into a queue you can work: see what is pending, what passed, and what needs fixing.
Before this, a feed advertiser's main signal that something was wrong with a product was absence — it simply never seemed to get impressions. Now there is a direct view. That changes the daily operating rhythm for feed accounts: review status becomes a standing check, the same way you would check disapprovals in Google Merchant Center.
OpenAI has not published the exact status labels. In general terms, any ad review system moves items through a lifecycle of in review, approved and rejected; read the labels your Products tab actually shows rather than assuming they match any other platform's vocabulary. The same goes for rejection reasons: OpenAI says the view helps you understand why products were rejected, but has not published a list of reasons. The table below is therefore an operator's diagnostic checklist, not an official taxonomy.
| Likely area of the problem | What to check first | Where to fix it |
|---|---|---|
| Product data quality | Missing or vague titles, poor images, incomplete required fields | Source catalog, then next feed snapshot |
| Price or availability mismatch | Feed price vs. landing page price; out-of-stock items still flagged available | Feed pipeline cadence; intraday updates |
| Landing page problems | Broken URLs, redirects to a homepage, slow or blocked pages | Site / URL field in feed |
| Policy | Product category or claims that fall under OpenAI's ad policies | Remove from ads eligibility or change the listing |
| Eligibility settings | is_ads_eligible set incorrectly | Feed flag |
Whatever reason the Products tab gives, trust it over this table. The table is for the moment when the reason is terse and you need to know where to look.
How do you work through rejected products?
Export or list the rejected products, group them by rejection reason, fix the most common reason at its source — usually the catalog or the feed pipeline, not Ads Manager — then let the corrected data flow through the next feed update and watch the status change. Fix causes, not individual products.
- Pull the list. Filter the Products tab to products that are not approved.
- Group by reason. Rejections are almost always concentrated: one or two reasons usually account for most of them.
- Rank by revenue impact. A rejected best-seller matters more than a hundred rejected long-tail SKUs. Fix in that order.
- Fix at source. If titles are the problem, fix the title template in your catalog or feed transformation, not item by item. If prices mismatch, fix the update cadence.
- Let the feed carry the fix. Ads Manager feeds are full snapshots; the corrected data arrives with the next delivery (see delivery and snapshots).
- Re-check status. Confirm products move out of rejected. OpenAI has not published review turnaround times, so set your expectation from what you observe in your own account.
- Log the pattern. Keep a short record of reasons and fixes. Over a few weeks it becomes your feed QA checklist.
The daily and weekly rhythm
| Cadence | Check | Owner |
|---|---|---|
| Daily (first two weeks after a bulk build) | Products tab: new rejections, stuck-in-review items | Media buyer |
| Daily | Feed delivery succeeded; product count as expected | Feed / ecommerce ops |
| Weekly | Rejection reasons grouped; top fix shipped at source | Buyer + catalog owner |
| Weekly | Approved-product share by campaign; any campaign with thin approved inventory | Media buyer |
| Monthly | Structure review: merge starved campaigns, split ones with mixed economics | Account lead |
Done for you: ChatGPT Ads audit
If a feed account has high rejection counts or campaigns that never spend, our ChatGPT Ads audit reviews the feed, the campaign structure and the review-status backlog together, and hands back a prioritised fix list.
How do bulk creation and review status fit together?
Bulk creation increases how many products you push into campaigns at once; review status tells you how many of them can actually serve. Treat them as one loop: build in bulk, check approved share per ad group, fix rejection causes at source, and only then judge performance. A campaign with half its products rejected is not a campaign performance problem.
This is the most common misread I expect to see over the coming months. An advertiser bulk-builds twenty ad groups, three of them barely spend, and the conclusion is that those categories “don't work on ChatGPT”. Sometimes that is true. Often the products were never approved. Always check approved inventory before drawing performance conclusions — it is the feed-campaign equivalent of checking that conversion tracking fires before judging cost per acquisition.
What changes if you already run feed campaigns?
Existing campaigns keep running as they are. What changes is how you build the next round and what you check each day. Add the Products tab to your routine now, audit current campaigns for rejected products, and use the bulk sheet for your next restructure or seasonal build rather than extending hand-built campaigns one by one.
- Run a one-off review-status audit. For every live feed campaign, check how many of its products are approved. You may find campaigns that looked weak were simply short of servable inventory.
- Document the current structure in a planning sheet, even if you built it by hand. It becomes the baseline for any bulk rebuild.
- Decide whether to rebuild or extend. If the current structure matches how you make budget decisions, extend it with bulk-created campaigns for new segments. If it does not, plan a clean rebuild and run old and new side by side briefly before pausing the old.
- Keep reporting continuous. If you rebuild, note the switchover date so period-on-period comparisons are not distorted by learning phases.
How do you measure bulk-built feed campaigns?
Measure at the level your structure was designed for. Use campaign and ad-group reporting in Ads Manager, product-level fields in the Insights API — product feed ID, item ID and title are available as segments — and the conversions insights endpoint to see purchases even when a campaign optimises toward a different event.
OpenAI's reporting API exposes insights endpoints for the ad account, campaigns, ad groups and ads, with a product segment and fields including product.feed_id, product.item_id and product.title, alongside impressions, clicks, spend, conversions, order_created_attributed_sales and order_created_roas. That is enough to answer the question a bulk structure is built to answer: which product groups earn their spend.
Two further points. First, if you optimise a feed campaign toward an upstream event such as add-to-cart, you can still retrieve attributed purchases through the new non-goal conversion reporting — covered in full in our non-goal reporting guide. Second, if you use the multi-product carousel, card-level reporting is covered in the product feed guide. For UTM hygiene across many bulk-built campaigns, see URL parameters.
How should agencies and multi-brand teams use the bulk sheet?
Keep a master structure template per client type, fill it per client, and store every uploaded sheet as a dated build record. Because one OpenAI login can switch between ad accounts, a single operator can run the same structured build across several advertisers — but each advertiser still needs its own ad account and its own feed.
- Standardise naming across clients so cross-account reporting can be stacked.
- Separate the planning sheet from the upload sheet. The planning sheet carries your reasoning (margin, notes, owner); the upload sheet carries only what the template expects.
- Run review-status triage per client weekly, and share the rejection summary with whoever owns the client's catalog. Most fixes are theirs to make.
- Mind the account creation limit. Once you belong to ten or more ad accounts — created or invited — you cannot create another yourself, though you can still be invited. Plan client onboarding accordingly; details in the account setup guide.
For white-label arrangements, our white-label ChatGPT Ads service runs this build-and-triage workflow under your agency's name.
What mistakes should you avoid?
- Using an old template. Download fresh every time. Column sets change as features ship.
- Letting the sheet define the strategy. Plan structure first; fill the template second.
- Over-segmenting. Forty thin ad groups produce forty noisy reads. Merge until each segment has enough volume to learn from.
- Skipping the pilot. Two or three rows first, always.
- Fixing rejections in the UI instead of the feed. The next snapshot will overwrite item-level patches. Fix at source.
- Judging performance before checking approved share. Rejected products cannot serve.
- Assuming published limits. OpenAI has not published row limits or column names for the bulk sheet. If a vendor or article quotes one, ask where it came from.
- Ignoring feed quality because templates are automatic. Automatic templates amplify whatever the feed contains, good or bad.
Launch checklist
- Ads Manager feed connected and delivering full snapshots on schedule.
- Feed quality pass complete: titles, images, prices, availability, landing pages,
is_ads_eligible. - Conversion tracking live and verified (event quality checked) if you will optimise for conversions.
- Structure plan written: campaigns = budget decisions, ad groups = product sets you will read separately.
- Naming convention agreed.
- Fresh Product feed template downloaded.
- Pilot of two or three rows uploaded and inspected.
- Products tab checked for review status on pilot products.
- Full sheet uploaded; build sheet archived with date.
- Daily review-status check scheduled for the first two weeks.
If you are earlier in the journey, start with how to run ads on ChatGPT and what ChatGPT Ads cost; for the latest product changes, the ChatGPT Ads news log tracks each weekly update.
Frequently asked questions
What is bulk creation for ChatGPT product feed campaigns?
A spreadsheet workflow in ChatGPT Ads Manager that creates multiple product feed campaigns and ad groups in one upload, with ad templates generated automatically. It launched in the week of 25 September 2026.
Where is the bulk sheet in ChatGPT Ads Manager?
Go to Campaigns → Bulk uploads, choose “Bulk sheet”, and download the “Product feed” template. Fill it in and upload it through the same Bulk uploads area.
What columns does the Product feed bulk sheet template have?
OpenAI has not published the column names. Download the template from Ads Manager and follow the guidance inside it; always use a fresh download, because templates change as features ship.
Is there a row limit on the ChatGPT Ads bulk sheet?
OpenAI has not published a row or file limit for the product feed bulk sheet. Pilot with a few rows first, then upload the rest; if Ads Manager rejects an upload, split it.
Does the bulk sheet create ads as well as campaigns?
It creates campaigns and ad groups, and Ads Manager generates ad templates automatically. Feed ads are assembled from your product data, so feed quality determines ad quality.
Can I edit existing campaigns with the product feed bulk sheet?
OpenAI describes the feature as bulk creation. It has not published whether the same sheet edits existing feed campaigns, so treat it as a creation tool unless your account shows otherwise.
What is product review status in ChatGPT Ads?
A view in the Products tab, for accounts with product feed campaigns, that shows where each product is in review and why products were rejected.
What review status labels does ChatGPT Ads use?
OpenAI has not published the exact labels. Generally, products move through being in review, approved or rejected; read the labels your Products tab actually shows.
Why was my product rejected in ChatGPT Ads?
The Products tab shows the reason. Common areas to check are product data quality, price or availability mismatches with the landing page, broken landing pages, policy issues and the is_ads_eligible flag. OpenAI has not published a full list of reasons.
How do I fix rejected products?
Group rejections by reason, fix the most common cause at its source — usually your catalog or feed pipeline — and let the next feed snapshot carry the correction. Item-level patches can be overwritten by the next full snapshot.
How long does product review take?
OpenAI has not published review turnaround times. Check status daily after a bulk build and set expectations from what you observe in your own account.
Do I need a product feed before using the bulk sheet?
Yes. Product feed campaigns draw on the Ads Manager feed, set up under Tools → Feeds. Connect and validate the feed before building campaigns in bulk.
How should I structure bulk-built feed campaigns?
Make each campaign a budget decision and each ad group a product set you want to read separately — for example by margin tier, category or brand. Avoid over-segmenting; thin segments produce little signal.
How do I report on products in bulk-built campaigns?
Use Ads Manager reporting plus the Insights API, which supports a product segment with product.feed_id, product.item_id and product.title, and fields like order_created_roas.
Sources and further reading
- OpenAI — “What's new in Ads Manager” weekly note, week of 25 September 2026 (bulk creation for product feed campaigns; product review status).
- OpenAI Help Center — Create Campaigns from Product Feeds and Ads Manager account setup (retrieved 1 October 2026).
- OpenAI for Developers — Ads API reporting documentation (product segment fields and insights endpoints; retrieved 1 October 2026).
- OpenAI Help Center — Conversion-optimized campaigns.
Scaling a catalog into ChatGPT Ads?
30 minutes with Tarun. We will sketch the feed campaign structure, the bulk-build plan and the review-status triage routine for your catalog.
Book a discovery call