<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
  <title>FeedManager blog</title>
  <subtitle>Guides on product feeds, channels and feed management.</subtitle>
  <link href="https://www.feedmanager.org/blog/feed.xml" rel="self"/>
  <link href="https://www.feedmanager.org/blog/"/>
  <id>https://www.feedmanager.org/blog/</id>
  <updated>2026-09-22T08:00:00Z</updated>
  <entry>
    <title>Black Friday product feeds: a timeline and checklist</title>
    <link href="https://www.feedmanager.org/blog/black-friday-product-feed-checklist/"/>
    <id>https://www.feedmanager.org/blog/black-friday-product-feed-checklist/</id>
    <published>2026-09-22T08:00:00Z</published>
    <updated>2026-09-22T08:00:00Z</updated>
    <author><name>FeedManager Team</name></author>
    <summary>What to prepare in your product feeds before Black Friday — sale prices, campaign labels, promotions, link tags and scheduled rules — and when to do each.</summary>
    <content type="html">&lt;p&gt;Black Friday is the week when product feeds are asked to do things they don't do the rest of the year: prices that
change at midnight, a campaign that starts in one time zone and ends in another, stock that runs out by lunchtime.
Most of what goes wrong was decided weeks earlier — a sale price sent the wrong way, a title rule someone meant to
remove, a promotion submitted too late for review.&lt;/p&gt;
&lt;p&gt;This guide is a timeline. It says what to prepare in your &lt;a href="/blog/what-is-a-product-feed/"&gt;product feeds&lt;/a&gt;, in which
order, and what to take out again afterwards. The dates are for 2026: &lt;strong&gt;Black Friday is 27 November&lt;/strong&gt;, Cyber Monday
is 30 November, and 11.11 falls on a Wednesday.&lt;/p&gt;
&lt;h2 id="the-timeline-at-a-glance"&gt;&lt;a class="toclink" href="#the-timeline-at-a-glance"&gt;The timeline at a glance&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;When&lt;/th&gt;
&lt;th&gt;What to do&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;4 weeks before (late October)&lt;/td&gt;
&lt;td&gt;Fix the regular prices you will strike through. Clean up open feed errors. Decide which products are in the campaign.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;2 weeks before&lt;/td&gt;
&lt;td&gt;Prepare sale prices with their dates, campaign labels, link tags and promotions. Schedule them.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;1 week before&lt;/td&gt;
&lt;td&gt;Preview the feed as it will be on the day. Shorten sync and fetch intervals. Check product pages against the feed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The week itself&lt;/td&gt;
&lt;td&gt;Watch approvals, mismatches and stock. Change prices in the store, not in the feed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;The week after&lt;/td&gt;
&lt;td&gt;Check that campaign rules ended, sale prices are gone and intervals are back to normal.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="1-fix-the-price-you-will-strike-through"&gt;&lt;a class="toclink" href="#1-fix-the-price-you-will-strike-through"&gt;1. Fix the price you will strike through&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A discount is only as convincing as the price it is compared with — and Google checks that price. Its
&lt;a href="https://support.google.com/merchants/answer/9017019"&gt;sale price annotation&lt;/a&gt; — the struck-through price next to the
new one — appears only when:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;the regular price was charged for &lt;strong&gt;30 days within the past 200 days&lt;/strong&gt; (for Shopping ads in the US: 5 days within
  the past 30, or 15 within the past 200);&lt;/li&gt;
&lt;li&gt;the sale price is lower than the regular price;&lt;/li&gt;
&lt;li&gt;the discount is &lt;strong&gt;greater than 5% and less than 90%&lt;/strong&gt;;&lt;/li&gt;
&lt;li&gt;the landing page shows both prices.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Google adds that annotations "aren't always guaranteed to show", even then. The consequence for October is simple:
don't raise a price shortly before the campaign to make the discount look larger. It won't qualify, and in many
countries price-reduction rules forbid it anyway.&lt;/p&gt;
&lt;p&gt;Use the same weeks to clear what is already wrong. A product that is disapproved for a
&lt;a href="/blog/merchant-center-feed-errors/"&gt;missing GTIN or a price mismatch&lt;/a&gt; in October is still disapproved in the last
week of November, when it matters most.&lt;/p&gt;
&lt;h2 id="2-send-the-discount-as-a-sale-price-with-dates"&gt;&lt;a class="toclink" href="#2-send-the-discount-as-a-sale-price-with-dates"&gt;2. Send the discount as a sale price, with dates&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Keep &lt;code&gt;price&lt;/code&gt; as the regular price and put the campaign price in &lt;code&gt;sale_price&lt;/code&gt;. Add
&lt;a href="https://support.google.com/merchants/answer/6324460"&gt;&lt;code&gt;sale_price_effective_date&lt;/code&gt;&lt;/a&gt; with the start and the end,
separated by a slash:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;price                       129.00 EUR
sale_price                  89.00 EUR
sale_price_effective_date   2026-11-27T00:00+0100/2026-11-30T23:59+0100
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Three details decide whether this works:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Time zone.&lt;/strong&gt; Without one, Google reads the times as UTC. A sale that starts at midnight in Istanbul or Berlin
  starts hours late if the offset is missing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No dates means now.&lt;/strong&gt; Google's specification says that without the date range "the sale price will be used
  for your product immediately". Sending next week's price without dates starts the sale today.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The page must agree.&lt;/strong&gt; At 00:00 the store, its structured data and the feed have to say the same price. A sale
  that is live in the feed but not yet in the store is a
  &lt;a href="/blog/merchant-center-misrepresentation/"&gt;price mismatch&lt;/a&gt;, and Google treats mismatches as serious.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Most store platforms export a sale price and its dates when you schedule the discount there. Let the store be the
source of the price; the feed should carry it, not invent it.&lt;/p&gt;
&lt;h2 id="3-keep-the-campaign-out-of-your-titles"&gt;&lt;a class="toclink" href="#3-keep-the-campaign-out-of-your-titles"&gt;3. Keep the campaign out of your titles&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It is tempting to prefix every title with "BLACK FRIDAY -40%". For Google feeds, don't: the
&lt;a href="https://support.google.com/merchants/answer/6324415"&gt;title rules&lt;/a&gt; say "Don't include promotional text. Don't add
information such as price, sale price, sale dates, shipping, delivery date, other time-related information, or
your company's name", and "Don't use capital letters for emphasis". Products with such titles can be disapproved —
in the one week you can't afford it. A good title describes the product, as in
&lt;a href="/blog/product-title-optimization/"&gt;the ten rules of title optimization&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The campaign belongs elsewhere:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;in the &lt;strong&gt;sale price&lt;/strong&gt;, which the channel turns into a visible discount;&lt;/li&gt;
&lt;li&gt;in a &lt;strong&gt;promotion&lt;/strong&gt; (below);&lt;/li&gt;
&lt;li&gt;in &lt;strong&gt;ad copy&lt;/strong&gt; and campaign names;&lt;/li&gt;
&lt;li&gt;on channels that allow designed images in catalog ads — Meta, TikTok, Pinterest — in
  &lt;a href="/blog/catalog-ad-creatives-price-overlays/"&gt;an image with the price and the discount on it&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If old campaign words are still in your titles or descriptions from last year, this is the moment to find them.&lt;/p&gt;
&lt;h2 id="4-mark-the-campaigns-products"&gt;&lt;a class="toclink" href="#4-mark-the-campaigns-products"&gt;4. Mark the campaign's products&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Bidding needs to tell campaign products apart from the rest. That takes a segment and a label:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Decide the list: discounted products, or a hand-picked selection.&lt;/li&gt;
&lt;li&gt;Give those products a &lt;a href="/blog/custom-labels-google-shopping/"&gt;custom label&lt;/a&gt; — &lt;code&gt;custom_label_2 = black_friday&lt;/code&gt;, for
  example — so a campaign or a listing group can target them.&lt;/li&gt;
&lt;li&gt;Keep the label's meaning stable. If label 2 is "season or campaign" all year, the campaign structure in the ad
  account doesn't have to change in November; only the members do.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Useful second segments: products with a discount of 30% or more, &lt;a href="/blog/product-segments-dynamic-tags/"&gt;best sellers&lt;/a&gt;
that are in the campaign, and campaign products with low stock — which you may want to bid on less, not more.&lt;/p&gt;
&lt;h2 id="5-submit-promotions-early"&gt;&lt;a class="toclink" href="#5-submit-promotions-early"&gt;5. Submit promotions early&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A sale price changes what one product costs. A &lt;strong&gt;promotion&lt;/strong&gt; adds an offer on top: a code, free shipping above a
basket value, a gift. Google shows promotions on Shopping ads and free listings in 13 countries (among them the US,
the UK, Germany, France and the Netherlands — not Türkiye), and it "reviews all promotions against program policies
and editorial requirements before displaying them". So a promotion created on Thursday night may not be live on
Friday morning.&lt;/p&gt;
&lt;p&gt;Create promotions at least a few days ahead with their real start date. Products are linked to a promotion through
&lt;code&gt;promotion_id&lt;/code&gt; in the product feed, and that ID can be in the feed from the day you create the promotion — the
review can then finish before the campaign starts.&lt;/p&gt;
&lt;h2 id="6-tag-your-links"&gt;&lt;a class="toclink" href="#6-tag-your-links"&gt;6. Tag your links&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When the week is over you will want to know which channel sold what. That needs link parameters that your analytics
understands, per feed: &lt;code&gt;utm_source=google&lt;/code&gt;, &lt;code&gt;utm_medium=cpc&lt;/code&gt;, &lt;code&gt;utm_campaign=black_friday&lt;/code&gt; on the Google feed,
&lt;code&gt;utm_source=facebook&lt;/code&gt; and &lt;code&gt;utm_medium=paid_social&lt;/code&gt; on the Meta feed, and so on. Two cautions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add the parameters in the feed, not in the store, and keep the link's own query string — a &lt;code&gt;?variant=&lt;/code&gt; that
  selects the right variant must survive.&lt;/li&gt;
&lt;li&gt;On Google and Microsoft, parameters on the product link also apply to free listings. If you want only ads
  tagged, put the tagged address in the ads-only link (&lt;code&gt;ads_redirect&lt;/code&gt;) and leave the product link clean.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="7-schedule-the-changes-then-preview-them"&gt;&lt;a class="toclink" href="#7-schedule-the-changes-then-preview-them"&gt;7. Schedule the changes, then preview them&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;By now there is a list of feed changes that must happen at a certain moment: a campaign label, a filter that
narrows a feed to the campaign's products, perhaps a different title template on a channel that allows it. Changes
made by hand at midnight are the ones that go wrong, and the ones nobody remembers to undo.&lt;/p&gt;
&lt;p&gt;Give every campaign rule a start and an end, and look at the result before it is live: what does the feed contain
on 27 November at 00:01? What on 1 December? If your tool can't preview a future date, build the campaign version
as a copy of the feed and compare the two.&lt;/p&gt;
&lt;p&gt;Mind the clock. "Midnight" is midnight in the store's time zone, and a feed that is rebuilt at 03:00 carries
Thursday's rules for the first three hours of Friday unless something rebuilds it at the boundary.&lt;/p&gt;
&lt;h2 id="8-keep-price-and-stock-fresh-on-the-day"&gt;&lt;a class="toclink" href="#8-keep-price-and-stock-fresh-on-the-day"&gt;8. Keep price and stock fresh on the day&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;During the week the feed's enemy is delay. A feed is a file, and
&lt;a href="/blog/what-is-a-product-feed/"&gt;nothing about a file is real-time&lt;/a&gt;: a change reaches the ads when the feed has been
rebuilt and the channel has fetched it again.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Sync your store and rebuild feeds as often as you can for the week — hourly or better.&lt;/li&gt;
&lt;li&gt;Set the channel's fetch schedule to match; a feed rebuilt every 30 minutes helps little if it is fetched once a
  day.&lt;/li&gt;
&lt;li&gt;Sold-out products should leave the feed, or be sent as out of stock, quickly. Clicks on sold-out products are
  paid for and wasted.&lt;/li&gt;
&lt;li&gt;Check a sample of product pages against the feed every day of the week. The six usual causes of a mismatch — VAT,
  sale timing, a default variant, stale structured data, currency, stock — are all more likely now.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="9-clean-up-afterwards"&gt;&lt;a class="toclink" href="#9-clean-up-afterwards"&gt;9. Clean up afterwards&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On Tuesday, look at the feed again. Campaign labels should be gone, filters back to normal, sale prices ended —
check the &lt;code&gt;sale_price_effective_date&lt;/code&gt; of a few products — and the sync interval back to what your plan and your
store are comfortable with. Promotions that ended should have ended in the promotions file too. Then note what you
would do earlier next year, while you still remember it.&lt;/p&gt;
&lt;h2 id="how-feedmanager-does-it"&gt;&lt;a class="toclink" href="#how-feedmanager-does-it"&gt;How FeedManager does it&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Each step above maps to something in FeedManager.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Scheduled rules and filters.&lt;/strong&gt; Every rule and every filter group has &lt;strong&gt;Active from&lt;/strong&gt; and &lt;strong&gt;Active until&lt;/strong&gt;, in
your account's time zone. A campaign-date picker fills them for 11.11, Black Friday week, Black Friday itself,
Cyber Monday and New Year. The feed is rebuilt at the moment a window starts or ends — also a feed you normally
build by hand — and a Schedule card on the Rules tab lists every dated change, with your promotions on feeds that
send promotion IDs. &lt;strong&gt;Preview as on&lt;/strong&gt; shows the feed as it will be at a date and time you choose. More on the
&lt;a href="/features/#scheduled-rules"&gt;Features page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wording checks.&lt;/strong&gt; Builds flag promotional text and capitals in titles and descriptions — on by default for Google
Merchant Center feeds — and one click adds the rule that removes the flagged words. Last year's "Black Friday" in a
title is found before Google finds it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Segments and labels.&lt;/strong&gt; Tag the campaign's products in bulk as a &lt;a href="/product-tags/"&gt;product tag&lt;/a&gt;, or let a dynamic
tag such as &lt;em&gt;Big discounts&lt;/em&gt; collect them, and set a custom label for "has the tag".&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Promotions.&lt;/strong&gt; &lt;a href="/promotions/"&gt;Promotions&lt;/a&gt; (Standard and up) are created next to your feeds, for all products or
one tag's products; FeedManager writes the promotion's ID into those products in your Google feeds and publishes
the promotions file.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Link parameters.&lt;/strong&gt; Each feed has up to ten &lt;code&gt;name=value&lt;/code&gt; parameters, with a Suggest button for the channel's usual
set; Google and Microsoft feeds can tag the ads link only.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fresh prices and stock.&lt;/strong&gt; Between full reads, Shopify and WooCommerce syncs read only what changed; with Instant
updates (Pro and above) the store reports a change and the product is read again about a minute later. A Google
feed can then send the new price, sale price and availability to Merchant Center within minutes, ahead of the file
— see &lt;a href="/merchant-center/#instant-updates"&gt;instant price and stock updates&lt;/a&gt;. And &lt;a href="/page-checks/"&gt;Page Checks&lt;/a&gt;
compares a daily sample of product pages with the rows your feeds send.&lt;/p&gt;
&lt;p&gt;None of this replaces the first step: a real price, charged long enough, in a store whose pages say what the feed
says. The rest is timing — and timing is what a schedule is for.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Merchant Center misrepresentation and price mismatches: a store checklist</title>
    <link href="https://www.feedmanager.org/blog/merchant-center-misrepresentation/"/>
    <id>https://www.feedmanager.org/blog/merchant-center-misrepresentation/</id>
    <published>2026-09-15T08:00:00Z</published>
    <updated>2026-09-15T08:00:00Z</updated>
    <author><name>FeedManager Team</name></author>
    <summary>Why Google suspends stores for misrepresentation and disapproves products for mismatched prices — and a checklist to fix both before you request a review.</summary>
    <content type="html">&lt;p&gt;Two messages in Google Merchant Center make merchants nervous more than any other. One is a product issue —
&lt;em&gt;Mismatched value (page crawl): price&lt;/em&gt; — that turns up on dozens of products at once. The other is an account
issue: &lt;em&gt;Misrepresentation&lt;/em&gt;, and with it a suspension that takes every product off Shopping ads and free listings.&lt;/p&gt;
&lt;p&gt;They look different, but they come from the same question Google asks about every store: can a shopper trust what
they see? This guide explains what Google checks, why mismatches happen even when your page looks right, and a
checklist to work through before you ask Google for a review.&lt;/p&gt;
&lt;h2 id="what-misrepresentation-means"&gt;&lt;a class="toclink" href="#what-misrepresentation-means"&gt;What misrepresentation means&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Google's &lt;a href="https://support.google.com/merchants/answer/6150127"&gt;misrepresentation policy&lt;/a&gt; asks that listings are
"clear, honest, and provide information that users need to make informed decisions". It is not a rule about one
attribute in your feed; it is about your store as a business. The policy groups violations roughly like this:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;What Google looks for&lt;/th&gt;
&lt;th&gt;Typical cause in a real shop&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Unacceptable business practices&lt;/td&gt;
&lt;td&gt;False identity or business information, impersonation, not delivering&lt;/td&gt;
&lt;td&gt;No business name or address anywhere on the site&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dishonest pricing and transaction conditions&lt;/td&gt;
&lt;td&gt;Fees, conditions or payment terms that only appear late&lt;/td&gt;
&lt;td&gt;Shipping costs only shown in the last checkout step&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Unavailable offers&lt;/td&gt;
&lt;td&gt;Products you can't actually sell or ship&lt;/td&gt;
&lt;td&gt;Feed says in stock; the page says sold out&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The consequences depend on the category. Google says the severe ones — such as false identity or dishonest
pricing — lead to a suspension "upon detection and without prior warning", and accounts are reinstated "only in
compelling circumstances". For the others, "a warning will be issued at least 7 days prior to any suspension". That
week is the time to fix things.&lt;/p&gt;
&lt;h2 id="why-price-and-availability-mismatches-matter-as-much"&gt;&lt;a class="toclink" href="#why-price-and-availability-mismatches-matter-as-much"&gt;Why price and availability mismatches matter as much&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A mismatch means Google's crawler read another price or stock status on your landing page than the one in your
feed. Google's help page on &lt;a href="https://support.google.com/merchants/answer/14916353"&gt;mismatched prices&lt;/a&gt; is blunt:
"We continue to treat products with mismatches as critical errors that can lead to account suspension."&lt;/p&gt;
&lt;p&gt;Many accounts have &lt;a href="https://support.google.com/merchants/answer/3246284"&gt;automatic item updates&lt;/a&gt; switched on, so
Merchant Center quietly corrects the price from the page. That keeps the product running, but the mismatch is still
recorded. A store whose prices disagree with its feed every week looks like a store that can't be trusted — which
is exactly what misrepresentation is about.&lt;/p&gt;
&lt;p&gt;The same applies to &lt;a href="https://support.google.com/merchants/answer/6098335"&gt;availability&lt;/a&gt;: "The value that you submit
for the availability attribute in your product data and the information listed on your landing page must be the
same." One more detail from that page: don't mark products &lt;code&gt;out_of_stock&lt;/code&gt; to pause them — Google offers the &lt;code&gt;pause&lt;/code&gt;
attribute for that.&lt;/p&gt;
&lt;h2 id="the-six-usual-causes-of-a-mismatch"&gt;&lt;a class="toclink" href="#the-six-usual-causes-of-a-mismatch"&gt;The six usual causes of a mismatch&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When a merchant says "but the price on my page is right", it usually is — now. Google compared at a different
moment, read a different part of the page, or saw a different version of it. These causes cover most cases:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Cause&lt;/th&gt;
&lt;th&gt;What happens&lt;/th&gt;
&lt;th&gt;Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;VAT&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The feed sends the net price, the page shows the price with tax (or the reverse). The gap is exactly one VAT rate.&lt;/td&gt;
&lt;td&gt;In most countries Google wants the price with VAT. Fix it in the feed's price rule, not on the page.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sale timing&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The sale ended on the site at midnight; the feed still sends &lt;code&gt;sale_price&lt;/code&gt; until the next update — or the other way round.&lt;/td&gt;
&lt;td&gt;Send &lt;code&gt;sale_price_effective_date&lt;/code&gt; with the sale, in the right time zone, and update the feed soon after sales start and end.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Default variant&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Every variant links to the same page, which shows the default size or colour at another price.&lt;/td&gt;
&lt;td&gt;Link each variant to an address that preselects it, such as &lt;code&gt;?variant=…&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stale structured data&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The visible price is right, but the page's JSON-LD still has the old one, often from a cached template.&lt;/td&gt;
&lt;td&gt;Make the structured data come from the same price as the page. Google reads both.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Currency&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The page shows the visitor's local currency, or a currency switcher defaults to another one.&lt;/td&gt;
&lt;td&gt;Landing pages must list prices "in the same currency as submitted in your product data".&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Stock changed&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;The product sold out after the last feed update.&lt;/td&gt;
&lt;td&gt;Update the feed more often, or send stock changes as they happen.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;A seventh cause is less common but serious: a page that no longer exists. A product link that answers 404 is a
disapproval of its own.&lt;/p&gt;
&lt;h2 id="the-store-checklist"&gt;&lt;a class="toclink" href="#the-store-checklist"&gt;The store checklist&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Work through this before you request a review — and ideally before Google ever asks. Each line is something Google
can see on your site or in your account.&lt;/p&gt;
&lt;h3 id="who-you-are"&gt;&lt;a class="toclink" href="#who-you-are"&gt;Who you are&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Contact page&lt;/strong&gt;, linked from every page — the footer is where people (and Google) look.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A phone number&lt;/strong&gt; on the home or contact page.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;An email address at your own domain&lt;/strong&gt; — &lt;code&gt;info@yourshop.com&lt;/code&gt; is more convincing than a free mailbox.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Your business name and address&lt;/strong&gt;, on the contact page or in the footer, matching the business details in
  Merchant Center. Organization structured data helps.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The whole store on HTTPS&lt;/strong&gt;, with &lt;code&gt;http://&lt;/code&gt; redirecting to &lt;code&gt;https://&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="your-terms"&gt;&lt;a class="toclink" href="#your-terms"&gt;Your terms&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;A return and refund policy&lt;/strong&gt;, linked from the footer, that says how many days customers have, who pays for the
  return and how refunds are made. Set the same policy in Merchant Center.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Shipping costs and delivery times&lt;/strong&gt; on the site, matching the shipping settings in Merchant Center or the
  shipping you send in the feed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A privacy policy&lt;/strong&gt; wherever you collect personal data.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Payment options shown before payment&lt;/strong&gt;, and a checkout that works.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="your-claims-and-pages"&gt;&lt;a class="toclink" href="#your-claims-and-pages"&gt;Your claims and pages&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Remove claims you can't back up&lt;/strong&gt;: "best price", fake countdowns, badges you weren't awarded, reviews you can't
  show.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Product pages that agree with the feed&lt;/strong&gt;: price, sale price, currency and availability.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Product structured data&lt;/strong&gt; (JSON-LD) with price and availability on product pages, so Google can verify offers —
  see Google's &lt;a href="https://support.google.com/merchants/answer/6069143"&gt;structured data guide&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;robots.txt that lets Googlebot read&lt;/strong&gt; your home page and product pages. If Google can't read the page, it can't
  verify it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="then-ask-for-a-review"&gt;&lt;a class="toclink" href="#then-ask-for-a-review"&gt;Then ask for a review&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Google's page on &lt;a href="https://support.google.com/merchants/answer/13693195"&gt;warnings and suspensions&lt;/a&gt; describes the
review request. Google says account reviews "typically take 7 business days, but may take longer". Request a review
once everything above is done — repeated requests without changes don't speed anything up.&lt;/p&gt;
&lt;h2 id="find-mismatches-before-google-does"&gt;&lt;a class="toclink" href="#find-mismatches-before-google-does"&gt;Find mismatches before Google does&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Google's crawler checks your pages on its own schedule. You can check them on yours: take a sample of product pages,
open each one, and compare the price, sale price, currency and availability with what your feed sends for that
product.&lt;/p&gt;
&lt;p&gt;Two things make that comparison useful:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Compare with the feed's own row&lt;/strong&gt;, after your rules — not with the store's database. If a rule adds VAT or a
  sale price, the feed is what Google sees.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sample the products that matter&lt;/strong&gt;: the most viewed ones, and the ones whose price or stock just changed. That's
  where a mismatch costs the most and where it is most likely.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A tolerance helps too. Rounding differences of a cent are not what Google disapproves products for; a difference of
more than about 1% usually has a real cause from the table above.&lt;/p&gt;
&lt;h2 id="how-feedmanager-helps"&gt;&lt;a class="toclink" href="#how-feedmanager-helps"&gt;How FeedManager helps&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;FeedManager has three tools for this, built around the feeds it already publishes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="/page-checks/"&gt;Page Checks&lt;/a&gt;&lt;/strong&gt; (Standard and up) reads a daily sample of the product pages your Google Merchant
  Center, Microsoft and Meta feeds link to — 25 to 200 pages a day by plan, most viewed and recently changed products
  first — and compares each with the feed's own row after mapping and rules. A difference of more than 1%, another
  currency, "in stock" against "out of stock" or a missing page is reported with its likely cause. It reads only
  store domains you confirmed, within robots.txt, one page every three seconds.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="/page-checks/#store-trust"&gt;Store trust&lt;/a&gt;&lt;/strong&gt; checks the store weekly for the signals in the checklist above —
  HTTPS, contact page, phone, domain email, address, return, shipping and privacy policies, robots.txt and Product
  structured data — and explains each one.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="/merchant-center/"&gt;Merchant Center statuses&lt;/a&gt;&lt;/strong&gt; (Pro and up) shows Google's own verdict per product and the
  account issues it reports, with a plain-language checklist for misrepresentation, return policy, shipping and
  business details, and an alert when Google reports an account issue or approvals drop.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the issues Google reports are about feed data rather than your store — missing GTINs, invalid categories, image
problems — our &lt;a href="/blog/merchant-center-feed-errors/"&gt;guide to Merchant Center feed errors&lt;/a&gt; covers those.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Product images that sell in catalog ads: price and discount overlays that stay current</title>
    <link href="https://www.feedmanager.org/blog/catalog-ad-creatives-price-overlays/"/>
    <id>https://www.feedmanager.org/blog/catalog-ad-creatives-price-overlays/</id>
    <published>2026-09-08T08:00:00Z</published>
    <updated>2026-09-08T08:00:00Z</updated>
    <author><name>FeedManager Team</name></author>
    <summary>How to design product images for Meta, TikTok and Pinterest catalog ads — sizes, safe zones, discount badges — and how to keep the price on the picture right.</summary>
    <content type="html">&lt;p&gt;Open a catalog ad on Instagram and you see what every other shop sends: a product on a white or grey background,
cropped a little differently. The catalog is doing its job — the right product for the right person — but the
picture gives nobody a reason to stop. That's why merchants put things on the image: the discount, the old and the
new price, their logo, "Free shipping", a coupon code.&lt;/p&gt;
&lt;p&gt;Doing that for one hero product is a design task. Doing it for 5,000 products whose prices change every week is a
data task, and it has one trap that design tools don't see: the image goes out of date the moment the price does.&lt;/p&gt;
&lt;h2 id="why-plain-packshots-underperform-in-catalog-ads"&gt;&lt;a class="toclink" href="#why-plain-packshots-underperform-in-catalog-ads"&gt;Why plain packshots underperform in catalog ads&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A catalog ad — Meta's Advantage+ catalog ads, TikTok's catalog ads, Pinterest's shopping ads — is filled from your
product feed. The platform picks the products; your feed decides what they look like. With the plain photo, three
things are missing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The offer.&lt;/strong&gt; A 30% discount is the most persuasive fact about a product on sale, and it isn't in the picture.
  The platform may show the price in small text below the image, but the eye goes to the image.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The brand.&lt;/strong&gt; Packshots look the same whatever the shop. Your colours, fonts and logo make the ad yours before
  anyone reads the name.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The context.&lt;/strong&gt; "New arrival", "Back in stock", "Bestseller", "2 for 1": the reason this product is in front of
  this person right now.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Meta recognised the gap and added &lt;a href="https://searchengineland.com/meta-dynamic-overlays-advantage-catalog-ads-454657"&gt;dynamic overlays to Advantage+ catalog
ads&lt;/a&gt;: stickers with the price, a
struck-through price, the percentage off or free shipping, drawn by Meta from your catalog. They are a good start.
They are also Meta's style, not yours, limited to those few labels, and they exist only on Meta —
not on TikTok, Pinterest or in the emails your catalog feeds.&lt;/p&gt;
&lt;h2 id="what-to-put-on-the-image"&gt;&lt;a class="toclink" href="#what-to-put-on-the-image"&gt;What to put on the image&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Most catalog creatives are built from the same few pieces:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Element&lt;/th&gt;
&lt;th&gt;What it shows&lt;/th&gt;
&lt;th&gt;Watch out for&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Discount badge&lt;/td&gt;
&lt;td&gt;&lt;code&gt;-30%&lt;/code&gt;, &lt;code&gt;30% OFF&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Compute it from the prices; show it only when there is a real sale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price block&lt;/td&gt;
&lt;td&gt;New price large, old price struck through&lt;/td&gt;
&lt;td&gt;Use the currency format your shoppers read, e.g. &lt;code&gt;$1,249&lt;/code&gt; or &lt;code&gt;1.249 TL&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Logo or brand bar&lt;/td&gt;
&lt;td&gt;Who is selling&lt;/td&gt;
&lt;td&gt;A logo made for light backgrounds disappears on dark ones — have both&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Campaign line&lt;/td&gt;
&lt;td&gt;"Summer sale", "2 for 1", "Free shipping over $50"&lt;/td&gt;
&lt;td&gt;Shorter than you think: it is read in half a second&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coupon&lt;/td&gt;
&lt;td&gt;"10% off with WELCOME10"&lt;/td&gt;
&lt;td&gt;Only if the code works for every product in the ad&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lifecycle badge&lt;/td&gt;
&lt;td&gt;Back in stock, Bestseller, New arrival&lt;/td&gt;
&lt;td&gt;Tie it to data, not to a list someone typed&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Second photo&lt;/td&gt;
&lt;td&gt;Front and side, or the product and a detail&lt;/td&gt;
&lt;td&gt;Products with a single photo need a plan&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Which ones to use depends on the campaign:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Campaign&lt;/th&gt;
&lt;th&gt;On the image&lt;/th&gt;
&lt;th&gt;Products&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Seasonal sale&lt;/td&gt;
&lt;td&gt;Discount badge, old and new price, campaign line&lt;/td&gt;
&lt;td&gt;Products with a sale price running now&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Always-on retargeting&lt;/td&gt;
&lt;td&gt;Price, logo, maybe free shipping&lt;/td&gt;
&lt;td&gt;The whole catalog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bundle or "buy 2, pay 1"&lt;/td&gt;
&lt;td&gt;Offer in a coloured panel, logo&lt;/td&gt;
&lt;td&gt;The products the offer covers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Coupon campaign&lt;/td&gt;
&lt;td&gt;Code in a bottom bar&lt;/td&gt;
&lt;td&gt;The products the code works for&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Back in stock&lt;/td&gt;
&lt;td&gt;"Back in stock" badge, price&lt;/td&gt;
&lt;td&gt;Products that came back this week&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bestsellers&lt;/td&gt;
&lt;td&gt;"Bestseller" ribbon, rating&lt;/td&gt;
&lt;td&gt;The top products by sales&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;New arrivals&lt;/td&gt;
&lt;td&gt;"New" badge, collection line&lt;/td&gt;
&lt;td&gt;Products first seen in the last few weeks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lookbook&lt;/td&gt;
&lt;td&gt;Two photos of the same product, brand footer&lt;/td&gt;
&lt;td&gt;Products with a second image&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="sizes-and-safe-zones"&gt;&lt;a class="toclink" href="#sizes-and-safe-zones"&gt;Sizes and safe zones&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Design every template in three sizes. They share the width of 1080 pixels, so one set of fonts and elements works
in all of them:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Size&lt;/th&gt;
&lt;th&gt;Pixels&lt;/th&gt;
&lt;th&gt;Where it shows&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;1:1&lt;/td&gt;
&lt;td&gt;1080 × 1080&lt;/td&gt;
&lt;td&gt;Feeds, carousels, most catalog placements — the safe default&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;4:5&lt;/td&gt;
&lt;td&gt;1080 × 1350&lt;/td&gt;
&lt;td&gt;Mobile feeds on Facebook and Instagram, where a taller image takes more of the screen&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;9:16&lt;/td&gt;
&lt;td&gt;1080 × 1920&lt;/td&gt;
&lt;td&gt;Stories, Reels and TikTok, full screen&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The 9:16 size needs care. The app draws its own interface over the image: the account name and progress bar at
the top, the caption, the call to action and buttons at the bottom and down the right side. Anything you put there
may be hidden. The exact numbers differ between Meta and TikTok and change when the apps change, so leave a
generous margin: FeedManager's template builder marks a combined safe zone that covers both — the top 270 pixels,
the bottom 480 and the right 140 of a 1080 × 1920 image. Keep text and badges inside it; let the photo and the
background run to the edges.&lt;/p&gt;
&lt;p&gt;Pinterest &lt;a href="https://help.pinterest.com/en/business/article/pinterest-product-specs"&gt;recommends a 2:3 image&lt;/a&gt; (1000 ×
1500) and warns that images taller than 2:3 may be cut off in the feed. There, send 4:5 or 1:1, not 9:16.&lt;/p&gt;
&lt;p&gt;For the product photos themselves, the channels' minimums still apply: at least 500 × 500 pixels on
&lt;a href="https://ads.tiktok.com/help/article/best-practices-for-a-high-quality-catalog"&gt;TikTok&lt;/a&gt; and Meta. A photo that is
barely large enough will look soft once it fills half of a 1080-pixel canvas.&lt;/p&gt;
&lt;h2 id="the-real-problem-images-go-stale"&gt;&lt;a class="toclink" href="#the-real-problem-images-go-stale"&gt;The real problem: images go stale&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here is how it goes wrong. You design 800 sale images on Monday. On Wednesday the buyer lowers twenty prices. On
Sunday night the sale ends. Your catalog updates within hours — but the images still say −30% with Monday's
prices, and they keep saying it until someone designs them again.&lt;/p&gt;
&lt;p&gt;An ad that shows a different price from the product page is more than a lost click. Shoppers feel misled, and a
discount shown after the sale has ended is exactly the kind of claim consumer-protection rules care about.&lt;/p&gt;
&lt;p&gt;Three rules keep images true:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Draw the images from the product data.&lt;/strong&gt; The price on the image comes from the same price field as the feed,
   the discount from the same two prices, the title from the same title. Nothing is typed into a design tool.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Draw again when something the image shows changes.&lt;/strong&gt; A new price, a sale that starts or ends, a new photo,
   a changed brand colour. Products whose picture wouldn't change don't need a new image — drawing 5,000 images
   because three prices changed wastes time and storage.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Check at the last moment.&lt;/strong&gt; Between a price change and the new image there is always a gap. The feed should
   check, product by product, whether the stored image still shows what the product is now — and send the plain
   product photo when it doesn't. A plain photo is a missed opportunity; a wrong price is a problem.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;One more detail matters: &lt;strong&gt;give every new version of an image a new address.&lt;/strong&gt; Platforms cache images. If the new
picture replaces the old one at the same URL, some will keep showing the old one for days. A new URL is fetched
again at once.&lt;/p&gt;
&lt;h2 id="be-honest-with-the-discount"&gt;&lt;a class="toclink" href="#be-honest-with-the-discount"&gt;Be honest with the discount&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A discount on an image is a price claim, so do the arithmetic the careful way:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Compute it from the prices&lt;/strong&gt;, not from a campaign field someone filled in. If the regular price is 1,799 and
  the sale price 1,249, the discount is 30.57%.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Round down to a whole percent.&lt;/strong&gt; 30.57% is 30%, and 29.98% is 29% — never 30%. Rounding up promises more than
  the shopper gets.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Show no discount when there isn't one&lt;/strong&gt; — including a sale price that is less than 1% below the regular price,
  or a sale whose end date has passed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Show the sale price only during the sale.&lt;/strong&gt; If your feed has &lt;code&gt;sale_price_effective_date&lt;/code&gt;, the image should
  follow it.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;In the EU and in Türkiye, rules also govern which earlier price a reduction may be measured against. An image can
only be as honest as the prices in your feed, so check those with whoever advises you on pricing.&lt;/p&gt;
&lt;h2 id="where-designed-images-work-and-where-they-dont"&gt;&lt;a class="toclink" href="#where-designed-images-work-and-where-they-dont"&gt;Where designed images work — and where they don't&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Meta, TikTok and Pinterest&lt;/strong&gt; are where designed images belong. Point the ad feed's &lt;code&gt;image_link&lt;/code&gt; at them, or send
them as additional images where the platform lets you choose. If the same Meta catalog also runs a Facebook or
Instagram shop, keep the clean photo there — shop listings expect the product alone — and use a separate catalog
or feed for ads. Our &lt;a href="/blog/meta-product-catalog-feed/"&gt;Meta catalog guide&lt;/a&gt; covers the feed itself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Google Merchant Center&lt;/strong&gt; is not the place for them. Google's &lt;a href="https://support.google.com/merchants/answer/6324350"&gt;image
requirements&lt;/a&gt; ask for "an unobstructed, clean view of the
item" and list prices, calls to action, promotional words, watermarks and added logos among the things the main
image must not have. Its guidelines for
&lt;a href="https://support.google.com/merchants/answer/6324370"&gt;additional images&lt;/a&gt; and
&lt;a href="https://support.google.com/merchants/answer/9103186"&gt;lifestyle images&lt;/a&gt; ask for clean images too. A designed image
in a Google feed ends as the "promotional overlay" disapproval described in our
&lt;a href="/blog/merchant-center-feed-errors/"&gt;Merchant Center errors guide&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Email&lt;/strong&gt; is the quiet winner. Tools like Klaviyo fill product blocks and flows — back in stock, browse
abandonment — from a catalog feed. Send the designed image as that feed's image and every product block shows the
current price and badge, drawn the same way as your ads.&lt;/p&gt;
&lt;h2 id="how-feedmanager-does-it"&gt;&lt;a class="toclink" href="#how-feedmanager-does-it"&gt;How FeedManager does it&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;FeedManager's &lt;a href="/creative-studio/"&gt;Creative Studio&lt;/a&gt; turns product data into these images, on the Enterprise plan.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Templates.&lt;/strong&gt; A &lt;a href="/creative-studio/#gallery"&gt;gallery&lt;/a&gt; of 20 ready-made templates — discount strips, price
  cards, coupon banners, two-photo lookbooks, back in stock, bestseller and new arrival — each laid out for 1:1,
  4:5 and 9:16, with English and Turkish default texts. Use them as they are, or customize them in the builder,
  which shows the real rendered image, marks the 9:16 safe zone and adapts a 1:1 layout to the other sizes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A &lt;a href="/glossary/#brand-kit"&gt;brand kit&lt;/a&gt;.&lt;/strong&gt; Your colours, fonts, logos and price format, read by every template,
  so a gallery template looks like your own without editing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A &lt;a href="/glossary/#creative-set"&gt;creative set&lt;/a&gt;.&lt;/strong&gt; A template, your campaign texts, a product selection (the same
  conditions as feed filters) and the sizes. It draws one image per product and size, and draws again
  &lt;a href="/creative-studio/#always-current"&gt;only what changed&lt;/a&gt;: after syncs, when a sale starts or ends, when the brand kit
  changes. Discounts are computed from the prices and rounded down.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="/creative-studio/#in-feeds"&gt;In feeds&lt;/a&gt;&lt;/strong&gt;, a placeholder such as &lt;code&gt;{creative.summer_sale.4x5}&lt;/code&gt; writes the image's
  address into any field. The feed checks every product: if the image no longer shows what the product is now, it
  writes the product photo instead — or nothing, if you prefer — until the new image is drawn. Feeds that use a set
  are built after its images. A Google Merchant Center feed that maps a designed image to &lt;code&gt;image_link&lt;/code&gt; shows a
  warning.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Delivery.&lt;/strong&gt; Images are served from &lt;code&gt;cdn.feedmanager.org&lt;/code&gt;, each version under its own address, and can be
  downloaded as a ZIP or a list of addresses.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;There is no AI in Creative Studio: every image is drawn from a template and your data, the same way every time. The
gallery can be previewed with your own products on every plan; drawing images for a whole catalog is part of
Enterprise.&lt;/p&gt;
&lt;p&gt;If your catalog feed is still the plain export from your store, start there — our
&lt;a href="/blog/what-is-a-product-feed/"&gt;guide to product feeds&lt;/a&gt; covers the basics. Once the data is right, the images can
follow it.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Product segments that update themselves: best sellers, zombies and price drops</title>
    <link href="https://www.feedmanager.org/blog/product-segments-dynamic-tags/"/>
    <id>https://www.feedmanager.org/blog/product-segments-dynamic-tags/</id>
    <published>2026-09-01T08:00:00Z</published>
    <updated>2026-09-01T08:00:00Z</updated>
    <author><name>FeedManager Team</name></author>
    <summary>Seven product segments worth building for shopping and catalog ads, the thresholds that make them work, and how to keep them up to date without spreadsheets.</summary>
    <content type="html">&lt;p&gt;Every shopping account eventually wants the same thing: spend more on the products that sell, less on the ones
that don't, and react when something changes — a price drop, a restock, the last few units. All of that starts
with knowing which products are which. That is segmentation, and the hard part is not defining the segments. It is
keeping them true.&lt;/p&gt;
&lt;p&gt;A list of "best sellers" someone exported in March is wrong by May. A segment that updates itself is a different
kind of tool: it becomes part of the feed, and the campaigns built on it stay right without anyone touching them.&lt;/p&gt;
&lt;h2 id="static-and-rule-based-segments"&gt;&lt;a class="toclink" href="#static-and-rule-based-segments"&gt;Static and rule-based segments&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There are two kinds, and you need both.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Static segments&lt;/strong&gt; hold decisions only people make: the products in a Black Friday campaign, homepage picks, a
new collection the buyer is proud of. Nothing in the data says which products those are, so someone chooses them —
one by one, or in bulk from a filtered list — and they stay put until someone changes them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rule-based (dynamic) segments&lt;/strong&gt; hold facts: what sells, what is running out, what just got cheaper. A rule
describes the segment, and products enter and leave it as the data changes. Nobody maintains the list; the rule
does.&lt;/p&gt;
&lt;p&gt;The mistake is to maintain facts by hand. It works for a week.&lt;/p&gt;
&lt;h2 id="seven-segments-that-pay-off"&gt;&lt;a class="toclink" href="#seven-segments-that-pay-off"&gt;Seven segments that pay off&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;These are the segments that most often change what you do in an ad account. The thresholds are good defaults —
adjust them to your catalog, but keep a minimum in every rule.&lt;/p&gt;
&lt;h3 id="best-sellers"&gt;&lt;a class="toclink" href="#best-sellers"&gt;Best sellers&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The top 10% of products by purchases over the last 30 days, with at least one purchase. A percentage adapts as
the catalog grows; a fixed "20 sales" does not. Keep ties: if the cut falls between products with the same number
of purchases, include all of them, or the segment changes for no reason.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use:&lt;/strong&gt; a higher target or bid, their own campaign, the first products in a catalog ad.&lt;/p&gt;
&lt;h3 id="zombie-products"&gt;&lt;a class="toclink" href="#zombie-products"&gt;Zombie products&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In stock for more than 30 days, at most 5 views and no purchases. The "30 days" matters: without it, every new
product looks like a zombie in its first week.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use:&lt;/strong&gt; a low-bid campaign, or leave them out of paid feeds entirely and look at the listings — the title,
images or price is usually the problem.&lt;/p&gt;
&lt;h3 id="viewed-not-selling"&gt;&lt;a class="toclink" href="#viewed-not-selling"&gt;Viewed, not selling&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Products with as many views as your busiest quarter of products — and at least 20 — but no purchases. People
find them and decide not to buy. This segment is rarely an ads problem and often a price or product-page problem,
which is exactly why it is worth seeing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use:&lt;/strong&gt; a review list for the merchandising team; lower bids until something changes.&lt;/p&gt;
&lt;h3 id="price-drop"&gt;&lt;a class="toclink" href="#price-drop"&gt;Price drop&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In stock, and the price shoppers pay fell by 5% or more in the last 7 days. "The price shoppers pay" means the
sale price when there is one — a sale that starts is a price drop.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use:&lt;/strong&gt; a retargeting product set for people who viewed the product before, or a promotion label.&lt;/p&gt;
&lt;h3 id="back-in-stock"&gt;&lt;a class="toclink" href="#back-in-stock"&gt;Back in stock&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Out of stock before, in stock again in the last 7 days. The people who wanted it the first time are the best
audience you have.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use:&lt;/strong&gt; retargeting, and a nudge to lift bids that were cut while the product was unavailable.&lt;/p&gt;
&lt;h3 id="low-stock"&gt;&lt;a class="toclink" href="#low-stock"&gt;Low stock&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In stock with 1 to 5 units left. There is little point in paying for clicks on the last unit.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use:&lt;/strong&gt; lower bids, or leave the products out of price comparison sites until they are restocked. The mirror
segment, &lt;em&gt;restocked&lt;/em&gt; — stock up by at least 5 units and 25% in the last 7 days — tells you when to bring them
back.&lt;/p&gt;
&lt;h3 id="new-arrivals"&gt;&lt;a class="toclink" href="#new-arrivals"&gt;New arrivals&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;First seen in the last 30 days and in stock — but not the products that came with your very first import, or the
whole catalog counts as "new" for a month.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Use:&lt;/strong&gt; a separate campaign with its own budget, since new products have no history for smart bidding to learn
from.&lt;/p&gt;
&lt;h2 id="getting-segments-into-the-channels"&gt;&lt;a class="toclink" href="#getting-segments-into-the-channels"&gt;Getting segments into the channels&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Channels don't know your segments; they know your feed. Two mechanisms carry segments into it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Custom labels.&lt;/strong&gt; Google Shopping and Performance Max campaigns can split listing groups by &lt;code&gt;custom_label_0&lt;/code&gt; to
&lt;code&gt;custom_label_4&lt;/code&gt;. Write a segment into a label — &lt;code&gt;custom_label_0 = best_seller&lt;/code&gt; — and the campaign can bid on it.
Meta's product sets can filter on custom labels too, so the same label becomes a product set for a catalog ad;
other catalog channels offer similar filters, so check which fields yours accepts. Our
&lt;a href="/blog/custom-labels-google-shopping/"&gt;guide to custom labels&lt;/a&gt; covers label schemes in detail.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Feed filters.&lt;/strong&gt; Some segments shouldn't be advertised at all. Rather than excluding them in every campaign, leave
them out of the feed: "not in Zombie products", "not in Low stock" for a price comparison feed. A product that
leaves the segment comes back with the next build.&lt;/p&gt;
&lt;h2 id="pitfalls"&gt;&lt;a class="toclink" href="#pitfalls"&gt;Pitfalls&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Too little data.&lt;/strong&gt; Three views and no purchase isn't a zombie; it's a product nobody has seen yet. Give every
  performance rule a minimum number of views or purchases.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Segments that flap.&lt;/strong&gt; A product that enters and leaves "best sellers" every other day unsettles bidding.
  Recalculate daily rather than hourly, use a 30-day window, and keep ties.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;A label that changes meaning.&lt;/strong&gt; Members of a segment should change; what the label means should not. If
  &lt;code&gt;custom_label_0&lt;/code&gt; meant margin last month and best sellers this month, every campaign built on it is now wrong.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analytics that don't match the feed.&lt;/strong&gt; Performance segments only work if the item ids in Google Analytics
  match your products — by id, SKU, item group or GTIN. Check the match rate before trusting a zombie list.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;No history, no change.&lt;/strong&gt; "Price drop" needs the price before. A tool can only see changes from the moment it
  starts comparing; it can't know what happened earlier.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="how-feedmanager-does-it"&gt;&lt;a class="toclink" href="#how-feedmanager-does-it"&gt;How FeedManager does it&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;FeedManager calls segments &lt;a href="/product-tags/"&gt;product tags&lt;/a&gt;. A &lt;a href="/glossary/#product-tag"&gt;static tag&lt;/a&gt; is set on a
product page, in bulk on selected products or on every product matching the list's filters, through the Product
API, or copied once from your Shopify or WooCommerce tags. A &lt;a href="/glossary/#dynamic-tag"&gt;dynamic tag&lt;/a&gt; has a rule —
the same conditions as feed filters, plus an optional ranking such as "top 10% by purchases", with ties kept — and
runs every hour, six hours, day or week, and optionally two minutes after a sync. It never runs more often than
your plan syncs its sources. A live preview shows what the rule would tag before you save it.&lt;/p&gt;
&lt;p&gt;Twenty-five &lt;strong&gt;suggested tags&lt;/strong&gt; — the seven above and eighteen more, such as top revenue, trending up, high stock,
big discounts, top rated, low margin, below market price and search winners — are offered on the Tags page when your
data supports them, each with how many products it would tag now. Nothing is created until you add it, and every
rule can be edited afterwards. The performance ones need Google Analytics numbers (best sellers and top revenue also
work with Shopify Analytics sales), the market-price ones Google Merchant Center and the search ones Google Search
Console, which come with Pro and above; the rest work on every plan.&lt;/p&gt;
&lt;p&gt;For price, stock and availability changes, each sync records the last change it saw on each product. That starts
with your first syncs — there is no history from before — and the time of a change is as precise as your sync
interval.&lt;/p&gt;
&lt;p&gt;In feeds, "has the tag" and "doesn't have the tag" work in filters and in rule conditions, so a rule can set
&lt;code&gt;custom_label_0&lt;/code&gt; to &lt;code&gt;best_seller&lt;/code&gt; for every product tagged &lt;em&gt;Best sellers&lt;/em&gt;, and &lt;code&gt;{tags}&lt;/code&gt; writes a product's tag
names into a field. Feeds that use tags and rebuild after syncs are rebuilt two minutes after tags change. How
many tags each plan includes is on the &lt;a href="/pricing/"&gt;pricing page&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Segments are the cheapest structure you can add to a catalog: no new creative, no new budget. The work is in
keeping them true — and that is work a rule does better than a spreadsheet.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Google Shopping feeds for Ticimax, T-Soft, ikas and IdeaSoft stores</title>
    <link href="https://www.feedmanager.org/blog/google-shopping-turkish-platforms/"/>
    <id>https://www.feedmanager.org/blog/google-shopping-turkish-platforms/</id>
    <published>2026-08-25T08:00:00Z</published>
    <updated>2026-08-25T08:00:00Z</updated>
    <author><name>FeedManager Team</name></author>
    <summary>How to get a valid Merchant Center feed out of the Turkish store platforms: XML exports versus APIs, KDV, comma decimals, Turkish characters and variants.</summary>
    <content type="html">&lt;p&gt;Merchants running on Ticimax, T-Soft, ikas or IdeaSoft have the same goal as everyone else — a file Merchant
Center accepts — but they reach it from a different starting point. These platforms are strong at running a
Turkish shop and less concerned with the details of Google's specification. Here is what actually needs doing on
each, and the handful of data problems that account for most rejected products.&lt;/p&gt;
&lt;h2 id="two-routes-out-of-every-platform"&gt;&lt;a class="toclink" href="#two-routes-out-of-every-platform"&gt;Two routes out of every platform&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;The XML export.&lt;/strong&gt; Every one of these platforms can publish a product XML — often marketed as an "XML entegrasyon"
or marketplace export. It is a URL you can hand to any feed tool, it needs no credentials, and it is available on
every price plan. The catch is that the fields are whatever the template gives you, and the template can change
without warning.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The API.&lt;/strong&gt; Each platform also has an &lt;a href="/integrations/"&gt;admin API&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ticimax&lt;/strong&gt; — a web service, opened with an authorisation code (&lt;em&gt;Yetki Kodu&lt;/em&gt;) you generate in the panel.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;T-Soft&lt;/strong&gt; — a REST API, with a web service user and password you create in the panel.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;ikas&lt;/strong&gt; — an admin API over GraphQL, using the client ID and secret of a private app.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;IdeaSoft&lt;/strong&gt; — an admin API where you create an API app and approve access once (OAuth2).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The API route gives you variants, stock and images as structured data instead of whatever the XML template
happened to include, and it does not break when someone edits the export template. It costs one set-up step:
creating read-only credentials in the shop's panel.&lt;/p&gt;
&lt;p&gt;Either route works. The decision is about how much the export already gives you, and how much you mind it changing
under you.&lt;/p&gt;
&lt;h2 id="the-five-problems-that-cost-you-products"&gt;&lt;a class="toclink" href="#the-five-problems-that-cost-you-products"&gt;The five problems that cost you products&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="1-comma-decimals"&gt;&lt;a class="toclink" href="#1-comma-decimals"&gt;1. Comma decimals&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Turkish exports write prices as &lt;code&gt;1.299,90&lt;/code&gt; — a full stop for thousands, a comma for decimals. Google needs
&lt;code&gt;1299.90 TRY&lt;/code&gt;. A feed tool that assumes English number formatting will read that as one thousand two hundred
ninety-nine, or fail outright.&lt;/p&gt;
&lt;p&gt;Set the number format explicitly for the source rather than hoping it is detected. The same applies to weights and
dimensions.&lt;/p&gt;
&lt;h3 id="2-kdv"&gt;&lt;a class="toclink" href="#2-kdv"&gt;2. KDV&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Many exports contain the net price, or both net and gross under names that are not obvious (&lt;code&gt;fiyat&lt;/code&gt;,
&lt;code&gt;satisFiyati&lt;/code&gt;, &lt;code&gt;kdvDahilFiyat&lt;/code&gt;). Google compares the feed price with the price on the landing page, and the landing
page shows the price with KDV.&lt;/p&gt;
&lt;p&gt;Send the price with KDV. If the export only has the net figure, add the rate with a rule — &lt;code&gt;price × 1.20&lt;/code&gt;, rounded
— and make sure the rate matches the product's category, since not everything is 20%.&lt;/p&gt;
&lt;h3 id="3-turkish-characters"&gt;&lt;a class="toclink" href="#3-turkish-characters"&gt;3. Turkish characters&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If product names arrive as &lt;code&gt;Ãœrÿn&lt;/code&gt; or &lt;code&gt;KoÅŸu&lt;/code&gt;, the export is not being read as UTF-8. Sometimes the file is
genuinely in another encoding; sometimes it is UTF-8 with the wrong declaration. Either way, set the encoding for
the source explicitly, and check a product with &lt;code&gt;ı&lt;/code&gt;, &lt;code&gt;ş&lt;/code&gt;, &lt;code&gt;ğ&lt;/code&gt;, &lt;code&gt;İ&lt;/code&gt; in its name before you publish.&lt;/p&gt;
&lt;p&gt;The same characters matter in the other direction: &lt;code&gt;İstanbul&lt;/code&gt; lower-cased carelessly becomes &lt;code&gt;i̇stanbul&lt;/code&gt;. If a rule
changes case, it must know the language.&lt;/p&gt;
&lt;h3 id="4-relative-links-and-images"&gt;&lt;a class="toclink" href="#4-relative-links-and-images"&gt;4. Relative links and images&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Exports frequently contain &lt;code&gt;/urun/kosu-ayakkabisi&lt;/code&gt; or &lt;code&gt;/images/1042.jpg&lt;/code&gt; instead of full addresses. Google needs
absolute URLs beginning with &lt;code&gt;https://&lt;/code&gt;. Make the store's own address the base and prepend it — once, as a rule,
for every product.&lt;/p&gt;
&lt;p&gt;While you are there, check what the image URL actually returns. Thumbnails are a common trap: the export links to
a 200-pixel preview while the product page shows a large image. Google is raising its minimum to 500 × 500 pixels
with enforcement starting 31 January 2027.&lt;/p&gt;
&lt;h3 id="5-variants-in-one-row"&gt;&lt;a class="toclink" href="#5-variants-in-one-row"&gt;5. Variants in one row&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Some exports list a product once with &lt;code&gt;Beden: 40, 41, 42&lt;/code&gt; in a field. Google wants each size as its own item, with
its own id, availability and price, grouped by &lt;code&gt;item_group_id&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If the export cannot produce one row per variant, that is the strongest argument for using the platform's API,
where variants come through as separate records with their own stock.&lt;/p&gt;
&lt;h2 id="what-a-working-set-up-looks-like"&gt;&lt;a class="toclink" href="#what-a-working-set-up-looks-like"&gt;What a working set-up looks like&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For a typical Turkish shop advertising in Türkiye:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Connect the source&lt;/strong&gt; — the XML export URL, or the platform's API with read-only credentials.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Set encoding and number format&lt;/strong&gt; explicitly: UTF-8, comma decimal separator.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Map the fields&lt;/strong&gt; to the standard schema: id, title, description, link, image, price, availability, brand,
   GTIN where it exists, &lt;code&gt;item_group_id&lt;/code&gt; for variants.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Add rules&lt;/strong&gt;: make links and images absolute; add KDV if prices are net; build titles as
   &lt;code&gt;{brand} {title} – {color}, {size}&lt;/code&gt;; map your categories to Google's taxonomy with a lookup table.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Filter&lt;/strong&gt;: leave out products with no image, no price, or zero stock.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Publish&lt;/strong&gt; the Google feed, register its URL in Merchant Center, and set the fetch to daily or more often.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rebuild on a schedule&lt;/strong&gt; that matches how fast your stock moves — hourly is realistic for a busy shop.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Add a second feed for &lt;a href="/channels/#meta"&gt;Meta&lt;/a&gt; from the same catalog when you need it; the work above is not repeated.&lt;/p&gt;
&lt;h2 id="selling-abroad"&gt;&lt;a class="toclink" href="#selling-abroad"&gt;Selling abroad&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Shops advertising outside Türkiye hit two extra issues. &lt;strong&gt;Currency&lt;/strong&gt;: each target country needs prices in the
currency that country's visitors see on your site, which usually means one feed per market. &lt;strong&gt;Shipping and
returns&lt;/strong&gt;: configured in Merchant Center rather than in the feed, but they must be true for the country you are
targeting, or products are disapproved for reasons that look unrelated to the data.&lt;/p&gt;
&lt;p&gt;None of this is exotic. It is the same specification everyone else follows, plus four local details — decimals,
KDV, encoding and variants — that are easy to fix once and tiresome to fix repeatedly. Fix them in the rules that
build the feed, and the next export from the shop cannot undo the work.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Custom labels in Google Shopping: segment by margin, season and sales</title>
    <link href="https://www.feedmanager.org/blog/custom-labels-google-shopping/"/>
    <id>https://www.feedmanager.org/blog/custom-labels-google-shopping/</id>
    <published>2026-08-18T08:00:00Z</published>
    <updated>2026-08-18T08:00:00Z</updated>
    <author><name>FeedManager Team</name></author>
    <summary>Custom labels decide how you can structure and bid on Shopping campaigns. Five schemes that work, and how to fill them from margin, stock and GA4 data.</summary>
    <content type="html">&lt;p&gt;Shopping campaigns give you little control over matching, so the control you do have — how the catalog is divided
into groups you can bid on — matters disproportionately. Custom labels are that control. Five fields,
&lt;code&gt;custom_label_0&lt;/code&gt; to &lt;code&gt;custom_label_4&lt;/code&gt;, invisible to shoppers, entirely yours to define.&lt;/p&gt;
&lt;p&gt;Most accounts either ignore them or fill them with something arbitrary once and never revisit it. Here is how to
use them deliberately.&lt;/p&gt;
&lt;h2 id="the-rule-that-makes-labels-work"&gt;&lt;a class="toclink" href="#the-rule-that-makes-labels-work"&gt;The rule that makes labels work&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;One label, one dimension, forever.&lt;/strong&gt; Decide that &lt;code&gt;custom_label_0&lt;/code&gt; means margin band and it must always mean
margin band. Campaigns, bidding rules and reports are built on these values; redefining a label silently changes
what every one of them is doing.&lt;/p&gt;
&lt;p&gt;Write the scheme down somewhere your future self and your agency will find it.&lt;/p&gt;
&lt;h2 id="five-schemes-worth-using"&gt;&lt;a class="toclink" href="#five-schemes-worth-using"&gt;Five schemes worth using&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="custom_label_0-margin-band"&gt;&lt;a class="toclink" href="#custom_label_0-margin-band"&gt;custom_label_0 — margin band&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The single most useful segmentation, because it turns "return on ad spend" into something you can act on.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;high-margin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;above 40% contribution&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;mid-margin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;20–40%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;low-margin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;under 20%&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;no-margin&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;do not advertise&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Bid more where the margin absorbs it. If cost data is not in the shop, a proxy — price band, or brand-owned versus
resale — is still better than nothing.&lt;/p&gt;
&lt;h3 id="custom_label_1-stock-cover"&gt;&lt;a class="toclink" href="#custom_label_1-stock-cover"&gt;custom_label_1 — stock cover&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Advertising a product you are about to run out of wastes money; so does ignoring the stock you must clear.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;clearance&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;more than 120 days of cover&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;healthy&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;20–120 days&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;low-stock&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;under 20 days&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h3 id="custom_label_2-price-band"&gt;&lt;a class="toclink" href="#custom_label_2-price-band"&gt;custom_label_2 — price band&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Useful because shopper behaviour and competition differ sharply by price: &lt;code&gt;under-25&lt;/code&gt;, &lt;code&gt;25-75&lt;/code&gt;, &lt;code&gt;75-200&lt;/code&gt;,
&lt;code&gt;over-200&lt;/code&gt;. Bands also make reports readable at a glance.&lt;/p&gt;
&lt;h3 id="custom_label_3-season-or-collection"&gt;&lt;a class="toclink" href="#custom_label_3-season-or-collection"&gt;custom_label_3 — season or collection&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;spring-summer-2026&lt;/code&gt;, &lt;code&gt;winter&lt;/code&gt;, &lt;code&gt;all-year&lt;/code&gt;, &lt;code&gt;christmas&lt;/code&gt;. Seasonal products need budget before the season, not
during it, and a label is how you pull that lever early.&lt;/p&gt;
&lt;h3 id="custom_label_4-performance"&gt;&lt;a class="toclink" href="#custom_label_4-performance"&gt;custom_label_4 — performance&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The one that should be recalculated from data rather than typed: &lt;code&gt;bestseller&lt;/code&gt;, &lt;code&gt;steady&lt;/code&gt;, &lt;code&gt;slow&lt;/code&gt;, &lt;code&gt;never-sold&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="filling-the-performance-label-from-ga4"&gt;&lt;a class="toclink" href="#filling-the-performance-label-from-ga4"&gt;Filling the performance label from GA4&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;"Best-seller" is a fact, not an opinion, and it changes every month. If your feed tool can read Google Analytics 4,
the label can be derived instead of maintained.&lt;/p&gt;
&lt;p&gt;The logic is simple:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;purchases in the last 30 days ≥ 20 → &lt;code&gt;bestseller&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;purchases ≥ 5 → &lt;code&gt;steady&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;purchases ≥ 1 → &lt;code&gt;slow&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;otherwise, and if the product has had more than 200 views → &lt;code&gt;never-sold&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;That last group is the interesting one: products people look at and do not buy. Usually the price, the images or
the description is the problem, and the label makes them easy to pull out and look at.&lt;/p&gt;
&lt;p&gt;In FeedManager this is a &lt;a href="/integrations/#google-analytics"&gt;connection and a rule&lt;/a&gt;. Connect Google Analytics 4 with Sign in with Google, pick the
property, choose which field matches products (the item id, SKU, item group or GTIN), and the per-product numbers —
views, list clicks, add-to-carts, purchases and revenue for the last 7, 30 or 90 days — become available to rules
like any other field. The rule then writes &lt;code&gt;custom_label_4&lt;/code&gt;, and every rebuild recalculates it.&lt;/p&gt;
&lt;h2 id="using-the-labels-once-they-exist"&gt;&lt;a class="toclink" href="#using-the-labels-once-they-exist"&gt;Using the labels once they exist&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Campaign structure.&lt;/strong&gt; Split campaigns or ad groups by &lt;code&gt;custom_label_0&lt;/code&gt; so high-margin products can carry a
higher target. Give clearance its own campaign with a deliberately generous bid until the stock is gone.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Negative segmentation.&lt;/strong&gt; Put &lt;code&gt;no-margin&lt;/code&gt; and &lt;code&gt;never-sold&lt;/code&gt; into a campaign you pause, or filter them out of the
feed entirely. There is no reason to pay for clicks on products you do not want to sell.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Seasonal timing.&lt;/strong&gt; Two weeks before the season, raise budgets on the season label. Afterwards, move the same
products to clearance.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Reporting.&lt;/strong&gt; The fastest way to explain Shopping performance to a finance team is a table by margin band and
price band. Both come free once the labels exist.&lt;/p&gt;
&lt;h2 id="keeping-the-values-honest"&gt;&lt;a class="toclink" href="#keeping-the-values-honest"&gt;Keeping the values honest&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Recalculate on a schedule.&lt;/strong&gt; Margin and stock change daily; performance changes weekly. Labels derived from
  those numbers should be rebuilt with the feed, not updated by hand.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Use few values.&lt;/strong&gt; Four or five per label. Fifteen values produce groups too small to bid on.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Never leave a label empty.&lt;/strong&gt; Every product should have a value, even if it is &lt;code&gt;unknown&lt;/code&gt; — otherwise campaign
  filters silently skip it.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Do not encode two things in one label.&lt;/strong&gt; &lt;code&gt;high-margin-winter&lt;/code&gt; is a trap: you cannot filter on either part.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Watch for value drift.&lt;/strong&gt; If a label's distribution shifts suddenly, the data behind it changed, not the
  catalog.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Labels are the cheapest structure you can add to a Shopping account: no new creative, no new budget, and they turn
one undifferentiated catalog into segments you can actually manage. The work is not in the ads — it is in making
the feed carry the numbers you already have.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Product title optimization for Google Shopping: 10 rules that work</title>
    <link href="https://www.feedmanager.org/blog/product-title-optimization/"/>
    <id>https://www.feedmanager.org/blog/product-title-optimization/</id>
    <published>2026-08-11T08:00:00Z</published>
    <updated>2026-08-11T08:00:00Z</updated>
    <author><name>FeedManager Team</name></author>
    <summary>Titles decide which searches your products match. Ten rules for writing them at scale, with the structures that work per category and what to avoid.</summary>
    <content type="html">&lt;p&gt;In Shopping campaigns you do not choose keywords; the channel matches your product to queries. The title is the
most direct influence you have over that matching, and it is also the line shoppers read first. Getting it right at
scale is one of the highest-value things a feed setup can do.&lt;/p&gt;
&lt;p&gt;Here are ten rules that hold up across catalogs, and how to apply them to thousands of products without editing
anything by hand.&lt;/p&gt;
&lt;h2 id="1-front-load-what-identifies-the-product"&gt;&lt;a class="toclink" href="#1-front-load-what-identifies-the-product"&gt;1. Front-load what identifies the product&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The pattern that works almost everywhere:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Brand + Product type + Key attributes (model, colour, size, capacity)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;em&gt;Northwind Trail Runner GTX Waterproof Running Shoe – Slate, 42&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Shoppers scan the first few words, and cropping happens from the right. Anything essential that lands after
character 70 might as well not be there.&lt;/p&gt;
&lt;h2 id="2-use-the-words-shoppers-use"&gt;&lt;a class="toclink" href="#2-use-the-words-shoppers-use"&gt;2. Use the words shoppers use&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Your shop calls it a "Softshell Jacke Serie 3"; people search for "men's waterproof softshell jacket". The product
type in the title should be the words a stranger would use. Category names from your own navigation are usually
close but not identical — check the search terms your campaigns already match.&lt;/p&gt;
&lt;h2 id="3-match-the-structure-to-the-category"&gt;&lt;a class="toclink" href="#3-match-the-structure-to-the-category"&gt;3. Match the structure to the category&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Structure that works&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Fashion&lt;/td&gt;
&lt;td&gt;Brand + Gender + Product type + Colour + Size + Material&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Electronics&lt;/td&gt;
&lt;td&gt;Brand + Model + Product type + Key specification (capacity, size)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Consumables&lt;/td&gt;
&lt;td&gt;Brand + Product + Variant + Quantity or weight&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Home &amp;amp; furniture&lt;/td&gt;
&lt;td&gt;Brand + Product type + Material + Dimensions + Colour&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Spare parts&lt;/td&gt;
&lt;td&gt;Brand + Part type + Compatible model + Part number&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;The instinct to use one template for everything is understandable and wrong. A capacity belongs in a phone's
title; a size belongs in a shoe's.&lt;/p&gt;
&lt;h2 id="4-say-the-quantity-when-quantity-is-how-people-buy"&gt;&lt;a class="toclink" href="#4-say-the-quantity-when-quantity-is-how-people-buy"&gt;4. Say the quantity when quantity is how people buy&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;"Coffee beans 1 kg" and "Screws M6 × 40, pack of 100" match searches that "Coffee beans" never will. For
consumables and anything sold in multiples, the number is part of the product.&lt;/p&gt;
&lt;h2 id="5-keep-promotional-language-out"&gt;&lt;a class="toclink" href="#5-keep-promotional-language-out"&gt;5. Keep promotional language out&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;No "SALE", no "Free shipping", no "★ Best price ★", no emoji. Besides being against Google's rules, the space is
worth more as an attribute. Promotions belong in the sale price field and in promotion feeds, where they can
actually show as a strike-through.&lt;/p&gt;
&lt;h2 id="6-no-shouting-no-keyword-stuffing"&gt;&lt;a class="toclink" href="#6-no-shouting-no-keyword-stuffing"&gt;6. No shouting, no keyword stuffing&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Capitalise normally — brand names and proper nouns only. Repeating a term three times does not help matching and
makes the ad look like spam next to competitors who wrote a clean title.&lt;/p&gt;
&lt;h2 id="7-build-titles-from-fields-not-from-prose"&gt;&lt;a class="toclink" href="#7-build-titles-from-fields-not-from-prose"&gt;7. Build titles from fields, not from prose&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is the rule that makes the other nine practical. Instead of editing titles, define a &lt;a href="/features/#rules"&gt;template&lt;/a&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{brand} {title} – {color}, {size}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;and let it run on every product. When a field is empty, a fallback keeps the title clean:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{brand} {title}{ – |color}{, |size}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Every product then follows the same pattern, new products get it automatically, and changing the pattern is one
edit rather than ten thousand.&lt;/p&gt;
&lt;h2 id="8-fix-the-data-rather-than-the-title"&gt;&lt;a class="toclink" href="#8-fix-the-data-rather-than-the-title"&gt;8. Fix the data rather than the title&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A title assembled from bad fields is still bad. If colours arrive as "SLT", "Slate Grey" and "slate", a lookup
table that normalises them improves every title, every filter and every variant grouping at once. Titles are
usually where you notice data problems; they are rarely where the fix belongs.&lt;/p&gt;
&lt;h2 id="9-respect-the-limit-and-the-crop"&gt;&lt;a class="toclink" href="#9-respect-the-limit-and-the-crop"&gt;9. Respect the limit, and the crop&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;150 characters is the maximum, not a target. Truncate on word boundaries so a cut title never ends mid-word, and
order the attributes so that the truncated version still says what the product is.&lt;/p&gt;
&lt;h2 id="10-test-on-a-segment"&gt;&lt;a class="toclink" href="#10-test-on-a-segment"&gt;10. Test on a segment&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Do not rewrite the whole catalog on a hunch. Pick one category or one brand, apply the new pattern there, and
compare impressions, clicks and conversion rate against the rest for two weeks. Shopping auctions take a few days
to settle after a change, so judging after three days tells you nothing but noise.&lt;/p&gt;
&lt;h2 id="what-a-real-change-looks-like"&gt;&lt;a class="toclink" href="#what-a-real-change-looks-like"&gt;What a real change looks like&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Before, straight from the shop:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Trail Runner GTX&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;After, built with a template from brand, product type, feature, colour and size:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Northwind Trail Runner GTX Waterproof Trail Running Shoe – Slate, Size 42&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The second version matches "waterproof trail running shoe", "northwind trail runner 42" and "slate running shoes",
and tells a shopper what they are about to click. Nothing was invented: every word came from a field that already
existed in the catalog.&lt;/p&gt;
&lt;h2 id="doing-it-at-scale"&gt;&lt;a class="toclink" href="#doing-it-at-scale"&gt;Doing it at scale&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The mechanics matter as much as the wording:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Templates per category.&lt;/strong&gt; One rule for fashion, another for electronics, each with a condition so it only
  applies where it belongs.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Normalise first, assemble second.&lt;/strong&gt; Clean colours, sizes and brand spellings before building the title.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Re-apply on every rebuild&lt;/strong&gt;, so the next import from the shop cannot overwrite the work.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preview before publishing.&lt;/strong&gt; Look at fifty products across categories, not one.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keep a &lt;a href="/features/#preview"&gt;revision history&lt;/a&gt;&lt;/strong&gt;, so a change you regret is one click away from being undone.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Titles are the cheapest lever in Shopping: no extra budget, no new creative, and the improvement compounds across
every campaign that uses the catalog. They only stay good if they are generated, not typed.&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>How to set up a Meta product catalog feed for Facebook and Instagram</title>
    <link href="https://www.feedmanager.org/blog/meta-product-catalog-feed/"/>
    <id>https://www.feedmanager.org/blog/meta-product-catalog-feed/</id>
    <published>2026-08-04T08:00:00Z</published>
    <updated>2026-08-04T08:00:00Z</updated>
    <author><name>FeedManager Team</name></author>
    <summary>Build a catalog feed Meta accepts: the fields it needs, how availability and condition differ from Google, variants, and keeping the catalog in sync.</summary>
    <content type="html">&lt;p&gt;Meta's catalog powers Advantage+ catalog ads, Instagram shopping, collection ads and the shop surfaces. It reads a
file the same way Google does: you publish a feed at a URL, register it in Commerce Manager as a data source, and
choose how often Meta fetches it. The mechanics are familiar; the details differ enough to cost you products if
you assume a Google feed will do.&lt;/p&gt;
&lt;h2 id="what-meta-needs-from-each-item"&gt;&lt;a class="toclink" href="#what-meta-needs-from-each-item"&gt;What Meta needs from each item&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The fields that must be present for a product to be usable:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;id&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Unique and stable. Your SKU is the right choice; the variant's SKU for variants.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;title&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The product name a shopper would recognise.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;description&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Plain text describing the product. Meta allows a long description, but the first sentence does the work.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;availability&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Meta's own wording — see below.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;condition&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;new&lt;/code&gt;, &lt;code&gt;refurbished&lt;/code&gt; or &lt;code&gt;used&lt;/code&gt;. Required, unlike Google where it is conditional.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;price&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Number plus currency, e.g. &lt;code&gt;89.88 EUR&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;link&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The product page, matching the price and availability in the feed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;image_link&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;The main image; the clean product photo for shops, a designed image is fine in an ads-only catalog.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;brand&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Required for most categories.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Recommended, and worth the effort: &lt;code&gt;item_group_id&lt;/code&gt;, &lt;code&gt;sale_price&lt;/code&gt;, &lt;code&gt;additional_image_link&lt;/code&gt;, &lt;code&gt;gtin&lt;/code&gt;, &lt;code&gt;color&lt;/code&gt;, &lt;code&gt;size&lt;/code&gt;,
&lt;code&gt;google_product_category&lt;/code&gt;. Yes — Meta uses Google's product taxonomy for categorisation, which is convenient when
you have already mapped it.&lt;/p&gt;
&lt;h2 id="where-meta-differs-from-google"&gt;&lt;a class="toclink" href="#where-meta-differs-from-google"&gt;Where Meta differs from Google&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Availability wording.&lt;/strong&gt; Meta expects values written with spaces — &lt;code&gt;in stock&lt;/code&gt;, &lt;code&gt;out of stock&lt;/code&gt;, &lt;code&gt;preorder&lt;/code&gt;,
&lt;code&gt;available for order&lt;/code&gt;, &lt;code&gt;discontinued&lt;/code&gt; — where Google's specification uses &lt;code&gt;in_stock&lt;/code&gt; and &lt;code&gt;out_of_stock&lt;/code&gt;. Feeds that
were built for Google and re-used for Meta often import with every product marked unavailable for exactly this
reason.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Condition is required.&lt;/strong&gt; Most shops sell new products, so this is a constant: set &lt;code&gt;condition: new&lt;/code&gt; for
everything and override it for the categories where it differs. Meta additionally accepts more granular used
conditions for some catalogs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Field names for variants.&lt;/strong&gt; Colour and size belong in &lt;code&gt;color&lt;/code&gt; and &lt;code&gt;size&lt;/code&gt;, not only baked into the title. Meta
uses them to build variant pickers and to avoid showing four near-identical items in one carousel.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Longer titles are tolerated but not rewarded.&lt;/strong&gt; Meta allows a longer title than Google. That is not an invitation
to stuff it; the ad crops it.&lt;/p&gt;
&lt;h2 id="variants-done-properly"&gt;&lt;a class="toclink" href="#variants-done-properly"&gt;Variants, done properly&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Send each buyable combination as its own item, with its own &lt;code&gt;id&lt;/code&gt;, price and availability, and give them all the
same &lt;code&gt;item_group_id&lt;/code&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-csv"&gt;id,item_group_id,title,color,size,availability,price,link,image_link
SKU-1042,TRAIL-GTX,&amp;quot;Northwind Trail Runner GTX&amp;quot;,Slate,42,in stock,89.88 EUR,https://…/slate-42,https://…/slate.jpg
SKU-1043,TRAIL-GTX,&amp;quot;Northwind Trail Runner GTX&amp;quot;,Slate,43,in stock,89.88 EUR,https://…/slate-43,https://…/slate.jpg
SKU-1051,TRAIL-GTX,&amp;quot;Northwind Trail Runner GTX&amp;quot;,Moss,42,out of stock,89.88 EUR,https://…/moss-42,https://…/moss.jpg
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Two details that matter more than they look:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The link should open the right variant.&lt;/strong&gt; If every size links to the same generic product page, shoppers land
  on a page that does not match the ad, and conversion suffers even when nothing is technically wrong.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The image should show the right colour.&lt;/strong&gt; Sending the same photo for every colour makes the carousel look
  broken.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="choosing-what-belongs-in-the-catalog"&gt;&lt;a class="toclink" href="#choosing-what-belongs-in-the-catalog"&gt;Choosing what belongs in the catalog&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Not everything you sell should be in the catalog. Products with no image, products below a margin you are willing
to advertise, spare parts, gift cards, bundles that cannot be fulfilled from stock — all of these are better
filtered out than uploaded and then paused product by product.&lt;/p&gt;
&lt;p&gt;A useful rule of thumb: the catalog should contain exactly the products you would be happy for Advantage+ to
choose on your behalf. Meta's automation picks from what you supply; filtering the file is the most direct control
you have.&lt;/p&gt;
&lt;h2 id="keeping-it-in-sync"&gt;&lt;a class="toclink" href="#keeping-it-in-sync"&gt;Keeping it in sync&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Set the fetch schedule in Commerce Manager, then make sure your side rebuilds at least as often. A catalog fetched
hourly from a file that is rebuilt once a day is a catalog with hourly-fresh mistakes.&lt;/p&gt;
&lt;p&gt;Beyond the schedule, three habits keep Meta catalogs healthy:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Rebuild after stock and price changes&lt;/strong&gt;, not only on the clock.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validate before publishing.&lt;/strong&gt; Missing &lt;code&gt;condition&lt;/code&gt;, Google-style availability values, and prices without a
   currency are the three most common reasons items are dropped on import.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Watch the item count.&lt;/strong&gt; The number of items Meta accepted should track the number your file contained. A
   sudden divergence is the earliest signal that something in the shop's export changed.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="a-practical-set-up"&gt;&lt;a class="toclink" href="#a-practical-set-up"&gt;A practical set-up&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you are already publishing to Google, the shortest path to a working Meta catalog is:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Build a second feed &lt;strong&gt;from the &lt;a href="/features/#catalog"&gt;same catalog&lt;/a&gt;&lt;/strong&gt;, using Meta's field names.&lt;/li&gt;
&lt;li&gt;Map availability to Meta's wording, set &lt;code&gt;condition&lt;/code&gt;, and make sure &lt;code&gt;brand&lt;/code&gt; is filled.&lt;/li&gt;
&lt;li&gt;Keep &lt;code&gt;item_group_id&lt;/code&gt;, &lt;code&gt;color&lt;/code&gt; and &lt;code&gt;size&lt;/code&gt; populated for variants.&lt;/li&gt;
&lt;li&gt;Filter out anything you do not want Advantage+ to advertise.&lt;/li&gt;
&lt;li&gt;Publish it at its own URL and register it in Commerce Manager with an hourly or daily fetch.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;That is all the file needs. Everything beyond it — labels for campaign structure, curated sets, seasonal
exclusions — is built on the same catalog, and is easier to change once the data lives in one place instead of in
a spreadsheet per channel.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Meta's own reference: the product data specification in the
&lt;a href="https://www.facebook.com/business/help/120325381656392"&gt;Meta Business Help Center&lt;/a&gt; lists every accepted field and
value.&lt;/em&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>Google Merchant Center feed errors: what they mean and how to fix them</title>
    <link href="https://www.feedmanager.org/blog/merchant-center-feed-errors/"/>
    <id>https://www.feedmanager.org/blog/merchant-center-feed-errors/</id>
    <published>2026-07-27T08:00:00Z</published>
    <updated>2026-07-27T08:00:00Z</updated>
    <author><name>FeedManager Team</name></author>
    <summary>The disapprovals that hit most shops — mismatched prices, missing GTINs, image and crawl problems — what causes each one and how to stop it coming back.</summary>
    <content type="html">&lt;p&gt;Merchant Center tells you what is wrong with a product, but rarely why, and almost never what to change so it does
not happen again next week. Here are the disapprovals and warnings that account for most of the volume in real
accounts, what actually causes each one, and the fix that keeps.&lt;/p&gt;
&lt;h2 id="mismatched-value-page-crawl-price"&gt;&lt;a class="toclink" href="#mismatched-value-page-crawl-price"&gt;Mismatched value (page crawl): price&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;What it means:&lt;/strong&gt; Google fetched your landing page, read a price there, and it is not the price in your feed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What causes it:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;VAT.&lt;/strong&gt; Your shop stores net prices; the feed sends them unchanged; the page shows gross. Any market where you
  advertise to consumers expects the price shoppers pay.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Currency by location.&lt;/strong&gt; The page shows prices in the visitor's currency, and Google's crawler sees a different
  one from the feed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rounding.&lt;/strong&gt; &lt;code&gt;89.876&lt;/code&gt; in the database becomes &lt;code&gt;89.88&lt;/code&gt; on the page and &lt;code&gt;89.87&lt;/code&gt; in the feed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Stale rebuilds.&lt;/strong&gt; The shop changed the price hours ago; the feed was built before that.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Discounts applied in the basket.&lt;/strong&gt; The page shows the full price; the feed sends the discounted one.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; send the price shoppers pay, from the same source the page uses, and rebuild the feed after price
changes rather than on a fixed daily schedule. If the price needs VAT added, add it with a rule (&lt;code&gt;price × 1.20&lt;/code&gt;,
rounded) so every product gets the same treatment. And send &lt;code&gt;sale_price&lt;/code&gt; separately rather than replacing &lt;code&gt;price&lt;/code&gt;
with the discounted figure — the channel wants both.&lt;/p&gt;
&lt;h2 id="mismatched-value-page-crawl-availability"&gt;&lt;a class="toclink" href="#mismatched-value-page-crawl-availability"&gt;Mismatched value (page crawl): availability&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;What it means:&lt;/strong&gt; the feed says in stock, the page says otherwise — or the other way round.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What causes it:&lt;/strong&gt; stock changed since the last rebuild; the page shows "only available in store"; the product
page loads availability with JavaScript that the crawler does not run; or the feed includes products the shop
considers unavailable but still displays.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; rebuild more often, and decide clearly what "available" means. Many shops are better off &lt;strong&gt;excluding&lt;/strong&gt;
out-of-stock products from the feed entirely than sending them as &lt;code&gt;out_of_stock&lt;/code&gt; — it keeps budget on products
people can buy. Both are valid; what is not valid is disagreeing with your own page.&lt;/p&gt;
&lt;p&gt;Google treats repeated mismatches as critical, and they can grow into an account-level problem: our
&lt;a href="/blog/merchant-center-misrepresentation/"&gt;misrepresentation and price mismatch checklist&lt;/a&gt; covers the causes and
the store-side fixes, and FeedManager's &lt;a href="/page-checks/"&gt;Page Checks&lt;/a&gt; compares a daily sample of product pages with
your feed.&lt;/p&gt;
&lt;h2 id="missing-or-invalid-gtin"&gt;&lt;a class="toclink" href="#missing-or-invalid-gtin"&gt;Missing or invalid GTIN&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;What it means:&lt;/strong&gt; you sent no identifier, or one that fails the check-digit test.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What causes it:&lt;/strong&gt; the GTIN field in the shop is empty, contains the supplier's internal code, has lost a leading
zero in a spreadsheet, or carries several codes in one field.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Send &lt;code&gt;gtin&lt;/code&gt; for every product the manufacturer assigned one to. Digits only, no spaces or hyphens.&lt;/li&gt;
&lt;li&gt;Watch the leading zero: an 8- or 12-digit code that passed through Excel is often wrong. Keep the column as text
  in every export.&lt;/li&gt;
&lt;li&gt;For products that genuinely have no identifier — your own brand, handmade, custom-made — send &lt;code&gt;identifier_exists&lt;/code&gt;
  with the value &lt;code&gt;no&lt;/code&gt; and make sure &lt;code&gt;brand&lt;/code&gt; and &lt;code&gt;mpn&lt;/code&gt; are right.&lt;/li&gt;
&lt;li&gt;Never invent numbers. A wrong GTIN matches your product to somebody else's listing, which is worse than none.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="missing-required-attribute"&gt;&lt;a class="toclink" href="#missing-required-attribute"&gt;Missing required attribute&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;What it means:&lt;/strong&gt; &lt;code&gt;id&lt;/code&gt;, &lt;code&gt;title&lt;/code&gt;, &lt;code&gt;description&lt;/code&gt;, &lt;code&gt;link&lt;/code&gt;, &lt;code&gt;image_link&lt;/code&gt;, &lt;code&gt;availability&lt;/code&gt;, &lt;code&gt;price&lt;/code&gt; or &lt;code&gt;brand&lt;/code&gt; is
missing for at least one item.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What causes it:&lt;/strong&gt; an export that leaves fields empty for some products — usually the ones added last, or the ones
imported from a supplier file with different columns.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; &lt;a href="/channels/"&gt;validate before publishing&lt;/a&gt;. Your feed tool should tell you how many items were left out and why,
rather than leaving you to discover it in Merchant Center. Where a value can be derived, derive it: a missing brand
that is always your own shop name is a one-line rule.&lt;/p&gt;
&lt;h2 id="image-problems"&gt;&lt;a class="toclink" href="#image-problems"&gt;Image problems&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Three different messages, three different causes:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Image too small.&lt;/strong&gt; Google is raising the minimum to 500 × 500 pixels, with enforcement starting 31 January 2027.
Many shops send a thumbnail URL without realising it — check what the &lt;code&gt;image_link&lt;/code&gt; in your feed actually resolves
to, not what the product page displays.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Image not accessible / crawl error.&lt;/strong&gt; The CDN blocks unknown user agents, the URL needs a session, the file
returns 403 to anyone without a referrer, or the shop rate-limits crawlers. Try fetching the image URL with &lt;code&gt;curl&lt;/code&gt;
and no headers; if that fails, Google's fetch fails too.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Promotional overlay.&lt;/strong&gt; Badges like "-30%" or "Free shipping" burned into the image are not allowed. If your shop
generates those overlays automatically, send the clean original in the feed.&lt;/p&gt;
&lt;h2 id="landing-page-not-working-or-blocked"&gt;&lt;a class="toclink" href="#landing-page-not-working-or-blocked"&gt;Landing page not working or blocked&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;What it means:&lt;/strong&gt; the URL in &lt;code&gt;link&lt;/code&gt; returned an error, redirected somewhere unexpected, or is blocked by
&lt;code&gt;robots.txt&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What causes it:&lt;/strong&gt; country redirects that send the crawler to a different domain; tracking parameters that break
on a second visit; staging URLs left in an export; a &lt;code&gt;robots.txt&lt;/code&gt; that disallows the crawler for product pages;
geo-blocking that refuses requests from outside your country.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; make the link the canonical product URL without session or tracking parameters, and check that it
returns 200 to a request with no cookies. If you add campaign parameters, add them in a way the page tolerates.&lt;/p&gt;
&lt;h2 id="excessive-capitalisation-promotional-text-in-the-title"&gt;&lt;a class="toclink" href="#excessive-capitalisation-promotional-text-in-the-title"&gt;Excessive capitalisation, promotional text in the title&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;What it means:&lt;/strong&gt; the title contains SHOUTING, or text like "Free shipping!!", "Best price", "★★★★★".&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; a rule that rewrites titles from structured fields rather than passing through what the shop's
marketing team typed. &lt;code&gt;{brand} {product} – {colour}, {size}&lt;/code&gt; never breaks this rule by accident.&lt;/p&gt;
&lt;h2 id="missing-shipping-or-tax-information"&gt;&lt;a class="toclink" href="#missing-shipping-or-tax-information"&gt;Missing shipping or tax information&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;What it means:&lt;/strong&gt; for some countries Google needs to know shipping costs, and in the United States it needs tax
settings.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The fix:&lt;/strong&gt; this is usually a Merchant Center account setting rather than a feed problem: configure shipping
services at account level, and only send &lt;code&gt;shipping&lt;/code&gt; in the feed when a product genuinely differs from the account
rules. Sending shipping per product as a matter of course makes feeds large and fragile.&lt;/p&gt;
&lt;h2 id="item-disapproved-for-policy"&gt;&lt;a class="toclink" href="#item-disapproved-for-policy"&gt;Item disapproved for policy&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Alcohol, medical claims, recalled products, counterfeits, adult content and a long list of restricted categories
are handled by Google's policies rather than by feed rules. The feed side of the fix is making sure the products
you may not advertise never reach the file — a filter on category or a label is enough, and far better than an
account-level warning.&lt;/p&gt;
&lt;h2 id="a-routine-that-stops-the-same-errors-coming-back"&gt;&lt;a class="toclink" href="#a-routine-that-stops-the-same-errors-coming-back"&gt;A routine that stops the same errors coming back&lt;/a&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Look at the diagnostics by cause, not by product.&lt;/strong&gt; Ten thousand disapprovals are usually three causes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fix the cause where the data is shaped&lt;/strong&gt; — in the rules that build the feed, not in Merchant Center, and not
   in your shop if the shop is right for shoppers.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validate while building.&lt;/strong&gt; Required fields, allowed values, lengths — all of it can be &lt;a href="/features/#feeds"&gt;checked before
   publishing&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Rebuild after changes, not only on a timer&lt;/strong&gt;, so prices and stock in the feed match the shop.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Watch warnings as well as errors.&lt;/strong&gt; Missing GTIN, missing product category and missing brand quietly cost
   reach.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Keep the last good file.&lt;/strong&gt; If a build fails, keep serving the previous valid feed rather than a broken or
   empty one.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Merchant Center is strict, but it is consistent. Once each cause is fixed in the data rather than patched on a
product, the diagnostics page turns into something you glance at instead of something you dread.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Google's own reference: the &lt;a href="https://support.google.com/merchants/answer/7052112"&gt;product data specification&lt;/a&gt;
lists every attribute, its format and its limits.&lt;/em&gt;&lt;/p&gt;</content>
  </entry>
  <entry>
    <title>What is a product feed? A complete guide for e-commerce</title>
    <link href="https://www.feedmanager.org/blog/what-is-a-product-feed/"/>
    <id>https://www.feedmanager.org/blog/what-is-a-product-feed/</id>
    <published>2026-07-20T08:00:00Z</published>
    <updated>2026-07-20T08:00:00Z</updated>
    <author><name>FeedManager Team</name></author>
    <summary>What a product feed is, which attributes matter, how channels read it, and how to keep one accurate as your catalog changes — with examples.</summary>
    <content type="html">&lt;p&gt;A product feed is a file that lists the products you sell, each with the attributes a channel needs to advertise
them: an id, a title, a link, an image, a price, whether it is in stock. Google Merchant Center, Meta, TikTok,
Pinterest, Microsoft and most marketplaces all work the same way — you publish a file at a URL, they fetch it on a
schedule, and what is inside decides which of your products can be shown and how well they compete.&lt;/p&gt;
&lt;p&gt;That is the whole idea. The difficulty is never the concept; it is that the file has to stay correct while your
catalog, your prices and your stock keep moving.&lt;/p&gt;
&lt;h2 id="what-a-feed-actually-contains"&gt;&lt;a class="toclink" href="#what-a-feed-actually-contains"&gt;What a feed actually contains&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A feed is a list of items, one per product you want to advertise. Each item is a set of named attributes. In XML
it looks like this — the Google Merchant Center format, which most other channels resemble:&lt;/p&gt;
&lt;pre&gt;&lt;code class="language-xml"&gt;&amp;lt;item&amp;gt;
  &amp;lt;g:id&amp;gt;SKU-1042&amp;lt;/g:id&amp;gt;
  &amp;lt;g:title&amp;gt;Northwind Trail Runner GTX Waterproof Running Shoe – Slate&amp;lt;/g:title&amp;gt;
  &amp;lt;g:description&amp;gt;Waterproof trail running shoe with a GORE-TEX membrane…&amp;lt;/g:description&amp;gt;
  &amp;lt;g:link&amp;gt;https://store.example/p/trail-runner-gtx?variant=slate-42&amp;lt;/g:link&amp;gt;
  &amp;lt;g:image_link&amp;gt;https://cdn.example/trail-runner-gtx-slate.jpg&amp;lt;/g:image_link&amp;gt;
  &amp;lt;g:availability&amp;gt;in_stock&amp;lt;/g:availability&amp;gt;
  &amp;lt;g:price&amp;gt;89.88 EUR&amp;lt;/g:price&amp;gt;
  &amp;lt;g:brand&amp;gt;Northwind&amp;lt;/g:brand&amp;gt;
  &amp;lt;g:gtin&amp;gt;4006381333931&amp;lt;/g:gtin&amp;gt;
  &amp;lt;g:item_group_id&amp;gt;TRAIL-RUNNER-GTX&amp;lt;/g:item_group_id&amp;gt;
  &amp;lt;g:condition&amp;gt;new&amp;lt;/g:condition&amp;gt;
&amp;lt;/item&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The same data can be a CSV, where each attribute is a column and each product a row, or JSON. The format matters
less than the fields.&lt;/p&gt;
&lt;h3 id="the-attributes-that-carry-the-weight"&gt;&lt;a class="toclink" href="#the-attributes-that-carry-the-weight"&gt;The attributes that carry the weight&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;id&lt;/code&gt;&lt;/strong&gt; identifies the product inside the feed. It must be unique and — this is the part that bites — stable.
Change the id of a product and the channel treats it as a brand new product: its history, its learning and any
performance it had built up start again from zero. Google allows up to 50 characters here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;title&lt;/code&gt;&lt;/strong&gt; is what a shopper reads and what the channel matches against searches. Google allows up to 150
characters, and the first 70 or so are what people usually see. A title is not a slogan: brand, product, the one
attribute that distinguishes this variant.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;description&lt;/code&gt;&lt;/strong&gt; can run to 5,000 characters in Google's specification. It informs matching more than it informs
shoppers; write plainly and skip the marketing punctuation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;link&lt;/code&gt;&lt;/strong&gt; is the landing page. It must show the same product, at the same price, with the same availability as the
feed — this is the single most common cause of disapprovals that surprise people.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;image_link&lt;/code&gt;&lt;/strong&gt; is the main image. Google is raising its minimum image size to 500 × 500 pixels, with enforcement
starting 31 January 2027, so it is worth checking what your shop's CDN actually serves before then.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;availability&lt;/code&gt;&lt;/strong&gt; tells the channel whether it can be bought. Google accepts &lt;code&gt;in_stock&lt;/code&gt;, &lt;code&gt;out_of_stock&lt;/code&gt;,
&lt;code&gt;preorder&lt;/code&gt; and &lt;code&gt;backorder&lt;/code&gt;. Meta expects its own wording for the same idea, which is one reason a single file for
every channel gets awkward.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;price&lt;/code&gt;&lt;/strong&gt; is a number and a currency, like &lt;code&gt;89.88 EUR&lt;/code&gt;. Whether that number includes VAT depends on the country
you advertise in and on how your shop stores prices — a frequent source of feeds that are wrong in exactly one
market.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;gtin&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;mpn&lt;/code&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;code&gt;brand&lt;/code&gt;&lt;/strong&gt; are the identifiers. A GTIN is the barcode number (EAN, UPC, JAN or ISBN).
Channels use it to recognise that your "Trail Runner GTX" is the same shoe three other shops are selling, which is
how comparison and matching work at all. Send them when they exist. When a product genuinely has none, say so with
&lt;code&gt;identifier_exists: no&lt;/code&gt; rather than inventing a number.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;item_group_id&lt;/code&gt;&lt;/strong&gt; groups variants. Each size and colour is sent as its own product — with its own id, price and
availability — and they share one &lt;code&gt;item_group_id&lt;/code&gt; so the channel knows they belong to the same listing.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;code&gt;custom_label_0&lt;/code&gt; to &lt;code&gt;custom_label_4&lt;/code&gt;&lt;/strong&gt; are five free fields the shopper never sees. They exist for you: margin
bands, seasonality, best-sellers, stock levels. Bidding strategies are built on them, which makes them the most
undervalued fields in the whole specification.&lt;/p&gt;
&lt;h2 id="how-the-file-gets-to-the-channel"&gt;&lt;a class="toclink" href="#how-the-file-gets-to-the-channel"&gt;How the file gets to the channel&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You publish the feed at a URL. In Merchant Center or Commerce Manager you register that URL and a fetch schedule —
daily, or several times a day. The channel downloads the file, validates every item, and updates what it knows
about your products.&lt;/p&gt;
&lt;p&gt;Three consequences follow, and they explain most feed problems:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Nothing is real-time.&lt;/strong&gt; A price change reaches the ads at the next fetch of a correctly rebuilt file. If you
   rebuild daily and the channel fetches daily, worst case is nearly two days.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The file must always be valid.&lt;/strong&gt; A half-written file, a timeout mid-download or an empty export does not
   produce a gentle warning; it can mean products vanish.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Validation happens per item.&lt;/strong&gt; One product missing a required attribute does not break the feed; it removes
   that product. Which is why the count of accepted items matters more than "the feed worked".&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="where-the-data-comes-from"&gt;&lt;a class="toclink" href="#where-the-data-comes-from"&gt;Where the data comes from&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Every shop platform can export products. Shopify, WooCommerce, Magento, PrestaShop, BigCommerce and the Turkish
platforms — Ticimax, ikas, IdeaSoft, T-Soft — all offer either an API or an export you can schedule. ERP systems
and suppliers hand you CSVs. Some teams push products from their own systems through an API instead.&lt;/p&gt;
&lt;p&gt;What almost never happens is that the export is exactly what a channel wants. Typical gaps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The title is the internal product name, not something a shopper would search for.&lt;/li&gt;
&lt;li&gt;Categories are your categories; the channel wants its own taxonomy.&lt;/li&gt;
&lt;li&gt;Prices are stored without VAT, and the channel needs the price shoppers pay.&lt;/li&gt;
&lt;li&gt;Out-of-stock products are still in the export.&lt;/li&gt;
&lt;li&gt;The description contains HTML from the shop's editor.&lt;/li&gt;
&lt;li&gt;Variants are one row with a comma-separated list of sizes, instead of one row each.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Fixing these in the shop is usually impossible (the shop is right for the shop) and fixing them by hand in a
spreadsheet works until the next export overwrites it. That gap — between the export you have and the file each
channel wants — is what &lt;a href="/features/"&gt;feed management&lt;/a&gt; is.&lt;/p&gt;
&lt;h2 id="the-shape-of-a-good-setup"&gt;&lt;a class="toclink" href="#the-shape-of-a-good-setup"&gt;The shape of a good setup&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A setup that survives contact with a real catalog has four parts:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One catalog.&lt;/strong&gt; Import from every source into a single, normalized product list, so that a rule you write applies
to everything, whatever platform it came from.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Transformations that are re-applied every time.&lt;/strong&gt; Not a one-off edit, but a rule: &lt;em&gt;build the title from brand,
product name and colour&lt;/em&gt;; &lt;em&gt;map category "Ayakkabı &amp;gt; Koşu" to Google's category 187&lt;/em&gt;; &lt;em&gt;add 20% VAT to the price&lt;/em&gt;;
&lt;em&gt;leave out products with no image&lt;/em&gt;. Rules run on every product at every rebuild, so the next import cannot undo
them.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Validation before publishing.&lt;/strong&gt; Check required fields and allowed values while the file is built, so you learn
about a problem from your own tool instead of from a disapproval three days later.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A schedule with a safety net.&lt;/strong&gt; Rebuild often; keep serving the last good file when a build fails; refuse to
delete the whole catalog because a supplier's export arrived truncated.&lt;/p&gt;
&lt;h2 id="a-worked-example"&gt;&lt;a class="toclink" href="#a-worked-example"&gt;A worked example&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Take one variant of that trail shoe. The shop exports:&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Field&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;sku&lt;/td&gt;
&lt;td&gt;&lt;code&gt;SKU-1042&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;name&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Trail Runner GTX&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;colour&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Slate&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;price_net&lt;/td&gt;
&lt;td&gt;&lt;code&gt;74.90&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;stock&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;category&lt;/td&gt;
&lt;td&gt;&lt;code&gt;Ayakkabı &amp;gt; Koşu&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Four rules turn it into something a channel accepts:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Title template&lt;/strong&gt; — &lt;code&gt;{brand} {name} – {colour}&lt;/code&gt; → &lt;em&gt;Northwind Trail Runner GTX – Slate&lt;/em&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Price&lt;/strong&gt; — &lt;code&gt;price_net × 1.20&lt;/code&gt;, rounded → &lt;code&gt;89.88 EUR&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Category mapping&lt;/strong&gt; — a lookup table turns &lt;code&gt;Ayakkabı &amp;gt; Koşu&lt;/code&gt; into Google's &lt;code&gt;187&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Filter&lt;/strong&gt; — &lt;code&gt;stock = 0&lt;/code&gt; → the product is left out of the feed entirely, because advertising a shoe nobody can
   buy costs money and annoys shoppers.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Tomorrow the shop restocks the shoe and changes the price. Nothing needs editing: the next sync brings the new
numbers, the same four rules run again, and the channel fetches a file that is right.&lt;/p&gt;
&lt;h2 id="what-to-do-first"&gt;&lt;a class="toclink" href="#what-to-do-first"&gt;What to do first&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you are setting this up from scratch:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Start with &lt;a href="/channels/#google-merchant-center"&gt;Google Merchant Center&lt;/a&gt;&lt;/strong&gt;, even if it is not your main channel. Its specification is the strictest
   of the mainstream ones, and a catalog that satisfies Google is close to ready for everyone else.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Get identifiers in order&lt;/strong&gt; before optimising anything. GTIN, brand, MPN.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Make titles searchable&lt;/strong&gt;, not clever.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Exclude what should not be advertised&lt;/strong&gt; — out of stock, no image, below a margin threshold — rather than
   letting the channel reject it for you.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Then use custom labels&lt;/strong&gt; to group products for bidding, and only then start tuning.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;None of this is difficult in principle. It is repetitive, unforgiving of small mistakes, and it never finishes —
which is exactly the kind of work worth automating.&lt;/p&gt;</content>
  </entry>
</feed>
