> ## Documentation Index
> Fetch the complete documentation index at: https://docs.datalyr.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Data Discrepancies

> Understand why numbers differ between DATALYR and other platforms

Numbers in DATALYR not matching ad platforms, Shopify, or analytics tools? This guide explains common discrepancies and why they occur.

## Why Discrepancies Happen

**Different Tracking Methods:**
Each platform tracks data differently, causing natural variation.

**Common Reasons:**

* Attribution windows differ
* Deduplication logic varies
* Time zones not aligned
* Tracking method differences (client vs server)
* View-through vs click-through attribution
* Data processing delays

**Expectation:** 5-15% variance is normal. Larger discrepancies need investigation.

## DATALYR vs Ad Platforms

### Meta Ads Discrepancies

**DATALYR Shows More Conversions:**

**Causes:**

1. **Attribution Window Difference:**
   * DATALYR: 30-day default
   * Meta: 7-day click, 1-day view

2. **View-Through Attribution:**
   * DATALYR: Click attribution only
   * Meta: Includes view-through conversions

3. **Multi-Touch Attribution:**
   * DATALYR: Last-click attribution
   * Meta: Can credit multiple touchpoints

**Fix:**
Compare apples-to-apples:

* Meta: Use 7-day click window (remove view-through)
* DATALYR: Filter conversions attributed to Meta within 7 days

**Meta Shows More Conversions:**

**Causes:**

1. **Pixel and CAPI Duplication:**
   Both Meta Pixel and DATALYR CAPI installed, conversions counted twice.

   **Check:** Meta Events Manager → Diagnostics → Deduplication status

   **Fix:** DATALYR automatically deduplicates. If seeing duplicates, verify event\_id consistency.

2. **Offline Conversions:**
   Meta may count offline conversions DATALYR doesn't track.

3. **Attribution Model:**
   Meta using multi-touch attribution instead of last-click.

   **Fix:** Meta Ads → Attribution settings → Select "Last-click" model

**Revenue Mismatch:**

**Causes:**

1. **Currency Conversion:**
   Different exchange rates or timing.

2. **Refunds:**
   DATALYR tracks refunds, Meta may not.

3. **Value Mapping:**
   Conversion Rule mapping wrong field (order total vs item total).

**Fix:**
Verify Conversion Rule maps `revenue` field correctly:

```javascript theme={null}
datalyr.track('purchase', {
  revenue: 99.99,  // Must match order total
  currency: 'USD'
});
```

### Google Ads Discrepancies

**DATALYR Shows More Conversions:**

**Causes:**

1. **Attribution Window:**
   * DATALYR: 30-day default
   * Google: 30-day default (configurable)

2. **Conversion Counting:**

   * DATALYR: Every conversion
   * Google: One conversion per click (default)

   **Fix:** Google Ads → Conversions → Conversion action → Counting → Select "Every"

3. **Enhanced Conversions Not Matched:**
   User data doesn't match Google's records.

   **Fix:** Include email/phone in conversions:

   ```javascript theme={null}
   datalyr.track('purchase', {
     revenue: 99.99,
     email: 'user@example.com'
   });
   ```

**Google Shows More Conversions:**

**Causes:**

1. **Multiple Conversion Actions:**
   Google counting multiple conversion types, DATALYR tracking one.

2. **View-Through Conversions:**
   Google includes view-through, DATALYR doesn't.

   **Fix:** Google Ads → Conversions → Filter by "Click conversions only"

3. **Cross-Device Tracking:**
   Google tracks across devices, DATALYR session-based.

**Revenue Mismatch:**

**Causes:**

1. **Tax/Shipping Included:**
   Google may include tax/shipping, DATALYR tracking subtotal.

   **Fix:** Ensure consistent value tracking (include or exclude tax/shipping in both).

2. **Conversion Value Source:**

   * Google: Using default value
   * DATALYR: Using actual transaction value

   **Fix:** Verify Google conversion action uses "transaction-specific value" not default.

### TikTok Ads Discrepancies

**DATALYR Shows More Conversions:**

**Causes:**

1. **Attribution Window:**
   * DATALYR: 30-day default
   * TikTok: 28-day click

2. **Pixel Delay:**
   TikTok pixel may not fire on all conversions.

**TikTok Shows More Conversions:**

**Causes:**

1. **View-Through Attribution:**
   TikTok includes impressions, DATALYR click-only.

2. **Duplicate Tracking:**
   Both TikTok Pixel and DATALYR sending events.

   **Fix:** Remove TikTok Pixel, use DATALYR only. Or keep both (DATALYR deduplicates).

## DATALYR vs Shopify

**DATALYR Shows Fewer Orders:**

**Causes:**

1. **Order Status:**
   DATALYR syncs "paid" orders only, Shopify shows all (including pending).

   **Fix:** Shopify: Filter orders by "Paid" status

2. **Tracking Not on Checkout:**
   DATALYR script not installed on checkout pages.

   **Fix:** See [Shopify Checkout Tracking](/getting-started/installation/platforms/shopify-manual#checkout-tracking)

3. **Draft Orders:**
   Shopify includes draft orders, DATALYR doesn't.

**DATALYR Shows More Orders:**

**Unlikely.** If occurring:

1. Duplicate events (check Event Stream for duplicates)
2. Multiple workspaces tracking same store

**Revenue Mismatch:**

**Causes:**

1. **Refunds:**
   DATALYR may include refunds, Shopify net revenue excludes them.

2. **Discounts:**
   Different handling of discount codes.

3. **Time Zone:**
   Shopify and DATALYR using different time zones.

   **Fix:** Settings → Workspace Settings → Set timezone to match Shopify

## DATALYR vs Stripe

**DATALYR Shows Fewer Payments:**

**Causes:**

1. **Event Type:**
   DATALYR syncs `charge.succeeded` only, Stripe shows all charge attempts.

2. **Failed Payments:**
   Stripe includes failed attempts, DATALYR only successful.

3. **Refunds:**
   Stripe net includes refunds, DATALYR gross.

**Revenue Mismatch:**

**Causes:**

1. **Fees:**
   * Stripe: Shows gross before fees
   * DATALYR: Also tracks gross (fees separate)

2. **Currency:**
   Different currency conversion timing/rates.

**MRR Mismatch:**

**Causes:**

1. **Baseline Not Set:**
   First sync captures current MRR, future changes calculated from baseline.

   **Fix:** Integrations → Stripe → Reset MRR Baseline

2. **Subscription Intervals:**
   Mixed intervals (monthly, annual, quarterly).

   **Verify:** Annual subscriptions divided by 12 correctly.

3. **Canceled Subscriptions:**
   Stripe may include canceled (still active), DATALYR depends on status.

## DATALYR vs Google Analytics

**Different Visitor Counts:**

**Why:**

* GA: Counts sessions and users differently
* DATALYR: Visitor-based tracking
* GA: Includes bot traffic (sometimes)
* DATALYR: Filters bot traffic

**Different Pageview Counts:**

**Causes:**

1. **SPA Tracking:**
   GA may not track all SPA navigation, DATALYR does (if enabled).

2. **Ad Blockers:**
   Block GA more aggressively than DATALYR.

3. **Sampling:**
   GA samples data for high-traffic sites, DATALYR doesn't.

**Conversion Tracking:**
GA and DATALYR track conversions differently. Compare event counts in Event Stream vs GA Events.

## Time Zone Issues

**Problem:**
Reports show different conversion counts for same day.

**Cause:**
Platforms using different time zones.

**Fix:**

**Set Consistent Timezone:**

1. DATALYR: Settings → Workspace Settings → Timezone
2. Ad Platforms: Account settings → Timezone
3. Shopify: Settings → General → Timezone
4. Stripe: Settings → Account settings → Timezone

**Use UTC:**
For consistency across platforms, consider using UTC everywhere.

## Attribution Model Differences

**Different Attribution Logic:**

**DATALYR:**

* Default: Last-click attribution
* 30-day attribution window
* Click-based (no view-through)

**Meta:**

* Configurable: Last-click, first-click, linear, time decay, etc.
* 7-day click, 1-day view default
* Includes view-through

**Google:**

* Configurable: Data-driven, last-click, first-click, linear, time decay
* 30-day click, 1-day view default
* Cross-device tracking

**To Compare:**
Use same attribution model across platforms:

* Set all to "Last-click"
* Use same attribution window
* Disable view-through conversions

## Data Processing Delays

**Real-Time vs Delayed:**

**DATALYR:**

* Events: Real-time (seconds)
* Conversions: Real-time
* Reports: Real-time

**Meta:**

* Events: Real-time in Events Manager
* Conversions: Up to 24 hours in Ads Manager
* Reports: Lag varies

**Google:**

* Conversions: 3+ hours typical
* Reports: 24-48 hours for final numbers

**TikTok:**

* Events: Real-time in Events Manager
* Conversions: Up to 24 hours
* Reports: Lag varies

**When Comparing:**
Use recent data from DATALYR, wait 24-48 hours for ad platform data finalization.

## Deduplication Differences

**DATALYR Deduplication:**

* 7-day window
* Based on event properties (order ID, transaction ID)
* Prevents same conversion sent multiple times

**Platform Deduplication:**

* Meta: event\_id deduplication (pixel + CAPI)
* Google: Click ID and conversion timestamp
* TikTok: event\_id deduplication

**Result:**
Platforms may deduplicate differently than DATALYR, causing count variance.

## Sampling

**DATALYR:**
No sampling. All events tracked and reported.

**Google Analytics:**
Samples data above 500K sessions/day.

**Ad Platforms:**
Generally no sampling, but may aggregate at campaign level.

## Bot Traffic

**DATALYR:**
Filters obvious bot traffic automatically.

**Other Platforms:**

* Shopify: Includes some bot traffic
* Google Analytics: Bot filtering optional
* Ad platforms: Generally filter bots

**Result:**
DATALYR may show slightly fewer events due to aggressive bot filtering.

## Currency Conversion

**Multiple Currencies:**
If tracking multiple currencies, conversion rates differ across platforms.

**DATALYR:**
Uses conversion rate at time of event.

**Ad Platforms:**
Use conversion rate at time of report viewing.

**Result:**
Revenue mismatch if comparing reports at different times.

**Fix:**
Track single currency (convert before sending to DATALYR):

```javascript theme={null}
const revenueUSD = convertToUSD(revenueLocal, currency);
datalyr.track('purchase', {
  revenue: revenueUSD,
  currency: 'USD'
});
```

## Acceptable Variance

**Normal Ranges:**

* Event counts: 5-10% variance acceptable
* Conversion counts: 10-15% variance acceptable
* Revenue: 5% variance acceptable

**Investigate If:**

* Variance >20% consistently
* Sudden unexplained changes
* One platform showing zero data

## Debugging Discrepancies

**Step 1: Identify Timeframe:**
When did discrepancy start? Recent or always?

**Step 2: Check Setup:**

* Tracking installed correctly?
* Integrations connected?
* Conversion Rules configured?

**Step 3: Compare Same Metrics:**

* Use same date range
* Use same timezone
* Use same attribution model
* Use same currency

**Step 4: Check Sample Size:**
Low traffic can show high variance percentage.

**Step 5: Account for Known Differences:**
Review causes above (attribution windows, view-through, etc.)

## Tools for Comparison

**Event Stream:**
View raw event data to verify tracking working.

**Conversion Rules:**
Check postback status to verify sent to platforms.

**Platform Debugging:**

* Meta: Events Manager → Diagnostics
* Google: Conversions → Status
* TikTok: Events Manager → Events

## When to Worry

**Red Flags:**

* Zero conversions in ad platform but events in DATALYR
* 50%+ discrepancy consistently
* Revenue off by >20%
* Sudden drop or spike in one platform only

**Normal:**

* 5-15% variance
* Small number differences
* Variance decreases over time as data accumulates

## Still Seeing Large Discrepancies?

**Contact Support:**
Email [hello@datalyr.com](mailto:hello@datalyr.com) with:

* Platform comparison (DATALYR vs what)
* Date range compared
* Specific metric (conversions, revenue, etc.)
* Screenshots of both platforms
* Workspace ID

**Include:**

* Same date range in both platforms
* Same timezone
* Any filters applied

## Next Steps

<CardGroup cols={2}>
  <Card title="Attribution Models" icon="chart-network" href="/understanding-data/attribution-models">
    Understand attribution
  </Card>

  <Card title="Missing Conversions" icon="chart-line" href="/troubleshooting/missing-conversions">
    Fix conversion tracking
  </Card>

  <Card title="Event Stream" icon="water" href="/features/event-stream">
    View raw event data
  </Card>

  <Card title="Conversion Rules" icon="arrows-turn-to-dots" href="/integrations/conversion-rules">
    Configure conversion rules
  </Card>
</CardGroup>
