
Oracle Commerce Conversions Missing? Fix Broken Tracking Before You Waste More Budget (2025)
Updated: June 30, 2025 at 09:24 AM
Fix Broken Attribution. Track Real Sales. Scale With Confidence.
Introduction: Your Ad Spend Is High, But Your Data Is Inaccurate
Oracle Commerce shows real revenue. GA4 shows no conversions. Meta shows inflated or repeated ROAS. TikTok, Pinterest, and Microsoft Ads show nothing.
This happens because your tracking setup is outdated or missing. This guide explains how to build a working system using:
- Google Tag Manager (Web and Server)
- Custom dataLayer code
- Server-side tracking (CAPI, Events API, EC)
- Consent Mode v2
Section 1: Common Problems in Oracle Commerce Tracking
- GA4 ecommerce events are not installed
- Meta Pixel fires twice or fails to send values
- No setup for TikTok, Pinterest, or Microsoft tracking
- No server-side setup — Safari and iOS users disappear
- Click IDs like gclid or fbclid are not stored
- GDPR consent is missing
- Events are missing key data: value, currency, transaction ID
Section 2: Tracking Stack Needed for 2025
Web (Client-side):
- Google Tag Manager
- Google Analytics 4
- Meta Pixel
- TikTok Pixel
- Pinterest Tag
- Microsoft UET
- Reddit and LinkedIn Tags
Server:
- GA4 and Google Ads Enhanced Conversions
- Meta Conversions API
- TikTok Events API
- Pinterest Conversion API
- Microsoft Offline Conversions
- LinkedIn CRM Uploads
Privacy:
- Consent Mode v2
- CMP with Cookiebot or OneTrust
Section 3: Sample dataLayer Code
<script>
dataLayer.push({
event: "purchase",
ecommerce: {
transaction_id: "OC123",
currency: "USD",
value: 120.50,
items: [
{
item_id: "sku123",
item_name: "Oracle Product",
quantity: 2,
price: 60.25
}
]
},
event_id: "oracle-purchase-123"
});
</script>
Section 4: GTM Setup (Client + Server)
To track ecommerce events correctly in Oracle Commerce, set up both client-side and server-side containers in Google Tag Manager.
Client-Side GTM:
- Create triggers for these events: view_item, add_to_cart, begin_checkout, purchase
- Use built-in variables or custom JavaScript variables to capture:
- transaction_id
- value
- currency
- items
- Add a blocking trigger or use event_id to prevent duplicate purchase tracking
- Create lookup tables in GTM to standardize currency or correct missing product data
Server-Side GTM:
- Set up GA4, Google Ads, Meta CAPI, TikTok Events API, Pinterest Conversion API
- Forward key events from client-side container with matching event_id
- Securely send hashed user identifiers (email, phone, IP) where allowed
Sample Enhanced GTM dataLayer Push:
<script>
dataLayer.push({
event: "purchase",
ecommerce: {
transaction_id: "OC456",
currency: "USD",
value: 150.00,
items: [
{
item_id: "sku456",
item_name: "Oracle Hoodie",
quantity: 1,
price: 150.00
}
]
},
user_data: {
email: "[email protected]",
phone_number: "+1234567890"
},
event_id: "oracle-oc456-evt"
});
</script>
Validation:
- Use GTM Preview Mode and Chrome Tag Assistant to verify firing
- Use browser console: console.log(window.dataLayer);
- Check that event_id and transaction_id values are unique and accurate
- Confirm server logs for backend tag processing
- Create triggers for view_item, add_to_cart, begin_checkout, and purchase
- Use variables to extract transaction ID, value, and items
- Use event_id to prevent duplicates
- Use lookup tables to fix currency or product values
- Use preview mode and browser console to confirm
Section 5: GA4 Setup
- Create GA4 tags for these steps: view_item, add_to_cart, begin_checkout, and purchase
- Enable Enhanced Ecommerce settings in GA4 property configuration
- Use GTM to map dataLayer values to GA4 tag parameters
- Include parameters like transaction_id, currency, value, and items
- Example GA4 event tag configuration:
- Event Name: purchase
- Event Parameters:
- transaction_id: {{DL – transaction_id}}
- currency: {{DL – currency}}
- value: {{DL – value}}
- items: {{DL – items}}
- Use DebugView in GA4 to verify event data in real time
- Match GA4 revenue with Oracle backend reports for accuracy
Section 6: Google Ads with Enhanced Conversions
To track Google Ads conversions accurately in Oracle Commerce, Enhanced Conversions must be configured using both client-side and server-side data.
- Store the gclid (Google Click ID) in a first-party cookie:
<script>
function storeGCLID() {
const gclid = new URLSearchParams(window.location.search).get('gclid');
if (gclid) {
document.cookie = `gclid=${gclid}; path=/; max-age=2592000`; // 30 days
}
}
storeGCLID();
</script>
- Collect email and phone from the checkout form and push them into the dataLayer:
<script>
dataLayer.push({
event: "purchase",
ecommerce: {
transaction_id: "OC789",
currency: "USD",
value: 250.00,
items: [
{
item_id: "sku789",
item_name: "Oracle Shoes",
quantity: 1,
price: 250.00
}
]
},
user_data: {
email: "[email protected]",
phone_number: "+19876543210"
},
gclid: getCookie("gclid"),
event_id: "oracle-oc789-evt"
});
function getCookie(name) {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
return parts.length === 2 ? parts.pop().split(';').shift() : null;
}
</script>
- Configure GTM Server to receive this event and send it to Google Ads using the Conversion API.
- In Google Ads dashboard:
- Navigate to Tools & Settings → Conversions
- Choose the appropriate conversion action and make sure Enhanced Conversions is turned on
- Monitor conversions under Diagnostics → Tag Diagnostics
This setup ensures better match rates and accurate revenue attribution in your Google Ads reports.
Section 7: Meta Ads (Pixel + CAPI)
To track Meta conversions accurately in Oracle Commerce, combine client-side and server-side tracking using the Meta Pixel and Conversions API.
Pixel Setup (Client-Side):
- Use GTM Web to install the Meta Pixel.
- Track key events: PageView, ViewContent, AddToCart, InitiateCheckout, Purchase.
- Use event_id for each event to deduplicate with CAPI.
- Push ecommerce data to the dataLayer, like this:
<script>
dataLayer.push({
event: "purchase",
ecommerce: {
transaction_id: "OC999",
currency: "USD",
value: 300.00,
items: [
{
item_id: "sku999",
item_name: "Oracle Jacket",
quantity: 1,
price: 300.00
}
]
},
user_data: {
email: "[email protected]",
phone_number: "+11234567890"
},
event_id: "meta-oc999-evt"
});
</script>
Conversions API Setup (Server-Side):
- Set up GTM Server container.
- Forward events using the same event_id.
- Include hashed user identifiers (email, phone, IP).
- Example payload in GTM Server:
{
"event_name": "Purchase",
"event_time": 1719820800,
"event_id": "meta-oc999-evt",
"user_data": {
"em": "hashed_email",
"ph": "hashed_phone",
"client_ip_address": "user_ip",
"client_user_agent": "user_agent"
},
"custom_data": {
"currency": "USD",
"value": 300.00,
"content_ids": ["sku999"],
"contents": [{"id": "sku999", "quantity": 1}],
"content_type": "product"
}
}
Validation:
- Use Meta Events Manager to confirm real-time data.
- Ensure match rate is high by checking email/phone quality.
- Confirm no duplicate events using the event_id.
Section 8: TikTok Pixel and Events API
To track TikTok conversions accurately, combine the TikTok Pixel on the client side with the Events API on the server side.
Client-Side (TikTok Pixel via GTM Web):
- Add TikTok base pixel to GTM Web container.
- Create tags for PageView, ViewContent, AddToCart, Purchase.
- Push values from the dataLayer for each event:
<script>
dataLayer.push({
event: "purchase",
ecommerce: {
transaction_id: "OC888",
currency: "USD",
value: 180.00,
items: [
{
item_id: "sku888",
item_name: "Oracle Backpack",
quantity: 1,
price: 180.00
}
]
},
user_data: {
email: "[email protected]",
phone_number: "+11234567890"
},
ttclid: getQueryParam('ttclid'),
event_id: "tiktok-oc888-evt"
});
function getQueryParam(key) {
const url = new URL(window.location.href);
return url.searchParams.get(key);
}
</script>
- Store ttclid in a first-party cookie for reuse.
<script>
if (getQueryParam('ttclid')) {
document.cookie = `ttclid=${getQueryParam('ttclid')}; path=/; max-age=2592000`;
}
</script>
Server-Side (TikTok Events API via GTM Server):
- Forward purchase events to TikTok with matching event_id.
- Include ttclid, user data, and ecommerce values.
{
"event": "Purchase",
"event_id": "tiktok-oc888-evt",
"timestamp": 1719820800,
"ttclid": "retrieved_ttclid",
"user": {
"email": "hashed_email",
"phone": "hashed_phone",
"ip": "user_ip",
"ua": "user_agent"
},
"properties": {
"currency": "USD",
"value": 180.00,
"content_type": "product",
"content_id": ["sku888"]
}
}
Validation:
- Use TikTok Events Manager to verify that Pixel and Events API are both firing.
- Check that events have correct values and no duplicates.
- Confirm match rates using email and phone.
Section 9: Pinterest Tag and Server Conversion
To track Pinterest conversions effectively in Oracle Commerce, use both the client-side Pinterest Tag and server-side Pinterest Conversion API.
Client-Side Setup (GTM Web):
- Install Pinterest base tag via GTM Web container.
- Create a custom event tag for checkout or purchase.
- Push required event data using dataLayer like this:
<script>
dataLayer.push({
event: "purchase",
ecommerce: {
transaction_id: "OC555",
currency: "USD",
value: 120.00,
items: [
{
item_id: "sku555",
item_name: "Oracle Accessory",
quantity: 1,
price: 120.00
}
]
},
user_data: {
email: "[email protected]",
phone_number: "+1234567890"
},
event_id: "pinterest-oc555-evt"
});
</script>
Server-Side Setup (GTM Server with Pinterest Conversion API):
- Forward the purchase event from the Web container to Server container.
- Use the same event_id for deduplication.
- Send hashed user data (email, phone), currency, value, and product details.
- Example payload for the Pinterest Conversion API:
{
"event_name": "checkout",
"event_time": 1719820800,
"event_id": "pinterest-oc555-evt",
"user_data": {
"em": "hashed_email",
"ph": "hashed_phone",
"client_ip_address": "user_ip",
"client_user_agent": "user_agent"
},
"custom_data": {
"currency": "USD",
"value": 120.00,
"content_ids": ["sku555"],
"contents": [{"id": "sku555", "quantity": 1}],
"content_type": "product"
}
}
Validation:
- Use the Pinterest Tag Helper browser extension to confirm client-side tag firing.
- Monitor the Pinterest Ads dashboard for conversion reporting.
- Verify deduplication via consistent event_id values across platforms.
- Ensure match rates by checking the quality of user data and format.
Section 10: Microsoft Ads (UET) + Offline Conversions
To track Microsoft Ads conversions in Oracle Commerce accurately, implement both client-side and offline tracking.
Client-Side Setup (GTM Web):
- Add the UET base tag in your GTM Web container using the Microsoft Ads template tag.
- Track key events: PageView, ViewContent, AddToCart, Purchase.
- Capture msclkid from the URL and store it in a first-party cookie:
<script>
function storeMSCLKID() {
const msclkid = new URLSearchParams(window.location.search).get('msclkid');
if (msclkid) {
document.cookie = `msclkid=${msclkid}; path=/; max-age=2592000`; // 30 days
}
}
storeMSCLKID();
</script>
- Push purchase event into the dataLayer:
<script>
dataLayer.push({
event: "purchase",
ecommerce: {
transaction_id: "OC222",
currency: "USD",
value: 220.00,
items: [
{
item_id: "sku222",
item_name: "Oracle Accessory",
quantity: 1,
price: 220.00
}
]
},
user_data: {
email: "[email protected]",
phone_number: "+1234567890"
},
msclkid: getCookie("msclkid"),
event_id: "msads-oc222-evt"
});
function getCookie(name) {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
return parts.length === 2 ? parts.pop().split(';').shift() : null;
}
</script>
Offline Conversions:
- Upload offline conversions matched by msclkid and transaction_id.
- You can upload manually in the Microsoft Ads dashboard or automate with their Offline Conversions API.
- Required fields include:
- Microsoft Click ID (msclkid)
- Conversion Name
- Conversion Time
- Revenue (value)
- Currency
Validation:
- Use the Microsoft UET Tag Helper to confirm pixel firing.
- Check conversion uploads in Microsoft Ads under Offline Conversions.
- Make sure click IDs match and data is deduplicated using event_id.
Section 11: Reddit and LinkedIn Tracking
To track Reddit and LinkedIn conversions in Oracle Commerce, use a mix of browser pixels and backend matching.
Reddit Ads (Client-Side Only):
- Add Reddit Pixel via GTM Web using Custom HTML tag.
- Track key events: PageView, ViewContent, AddToCart, Purchase.
- Example dataLayer push:
<script>
dataLayer.push({
event: "purchase",
ecommerce: {
transaction_id: "OCRED123",
currency: "USD",
value: 110.00,
items: [
{
item_id: "skuRED123",
item_name: "Oracle Reddit Item",
quantity: 1,
price: 110.00
}
]
},
event_id: "reddit-ocred123-evt"
});
</script>
- Reddit does not support server-side API as of 2025.
LinkedIn Ads (Pixel + Offline Upload):
- Add LinkedIn Insight Tag via GTM Web.
- Capture li_fat_id from the URL and store in first-party cookie:
<script>
function storeLIFATID() {
const li_fat_id = new URLSearchParams(window.location.search).get('li_fat_id');
if (li_fat_id) {
document.cookie = `li_fat_id=${li_fat_id}; path=/; max-age=2592000`;
}
}
storeLIFATID();
</script>
- Push event data with li_fat_id and ecommerce info:
<script>
dataLayer.push({
event: "purchase",
ecommerce: {
transaction_id: "OCLIN456",
currency: "USD",
value: 210.00,
items: [
{
item_id: "skuLIN456",
item_name: "Oracle LinkedIn Item",
quantity: 1,
price: 210.00
}
]
},
li_fat_id: getCookie("li_fat_id"),
event_id: "linkedin-oclin456-evt"
});
function getCookie(name) {
const value = `; ${document.cookie}`;
const parts = value.split(`; ${name}=`);
return parts.length === 2 ? parts.pop().split(';').shift() : null;
}
</script>
LinkedIn Offline Upload:
- Use CRM or backend system to export:
- li_fat_id
- transaction_id
- revenue, currency, timestamp
- Upload using LinkedIn’s Offline Conversions tool
- Match purchases to ad clicks based on click ID and time
- Add pixels via GTM Web
- Store rdclid and li_fat_id
- Upload conversions for LinkedIn using offline upload tool
Section 12: Consent Mode v2 for Compliance
- Add Consent Mode via GTM tag
- Use CMP to block tags until user gives consent
- Allow or block based on user response
Section 13: Store Attribution Click IDs
Store these in first-party cookies:
- gclid (Google)
- fbclid (Meta)
- ttclid (TikTok)
- msclkid (Microsoft)
- li_fat_id (LinkedIn)
Section 14: Track Conversions from Stripe or PayPal
- Use webhook to detect successful payment
- Send purchase to server using order ID
Section 15: CRM + Delayed Conversion Matching
- Capture user email and phone
- Send to platforms through CAPI or Enhanced Conversions
- Match conversion using click ID
Section 16: Debugging and Validation
- Use GA4 DebugView
- GTM Server log viewer
- Meta Events Manager
- TikTok and Pinterest tag helpers
- Console check: console.log(window.dataLayer);
Section 17: Reporting Checklist
- Match GA4 revenue with Oracle backend reports to ensure event accuracy
- Confirm that GA4 purchase events include correct values for transaction_id, currency, and value
- Validate deduplication: make sure event_id is consistent across web and server containers
- Check match rates for user identifiers in Meta Events Manager and TikTok Events Manager
- Confirm Enhanced Conversions are properly attributed in Google Ads
- Use attribution models in GA4 to compare paid, organic, and direct sources
- Verify that Pinterest and Microsoft Ads are receiving accurate value and item data
- Confirm Reddit and LinkedIn pixel events fire correctly and upload tools reflect conversions
- Review Consent Mode debugging in browser DevTools for allowed/disallowed tags
- Log sample dataLayer pushes in browser console: console.log(window.dataLayer) to confirm structure
- Use GA4 DebugView, GTM Preview, and platform-specific tools for continuous QA
- Match GA4 revenue with backend
- Validate deduplication and user match rates
- Review attribution data per ad platform
Final CTA: Want Help Fixing Your Oracle Tracking?
If your GA4 shows zero purchases, Meta is overcounting, or TikTok and Pinterest have no data — your tracking is broken.
I help clients set up clean, working conversion tracking systems using:
- GTM Web + Server
- Custom dataLayer
- Server-side tagging
You’ll see better ROAS, real attribution, and cleaner reports.
👉 Book your free Oracle Tracking Audit now.