Skip to content
AppLovin
Ad platforms

AppLovin feed for Shopify

AppLovin's Dynamic Product Catalog shows personalized product recommendations in your Axon ad campaigns, each product linking to its own product page in your shop. One way to supply the catalog is a CSV file on a public URL that AppLovin downloads once a day. Feedflock turns your Shopify catalog into exactly that file, in AppLovin's own column names and its comma-free dialect, with full control over which products are advertised.

01 · ShopifyProduct in the catalog
Linen shirt SandNordlin · Men's shirtsSKU-2048 · S–XL
Price
$59
In stock
0 pcs
When out of stock
02 · applovin.csvUpdated just now
id,name,itemId,price,salePrice,salePriceStartDate,salePriceEndDate,isAvailable,webUrl,description,brand,categoryId,primaryImageUrl,additionalImageUrls
46012345678901,Linen shirt Sand,8812345678901,59.00,,,,FALSE,https://shop.example/products/linen-shirt-sand?variant=46012345678901,Breathable linen shirt with a relaxed regular fit.,Nordlin,212,https://cdn.shop.example/img/linen-shirt-sand.jpg,https://cdn.shop.example/img/linen-shirt-sand-back.jpg;https://cdn.shop.example/img/linen-shirt-sand-detail.jpg

Setup

Live in five steps

From a bare Shopify store to a listed offer: the whole setup fits into one coffee break.

  1. Set up AppLovin and its pixel

    You need an AppLovin advertiser account and the AppLovin Pixel running on your shop. Every product page in the catalog must fire a view item event, and the pixel's item ids are what the catalog is matched against.

  2. Install Feedflock

    Add Feedflock from the Shopify App Store. It reads your products, variants, stock and images directly through the Shopify API.

  3. Pick the AppLovin template

    Create a new feed and choose AppLovin. The seven required fields are mapped from the start: id, itemId, name, price, isAvailable, primaryImageUrl and webUrl, plus description, brand, categoryId and additional images. One row per variant, no quoting.

  4. Match the ids and map categories

    Check that id and itemId equal the item_variant_id and item_id your pixel sends: the defaults are Shopify's numeric variant and product ids. Set the category mapping to send Google's numeric ID, because categoryId is an integer.

  5. Connect the feed URL in Catalog manager

    In Ads Manager, click the tag icon to open the Catalog manager, then the pencil icon next to your catalog. On the Edit Catalog page choose the data source Import from a file and provide the hosted URL. Then activate Enable Dynamic Catalog when you create a campaign.

    https://feedflock.appfleece.com/f/demo-applovin/applovin.csv
Feed health

Catch feed issues before AppLovin 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.

Feed quality · applovin.csv
79 / 100
To review: 4
No image on 7 productsprimaryImageUrl is one of AppLovin's seven required fields: it is the image shown by default when the variant displays. These products have no image in Shopify.
No category ID on 23 productscategoryId is optional in the catalog, but AppLovin calls the category a highly recommended field. These products have no Google category mapped.
Empty description on 6 productsdescription is optional, and AppLovin asks for it to be concise and informative. These products have no description in Shopify, so the column stays empty.
Empty brand on 4 productsbrand is optional and read once per item: AppLovin ignores it on a row if another variant with the same itemId exists. These products have no vendor in Shopify.

The feed

What the channel receives

applovin.csv
id,name,itemId,price,salePrice,salePriceStartDate,salePriceEndDate,isAvailable,webUrl,description,brand,categoryId,primaryImageUrl,additionalImageUrls
46012345678901,Linen shirt Sand,8812345678901,59.00,,,,TRUE,https://shop.example/products/linen-shirt-sand?variant=46012345678901,Breathable linen shirt with a relaxed regular fit.,Nordlin,212,https://cdn.shop.example/img/linen-shirt-sand.jpg,https://cdn.shop.example/img/linen-shirt-sand-back.jpg;https://cdn.shop.example/img/linen-shirt-sand-detail.jpg
Live preview
Linen shirt Sand

Nordlin

Linen shirt Sand

$59

Feed fields

id

46012345678901

name

Linen shirt Sand

itemId

8812345678901

price

59.00

isAvailable

TRUE

webUrl

https://shop.example/products/linen-shirt-sand?variant=46012345678901

description

Breathable linen shirt with a relaxed regular fit.

brand

Nordlin

categoryId

212

The channel

Product ads in mobile games

AppLovin is an advertising platform, not a marketplace: its ads run on mobile-game inventory and nothing is sold on AppLovin itself. Every product in a dynamic ad links to its product page, and checkout stays in your shop.

Personalized from your own catalog

Dynamic Product Catalog showcases personalized product recommendations drawn from your catalog. AppLovin recommends it for brands with five or more SKUs, where a catalog creates more relevant shopping experiences than a single offer.

Joined to behaviour by the pixel

There is no product database to be matched against. AppLovin joins your catalog to what shoppers do through the pixel's item ids, which is why two ids in the feed matter more than anything else in it.

The feed

  • AppLovin's own camelCase vocabulary in the order of its Catalog CSV template: id, name, itemId, price and the rest, not Google's column names
  • All seven required fields mapped from the start, one row per variant, variants grouped by a shared itemId
  • Comma-free by construction: no quoting, and a comma or line break inside a value is replaced with a space so no column can shift
  • price carries the price you charge now, and the three sale fields stay empty unless you supply a real sale window
  • isAvailable written TRUE or FALSE in uppercase, as AppLovin's own sample rows do, with sold-out variants kept in the file
  • Variant-pinned webUrl, so the landing page shows the same variant and price as the catalog row
  • Additional images in one cell, separated by semicolons the way AppLovin asks
  • Product selection, exclusions and per-field mapping on a public URL, regenerated as often as every hour

Deep dive

01

A daily sync from a public URL

  • AppLovin downloads the catalog as a .csv from an endpoint you provide, on a daily basis
  • The catalog stream is synced once per day, and AppLovin recommends updating it daily
  • CSV is the only file format AppLovin names
  • No item cap, file-size cap or fetch authentication is stated
Technical details

AppLovin's Catalog manager offers three data sources: an inferred catalog built from pixel events, a file import and a direct Shopify connection. The file route is a custom CSV: you put the catalog at a publicly accessible location and AppLovin downloads it on a daily basis, syncing the catalog stream once per day. AppLovin's own words for why you would choose it are that CSV stream catalogs give you finer control over which products are in your product catalog.

Feedflock hosts that CSV on a stable public URL and regenerates it as often as every hour, so the daily sync always reads current prices and availability. CSV is the only format AppLovin names for the file, and it publishes no item or size cap. It also publishes no validator or diagnostics page, so the practical check after connecting is the catalog's own item count and preview in Catalog manager once the first sync has run.

02

Two ids that must match your pixel

  • id is the variant's ID and must match the pixel's item_variant_id (max 64 characters)
  • itemId is shared across the variants of an item and must match the pixel's item_id (max 64 characters)
  • Every variant needs an id not shared by any other variant or item
  • webUrl must be a page with the pixel running that fires a view item event
Technical details

AppLovin has no catalogue of its own to pair your products with. It joins the feed to shopper behaviour, on two ids at once: id must match the item_variant_id in your pixel, and itemId must match the item_id. If they do not match, the file still imports and the ads still serve, but purchases cannot be attributed to products. This is the one thing to verify before anything else.

Feedflock's defaults are Shopify's numeric variant ID for id and the numeric product ID for itemId, the choice that is unique by construction. Compare them with what your pixel actually sends in its events, and if your pixel sends something else, such as the SKU, switch the id mapping to match. Every SKU is its own row, and rows sharing an itemId are treated as variants of one item. The webUrl is pinned to the variant, and AppLovin requires that page to have the pixel running and fire a view item event.

03

A CSV with no quotes and no commas

  • No field may contain a comma, a newline or a carriage return
  • The file is written without quoting; Feedflock replaces those characters with a space
  • Arrays such as additionalImageUrls use semicolons inside one cell
  • Booleans are written TRUE / FALSE, as in AppLovin's own CSV template
Technical details

Most CSV dialects protect a comma inside a value by quoting the cell. AppLovin's does the opposite and bans the characters: commas may only separate fields, and no field may contain a comma, a newline or a carriage return, because they cause processing issues. Feedflock therefore writes the file without any quoting and replaces a comma or line break inside a value with a space, so a description with a comma can never shift a column.

Where a field holds several values, they sit in one cell separated by semicolons: that is how additional image URLs are sent. AppLovin's own Catalog CSV template also settles the details the prose leaves open, such as the column order and the uppercase TRUE and FALSE for Booleans, and the template follows it. Valid image extensions are .jpg, .jpeg and .png, and AppLovin's sample image URLs carry a query string after the extension, so Shopify's CDN addresses fit the pattern.

04

Price, sale price and what is not in the feed

  • price is a bare decimal number; there is no currency column anywhere in the catalog
  • A salePrice needs both salePriceStartDate and salePriceEndDate, and must never exceed price
  • categoryId is Google's numeric category ID, not a category path
  • No barcode, condition or shipping field exists in AppLovin's vocabulary
Technical details

The catalog has no currency column: price is a bare number, and currency lives on the pixel's events instead. The sale price is the trap. AppLovin documents that a salePrice is not active when both of its dates are empty, and that if you include salePrice, both salePriceStartDate and salePriceEndDate are mandatory. Shopify's compare-at price has no dates, so the familiar habit of sending the full price plus a sale price would produce a sale that is documented as inactive, and an ad showing the higher price. Feedflock's default therefore puts the price you charge now in price and leaves all three sale columns empty. If you keep a real sale window, map all three together, and never let salePrice exceed price.

The rest of the vocabulary is leaner than a Google-style feed. The category is categoryId, an integer holding Google's category ID, so the feed's category mapping should send the ID form. There is no GTIN or any other barcode field, no condition and no shipping element of any kind. Fields Shopify has no source for, such as videos, ratings, age group, gender, rewards and labels, are in the template without a default, and a fresh feed simply does not write them until you map them.

The takeaway

One public URL, a daily sync and a CSV in AppLovin's own dialect: camelCase columns, comma-free rows, ids ready to be matched to your pixel and a price column that always says what you charge. You decide which products go into your dynamic ads, and your Shopify catalog stays the single source of truth.

Claude · ChatGPT

Or set up your AppLovin feed in chat

Connect Feedflock to Claude or ChatGPT and ask. It creates the feed as a draft, maps your categories to AppLovin's own tree and tells you what is still missing. You approve every change.

feedflock · mcp

Create a AppLovin 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

If you run AppLovin's Shopify app pixel, the Connect Shopify data source can sync your catalog without a feed. The CSV route earns its place when you want control over which products are advertised: AppLovin itself says CSV stream catalogs give finer control over what is in the catalog. It is also the route if you do not use the Shopify app.
Two. The id column must match the item_variant_id your pixel sends, and itemId must match the item_id. Feedflock defaults to Shopify's numeric variant and product ids. If your pixel sends different values, change the mapping so they match, otherwise purchases cannot be attributed.
Because AppLovin's format forbids the characters quoting would protect: no field may contain a comma, a newline or a carriage return. Feedflock writes the file unquoted and replaces those characters inside values with a space, so every row keeps the same number of columns.
Because a sale price without dates is documented as not active: if you include salePrice, both salePriceStartDate and salePriceEndDate are mandatory. Shopify's compare-at price has no dates, so by default the price column carries the price you charge now. With a real sale window, map all three sale fields together.
Not in the catalog. There is no currency column, and price is a bare number. AppLovin reads the currency from the pixel, where every event carries a three-letter ISO 4217 code.
AppLovin syncs a CSV catalog stream once per day and recommends that you update the file daily. Feedflock regenerates it as often as every hour, so the daily sync always reads current data.
Yes, and it is the main reason to use the CSV route. Filter by collection, tag, vendor, price or stock level, or leave out individual variants. The CSV is one row per variant, so excluding a size or colour removes exactly that row.

Get on every marketplace that matters this afternoon.

Install free, connect your first feed in minutes, and let Feedflock keep it fresh and validated.

.myshopify.com