
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.

Setup
Live in five steps
From a bare Shopify store to a listed offer: the whole setup fits into one coffee break.
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.
Install Feedflock
Add Feedflock from the Shopify App Store. It reads your products, variants, stock and images directly through the Shopify API.
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.
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.
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
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.
The feed
What the channel receives
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

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
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
CSVis 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.
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.
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 ownCSVtemplate
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.
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.
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
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.