
AdRoll feed for Shopify
AdRoll, part of NextRoll, turns your catalog into retargeting and prospecting banners: Dynamic Creative ads that show people the exact products they viewed, across the web. Nothing is listed on an AdRoll-owned site; the feed is the catalog behind the banner, and AdRoll insists it lives on a public URL it can crawl. Feedflock builds that feed from your Shopify catalog in the Google format AdRoll reads natively, with product IDs that match your pixel, and regenerates it as often as every hour.

Your product types. The channel's categories.
The channel files offers under its own category tree. Feedflock suggests a category for each Shopify product type and you just confirm. One mapping covers every product of that type, including products you add later.
A sale is two prices, and the banner can show both.
AdRoll's field table pairs price with sale_price: “discounted price, if applicable”. Feedflock sends the compare-at price as g:price and the discounted price as g:sale_price, so a dynamic ad can show the saving, and the promotion ends the moment you remove the compare-at price. A full-price product carries one price only.
Catch feed issues before AdRoll does.
Before every generation Feedflock checks that every field the channel requires is filled, and, on templates verified against the channel's own spec, that the values fit its rules. Most problems are fixed with one click, without editing products in Shopify.
Setup
Live in five steps
From a bare Shopify store to a listed offer: the whole setup fits into one coffee break.
Set up AdRoll and its pixel
Create your AdRoll account and put the AdRoll pixel on your product pages. It must report each viewed product's ID in adroll_custom_data. Without it, the best feed personalizes nothing.
Install Feedflock
Add Feedflock from the Shopify App Store. It reads your products, variants, stock and images directly through the Shopify API.
Pick the AdRoll template
Create a new feed and choose AdRoll. The output is Google's RSS 2.0 with the g: namespace, one item per product, with all five required fields mapped: id, title, link, image_link and price. The id defaults to the numeric Shopify product ID, the value your pixel most likely sends.
Map your categories
google_product_category takes a full path from Google's taxonomy; map your product types on the Categories tab. A compare-at price splits into g:price plus g:sale_price automatically.
Hand AdRoll the feed URL
Share the hosted URL with AdRoll support or your account manager, or, with API access, register it through the product feed endpoints, which read the Google Base format directly. If your server filters traffic, allowlist AdRoll's crawler (IP 54.69.18.100). Then check Creatives → Product Feeds.
https://feedflock.appfleece.com/f/demo-adroll/adroll.xml
The feed
What the channel receives
<item> <g:id>8236409175213</g:id> <g:title>Linen shirt Sand</g:title> <g:description>Breathable linen shirt with a relaxed regular fit.</g:description> <g:link>https://shop.example/products/linen-shirt-sand</g:link> <g:image_link>https://cdn.shop.example/img/linen-shirt-sand.jpg</g:image_link> <g:price>59.00 USD</g:price> <g:availability>in stock</g:availability> <g:brand>Nordlin</g:brand> <g:google_product_category>Apparel & Accessories > Clothing > Shirts & Tops</g:google_product_category> </item>

Nordlin
Linen shirt Sand
$59
Feed fields
g:id
8236409175213
g:title
Linen shirt Sand
g:description
Breathable linen shirt with a relaxed regular fit.
g:link
https://shop.example/products/linen-shirt-sand
g:price
59.00 USD
g:availability
in stock
g:brand
Nordlin
g:google_product_category
Apparel & Accessories > Clothing > Shirts & Tops
The channel
The exact product, back in front of its viewer
Dynamic Creative builds banners from your feed: previously viewed, recommended and top products, personalized across devices. The feed is the entire catalog behind the ad.
Retargeting and prospecting from one file
AdRoll is a prospecting network as much as a retargeting one, and the same product feed fills both kinds of creative. One file covers the whole funnel.
Your Google feed already speaks the language
AdRoll's field table is written in Google's vocabulary, and a Google Base feed can be registered automatically through AdRoll's API. There is no new format to learn.
The feed
- Google's RSS 2.0 with the g: namespace, exactly the format AdRoll's autoconfigure reads
- One item per product, as AdRoll asks, with the cheapest sellable variant standing for the row
- The id defaults to the numeric Shopify product ID, the same value {{ product.id }} puts in the pixel's adroll_custom_data, so feed and pixel match out of the box
- The compare-at price goes to g:price and the discounted price to g:sale_price, both in AdRoll's “59.00 USD” form; a full-price product sends one price only
- Availability is AdRoll's exact two values, in stock and out of stock, spelled with spaces, so a sold-out product stays in the feed instead of disappearing
- Only AdRoll's ten published fields go out. A gtin or a condition element would travel down the wire unread, because AdRoll parses only what it has a parser configuration for
- The readiness check lists required fields that come out empty (a product without an image or a link) before you hand over the URL
- A stable hosted URL, regenerated as often as every hour, with fetch tracking that warns you if AdRoll's crawler stops coming
Deep dive
A public URL AdRoll crawls
- The feed must be a public
URLAdRoll can periodically crawl:XML,CSV,JSONorTXT, zip or gzip allowed - One file for the whole catalog; extra registered feeds merge into the same catalog, they don't split it
- The crawler identifies itself: IP 54.69.18.100, User-Agent “AdRoll Dynamic Creative Feed Parser bot”
- Sync timing is set per feed; the one interval AdRoll states is weekly for automatic setups
Technical details
AdRoll treats the hosted URL as a requirement, not an option: the feed must be a public URL it can periodically crawl, in XML, CSV, JSON or TXT form, optionally compressed with zip or gzip, encoded in UTF-8. The whole catalog belongs in one file; register several and their products merge into a single catalog. The crawler publishes its identity, IP 54.69.18.100 and the User-Agent “AdRoll Dynamic Creative Feed Parser bot”, so a filtering server can allowlist it.
Feedflock hosts the file on a stable URL and regenerates it on your schedule, as often as every hour, so every AdRoll sync reads current prices and stock. One caveat from AdRoll's own rules: don't restructure a live feed. Rearranging columns or changing the file type without telling support can break the parser configuration and hurt ad performance.
Google's format, AdRoll's ten fields
- A Google Base feed can be registered automatically: AdRoll's autoconfigure reads it directly
- Five required fields: product ID, title, link, image link and price
- Five recommended: description, sale price, availability, Google category and brand
- AdRoll reads only what it has a parser configuration for; extra attributes are carried and ignored
Technical details
AdRoll says it in one sentence: if your product feed uses the Google Products Feed (aka Google Base) format, it can be set up automatically. The help centre's field table is written in Google's vocabulary (title, description, link, image_link, price, sale_price, availability, google_product_category, brand), with product_id the only name that is not Google's. The template emits Google's <g:id>, which a manually configured parser can be pointed at anyway: a parser configuration's path is simply the tag name in the feed.
The required set is five (product ID, title, link, image link and price), with description, sale price, availability, category and brand recommended. Nothing beyond those ten is worth sending. AdRoll parses a field only once it has a parser configuration for it, so a gtin or a condition element would travel down the wire and be ignored.
One row per product, and the pixel makes the match
- AdRoll asks for product-level rows: one unique entry per distinct product
- The cheapest sellable variant stands for the row
- The ID must equal the pixel's adroll_custom_data value exactly, case-sensitive, with no extra spaces
- AdRoll grades the match as a rate; under 40% is a named fault
Technical details
This is the one channel where the feed is deliberately not variant-level. AdRoll asks for one unique entry per distinct product, because a product page fires a single ID into the pixel's adroll_custom_data and the feed must carry one row that matches it. Feedflock renders one item per product, with the cheapest sellable variant standing for the row.
That match is the whole integration: if the pixel-captured ID doesn't match an ID in the feed, personalization fails. AdRoll grades it as a match rate and calls anything under 40% a fault. The template's default id is the numeric Shopify product ID (the value a theme's {{ product.id }} puts in the pixel), and AdRoll's own debugging recipe is to compare the two in the browser console, case-sensitively. On Shopify, AdRoll's native integration can sync the catalog without a feed at all; this template is for control over the file, or for shops not on that integration.
Prices, availability, and the fields AdRoll doesn't have
- Price is an amount, a space and the
ISOcode (“19.99USD”), one currency per feed VATis never mentioned; send the price the landing page charges- Availability knows two spaced values, and a sold-out product stays in the feed marked out of stock
- There is no shipping field, no
GTIN, no condition: a retargeting banner quotes none of them
Technical details
AdRoll states a value shape in exactly two places. The price is an amount, a space and the ISO 4217 code (19.99 USD), with one currency per feed. Availability is exactly in stock or out of stock, spelled with spaces; there is no preorder or backorder. VAT is never mentioned, so the feed sends what the landing page charges, which is also AdRoll's own best practice, because a banner that disagrees with the page wastes ad spend.
Just as notable is what the field table lacks: no shipping element, no barcode, no condition. Temporary unavailability is handled by availability, not removal. AdRoll recommends marking a product out of stock rather than blacklisting it, because a blacklist can outlive the restock.
The takeaway
AdRoll's dynamic ads are only as personal as the match between your pixel and your feed. Feedflock keeps that match intact: one item per product, IDs the pixel recognizes, on a URL AdRoll can always crawl.
Claude · ChatGPT
Or set up your AdRoll feed in chat
Connect Feedflock to Claude or ChatGPT and ask. It creates the feed as a draft, maps your categories to AdRoll's own tree and tells you what is still missing. You approve every change.
Create a AdRoll feed for my store and map my categories.
I'll create it as a draft and show you each change before I make it.
FAQ
Related feeds
Explore all 101 channelsGet on every marketplace that matters this afternoon.
Install free, connect your first feed in minutes, and let Feedflock keep it fresh and validated.