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.
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.
Why plain packshots underperform in catalog ads
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:
- The offer. 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.
- The brand. Packshots look the same whatever the shop. Your colours, fonts and logo make the ad yours before anyone reads the name.
- The context. "New arrival", "Back in stock", "Bestseller", "2 for 1": the reason this product is in front of this person right now.
Meta recognised the gap and added dynamic overlays to Advantage+ catalog ads: 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.
What to put on the image
Most catalog creatives are built from the same few pieces:
| Element | What it shows | Watch out for |
|---|---|---|
| Discount badge | -30%, 30% OFF |
Compute it from the prices; show it only when there is a real sale |
| Price block | New price large, old price struck through | Use the currency format your shoppers read, e.g. $1,249 or 1.249 TL |
| Logo or brand bar | Who is selling | A logo made for light backgrounds disappears on dark ones — have both |
| Campaign line | "Summer sale", "2 for 1", "Free shipping over $50" | Shorter than you think: it is read in half a second |
| Coupon | "10% off with WELCOME10" | Only if the code works for every product in the ad |
| Lifecycle badge | Back in stock, Bestseller, New arrival | Tie it to data, not to a list someone typed |
| Second photo | Front and side, or the product and a detail | Products with a single photo need a plan |
Which ones to use depends on the campaign:
| Campaign | On the image | Products |
|---|---|---|
| Seasonal sale | Discount badge, old and new price, campaign line | Products with a sale price running now |
| Always-on retargeting | Price, logo, maybe free shipping | The whole catalog |
| Bundle or "buy 2, pay 1" | Offer in a coloured panel, logo | The products the offer covers |
| Coupon campaign | Code in a bottom bar | The products the code works for |
| Back in stock | "Back in stock" badge, price | Products that came back this week |
| Bestsellers | "Bestseller" ribbon, rating | The top products by sales |
| New arrivals | "New" badge, collection line | Products first seen in the last few weeks |
| Lookbook | Two photos of the same product, brand footer | Products with a second image |
Sizes and safe zones
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:
| Size | Pixels | Where it shows |
|---|---|---|
| 1:1 | 1080 × 1080 | Feeds, carousels, most catalog placements — the safe default |
| 4:5 | 1080 × 1350 | Mobile feeds on Facebook and Instagram, where a taller image takes more of the screen |
| 9:16 | 1080 × 1920 | Stories, Reels and TikTok, full screen |
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.
Pinterest recommends a 2:3 image (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.
For the product photos themselves, the channels' minimums still apply: at least 500 × 500 pixels on TikTok and Meta. A photo that is barely large enough will look soft once it fills half of a 1080-pixel canvas.
The real problem: images go stale
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.
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.
Three rules keep images true:
- Draw the images from the product data. 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.
- Draw again when something the image shows changes. 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.
- Check at the last moment. 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.
One more detail matters: give every new version of an image a new address. 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.
Be honest with the discount
A discount on an image is a price claim, so do the arithmetic the careful way:
- Compute it from the prices, 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%.
- Round down to a whole percent. 30.57% is 30%, and 29.98% is 29% — never 30%. Rounding up promises more than the shopper gets.
- Show no discount when there isn't one — including a sale price that is less than 1% below the regular price, or a sale whose end date has passed.
- Show the sale price only during the sale. If your feed has
sale_price_effective_date, the image should follow it.
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.
Where designed images work — and where they don't
Meta, TikTok and Pinterest are where designed images belong. Point the ad feed's image_link 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 Meta catalog guide covers the feed itself.
Google Merchant Center is not the place for them. Google's image requirements 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 additional images and lifestyle images ask for clean images too. A designed image in a Google feed ends as the "promotional overlay" disapproval described in our Merchant Center errors guide.
Email 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.
How FeedManager does it
FeedManager's Creative Studio turns product data into these images, on the Enterprise plan.
- Templates. A gallery 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.
- A brand kit. Your colours, fonts, logos and price format, read by every template, so a gallery template looks like your own without editing.
- A creative set. 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 only what changed: after syncs, when a sale starts or ends, when the brand kit changes. Discounts are computed from the prices and rounded down.
- In feeds, a placeholder such as
{creative.summer_sale.4x5}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 toimage_linkshows a warning. - Delivery. Images are served from
cdn.feedmanager.org, each version under its own address, and can be downloaded as a ZIP or a list of addresses.
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.
If your catalog feed is still the plain export from your store, start there — our guide to product feeds covers the basics. Once the data is right, the images can follow it.
Frequently asked questions
Can I put the price on product images in Meta catalog ads?
Yes. Catalog ads are ads, and Meta itself offers overlays with the price, a struck-through price, the percentage off and free shipping. A designed image goes further — your colours, fonts, logo, campaign lines, two photos — but it has to change whenever the price does. If the same catalog also powers a Facebook or Instagram shop, keep the clean photo there.
Can I use images with a discount badge in Google Shopping?
No. Google Merchant Center disapproves promotional overlays such as prices, discounts, calls to action and added logos on the main image, and its guidelines for additional and lifestyle images ask for clean images as well. Use designed images on Meta, TikTok, Pinterest and in email.
Which image size should I use for catalog ads?
Make 1:1 (1080 × 1080) your default, add 4:5 (1080 × 1350) for mobile feeds and 9:16 (1080 × 1920) for Stories and Reels, keeping text away from the top and bottom of the 9:16 image. Pinterest recommends 2:3; 1:1 and 4:5 work there too, while images taller than 2:3 may be cut off.
How do I stop an ad from showing an old price?
Generate the image from the product data instead of designing it by hand, redraw it when the price, the sale or the picture changes, and let the feed check each image against the product when it is built. If an image doesn't match, the feed should send the plain product photo until the new image is ready.
Can FeedManager create these images?
Yes, with Creative Studio on the Enterprise plan. It draws one image per product and size from a template and your brand kit, draws again only what changed, and a feed uses an image only while it still matches the product. The template gallery can be previewed with your own products on every plan.
Publish this feed with FeedManager
Connect your store, shape the data with rules and let each channel fetch a valid file — the Free plan covers 500 products with no credit card.
Private beta — accounts by invitation.