GoAdserver
Live demo

Product feeds: a catalogue that becomes ads

A shop adds its product feed once. Every product becomes a native ad with its photo, name and price, and the ads follow the feed: new products are added, changed ones updated, sold-out ones paused.

This is a live zone on a demo account. Fjellpeak and its products are made up; the photos are CC0 stock.

DEMO 1

A shop's catalogue as native ads

On an outdoor site, eight product cards. Each one is a native ad the ad server created from one line of Fjellpeak's product feed — photo, name, price and the product's own page — and each one competes, is counted and is billed like any other ad. Nobody made these ads by hand: the advertiser added the feed URL once.

Zone #12512725 · native zone · 4 × 2 cards · campaign #454710 · product feed #3 · 11 products live

Gear picks for the weekendSponsored products
Show the code
<!-- once per page, in <head> -->
<script src="https://g2.gsrv.dev/ctrl/19460.js"></script>
<!-- where it goes -->
<style>
#id_12512725 .gnl, #id_12512725 .gnl *{box-sizing:border-box}
#id_12512725 .gnl{font:14px/1.4 -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Arial,sans-serif;color:#1d1b33}
#id_12512725 .gnl a{text-decoration:none;color:inherit}
#id_12512725 .gnl img{display:block;max-width:100%;border:0}
#id_12512725 .gnl-title{display:block;font-weight:700;font-size:15px;line-height:1.3}
#id_12512725 .gnl-desc{display:block;color:#5d5b73;font-size:13px;line-height:1.45}
#id_12512725 .gnl-url{color:#8a88a0;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
#id_12512725 .gnl-ad{flex:none;font-size:11px;color:#5d5b73;border:1px solid #e3e2ec;border-radius:4px;padding:1px 6px}
#id_12512725 .gnl-cards .gnl-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:16px;margin:0 0 16px}
#id_12512725 .gnl-card{display:flex;flex-direction:column;height:100%;background:#fff;border:1px solid #e6e5ee;border-radius:12px;overflow:hidden;box-shadow:0 6px 18px -12px rgba(29,27,51,.25)}
#id_12512725 .gnl-card img{width:100%;height:auto;aspect-ratio:3/2;object-fit:cover}
#id_12512725 .gnl-txt{display:flex;flex-direction:column;flex:1;gap:6px;padding:12px 14px 14px}
#id_12512725 .gnl-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:auto;padding-top:4px}
</style>
<div id="id_12512725"></div>
<script>
goCtrl.add({"plugin":"native","sid":12512725,"display":"id_12512725",
	"tpl_body":'<div class="gnl gnl-cards">{body}</div>',
	"tpl_row":'<div class="gnl-row">{items}</div>',
	"tpl_item":'<a class="{href_itemid} gnl-card" href="#">{image}<span class="gnl-txt"><span class="gnl-title">{title}</span><span class="gnl-desc">{description}</span><span class="gnl-foot"><span class="gnl-url">{displayurl}</span><span class="gnl-ad">Sponsored</span></span></span></a>'
});
</script>
THE FEED

The feed behind it

The same 12 products as a Google Merchant feed: feed.xml. One of them is sold out: the feed says out_of_stock, so it gets no ad (an ad that was already running is paused), and it comes back on its own when the feed says in_stock again. A changed price or photo updates the ad on the next sync, a product that leaves the feed pauses its ad.

Google Merchant RSS / Atom or CSV / TSV with the same column names · up to 5,000 products per feed · synced every 1, 6, 12 or 24 hours

ProductPriceAd
Ridgeline 2 backpacking tent
FP-TENT-2
289.00 EUR 249.00 EURad live
Summit 38 L hiking pack
FP-PACK-38
139.00 EURad live
Trailhead waterproof hiking boots
FP-BOOT-M
179.00 EURad live
Stormline 3-layer rain jacket
FP-SHELL
219.00 EUR 179.00 EURad live
Arctic down sleeping bag, -5 °C
FP-BAG-5
259.00 EURad live
Carbon trekking poles (pair)
FP-POLES
99.00 EURad live
Glowline camp lantern
FP-LAMP
49.00 EURad live
Ember camp cook pot
FP-STOVE
45.00 EURad live
Glacier insulated bottle 750 ml
FP-BOTTLE
34.00 EURad live
Enamel camp mug set (2)
FP-MUG
24.00 EURad live
Merino rib beanie
FP-BEANIE
29.00 EURad live
Treeline camping hammock
FP-HAMMOCK
59.00 EURsold out · no ad
SET UP

How to set one up

Create a native campaign with the budget and targeting the products should share, then open Advertiser → Product feeds, pick the campaign and paste your feed URL. Each product needs an id, a title, a link and an image; a sale price wins over the price, and Price in the ad title puts it after the name. The first sync runs right away. The same works through the API:

Each product ad is an ordinary ad of the campaign, with its own stats, and can be paused by hand like any other

<item>
  <g:id>FP-TENT-2</g:id>
  <title>Ridgeline 2 backpacking tent</title>
  <description>Two-person, 1.9 kg, pitches in four minutes.</description>
  <link>https://fjellpeak.com/tents/ridgeline-2</link>
  <g:image_link>https://fjellpeak.com/img/ridgeline-2.jpg</g:image_link>
  <g:price>289.00 EUR</g:price>
  <g:sale_price>249.00 EUR</g:sale_price>
  <g:availability>in_stock</g:availability>
</item>
curl -X POST https://<your panel>/api/v1/product-feeds \
  -H "Authorization: Bearer $API_KEY" \
  -d '{"campaign_id": 454710, "url": "https://www.goadserver.com/demo/product-feeds/feed.xml",
       "refresh_hours": 24, "price_in_title": true}'

About the format: Product feed ads · Native zones: native demo · All formats: Ad formats · More demos: all live demos

Run these formats on your own network

Every format on this page is part of the GoAdserver ad server. Talk to us about your platform.

Contact us