Half your apparel catalog just disappeared from Google Shopping. You open Merchant Center Diagnostics and find this:
Issue: Missing brand [brand]
Attribute: brand [brand]
In the legacy Diagnostics UI, the same error reads:
Missing brand
You submitted a product that requires a value for the brand [brand]
attribute, but you have not yet submitted a valid brand.
The verbatim message above is quoted directly from Google's How to fix: Missing brand help article, which is the canonical authority for what the error means and which products trigger it.
If you're shipping branded merchandise from third-party manufacturers, this error is usually a feed mapping problem. If you sell handmade items, private-label products, or genuinely unbranded merchandise, the fix is different — and getting it wrong can quietly hurt your account-level trust score. This post covers what counts as a valid brand, the four fixes ranked by frequency, and how to verify each one without breaking other products.
TL;DR
missing_required_attribute_brandfires when a product is in a category that requires a brand value (most commonly Apparel & Accessories) and thebrandattribute is empty, missing, or contains an unaccepted value.- The single most common cause is a Shopify or WooCommerce export where the
vendorfield is mapped tobrandbut is empty on a subset of products. - For handmade, private-label, or store-exclusive products, the brand value is your store name or manufacturer name. Don't use "unbranded," "Generic," "N/A," or leave it blank.
- Apparel subcategories Shoes, Sunglasses, Handbags, and Watches require both
brandand one ofgtinormpn. Fixing brand alone isn't enough for those. - Verify by filtering Diagnostics for the affected products after 24 to 72 hours and watching the brand-error count drop.
What missing_required_attribute_brand actually means
Google's product data specification lists brand as required for products in categories where brand identification matters for matching, comparison, and ranking. The current canonical list is:
- All products in Apparel & Accessories (Google product category 166) and its subcategories
- Apparel subcategories Shoes, Sunglasses, Handbags, and Watches additionally require either
gtinormpn - For apparel targeted to Brazil, France, Germany, Japan, the UK, and the US:
age_group,color,gender, andsizeare also required
The error fires in three specific cases:
- The product is in a brand-required category and the
brandvalue is missing or empty - The product is in a brand-required category and the
brandvalue is set to a generic placeholder Google rejects ("Unbranded," "No brand," "N/A," "Generic," "OEM") - The product is in a brand-required category and the
brandvalue is too long (over 70 characters) or contains characters Google strips during parsing, leaving an effectively-empty value
Google does not validate that the brand you submit is a "real" brand. There is no master brand registry to check against. But Google does pattern-match against a list of placeholder values it treats as equivalent to empty, and it strips HTML, JSON-LD escape sequences, and unusual Unicode characters during parsing.
Why Google flags it
Brand is one of the four identifiers Google uses to match your listing against listings from other merchants (brand + GTIN + MPN + title). When brand is missing on a product Google believes should have one, three things happen:
- No deduplication. Your listing can't be merged with the same product sold elsewhere, so it loses ranking signals from cross-merchant data.
- No comparison panel eligibility. The "Buy this product elsewhere" panel and the price-comparison sidebar both require brand.
- No Performance Max optimization. Some PMax placements weight brand heavily; missing brand caps your eligibility.
When the product is in a category where brand is required and brand is missing, Google disapproves the product rather than silently downgrading it. That's what surfaces as missing_required_attribute_brand.
Four fixes ranked by frequency
Fix 1: Map the brand from your source system (most cases)
Most of the time, the brand exists somewhere in your source system but isn't reaching the feed. Common causes by platform:
Shopify: the canonical brand field is product.vendor. Default Shopify exports map vendor to GMC brand. Run this filter in the Shopify admin to find products missing the vendor field:
- Products > Filter by Vendor: (empty)
If you have variants and the vendor is only populated on some products, every empty-vendor product in a brand-required category will trip the error. Fixing vendor at the product level (it's product-scoped, not variant-scoped) usually clears a wave of errors at once.
WooCommerce: brand is not a native WooCommerce field. The two most common storage patterns are:
- WooCommerce Brands plugin: brand lives in a
pwb-brandtaxonomy term - Manual product attribute: brand lives in
wp_term_relationshipsagainst an attribute namedpa_brandor similar
Find the right key:
SELECT DISTINCT meta_key FROM wp_postmeta
WHERE meta_key LIKE '%brand%';
SELECT DISTINCT taxonomy FROM wp_term_taxonomy
WHERE taxonomy LIKE '%brand%' OR taxonomy LIKE '%pwb%';
The fix: confirm which key your feed-generation tool reads from, populate it on every product, and verify your feed actually includes the value.
BigCommerce: brand is a top-level field on the product (brand_id, which dereferences to a Brand object with a name). The BigCommerce API returns it directly, but some feed exporters skip products with empty brand_id rather than logging the omission. Check your feed output for missing rows, not just for empty cells.
Custom CSV / Sheets feeds: the column header must be exactly brand (lowercase). Headers like Brand, BRAND, manufacturer, vendor, or make are ignored unless you have an explicit feed rule renaming them.
Fix 2: Use your store name as the brand for handmade or private-label products
Google's missing-brand help article explicitly addresses this case:
If you manufacture the product yourself, you may submit your store name as the value for the brand attribute. If the product doesn't have a brand, submit the manufacturer or supplier name under the brand attribute.
That means for handmade, custom-printed, or store-exclusive merchandise, your store name is the brand. "Maple Street Soap Co." is a valid brand value. "Handmade" is not. "Unbranded" is not. "Generic" is not.
The full list of placeholder values Google rejects, based on observable Diagnostics behavior:
- Unbranded
- No brand
- N/A
- Generic
- OEM
- None
- Misc / Miscellaneous
- Bulk
- White label
- Various
- Multiple
If any of these appear in your brand column, Google parses them as effectively empty and the error fires.
For private-label sellers: pick a single consistent brand value (typically your store name) and apply it to every private-label product. Don't mix "your store name" on some products and "your supplier's name" on others — Google's matching logic gets confused and ranking suffers.
Fix 3: Set identifier_exists to false only when appropriate
For a small set of product categories, the manufacturer-issued identifiers (GTIN, MPN, brand) genuinely don't exist. The right way to signal that to Google is:
identifier_exists: false
brand: <your store or manufacturer name>
mpn: <your internal SKU or model number>
Note: identifier_exists: false does not suppress the brand requirement. Brand is still required for products in brand-required categories, even when identifier_exists is false. The flag suppresses the GTIN and MPN requirements, not brand.
Google grants the identifier_exists: false opt-out for specific cases:
- Handmade and custom-made goods
- Antique and vintage items (typically pre-1990 to defend cleanly)
- Custom-printed apparel where you are the brand
- Books published before ISBN was standardized (roughly pre-1970)
- Store-exclusive products you produce internally
Misusing identifier_exists: false on branded products you simply don't have GTINs for triggers account-level scrutiny over time. Don't reach for it as a shortcut.
Fix 4: Strip unaccepted characters and length-trim long brand values
A small but persistent share of missing_required_attribute_brand errors come from brand values that exist in the feed but get parsed as empty after Google strips them.
Common patterns:
- HTML entities in the brand value. A WooCommerce store stores brand as "&Co" (because the source text was "&Co" and got HTML-encoded twice). Google strips entities and ends up with an empty string after the
&part is decoded back to nothing useful. - Length over 70 characters. Google's brand parser truncates aggressively. A brand like "The Original Maple Street Handcrafted Artisan Soap Company LLC, Est. 1987" is over the limit and may be silently dropped.
- Unusual Unicode. Emoji, zero-width spaces, and right-to-left override characters can survive in your store admin but get stripped during feed parsing, leaving an empty string.
- Mixed-encoding CSV files. A feed exported from Excel as Windows-1252 but uploaded as UTF-8 can render the brand column as mojibake (garbled characters), which Google strips entirely.
The fix: run your feed through a sanitization pass before submission. Decode HTML entities, trim to 70 characters, normalize to NFC Unicode, and explicitly enforce UTF-8 encoding on the export.
How to verify the fix
After making changes, validate before the next review cycle.
1. Filter Diagnostics for the affected products. Go to Products > Needs attention in Merchant Center, filter by missing_required_attribute_brand, and download the CSV. Cross-reference with the same set of products in your store admin to confirm brand values are now populated.
2. Check brand coverage in the feed. Run a quick coverage check from the command line:
# Count rows with empty brand
xsv select brand feed.csv | tail -n +2 | awk 'NF==0 {empty++} NF>0 {filled++} END {print "Filled:", filled, "Empty:", empty}'
A healthy feed for an apparel-heavy store should be at or above 99 percent brand coverage. Below 95 percent usually means there's a category of products (vendor-imported, drop-shipped, or imported from a legacy system) where brand isn't being populated at source.
3. Confirm the brand value Google sees matches what's in your source. Open a product in Merchant Center > Products > All products and look at the "brand" line in the product details. If it's empty or shows a placeholder, your feed is submitting empty even if your source has a value — meaning the mapping in your feed-generation step is wrong.
4. Wait the right amount of time. Re-review typically completes within 24 to 72 hours of the next successful feed fetch. Don't resubmit hourly; each resubmission resets a soft clock on every product in the feed.
What not to do
- Don't bulk-fill the brand column with "Generic" or "Unbranded." Google explicitly rejects these as placeholder values, and over time the pattern hurts account-level trust.
- Don't set
identifier_exists: falseto suppress the brand error. That flag is for GTIN and MPN, not brand. Brand is still required. - Don't put the product name in the brand field. "Maple Soap Bar" is a product name, not a brand. The brand for that product is your store name (if you make it) or the actual manufacturer.
- Don't bulk-add a fake brand just to clear the error. Google's matching layer eventually catches mismatches between brand and other identifiers, and the account-level trust hit takes weeks to recover from.
- Don't ignore the apparel subcategory rules. Shoes, Sunglasses, Handbags, and Watches require brand and one of GTIN or MPN. Fixing brand alone leaves you with a
missing_required_attribute_gtin(covered in our GTIN post) ormissing_required_attribute_mpnerror.
How SnowPipe handles this
SnowPipe syncs Shopify, WooCommerce, and BigCommerce catalogs to Google Merchant Center via the Merchant API v1. Three design choices in SnowPipe address missing_required_attribute_brand before products reach Google:
Source-system field discovery. On connection setup, SnowPipe inspects the source store and surfaces every field that could plausibly hold a brand: Shopify vendor, WooCommerce pwb-brand taxonomy and pa_brand attribute, BigCommerce brand, and common metafield namespaces (custom.brand, mm-google-shopping.brand). The catalog manager picks the right source per connection, and SnowPipe handles the mapping to GMC brand without dropping leading whitespace or interpreting empty strings ambiguously.
Placeholder detection. SnowPipe flags products where the brand value is one of Google's rejected placeholder values (Unbranded, Generic, N/A, OEM, etc.) before submission. The Products tab shows a coverage breakdown so you can fix systemic issues — like a vendor import that filled brand with "Generic" — in one pass instead of one product at a time.
Apparel-subcategory awareness. When a product is in Shoes, Sunglasses, Handbags, or Watches, SnowPipe enforces the joint brand + (GTIN or MPN) requirement at validation time. You don't submit a product, wait for Google to reject it on brand, fix brand, resubmit, and then wait for Google to reject it on MPN. Both gaps are surfaced together.
You can see brand coverage, placeholder counts, and per-product status in the Products tab of every GMC connection, with deep links to the source store admin for quick fixes.
Summary
missing_required_attribute_brand is rarely about products that genuinely have no brand. Most cases come down to a Shopify vendor field that's empty on a subset of products, a WooCommerce brand taxonomy that isn't being read by the feed plugin, or a CSV column where the header is Brand instead of brand. For handmade and private-label sellers, use your store name as the brand — never "Unbranded" or "Generic." For apparel subcategories like Shoes and Watches, fixing brand alone isn't enough; you also need GTIN or MPN. The fix is almost always a data-pipeline issue, not a missing-data issue.
Tired of fighting GMC attribute errors one category at a time?
Try SnowPipe free — connect your store and get smart brand field detection plus accurate Google/Facebook syncs in minutes. Or, book a 15-min demo and I'll walk you through your specific setup.