Product vertical
Custom and handmade goods
Custom, handmade and made-to-order products have no manufacturer-assigned barcode, which makes them the one category where the identifier requirements are satisfied by declaring their absence. The correct feed uses brand with mpn, or sets identifier_exists to no, and does both deliberately rather than everywhere.
Categories this covers
The Google product taxonomy branches these rules apply to. Match your own products against these paths before assuming the extra requirements are yours.
- Arts & Entertainment > Hobbies & Creative Arts > Arts & Crafts
- Home & Garden > Decor
- Apparel & Accessories > Jewelry
- Furniture
Attributes this vertical changes
These sit on top of the attributes every feed needs. A requirement shown here applies because of the category, not because of the channel.
| Attribute | Requirement here | Why |
|---|---|---|
| identifier_exists | Required | The declaration that this product genuinely has no manufacturer identifier. Optional in general, but it is the mechanism this vertical depends on. |
| brand | Required | For own-made goods the brand is your own store name, and it is what lets a channel treat the item as a real product rather than an anonymous one. |
| mpn | Recommended | Your own part number is a legitimate mpn when you are the manufacturer, and brand with mpn is accepted in place of a gtin. |
| gtin | Optional | There is no manufacturer barcode to supply. Sending an internal reference here is worse than sending nothing, because it reads as an invalid identifier rather than an absent one. |
| condition | Recommended | New is the right value for made-to-order goods, but vintage and reworked pieces are genuinely used, and saying so prevents a mismatch between listing and reality. |
What catches custom and handmade goods stores out
identifier_exists is not a way to silence warnings
Setting it to no across the whole catalogue makes the missing-identifier warnings disappear, which is why it is done so often. It also removes every item from identifier-based matching, which usually costs more performance than the warning did. It belongs on the products that genuinely have no identifier, and nowhere else.
The Shopify vendor field is rarely your brand
Vendor defaults to the store name on products created by hand and to the supplier name on imported ones, so a catalogue often carries a mixture. For own-made goods the brand is your store, and mapping it from vendor means whichever value happened to be in that field reaches the channel.
A SKU is not an MPN, except when you made the product
An MPN is the manufacturer's part number. Normally your internal SKU is the wrong value for it. When you are the manufacturer the two legitimately coincide, which makes this the one vertical where mapping sku to mpn is correct rather than a shortcut.
Made-to-order stock does not mean out of stock
Shopify inventory tracking on a made-to-order product often reads zero, or is switched off entirely. Both can produce an out of stock availability value on an item you are perfectly willing to sell, so availability needs to come from the inventory policy as well as the quantity.
One-of-a-kind items expire between fetches
A single unique piece sells once and then must leave the feed. With a daily fetch on most channels, it stays listed as available for hours after it is gone, which produces exactly the availability mismatch disapprovals that hurt an account. Regenerating on a webhook rather than only on a timer is the real fix.
Where these values come from in Shopify
Shopify has a field for some of these and nowhere to put the rest. Both cases are worth knowing before you start mapping.
- brand
- Set as a static store value for own-made goods rather than mapped from vendor, then overridden per product only where you stock someone else's work.
- mpn
- From the variant SKU, which is genuinely the manufacturer part number when you are the manufacturer. Leave it empty rather than inventing a value for resold items.
- identifier_exists
- Derived from whether a structurally valid barcode exists: no when there is none and the product is your own, unset otherwise. Driving it from a tag makes the decision visible in the admin.
- availability
- From inventory quantity combined with the inventory policy, so a made-to-order product with zero on hand and backorders allowed still reads as in stock.
Frequently asked questions
What do I put in gtin for handmade products?
Nothing. Leave it empty, supply brand with your own mpn, and set identifier_exists to no. Putting an internal reference in gtin is worse than leaving it blank, because an invalid identifier is treated as an error rather than an absence.
Can I set identifier_exists to no for my whole catalogue?
Only if nothing you sell has a manufacturer barcode. It silences the warnings either way, but on products that do have identifiers it removes them from matching, which generally costs more than the warning did.
Is my SKU a valid MPN?
When you make the product, yes: you are the manufacturer, so your part number is the manufacturer part number. For goods you resell it is not, and sending it anyway gives the channel a value it cannot match against anything.
What brand should a handmade product use?
Your own store or maker name, set as a static value rather than read from the Shopify vendor field, which is unreliable across a catalogue built over time.
Attributes involved
- identifier_exists The identifier_exists attribute is an explicit declaration that a product has no manufacturer-assigned identifiers, set to no when a GTIN, MPN and brand genuinely do not exist for the item. It is a statement about the product, not a way to silence identifier warnings, and channels treat misuse as a data quality problem rather than a resolution.
- brand The brand attribute is the name of the brand a product belongs to, and it is what makes a manufacturer part number meaningful and a listing eligible for brand-based matching. On Shopify it maps most often from the vendor field, which is unreliable because merchants commonly use vendor to record a supplier or distributor rather than the consumer-facing brand.
- mpn The mpn attribute is the part number a manufacturer uses to identify a product in its own catalogue, and it serves as the fallback identifier when an item has no GTIN. Unlike a GTIN it is only unique within one manufacturer, so it is meaningless to a channel unless the brand attribute is supplied alongside it.
- gtin The gtin attribute is the globally unique barcode number a manufacturer assigns to a product, covering UPC, EAN, JAN and ISBN formats. Channels use it to match an item against the same product sold elsewhere, and on Shopify it comes from the variant's barcode field, which is optional in the admin and therefore frequently empty.
Errors this vertical runs into
- Missing value: GTIN The "Missing value: GTIN" issue means a channel believes a product has a manufacturer-assigned barcode but the feed did not supply one. On Shopify it almost always traces back to the variant barcode field, which is optional in the admin and therefore left empty across large parts of most catalogues.
- Missing value: brand The "Missing value: brand" issue means a channel expects a brand name for a product and the feed did not supply one, or supplied a placeholder it treats as empty. On Shopify it usually means the vendor field is blank, or holds a supplier or internal category rather than the brand a shopper would recognise.
- Mismatched value: availability The availability mismatch error means the feed says an item is purchasable but the crawled landing page suggests otherwise, or the reverse. On Shopify it is usually a stale feed after a sell-out, or an availability value derived from inventory quantity alone without accounting for variants that do not track inventory or that allow overselling.
Related concepts
Channels this applies to
- Google Shopping Google Shopping is the surface where Google displays product listings from a merchant's catalogue, fed by a product feed uploaded to Google Merchant Center. Google's product data specification is the most detailed of the major channels, and the one whose attribute names the other channels tend to borrow.
- Meta Meta's product catalogue is the data source behind Facebook and Instagram Shops, Advantage+ catalogue ads and dynamic retargeting, populated by a product feed uploaded to Commerce Manager. Its attribute names largely mirror Google's, but its accepted values and its handling of variants differ enough to break a feed copied straight across.
- Microsoft Advertising Microsoft Advertising runs product ads across Bing, Yahoo and the Microsoft Audience Network from a catalogue uploaded to Microsoft Merchant Center. Its feed specification is closely modelled on Google's, which makes it the cheapest additional channel to launch once a Google Shopping feed already exists.
- Pinterest Pinterest turns an uploaded product feed into Product Pins, which are shoppable pins that carry live price and availability from the catalogue. Its feed specification borrows Google's attribute names, and its distinguishing requirement is that every item needs a genuinely usable image, because the image is the entire unit of discovery on Pinterest.
- OpenAI OpenAI ingests a merchant product feed so ChatGPT can surface products in shopping answers and complete purchases through Instant Checkout. It is the one major channel that does not fetch a feed URL you host: you push full catalogue snapshots to an OpenAI SFTP endpoint, and the most recently processed snapshot is retained for up to 14 days.
Primary sources
Channel specifications change. These are the official documents this page is based on.