Troubleshooting Guide
Debug common LTV tracking issues, fix event delivery problems, and resolve platform integration errors. Step-by-step solutions for Google Ads, Meta, and TikTok.
This guide helps you diagnose and fix common issues with LTV tracking. Most problems fall into a few categories that are straightforward to resolve once you know where to look.
Quick Diagnostic Checklist
Before diving into specific issues, run through this checklist to identify where the problem is:
| Check | What to Verify | Where to Look |
|---|---|---|
| Billing Connected | Webhook is receiving events | Dashboard → Setup Status |
| Ad Platforms Connected | All credentials are valid | Settings → Ad Platforms |
| Recent Events | Events processed in last 24 hours | Dashboard → Event Log |
| Click IDs Captured | gclid/fbclid/ttclid stored | Dashboard → Customer Details |
| API Status | No rate limit or auth errors | Dashboard → Integration Health |
If billing isn't connected, see Connecting Billing Platforms. If ad platforms show errors, reconnect them with fresh credentials.
Events Not Appearing in Dashboard
When subscription events aren't showing up in your dashboard, the issue is almost always with the webhook connection between your billing platform and our system.
Symptoms
Events tab shows "No events in the last 24 hours" or the last event is several days old, despite having active subscriptions and customer activity.
Diagnosis Steps
Check webhook configuration: Log in to your billing platform and navigate to the webhooks section. Verify the endpoint URL matches exactly—even a trailing slash or extra character will cause failures. For Stripe, it should be https://ltvsaas.com/api/webhooks/stripe. For Lemon Squeezy, https://ltvsaas.com/api/webhooks/lemonsqueezy. For Paddle, https://ltvsaas.com/api/webhooks/paddle.
Verify event selection: In your billing platform, confirm all required events are selected. Stripe needs customer.subscription.created, customer.subscription.updated, customer.subscription.deleted, invoice.payment_succeeded, invoice.payment_failed, and charge.refunded. Missing even one event type will create gaps in your tracking.
Check webhook logs: Most billing platforms show delivery logs for each webhook attempt. Look for failed deliveries with 4xx or 5xx error codes. A 401/403 means authentication failed (incorrect signing secret). A 404 means the URL is wrong. A 500 means our server had an issue processing it—contact support with the timestamp.
Test with a sample event: Billing platforms let you send test webhooks. Send a test subscription.created event and check if it appears in our Dashboard within 60 seconds. If the test works but real events don't, your webhook might be configured for test mode while your business operates in live mode (or vice versa).
Solutions
For Stripe: If no events are received after 24 hours, delete the webhook and create a new one. Copy the signing secret immediately when it's shown—you can't retrieve it later. Update the secret in our Settings → Billing Connections page.
For Lemon Squeezy: Verify your Store ID is correct. The Store ID shown in Settings → General must match what you entered in our platform. Regenerate the signing secret if events were working but stopped—secrets occasionally expire.
For Paddle: Paddle has separate environments for sandbox and production. Ensure your webhook is configured in the correct environment. If you're using Paddle Billing (new), make sure you're not using a Paddle Classic webhook URL, and vice versa.
Events Not Reaching Ad Platforms
Your dashboard shows events are being processed, but ad platforms aren't receiving conversion updates or server-side events.
Symptoms
Dashboard shows "Events Sent: 127" but Google Ads conversion reporting shows zero adjustments. Meta Events Manager shows no server events in the last 24 hours. TikTok Events shows all events as "Failed."
Diagnosis Steps
Verify platform credentials: Go to Settings → Ad Platforms and check each connection status. If you see "Authentication expired" or "Invalid credentials," reconnect the platform. Tokens and access credentials expire—Google Ads tokens last 6 months, Meta tokens last 60 days, TikTok tokens expire based on what you set (default 365 days).
Check for click IDs: Navigate to Dashboard → Customers and select a recent subscription. Look at the customer details for stored click IDs. If you see gclid: null, fbclid: null, and ttclid: null, the problem is that click IDs aren't being captured from your website. We can't attribute events without these IDs.
Verify attribution windows: Check if conversions are too old to update. Google Ads only allows adjustments within 90 days of the original conversion. Meta and TikTok have 28-day attribution windows. If a customer converted 100 days ago, Google won't accept value adjustments anymore.
Look for API errors: Check Dashboard → Integration Health for platform-specific errors. "Rate limit exceeded" means we're sending too many updates too quickly (adjust frequency in Settings). "Conversion not found" means Google can't find a matching conversion (check click ID and conversion action). "Invalid pixel ID" means Meta credentials are wrong.
Solutions
For Google Ads: The most common issue is not having Enhanced Conversions enabled. Go to your Google Ads account, navigate to Tools → Conversions, select your conversion action, scroll to "Enhanced conversions," and toggle it on. Select "API" as the method. Without this, conversion adjustments won't work.
For Meta: Low Event Match Quality (below 5.0) means our server events aren't matching your pixel's client-side events. To improve: ensure you're passing customer emails in your billing webhooks, verify your pixel is installed and firing on your website, check that the Pixel ID in our settings matches your Events Manager Pixel ID exactly, and enable "Automatic Advanced Matching" in your pixel settings.
For TikTok: Most TikTok issues stem from incorrect Pixel IDs or expired access tokens. Verify your Pixel ID format—it should be approximately 20 characters starting with letters, not numbers. If events show "Failed" status, go to TikTok Events Manager → Your Pixel → Events API and regenerate your access token, then update it in our Settings.
Low Match Rates
Events are reaching ad platforms but match rates are poor, meaning platforms can't connect your server-side events to actual ad clicks.
Understanding Match Rates
| Platform | Good Match Rate | Poor Match Rate | What It Means |
|---|---|---|---|
| Google Ads | 70%+ | Below 50% | Percentage of adjustments successfully matched to original conversions |
| Meta | 6.0+ score | Below 4.0 score | Event Match Quality score based on customer data quality |
| TikTok | 60%+ | Below 40% | Percentage of events successfully matched to user profiles |
Low match rates mean ad platforms can't optimize effectively because they don't know which ads led to high-value customers.
Common Causes
Missing click IDs: If your website doesn't capture and store gclid (Google), fbclid (Meta), or ttclid (TikTok) from the URL when users arrive from ads, we have no way to attribute conversions back to specific campaigns. Check your analytics or tracking setup to confirm these parameters are being captured and stored with user records.
Insufficient customer data: Meta and TikTok use hashed customer emails, phone numbers, and other identifiers to match events. If your billing platform doesn't provide email addresses, match rates will be very low. Verify that your webhook payloads include customer.email.
Time delays: The longer the delay between a click and when we receive the conversion event, the lower the match rate. If users sign up today but your webhook doesn't fire until tomorrow (unusual but possible with batch processing), attribution suffers.
Solutions
Capture click IDs properly: On your website, add JavaScript to extract URL parameters and store them:
const urlParams = new URLSearchParams(window.location.search);
const gclid = urlParams.get('gclid');
const fbclid = urlParams.get('fbclid');
const ttclid = urlParams.get('ttclid');
// Store in your database when user converts
// Associate with customer record
Store these values in your database with the user session, and ensure they're passed to your billing platform when creating subscriptions.
Improve data quality: For Meta, provide as much customer information as possible: email address (required), phone number (helps), first and last name (helps), city and state (helps), and zip code (helps). We automatically hash this data before sending it. The more signals Meta has, the better the match rate.
Verify pixel installation: Use the Meta Pixel Helper browser extension to confirm your pixel is firing on your website. Check that it's capturing fbp and fbc cookies. These cookies help match server-side events to browser sessions.
Webhook Signature Verification Failed
Your billing platform is sending webhooks, but we're rejecting them due to invalid signatures.
Symptoms
Webhook logs in your billing platform show "401 Unauthorized" or "403 Forbidden" responses. Dashboard shows zero events despite webhooks being sent.
Diagnosis
This issue is always caused by a mismatch between the signing secret your billing platform is using and what you've entered in our Settings. Billing platforms sign each webhook with a secret key, and we verify that signature before processing the event.
Solutions
For Stripe: The signing secret starts with whsec_ and is shown only once when you create the webhook endpoint. If you've lost it, you can't retrieve it—you must delete the webhook and create a new one to get a fresh secret. Copy the new secret immediately and update it in Settings → Billing Connections → Stripe.
For Lemon Squeezy: The signing secret is auto-generated when you create the webhook. If verification is failing, create a new webhook endpoint to generate a fresh secret. Don't reuse old secrets—they're tied to specific webhook endpoints.
For Paddle: Paddle Billing uses notification secrets that start with pdl_ntf_. Paddle Classic uses public keys. Ensure you're using the correct type for your Paddle version. If you migrated from Classic to Billing, you need to set up an entirely new webhook with the new authentication method.
Test immediately after updating: After entering a new signing secret, send a test webhook from your billing platform. If it fails again, double-check for extra spaces, incomplete copy-paste, or special characters that didn't copy correctly.
Click IDs Not Being Captured
Your website isn't capturing click IDs from ad platforms, making attribution impossible.
Why Click IDs Matter
When someone clicks an ad, the platform appends a unique identifier to your landing page URL:
- Google Ads adds
?gclid=ABC123XYZ - Meta adds
?fbclid=ABC123XYZ - TikTok adds
?ttclid=ABC123XYZ
These IDs are the only way to connect a customer who signs up today with the ad they clicked last week. Without them, we can send events to ad platforms, but those platforms can't optimize because they don't know which campaigns brought valuable customers.
Diagnosis
Check a customer record in Dashboard → Customers. If you see gclid: null or fbclid: null for customers who definitely came from ads, your website isn't capturing these parameters.
Solutions
Use a tracking parameter capture system: Your website needs to extract URL parameters when users first arrive and store them persistently. Most analytics platforms (Google Analytics, Mixpanel, Segment) can do this automatically. If you're building custom tracking:
// On page load, extract and store in session/cookie
const params = {
gclid: new URLSearchParams(window.location.search).get('gclid'),
fbclid: new URLSearchParams(window.location.search).get('fbclid'),
ttclid: new URLSearchParams(window.location.search).get('ttclid')
};
// Store in cookie or session storage for later retrieval
// Then pass to your backend when user converts
Verify parameters aren't being stripped: Some hosting providers, CDNs, or security tools strip query parameters from URLs. Check your CDN settings, WAF rules, and server configuration to ensure these parameters are preserved.
Test your tracking: Click your own ad (or use the ad platform's preview feature), land on your website, and check if the parameter appears in the URL. Then navigate through your site and verify the parameter is still tracked (either in cookies or server-side).
Data Mismatches Between Platforms
The revenue or customer count differs between your billing platform, our Dashboard, and ad platforms.
Expected Discrepancies
Some differences are normal and expected:
| Reason | What It Means | How Much |
|---|---|---|
| Currency conversion | Different platforms may use different exchange rates | ±2-3% |
| Timing delays | Events take time to process and appear | Up to 48 hours lag |
| Attribution windows | Old conversions can't be updated | Varies by age |
| Refunds and chargebacks | Some platforms count gross, others net | 5-10% if refunds are common |
| Test transactions | Test mode vs live mode data | Should be in separate environments |
Diagnosis
Compare time ranges: Make sure you're looking at the same date range across all platforms. Our Dashboard might show "last 30 days" while you're viewing "last 7 days" in Google Ads.
Check currency settings: Verify all platforms are set to the same currency, or account for exchange rate differences. If your billing is in EUR but Google Ads is set to USD, values will differ by the exchange rate.
Look for test data: Confirm you're not mixing test subscriptions with live data. Check Settings → Environment to ensure you're in the correct mode (test vs production).
Solutions
For revenue discrepancies: If our Dashboard shows higher revenue than ad platforms, it's likely because some conversions are outside attribution windows and can't be updated. If ad platforms show higher, check if they're counting multiple events per customer (we deduplicate, they might not).
For event count mismatches: Ad platforms may show fewer events if match rates are low. Check Dashboard → Integration Health for successful delivery rates. If we're sending 100 events but Meta only shows 60, your Event Match Quality needs improvement.
For timing issues: Allow 48 hours for full reconciliation. Events sent today may not appear in ad platform reporting until tomorrow. Google Ads conversion reporting can lag by 24 hours, especially for Enhanced Conversions.
Need More Help?
If you've worked through this guide and still have issues, contact our support team:
Email: admin@ltvsaas.com
Include in your message:
- Your account email address
- Which platform or integration you're troubleshooting (Stripe, Google Ads, etc.)
- Specific error messages if any
- Screenshots of your configuration (hide sensitive secrets)
- When the issue started
- Example customer or event that's not working
Response time: We typically respond within 24 hours on weekdays. For urgent issues affecting live campaigns, mark your email as "URGENT" in the subject line.
Related Resources
- Connecting Billing Platforms - Setup guides for each platform
- Connecting Ad Platforms - Google Ads, Meta, and TikTok integration
- Configuration Settings - Advanced settings and optimization
- Understanding Metrics - How to interpret your dashboard data
Most issues can be resolved by double-checking configuration, regenerating credentials, or ensuring click IDs are being captured. If you're stuck, we're here to help.