Webotic
Free audit
Back to blogMETA · DYNAMIC RETARGETING · CATALOGUE · MOROCCO 2026

Dynamic catalogue retargeting in Morocco: DPA, feed and sequencing— the 2026 ROAS guide

In 2026, dynamic retargeting (Dynamic Product Ads) is the highest-ROAS lever in a Moroccan e-commerce Meta account: where prospecting runs between 1.5 and 3, well-sequenced DPA campaigns deliver 5 to 10× return on ad spend. The mechanic is simple to describe but demanding to execute: a clean catalogue feed, reliable ViewContent and AddToCart events, signal reinforced by the Conversions API (CAPI), and per-audience sequencing — product viewers, cart abandoners, buyers. The weak link is always the signal: without deduplicated events and correct product matching, the DPA shows random products and ROAS collapses. This guide breaks down each building block for a Moroccan COD e-commerce store.

5–10×DPA ROASvs 1.5–3× in prospecting
+20–40%events recoveredAddToCart via CAPI
D1–14hot cart windowbefore signal cools off
0 duplicatesevent_id deduppixel + CAPI on the same purchase
01

Dynamic retargeting: why DPA crushes prospecting on ROAS

Dynamic retargeting — Dynamic Product Ads at Meta — automatically re-shows a visitor the exact products they viewed, added to cart, or abandoned, without you creating a single ad manually. Meta pulls the visuals, prices, and titles straight from your catalogue and assembles the product carousel on the fly for each user. The reason DPA delivers a ROAS 3 to 5 times higher than prospecting is structural: you are not paying to discover intent, you are reactivating it. A user who saw a sofa at 4,900 MAD yesterday is not a cold prospect — they are a buyer in consideration. Re-showing them that specific sofa, at the right moment, with the price and social proof, costs a fraction of the CPA of an acquisition campaign. Concretely, on a typical Moroccan e-commerce account, prospecting runs at a ROAS of 1.5 to 3 depending on the sector and margin. Well-built DPA campaigns — clean feed, reliable events, sequencing — reach 5 to 10. On a 30,000 MAD monthly budget split 70/30 between acquisition and retargeting, DPA often generates the majority of attributed revenue while consuming less than a third of the budget. But this high ROAS is misleading if read in isolation. DPA does not create demand — it capitalizes on the demand generated by prospecting. Cutting acquisition to pour everything into retargeting dries up the audience pool within weeks. DPA is a multiplier, not a source. The right trade-off: continuously feed the top of the funnel, and let DPA convert intent at a lower cost.

  • DPA = automatic re-display of viewed/cart/abandoned products from your catalogue, no manual creation
  • ROAS 5–10× vs 1.5–3× in prospecting — you reactivate intent, you don't discover it
  • DPA multiplies the demand generated by acquisition — it does not create it
  • Typical split: 70% acquisition / 30% retargeting so you don't dry up the audience pool
02

The catalogue feed: the foundation 80% of accounts neglect

No dynamic retargeting works without a clean, synchronized product catalogue. The Meta catalogue is the repository holding each product with its ID, title, price, availability, and image. It is what DPA queries to assemble the ads. A faulty catalogue produces ads with wrong prices, out-of-stock products, or broken images — and ROAS collapses. The absolute rule: the catalogue product ID must exactly match the ID sent by the ViewContent and AddToCart events (the content_ids field). If your site sends the ID "SKU-4021" but the catalogue lists "4021", matching fails silently: Meta does not know which product to re-show and displays random popular products. This is the most frequent and most costly error. The synchronization method matters. Three options: a CSV/XML feed refreshed several times a day, a feed via the Meta API, or the automatic crawl pixel. For a Moroccan e-commerce store with moving stock and promo prices, a scheduled feed every 2 to 6 hours is the minimum. A catalogue updated once a day shows sold products or old prices — a source of dissatisfaction and budget waste. The critical fields beyond the minimum: availability must be reliable so you don't promote out-of-stock items, condition, and above all images in the right format. For the Moroccan market, add the price in MAD, handle VAT correctly in the price field, and — if you run multi-category — structure product sets for fine targeting. A catalogue segmented into product sets enables DPA campaigns per range, with budgets and bids adapted to each margin.

  • The catalogue ID MUST be identical to the events' content_ids — otherwise matching silently breaks
  • Feed synced every 2–6 h minimum: otherwise stale prices and out-of-stock products get shown
  • Critical fields: reliable availability, MAD price with correct VAT, images in the right format
  • Product sets per range = DPA budgets and bids adapted to each margin level
03

ViewContent, AddToCart, Purchase: the events that feed the DPA

Dynamic retargeting feeds on three standard events, and each must pass the right content_ids and the right value. Without these events correctly implemented, the catalogue is there but Meta does not know which product to associate with which visitor. ViewContent fires when a product page is viewed. It must send the content_ids of the viewed product, the content_type (product), the value (price), and the currency (MAD). This is the event that feeds the "viewed this product" audience — the foundation of DPA. A ViewContent that does not send content_ids is useless for dynamic retargeting. AddToCart signals strong intent. It is the most valuable event for DPA: a user who added to cart without buying is the best retargeting candidate. It must pass the same parameters, with the content_ids of the added product. The "added to cart without buying" audience converts at a rate significantly higher than plain visitors. Purchase closes the funnel and serves two purposes: measuring ROAS and excluding buyers from retargeting campaigns. A buyer who keeps getting hammered with the already-purchased product is wasted budget and a degraded experience. The Moroccan COD trap: with cash on delivery, an order placed is not a confirmed purchase. If your Purchase fires at cart validation, you count as conversions orders that will be refused at delivery — sometimes 20 to 40% of volume depending on the sector. The displayed ROAS becomes fictional. Best practice: fire a Purchase event (or a custom event) only at real delivery confirmation, sent server-side. This is where server-side tracking becomes indispensable.

  • ViewContent → "viewed this product" audience: must send content_ids + value + MAD currency
  • AddToCart → the most valuable event: the cart audience converts far better than visitors
  • Purchase → measures ROAS AND excludes buyers from retargeting (otherwise wasted budget)
  • Morocco COD: count as a purchase only confirmed delivery — not the order placed
04

CAPI: why the pixel alone is no longer enough for DPA

In 2026, the browser pixel captures only a fraction of real events. Safari ITP, ad blockers, restrictive browsers, and the end of third-party cookies make 25 to 45% of ViewContent, AddToCart, and Purchase signals disappear before they reach Meta. For a lever as signal-dependent as DPA, this loss is fatal: fewer catalogue events = smaller audiences = fewer products re-shown = declining ROAS. The Conversions API (CAPI) solves this by sending events directly from your server to Meta, bypassing the browser. The server sees everything: the product view, the add to cart, the confirmed purchase. Combined with the pixel, CAPI typically recovers 20 to 40% additional AddToCart and Purchase events — that much signal reinjected into the catalogue and retargeting audiences. The non-negotiable technical point: deduplication. Since the same purchase can arrive twice — once via the pixel, once via CAPI — each event must carry an identical event_id client-side and server-side. Meta recognizes the duplicate via this event_id and counts the event only once. Without deduplication, you artificially double your conversions, your displayed ROAS explodes, and your budget-allocation decisions become wrong. For DPA specifically, CAPI must absolutely pass the content_ids in the server events, exactly like the pixel. A CAPI that sends Purchases without content_ids measures ROAS well but does not feed the catalogue for product retargeting audiences. Implementation via GTM Server-Side lets you cleanly manage the pixel and CAPI in parallel, with reliable event_id deduplication and content_ids on every event.

  • The pixel alone loses 25–45% of events — fatal for a signal-dependent lever like DPA
  • CAPI = server events → Meta: +20–40% of AddToCart and Purchase recovered
  • event_id deduplication mandatory: pixel + CAPI on the same purchase, counted once
  • CAPI must pass content_ids server-side, otherwise it does not feed the DPA
05

Sequencing: viewers, carts, buyers — each its own campaign

A high-performing dynamic retargeting setup does not target "everyone who visited the site" with a single message. It segments by intent level and by freshness, with different treatment for each audience. Sequencing is what separates a DPA at ROAS 3 from a DPA at 8. First audience: recent cart abandoners (D1 to D7). This is the hottest and most profitable audience. These users added to cart without finalizing — often because of a delivery fee, a hesitation, a distraction. A DPA re-showing them their exact product, optionally with an incentive (free delivery, COD guarantee), converts at a very high ROAS. Priority budget, aggressive bid. Second audience: product viewers without add-to-cart (D1 to D14). Real but weaker intent. Re-show them the viewed products, sometimes broadened to similar products from the same product set. Longer window because the decision cycle is slower, but moderate budget and bid. Third layer: the systematic exclusion of recent buyers (D0 to D30 depending on the repurchase cycle). A customer who just bought should not see the ad for the purchased product — unless there is explicit cross-sell logic (complementary products via another product set). Failing to exclude buyers is the error that silently wastes the most budget. The time window is decisive in Morocco. The signal cools quickly: beyond 14 days, purchase intent drops and so does ROAS. Concentrate the budget on D1–14 for hot carts and viewers. Finally, cap the frequency: beyond 4 to 6 impressions per week, the same product looping back irritates more than it converts, and cost per acquisition rises.

  • Cart abandoners D1–7: most profitable audience, priority budget and aggressive bid
  • Product viewers D1–14: weaker intent, longer window, moderate budget
  • Exclude recent buyers D0–30: otherwise budget wasted on already-converted customers
  • Cap frequency at 4–6 impressions/week: beyond that, irritation drives CPA back up
06

Running and troubleshooting a DPA: diagnostics and common errors

A dynamic retargeting setup is managed on two levels: signal health (catalogue + events) and campaign performance (ROAS, frequency, coverage). Neglecting the first makes the second impossible to optimize. First diagnostic reflex: catalogue health and the matching rate. Meta shows in the catalogue manager how many events are correctly associated with a catalogue product. A low matching rate (below 80%) almost always signals a mismatch between the content_ids sent and the catalogue IDs. This is the first thing to check when a DPA underperforms for no apparent reason. Second check: feed freshness and diagnostic errors. Products rejected for missing image, zero price, incorrect availability — every rejected product is a product the DPA cannot re-show. A catalogue at 90% active products leaves 10% of potential revenue on the table. Third check: event quality in the events manager. The Event Match Quality (EMQ) score, the presence of content_ids, effective pixel/CAPI deduplication. A low EMQ degrades Meta's ability to find the user and re-show them the right product. The most frequent errors we fix at Webotic: content_ids missing or in the wrong format on events, catalogue not deduplicated with the pixel, no buyer exclusion, a retargeting window too long that wastes on cold audiences, and — specific to Moroccan COD — Purchase fired at order and not at confirmed delivery, inflating a fictional ROAS. Fixing these five points is often enough to turn a mediocre DPA into a profitable lever.

  • Matching rate below 80% = content_ids / catalogue ID mismatch: the first cause of underperformance
  • Check rejected products (image, zero price, availability): each rejection = lost revenue
  • Monitor EMQ and pixel/CAPI deduplication in the events manager
  • Common COD errors: Purchase at order instead of confirmed delivery = fictional ROAS

FAQ

What ROAS should I expect from a dynamic retargeting campaign in Morocco?
A well-built dynamic retargeting setup (DPA) typically shows a ROAS of 5 to 10 on a Moroccan e-commerce account, versus 1.5 to 3 for prospecting. The gap is explained by the nature of the lever: DPA reactivates an already-existing purchase intent — a viewed or carted product — instead of creating it. This high ROAS depends directly on signal reliability: an up-to-date catalogue feed, correctly implemented ViewContent and AddToCart events, and the Conversions API to avoid losing 25 to 45% of signals. Be careful not to over-interpret this number: DPA does not generate demand, it capitalizes on the demand from prospecting. Cutting acquisition to pour everything into retargeting dries up the audience pool within weeks. In Moroccan COD e-commerce, also verify that ROAS is calculated on confirmed deliveries, not placed orders — otherwise the figure is fictional.
Why does my DPA show products the visitor never viewed?
This is almost always a matching problem between the catalogue and the events. Dynamic retargeting associates a product with a visitor via the content_ids: the ID sent by the ViewContent and AddToCart events must exactly match the product ID in the Meta catalogue. If your site sends "SKU-4021" but the catalogue lists "4021", matching fails silently. Meta then does not know which product to re-show and defaults to popular catalogue products, unrelated to actual browsing. Check the event matching rate in the catalogue manager: below 80%, you have an ID format problem. The fix is to strictly align the content_ids sent site-side (and server-side via CAPI) with the catalogue IDs. This is the most frequent and most costly error in dynamic retargeting.
Is CAPI mandatory for high-performing dynamic retargeting?
Technically no, but in practice the Conversions API has become indispensable in 2026. The browser pixel alone loses 25 to 45% of events due to Safari ITP, ad blockers, and the end of third-party cookies. For a lever as signal-dependent as DPA, this loss directly reduces the size of retargeting audiences and the number of products re-shown — hence the ROAS. CAPI sends events from your server directly to Meta, recovering 20 to 40% additional AddToCart and Purchase events. Two conditions for this to serve the DPA: deduplication via an identical event_id on the pixel and server side so conversions are not double-counted, and passing content_ids in the server events. A CAPI that sends Purchases without content_ids measures ROAS but does not feed the retargeting catalogue. Implementation via GTM Server-Side handles both points cleanly.
How do I handle dynamic retargeting with cash on delivery (COD)?
COD imposes a specific rule: distinguish the order placed from the confirmed purchase. If your Purchase event fires at cart validation, you count as conversions orders that will be refused at delivery — often 20 to 40% of volume depending on the sector. Your DPA ROAS then becomes fictional, and Meta optimizes toward profiles that order but do not receive. Best practice: fire the real conversion event only at delivery confirmation, sent server-side via CAPI, once payment is collected. You can keep an intermediate event (order placed) for tracking, but the conversion value Meta optimizes on must reflect the real delivery. This distinction is what separates a flattering displayed ROAS from a real, actionable one. It is also why server-side tracking is nearly unavoidable for a serious Moroccan COD e-commerce store.
What retargeting window and frequency for the DPA?
The window depends on intent. For cart abandoners — the hottest audience — concentrate the budget on D1 to D7: that is when intent is highest and ROAS is greatest. For plain product viewers, extend to D14, as the decision cycle is slower. Beyond 14 days, intent cools markedly and ROAS drops: keeping 30- or 60-day windows wastes budget on cold audiences. On frequency, cap at 4–6 impressions per week per user. Beyond that, the same product looping back generates irritation, drops click-through rate, and pushes cost per acquisition up. Don't forget to exclude recent buyers (D0 to D30 depending on your repurchase cycle): continuing to target a customer who just bought the already-acquired product is one of the most silent forms of waste in dynamic retargeting.
How much budget should I allocate to dynamic retargeting versus acquisition?
A healthy starting split is roughly 70% for acquisition (prospecting) and 30% for dynamic retargeting, to be adjusted according to account maturity and traffic volume. The reasoning: DPA shows a far higher ROAS, but it only works on the demand generated by acquisition. Concentrating all budget on retargeting is tempting because of the flattering ROAS, but it dries up the audience pool within weeks — no one new left to retarget. Conversely, under-investing in retargeting leaves hot intent unconverted. The right steering indicator is not the isolated ROAS of each campaign, but the account's overall ROAS and the size of retargeting audiences over time. If your cart and product-viewer audiences shrink, that is the signal to reinject into acquisition. Webotic manages this trade-off continuously rather than on fixed budgets.
DYNAMIC RETARGETING

Take off with your DPA ROAS

Catalogue audit, CAPI + deduplication implementation, viewer/cart/buyer sequencing, and COD handling. Fixed monthly retainer — never a percentage of your ad spend.

Request a retargeting audit