Skip to content

Dynamic Product Ads

How Does it Work?

Dynamic Product Ads (DPAs) are their own step in the Axon ad experience. DPAs make your campaigns more impactful by showcasing personalized product recommendations pulled directly from your synced Product Catalog. Each product links straight to its product detail page, giving shoppers a seamless path from discovery to purchase. For brands with 5+ SKUs, DPAs create more relevant shopping experiences and consistently drive higher performance, with advertisers typically seeing a 10–25% lift in conversion metrics.

The first step is configuring your Product Catalog via the Catalog Manager.

Getting Started

There are three different ways to add your Product Catalog. In Axon Ads Manager, go to the Catalog tab on the right-hand side, click the pencil icon in the top left corner to Edit Catalog, and you’ll see three available methods to choose from as your catalog Data Source.

1. Shopify Connection

Connect Shopify. Sync and Import your products directly from your Shopify store

If you integrated the Shopify App pixel, you can easily sync your product catalog using the Connect Shopify method in the Catalog Manager. In addition to easy setup, the benefit of connecting via Shopify is that your catalog will be up to date with the latest products on your site, including product pricing and availability.

2. Import from a File (CSV Feed)

Import from a file. Import your product catalog using a spreadsheet

CSV stream catalogs give advertisers finer control over what products will be a part of your product catalog. There are two ways advertisers can integrate a CSV streamed catalog:

  1. Data Feed Provider: Advertisers can insert a catalog CSV feed generated through a feed provider, leveraging any of the third-party partners listed here.
  2. Custom CSV File: Advertisers can provide an endpoint for Axon to download the product catalog in a .csv format on a daily basis. If you choose to provide your own CSV file:
  • Use the following Catalog CSV template with your catalog information.
  • Upload your CSV to a publicly accessible location. See this example.
  • Update the uploaded CSV whenever you have changes (daily basis is recommended). AppLovin will sync your catalog stream once per day.
  • Ensure salesPrice never exceeds price, as this will cause catalog sync issues due to data integrity concerns.
  • Ensure that no fields contain commas (you may use commas only to separate fields).
  • Please reference the variant object table for additional details on the required fields for CSV streams.

Important Data Requirements for CSV Feed Method

  • Verify that your pixel sends item_id and item_variant_id with all purchase events, with the proper hierarchy
    • item_id: representing the parent item independent of its variants. Multiple item_variant_ids may share the same item_id.
    • item_variant_id: for example a size or color variation of the parent item. Every variant in your catalog must have an item_variant_id that is not shared by any other variant or item.
  • These fields (item_id and item_variant_id) passed with purchase events should match the values sent in the CSV in their respective columns (itemId and id)

3. Inferred (from Axon Pixel)

From Axon Pixel. Use Axon Pixel event data to automatically generate a catalog and import products

Inferred catalogs are the default method of catalog creation for non-Shopify sites who don’t otherwise provide a CSV stream. This method uses information registered in pixel events to build the product catalog. For finer control over which items are included in your catalog, choose methods 1 and 2.

Important Data Requirements for Inferred Method

  • Verify that your pixel sends item_id and item_variant_id with all purchase and view_item events, with the proper hierarchy
    • item_id: representing the parent item independent of its variants. Multiple item_variant_ids may share the same item_id.
    • item_variant_id: for example a size or color variation of the parent item. Every variant in your catalog must have an item_variant_id that is not shared by any other variant or item.
    • item_id and item_variant_id values passed with purchase events should match those passed with view_item events.
  • Ensure image_url is passed with view_item events, and links to a high quality image with proper file extension.
  • item_category_id is a highly recommended field.

How to Set DPAs Live in Your Campaigns

After syncing your Catalog you are ready to go! Just toggle “Enable Dynamic Product Ads” on during campaign setup and choose which catalog to use.

Additional Information

Glossary

TermDefinition
catalogA catalog holds the products you intend to sell. AppLovin recommends that you have only one catalog for all your products.
variantVariants are individual SKUs to sell. Every SKU should be its own variant. The catalog manager considers variants that have the same itemId to be variants of the same item. For example, a Red Small Shirt, Red Large Shirt, and Blue Large Shirt by the same brand are each their own variant but share the same itemId.

The Variant Object

FieldTypeRequired?Description
additionalImageUrlsString[]noAdditional images associated with the variant. Valid extensions are .jpg, .jpeg, and .png. Use semicolon characters rather than commas to separate items in this array.
additionalVideoUrlsString[]noAdditional videos associated with the variant. Valid extension is mp4. Use semicolon characters rather than commas to separate items in this array.
ageGroupStringnoOne of ADULTS, ALL_AGES, INFANT, KIDS, NEWBORN, or TODDLER
brandStringnoIgnored if another variant exists with the same itemId. Must be no longer than 256 characters.
categoryIdIntegeryesGoogle category ID
descriptionStringyesA short description of the variant. The description should be concise and informative, no longer than 8192 characters.
genderStringnoOne of FEMALE, MALE, or UNISEX
idStringyesThe ID of the variant. This must match the item_variant_id in your pixel. Must be no longer than 64 characters.
isAvailableBooleanyesWhether the variant is available or out of stock
isBundleBooleanyesWhether the variant is a collection of multiple items sold together
itemIdStringyesThe ID shared across variants of an item. This must match the item_id in your pixel. Must be no longer than 64 characters.
multipackQuantityNumbernoThe number of identical items in a single pack
nameStringyesThe name of the variant. Must be no longer than 1024 characters.
numberOfReviewsNumbernoThe total number of reviews of the variant
priceDecimalyesThe price of the variant. If the variant is on sale, price should be the original price before the sale.
primaryImageUrlStringyesThe primary image associated with the variant, shown by default when the variant displays. Valid extensions are .jpg, .jpeg, and .png. Must be no longer than 2048 characters.
primaryVideoUrlStringnoThe primary video associated with the variant, shown by default when the variant displays. Valid extension is mp4. Must be no longer than 2048 characters.
ratingDecimalnoThe rating of the variant, on a scale from 0 to 5. null if there is no rating.
rewardEndDateDateTimenoWhen the rewardPercent validity ends. Format this as a UTC time according to ISO-8601, without a time zone offset (for example: 2025-01-07T00:00:00). If rewardStartDate and rewardEndDate are both null, the rewardPercent is not active. If only rewardEndDate is null, the rewardPercent is active beginning at the rewardStartDate.
rewardPercentNumbernoThe percent-reward that a customer receives for purchasing the variant, expressed as a number between 0 and 100
rewardStartDateDateTimenoWhen the rewardPercent begins to be valid. Format this as a UTC time according to ISO-8601, without a time zone offset (for example: 2025-01-01T00:00:00). If rewardStartDate and rewardEndDate are both null, the rewardPercent is not active. If only rewardEndDate is null, the rewardPercent is active beginning at the rewardStartDate.
salePriceDecimalnoThe on-sale price of the variant. null if the variant is not on sale.
salePriceEndDateDateTimenoWhen the salePrice validity ends. Format this as a UTC time according to ISO-8601, without a time zone offset (for example: 2025-01-07T00:00:00). If salePriceStartDate and salePriceEndDate are both null, the salePrice is not active. If only salePriceEndDate is null, the salePrice is active beginning at the salePriceStartDate.
salePriceStartDateDateTimenoWhen the salePrice begins to be valid. Format this as a UTC time according to ISO-8601, without a time zone offset (for example: 2025-01-01T00:00:00). If salePriceStartDate and salePriceEndDate are both null, the salePrice is not active. If only salePriceStartDate is null, the salePrice is active until the salePriceEndDate.
webUrlStringyesThe product landing page URL. This page must have the pixel running and fire a View Item event.