Overview
Dynamic and catalog ads are a class of campaign that automatically shows a user the right product from your catalog based on what they've actually done in your app — viewed, added to cart, purchased — instead of running one static creative for everyone. Most major ad networks offer their own version of this (Meta's Advantage+ Catalog Ads, Google's Dynamic Remarketing, TikTok's catalog ads). For the ad platform to match that in-app behavior back to a specific catalog item, your app needs to send a defined set of parameters alongside the event itself.
Relevant events
The following actions are the events that networks generally recommend for catalog matching — each has a standard Singular event name you can use regardless of platform, alongside the name the network itself expects:
| Action | Singular standard name | Meta | TikTok | |
|---|---|---|---|---|
| View Content | sng_ |
ViewContent |
view_item |
ViewContent |
| Add to Cart | sng_ |
AddToCart |
add_to_cart |
AddToCart |
| Initiate Checkout | sng_ |
Optional | begin_checkout (strongly recommended) |
Optional |
| Purchase | sng_ |
Purchase |
ecommerce_ |
Purchase |
Standard parameters
| Parameter | Type | Definition |
|---|---|---|
content_id
|
String |
The catalog item's product ID. Can be a single ID, or an array
of IDs (for example ["sku_1","sku_2"]) when one
event covers more than one product. Must match your product catalog
exactly, including case.
|
content_type
|
String |
product or product_group, where the
platform distinguishes the two.
|
value
|
String | The revenue or order total for the event. |
currency
|
String | ISO currency code. |
contents
|
String |
For orders where each product needs its own quantity (and sometimes
its own price): a list pairing each content_id with
those per-item details, instead of one flat ID and one total.
Must be sent as valid, parseable JSON.
|
Payload examples for parameters
One product:
{
"content_id": "sku_10293",
"content_type": "product",
"value": 129.90,
"currency": "USD"
}More than one product in the same order — uses contents instead of a single content_id:
{
"content_type": "product",
"contents": [
{ "content_id": "sku_10293", "quantity": 8 },
{ "content_id": "sku_88213", "quantity": 2 }
],
"value": 311.40,
"currency": "USD"
}Steps to configure
-
Add the standard parameters above to your existing View Content, Add to Cart, and Purchase events (and Initiate Checkout, if targeting Google) via the Singular SDK or S2S.
-
Make sure
content_idvalues match your ad platform's catalog exactly, including case. -
If your catalog ads should open directly to a product page, set your catalog's deep-link field to your app's native URI scheme or Universal/App Link. This is configured through the catalog feed itself, separately from the event parameters above.
-
Add the events in Partner configuration and map them to the relevant network event name.
-
Submit a request to Singular Support with the network, the events involved, and the parameter names your app is sending, so your postback can be mapped.
-
Test on each network individually with a live or preview ad click. Catalog matching can't be verified from a dev sandbox.
The structure above is a guideline — a common pattern that can be used as a starting point if you're running catalog campaigns across more than one network and want one consistent payload to send from the app. The exact field names, and which ones are required, still vary by platform. You can check the specifics for the network you're setting up in: Facebook (Meta) Ads Attribution Integration, Google Ads (AdWords) Mobile App Campaigns Attribution Integration, and TikTok Ads Attribution Integration.
Comments
Please sign in to leave a comment.