For
Google Shopping feeds for B2B and wholesale
Google Shopping works for B2B and wholesale catalogs, but its price rules were written for retail. The feed price has to be what any user in the target country pays for the smallest quantity you sell, VAT included outside the US and Canada, and the same number has to appear on the landing page. Here is how to shape a trade catalog into a feed that passes, and which products to leave out.
We connect your store, build the feed and keep it in sync. Updated 2026-10-27.
At a glance
- Google's price rule for bulk goods: submit the price for the minimum number of products a user must buy, and show that total (or the unit price plus the minimum quantity) on the landing page.
- Any user in the target country must be able to buy at the submitted price. You may require an account, but sign-up must be free and straightforward, on the landing page or at checkout.
- Outside the US and Canada, submit the price including VAT, and make that same VAT-inclusive price visible on the landing page and at checkout, even if your trade customers think in net prices.
- We set up Textfinity to compute the pack price from unit price and minimum quantity with a calc expression (or take it from a merged price list), add the pack size to the title and filter out quote-only and trade-only lines.
What Google requires from a B2B Google Shopping feed
Merchant Center has no separate B2B program; a wholesale store follows the same price and landing page rules as a retailer. Three of them shape a trade catalog. The price must be for the minimum purchasable quantity: a box of 250 mailers at 0.42 each is submitted as 105.00, and the landing page must show either that total or the unit price with the minimum quantity, so that quantity times unit price equals the feed price. Member prices do not go in price or sale_price.
Access may be gated by a free account but not by approval: Google says any user in the target country must be able to buy at the submitted price, and that sign-up, where required, must be free and straightforward. A catalog where prices appear only after a sales rep approves the account is hard to square with that rule, so keep those products out of the feed. Finally, tax: US and Canadian prices exclude sales tax, while every other country takes the VAT-inclusive price, matched on the landing page and checkout.
Wholesale catalog attributes that change
| Attribute | Retail feed | B2B or wholesale feed |
|---|---|---|
| price | Price of one item | Total for the minimum order quantity (pack or case price) |
| title | Brand + product + variant | Add pack size: "Case of 250", "Box of 1,000" |
| multipack | Usually empty | Units in a merchant-built pack; required for multipacks in the US, UK, Germany, the Netherlands and other listed countries |
| is_bundle | Usually empty | yes for merchant-built bundles with a main product (same countries) |
| unit_pricing_measure | Food and cosmetics | Required in the EU, EFTA and UK for goods sold by weight, volume, length or area; Google names hardware and office supplies |
| google_product_category | Consumer categories | Often 111 Business & Industrial, 922 Office Supplies or 632 Hardware |
| custom_label_0 | Season, margin | MOQ tier or trade segment for bidding |
From Google's price, product data specification and unit pricing pages, checked 2026-10-27. Category IDs from Google's product taxonomy.
Which wholesale products to keep out of the feed
- Quote-only items: no fixed price on the page means no valid feed price. Exclude rows with an empty price or a "request a quote" flag.
- Approval-gated tiers: if the price shows only to approved trade accounts, the product fails the any-user rule. Advertise the public tier or nothing.
- Very large minimum orders: a pallet price of several thousand rarely converts from a Shopping ad click. Set a price ceiling with an is more than filter and sell pallets through your sales team.
- Net-only pages in the EU or UK: if the page cannot show the VAT-inclusive price, the item will be flagged for price mismatch. Fix the template before adding the product.
Channel mix and catalog size for a trade catalog
Google Shopping and Microsoft Ads take largely the same core attributes, so one mapping covers both, with a feed each. Meta Ads catalogs are useful for retargeting buyers who visited a product, less so for prospecting trade customers. Count the SKUs you will advertise after filtering, not the full ERP export: that is the catalog the feeds carry, and the number a quote is based on.
Examples
Worked examples, by situation
Four trade catalogs with different pricing problems.
Unit price to case price, pack size in the title
Before
name: Kraft mailer box 20x15x5 unit_price: 0.42 min_qty: 250
After
title: Kraft Mailer Boxes 20 x 15 x 5 cm, Case of 250 price: 105.00 USD multipack: 250
How we set it up
We map price with an advanced rule: round(calc{[unit_price] * [min_qty]}, 2) + " USD". If your trade price list has its own case prices, we join it as a merged source and use those instead. title gets an advanced rule: [name] + ", Case of " + [min_qty].
VAT-inclusive price from the export's gross column
Before
price_net: 84.00 price_gross: 99.96 unit: 1000 pcs
After
price: 99.96 EUR unit_pricing_measure: 1000ct unit_pricing_base_measure: 100ct
How we set it up
We map price with an advanced rule: [price_gross] + " EUR", and unit_pricing_measure with replace from regexp ^(\d+) pcs$ → \1ct. The landing page must show the same 99.96 including VAT, not only the net 84.00.
Advertise only the publicly priced range
Filter rules
exclude if [tags] includes "trade-only"
exclude if [price] is empty
exclude if [tags] includes "quote"
exclude if [price] is more than 1500How we set it up
We add exclude filters with includes, is empty and is more than. The same filter set goes on the Microsoft Ads feed, so both channels advertise the same public catalog.
MOQ tier as a custom label
Before
min_qty: 1 / 10 / 100
After
custom_label_0: single / small-pack / bulk
How we set it up
We map custom_label_0 with an advanced rule: if calc{[min_qty]} == 1 then "single" else if calc{[min_qty]} == 10 then "small-pack" else "bulk". In Google Ads, the bulk tier gets its own bid instead of sharing one with single-item orders.
Copy this plan
Plan: a wholesale catalog to Google Shopping
01
Send us the store or ERP export
Shopify connects natively; WooCommerce, Magento and B2B platforms connect through a CSV export URL (or SFTP). Make sure the export has the minimum order quantity and a VAT-inclusive price.
What we set up: We connect your Shopify store or the CSV/XML export URL.02
Add the missing price data
If the export lacks the minimum quantity or a separate case price, add a Google Sheet or CSV with sku, min_qty and (optionally) case_price and join it on SKU.
What we set up: We join the sheet as a merged source keyed on sku.03
Filter to the advertisable range
Exclude quote-only, trade-only and very large orders.
What we set up: We add exclude filters with includes, is empty and is more than.04
Map the B2B attributes
Pack price, pack size in the title, multipack, unit pricing for goods sold by weight or length, and a business category.
What we set up: We build the Google Shopping feed with price as an advanced calc rule, title as an advanced rule, and google_product_category as a static value per product type condition.05
Check the landing pages
Each product page must show the submitted price (VAT-inclusive outside the US and Canada) and the minimum quantity, and buying must not depend on account approval. This is a store change, not a feed change.
06
Register the feed in Merchant Center and watch diagnostics
Add the feed URL in Merchant Center as a scheduled fetch and review price mismatch warnings there; Textfinity does not import them.
What we set up: We hand you the feed URL and register it with you: you give us access or we walk you through it.
Customization tips
Make it yours
Pack price versus unit price in the ad
Shopping shows the feed price. A case price looks expensive next to retail single units; a smaller minimum order looks cheaper but brings small orders. Choose the minimum you actually want to sell from ads, not the one in your trade terms.
A feed per country when VAT differs
A German feed needs gross prices with German VAT, a US feed net prices. Build one feed per target country with its own price column rather than one feed with Google's currency conversion.
Write the pack size where shoppers look
Put "Case of 250" in the first part of the title. Shoppers comparing a 105.00 case with a 0.89 single unit need the pack size before they click.
FAQ
Questions about google shopping feed for b2b
Can B2B and wholesale products appear on Google Shopping?
Yes. Merchant Center has no separate B2B program, so wholesale products follow the retail rules: a visible price for the minimum purchasable quantity, VAT-inclusive outside the US and Canada, and a product any user in the target country can buy at that price.
Can I require customers to log in before buying?
Google allows requiring an account if sign-up is free and straightforward and can be completed on the landing page or during checkout. Prices that appear only after a sales team approves the account are hard to reconcile with the rule that any user in the target country can buy at the submitted price.
How do I show a minimum order quantity in Google Shopping?
Submit the total price for the minimum quantity in the price attribute, and show on the landing page either that total or the unit price with the minimum quantity, so that quantity times unit price equals the feed price. Adding the pack size to the title makes it clear in the ad.
Should a B2B feed use net or gross prices?
Net for the US and Canada, where prices exclude sales tax. For every other target country, including the EU and the UK, submit the VAT-inclusive price and show the same gross price on the landing page and at checkout.
Set up for you
Have a wholesale feed set up with pack prices Google accepts.
Send us your store or ERP export. We set Textfinity up to compute pack prices, filter out quote-only lines and publish feeds for Google and Microsoft Ads.
Tell us your store and channels. We reply within 24 hours.