Tracking and Measurement
Meta Ads Catalog and Content ID Audit for Shopify
Match Shopify products and variants with Meta catalogue IDs across Pixel and Conversions API events for reliable dynamic ads.
Meta catalogue ads depend on a clean connection between three systems:
- The products in the ecommerce store
- The items in the Meta catalogue
- The content IDs sent through Pixel and Conversions API events
When those identifiers do not match, Meta may receive product-view, add-to-cart and purchase events without knowing which catalogue item they belong to. Dynamic product ads can lose coverage, reporting becomes less useful and the platform has weaker product-level signals.
This audit shows how to diagnose the connection without assuming that an installed integration is automatically correct.
What a content ID does
A content ID identifies the product or variant involved in an event.
For an ecommerce event, Meta may receive information such as:
- Event name
- Content ID
- Content type
- Value
- Currency
- Quantity
- Event ID
- Customer information
The content ID should correspond to the identifier used by the connected catalogue.
A common problem is that one system uses the Shopify product ID while another uses the variant ID, SKU or a prefixed identifier.
Map the identifier used by every system
Create a table before changing anything.
| System | Identifier example | Product or variant level? |
|---|---|---|
| Shopify product | Product | |
| Shopify variant | Variant | |
| SKU | Variant or custom | |
| Meta catalogue item | ||
| Browser ViewContent | ||
| Browser AddToCart | ||
| Server Purchase |
The goal is not to force every internal system to use one ID. The goal is to ensure that the event ID sent to Meta matches the catalogue identifier expected for that item.
Decide whether the catalogue is product-level or variant-level
Variant-level catalogues are useful when price, availability, image or destination differs by variant.
Product-level catalogues may be simpler when variants are not advertised independently.
Check whether:
- Every sellable variant appears
- Variant prices are accurate
- Variant availability is accurate
- Images match the selected variant
- Product URLs open the correct product or variant
- Content IDs use the same level
A product-level event cannot always map cleanly to a variant-level catalogue item.
Audit the catalogue item ID
For several representative items, record:
- Catalogue item ID
- Retailer ID
- Product or variant title
- SKU
- Product URL
- Variant URL
- Price
- Currency
- Availability
- Image
Include:
- Bestseller
- Product with many variants
- Sale product
- Bundle
- Subscription product
- Recently added product
- Out-of-stock product
- Product with a previous ID change
Test ViewContent
Open a product page and inspect the event received by Meta.
Confirm:
- ViewContent fires once per intended page view
- Content ID is present
- Content type is correct
- Value is reasonable
- Currency is correct
- The ID exists in the catalogue
- The selected variant is represented correctly
- Browser and server events are not creating unintended duplicates
A ViewContent event with the wrong content ID may still appear as a healthy event while failing to match a catalogue item.
Test AddToCart
Add several variants to the cart.
Confirm:
- AddToCart fires after the actual action
- Correct variant ID is sent
- Quantity is correct
- Price is correct
- Currency is correct
- Multiple quantities are represented correctly
- Cart drawer and full cart behave consistently
- Quick-add buttons use the same identifier logic
Quick-add, bundle and subscription widgets often use different scripts from the standard product form.
Test InitiateCheckout
Confirm that checkout events contain the items actually in the basket.
Review:
- Item IDs
- Quantity
- Value
- Currency
- Bundle components
- Subscription items
- Discounted items
- Free gifts
The value definition should be consistent with the purchase event.
Test Purchase
Complete a controlled order and record:
| Field | Browser event | Server event | Catalogue |
|---|---|---|---|
| Event ID | Not applicable | ||
| Content IDs | |||
| Value | |||
| Currency | |||
| Quantity | |||
| Order ID | Not applicable |
Confirm:
- Every purchased item is represented
- Content IDs exist in the catalogue
- Browser and server events refer to the same order
- Deduplication identifiers match
- Value and currency agree
- Quantity is correct
- Test orders can be identified
- Failed payments do not create completed purchases
Review event match and catalogue match separately
Customer-data match quality and catalogue-item matching are different problems.
Customer-data matching may use information such as hashed email, phone or browser identifiers.
Catalogue matching depends on content IDs and catalogue item identifiers.
A setup can have strong customer-data matching while product IDs remain inconsistent.
Common Shopify identifier patterns
Shopify integrations may use patterns such as:
- Product ID only
- Variant ID only
- Product ID plus variant ID
- A prefix combined with product or variant ID
- SKU
- Country or market-specific identifiers
Do not guess the pattern from one event. Compare a real product in Shopify, the Meta catalogue and the event payload.
Audit bundles
Bundles create special problems.
A bundle may be represented as:
- One bundle product
- Several component variants
- A virtual product that does not exist in the standard feed
- A discounted collection of regular products
Decide whether Meta should receive:
- The bundle item ID
- The component IDs
- Both, through separate documented logic
The purchase value must not be duplicated across the bundle and its components.
Audit subscriptions
Confirm whether the catalogue contains the standard product, subscription variant or both.
Review:
- First-order purchase
- Subscription discount
- Renewal events
- Product ID used at checkout
- Cancellation and refund handling
- Whether renewals should be included in acquisition reporting
A renewal should not be treated as a new customer acquisition event without a clear reason.
Review feed health
Content IDs cannot solve a weak catalogue.
Check:
- Missing products
- Duplicate products
- Rejected items
- Incorrect prices
- Stale availability
- Broken URLs
- Low-quality images
- Missing variant attributes
- Unsupported claims
- Country or market mismatches
Dynamic ads can only use eligible catalogue items.
Review product-set rules
Product sets may be built from:
- Product type
- Collection
- Brand
- Price
- Availability
- Custom labels
- Margin tier
- Bestseller status
Confirm that rule-based sets still include the intended products after feed changes.
A renamed product type or missing custom label can empty a product set without changing the campaign itself.
Audit landing-page destinations
For catalogue items, check that the click opens:
- The correct product
- The correct variant where possible
- The correct market
- The correct currency
- An available item
- A mobile-friendly page
- The advertised price
- The correct offer
A perfect identifier match cannot rescue an inaccurate landing page.
Build a mismatch report
| Store item | Catalogue ID | Event content ID | Match? | Issue | Action |
|---|---|---|---|---|---|
Classify issues:
- Missing in catalogue
- Product-versus-variant mismatch
- Prefix mismatch
- SKU mismatch
- Stale product
- Bundle logic
- Market-specific mismatch
- Duplicate item
Prioritize fixes
Critical
Purchase IDs do not match the catalogue, values are duplicated or the wrong products are reported.
High
Best-selling product views and carts fail to match.
Medium
Low-volume variants or product sets are incomplete.
Monitor
Small explained differences that do not affect eligible advertised products.
Retest after changes
After changing the feed, integration or event logic:
- Allow the catalogue to refresh
- Recheck item IDs
- Test product view
- Test add to cart
- Test checkout
- Complete a purchase
- Confirm deduplication
- Confirm dynamic product eligibility
- Review campaign delivery
- Document the final identifier pattern
Common mistakes
Assuming the official app guarantees perfect matching
Custom themes, bundles, subscriptions and old scripts can still create conflicts.
Checking only the event name
Purchase fires, but the product IDs are wrong.
Using SKU without stable SKU governance
SKUs change or remain blank for some variants.
Mixing product and variant IDs
Different funnel events refer to different catalogue levels.
Ignoring markets
Country-specific feeds or URLs create mismatches.
Fixing IDs without testing the full order
ViewContent works, but Purchase still fails.
Final principle
Meta catalogue tracking is healthy only when the exact products customers view, add and purchase can be matched back to eligible catalogue items.
Map the identifier pattern, test every funnel stage, reconcile browser and server purchases, and document special handling for variants, bundles, subscriptions and international markets.
Continue with the Dynamic Product Ads guide and Shopify tracking audit.
Book a free Beelog profit audit to review your Meta catalogue, Pixel, Conversions API and Shopify product data together.
Turn this insight into an action plan.
Beelog reviews paid media, tracking, product economics, creative and conversion rate together, then prioritizes the changes most likely to improve profit.
Book Your Free Profit AuditContinue reading
Tracking and Measurement
Shopify Ads Tracking Audit: Meta Pixel, CAPI, GA4 and Google Ads
A practical Shopify tracking audit for purchase events, revenue values, deduplication, enhanced conversions and platform discrepancies.
Read postTracking and Measurement
Meta Ads vs Google Ads Attribution: Why Revenue Never Matches
Understand why Meta, Google Ads, GA4 and Shopify report different revenue, then build a measurement process that supports better decisions.
Read postTracking and Measurement
New Customer Acquisition Reporting for Meta and Google Ads
Separate new and returning customer performance using store data, platform attribution, contribution profit, cohorts and payback period.
Read post