Skip to content

Google Ads web UI bulk upload requires explicit campaign row to create campaign from CSV

An Ads-Editor-style CSV (keyword + RSA rows referencing a not-yet-existing campaign) imports fine in Ads Editor, which prompts to create missing parents. Pasted into the web UI (Tools → Bulk actions → Uploads), every row fails with The entity does not exist for 'Campaign: <name>' — the web parser never implicitly creates parents.

Verified 2026-08-24 by launching a 6-ad-group Search campaign entirely through the web uploader (53/53 rows applied, campaign live):

  1. One file can mix entity types. Campaign row + ad group rows + keyword rows + RSA rows in a single CSV, applied in one upload; forward references to the campaign created earlier in the same file resolve. No need to split into multiple uploads.
  2. Column names must come from Google's bulk-upload templates (support.google.com/google-ads/answer/10702525 → xlsx downloads), not guessed: Action, Campaign status, Campaign, Campaign type, Networks, Budget, Budget type, Bid strategy type, Language, Location, Final URL suffix / ad group: Action, Campaign, Ad group, Status / keywords: Keyword, Match Type / RSA: Ad type = Responsive search ad, Headline 1..15, Description (not Description 1), Description 2..4, Path 1, Path 2, Final URL.
  3. EU political ads is now a required campaign-creation column (EU Reg 2024/900 enforcement; since 2025-09-22 campaign creation is blocked without it). Error is Missing value in "EU political ads". Value: Yes/No. The column is absent from Google's own downloadable campaign template.
  4. Network exclusion syntax: Networks: Google search alone creates a Search campaign with search partners AND Display expansion unchecked.
  5. No bulk column for the Maximize Clicks max-CPC bid limit. Bid strategy type: Maximize clicks works on Add, but the cap (Set a maximum cost per click bid limit) exists only in the campaign-settings UI — the template's only cap column is Max CPC Bid Limit for Target IS (Target Impression Share only). Set the cap by hand after import.
  6. Practical flow: create everything Campaign status: Paused in the CSV, then verify settings/negatives/URLs in the UI and flip to Enabled as the last act.
No signals yet