Purchase Facebook Event Not Tracking on Teachable: Causes and Fixes
A missing purchase conversion can make a successful Teachable sale look invisible in Meta Ads, Google Analytics 4, Google Tag Manager, or another analytics platform. The usual causes are a pixel placed on the wrong page, a checkout domain change, an event that fires before payment is confirmed, browser privacy protection, duplicate tracking, or a payload missing essential values. This guide explains purchase event not tracking on Teachable, how to prove where the failure occurs, and how to fix it without inflating revenue.
$ part ofMeta Pixel Not Working? How to Fix Tracking on Any PlatformThe complete guide this article belongs toOpen guide →Key Takeaways
- Trace the funnel from checkout start through the final order-confirmation page before changing code.
- Confirm that Teachable is sending the event to the intended data destination, not merely displaying a browser pixel.
- Use a test transaction or a controlled coupon order, then inspect the thank-you page in the browser and the receiving platform.
- Check event parameters, especially transaction ID, value, currency, and product information.
- Remove duplicate pixels and tags before adding another script; duplicates can make reporting inaccurate rather than fixing missing sales.
- Allow for reporting delays and attribution differences before deciding that a properly received purchase event failed.
Identify Your Tracking Stack
First, identify which system is supposed to receive the purchase event. “Tracking is broken” can mean several different things: Teachable recorded the order, but Meta did not; Meta received it, but Ads Manager didn’t attribute it; or GA4 received a page view but not a purchase event.
- Teachable checkout: the payment and enrollment system.
- Tracking code: Meta Pixel, Google tag, Google Tag Manager, TikTok Pixel, or custom JavaScript.
- Destination: Meta Events Manager, GA4, Google Ads, TikTok Events Manager, or another platform.
- Reporting layer: an ad dashboard, ecommerce report, CRM, spreadsheet, or attribution tool.
Map the expected path
A healthy setup usually follows a path similar to:
Teachable checkout → order confirmation page → browser/server event → analytics platform → report
| Tracking method | Where to inspect first | Common failure |
|---|---|---|
| Teachable native integration | Teachable settings and connected platform | Integration disconnected or configured for the wrong site |
| Meta Pixel script | Page source, browser tools, Events Manager | Pixel absent, duplicated, or blocked |
| Google Tag Manager | GTM preview, tag triggers, GA4 DebugView | Trigger only matches the sales page |
| Custom JavaScript | Confirmation-page code and console | Code runs before order data exists |
| Server-side or webhook setup | Delivery logs and event response | Authentication, endpoint, or deduplication error |
Don’t assume that a page view proves a purchase event works. A page-view tag can load on every page while the purchase tag is missing from the confirmation step.
Is the Event Actually Absent?
Before editing anything, determine whether the event is absent, delayed, rejected, deduplicated, or merely unattributed.
Open the platform’s diagnostic area. Meta: Events Manager; GA4: DebugView or Realtime; Google Ads: conversion diagnostics.
Compare three records
Compare:
- Teachable order record — Did the payment succeed, and is the order marked paid?
- Browser activity — Did the confirmation page load the tag and send a request?
- Platform receipt — Did the destination receive and process the event?
| What you observe | Most likely interpretation | Next action |
|---|---|---|
| No Teachable order | Payment or checkout problem | Resolve payment status first |
| Paid Teachable order, no browser request | Page code or checkout-page issue | Inspect confirmation-page loading |
| Browser request exists, no platform event | Wrong ID, blocked request, or rejected payload | Check destination and diagnostics |
| Platform event exists, ad report is empty | Attribution or reporting issue | Check date range, campaign, and attribution |
| Two events for one order | Duplicate implementation | Keep one source and configure deduplication |
| Event exists without value | Incomplete parameters | Map order value and currency |
A browser request is evidence that something was sent, not proof that the platform accepted it.
Pro Tip: Keep a small test log with the order time, order ID, browser used, product, event received, and value shown.
Check Why Teachable Purchase Events Are Not Tracking

Teachable’s interface and available integrations can change by plan, product version, or account configuration. Use the labels currently visible in your account rather than following an old tutorial word for word.
Look for settings related to:
- Custom code on the school, sales, checkout, or thank-you page.
- Analytics integrations for GA4 or other reporting services.
- Advertising pixels such as Meta or TikTok.
- Webhooks or APIs used by a server-side tracking service.
- Checkout domains and custom domains.
- Cookie consent or privacy settings that control marketing scripts.
Check the correct page
A common error is installing the pixel in the website header and expecting Teachable’s hosted checkout to inherit it. A school’s marketing pages and a hosted checkout may not share the same template or domain.
Confirm whether your code is installed on:
- The public sales page.
- The checkout page.
- The order-confirmation or thank-you page.
- The student course area.
- A custom domain and the default Teachable domain.
The purchase event belongs on the final confirmation step after payment.
Check account and product scope
Some installations apply a pixel at the school level, while others use code for a specific product or page.
| Setting to verify | Correct state | Failure signal |
|---|---|---|
| Pixel or measurement ID | Matches the intended account | Events appear in another business or property |
| Page placement | Includes successful confirmation | Only landing-page visits appear |
| Product scope | Covers the product being tested | One course tracks, another does not |
| Currency | Matches the checkout currency | Revenue is zero, rejected, or converted incorrectly |
| Consent behavior | Complies with your selected policy | Event appears only after consent |
| Code version | One current implementation | Multiple old snippets remain active |
Don’t paste a second pixel because the first event isn’t visible. First identify whether the original code is firing and where it’s sending data.
Verify the Purchase Payload
An event can appear in a dashboard and still be unusable if its data is incomplete. Inspect the actual payload sent when the confirmation page loads.
For a purchase event, useful fields commonly include:
- Event name:
Purchasefor Meta orpurchasefor GA4, depending on the platform. - Transaction ID: a stable order identifier.
- Value: the amount paid, using a numeric format.
- Currency: an ISO currency code such as USD.
- Items or content IDs: the course or product identifier.
- Quantity: usually the number of products included.
- Event source: browser, server, or both.
Meta’s documentation identifies Purchase as a standard event and describes parameters such as value and currency in its Meta Pixel event reference.
Look for missing or wrong values
Typical payload errors include:
- Value is sent as text with a currency symbol, such as
$99, instead of a number. - Currency is absent or uses a nonstandard abbreviation.
- Transaction ID is blank or changes on every page refresh.
- Product ID identifies the sales page rather than the purchased course.
- The event fires before Teachable has populated the order details.
- A refund or failed order is treated as a completed purchase.
A platform may accept an event with a missing value but exclude it from revenue reporting.
Avoid refresh duplicates
If the thank-you page fires on every load, refreshing or returning can generate multiple purchases. Use a stable transaction ID and, where supported, configure browser/server deduplication.
If you can’t prevent a confirmation page from being revisited, consider a server-side event that records the order once, or store a processed-order marker in a compliant system.
Fix Meta Pixel Setup
Meta purchase tracking usually fails for one of four reasons: the wrong pixel is installed, the Purchase event isn’t on the successful checkout path, the event is blocked, or browser and server events aren’t deduplicated.
Confirm the pixel ID
Search the confirmation page’s source or network activity for the pixel ID. Compare it with the ID shown in the intended Meta data source.
Inspect the event request
Filter the Network panel for:
facebookfbeventstrpixelcollect
A successful request doesn’t guarantee acceptance, but no request strongly suggests that the code didn’t run or was blocked before transmission.
Check for:
- JavaScript errors before the event call.
- Consent software preventing marketing tags.
- Content blockers or browser privacy controls.
- A Content Security Policy blocking the destination.
- An iframe or cross-domain checkout that prevents the parent-page script from seeing order data.
Check Events Manager diagnostics
Review warnings about:
- Missing value or currency.
- Event match quality.
- Duplicate events.
- Invalid event parameters.
- Events received from an unexpected domain.
- Browser events without corresponding server events.
Don’t treat every warning as a total failure. A low match-quality warning may affect attribution while the purchase event still appears.
Warning: Never test by repeatedly placing full-price orders unless you understand your payment, refund, tax, and enrollment consequences. Use a controlled test product, a permitted coupon, or an internal process that your payment provider and Teachable account support.
Fix GA4 and GTM Routing
GA4 and Google Tag Manager introduce another common mistake: the tag exists, but its trigger is attached to the wrong event or page.
If using Google Tag Manager
Open GTM Preview and complete a test checkout. On the confirmation page, inspect the event timeline and check:
- Whether the GTM container loaded.
- Whether a custom
purchasedata-layer event appeared. - Whether the GA4 Event tag fired.
- Whether the tag used the intended measurement ID.
- Whether a trigger fired once or multiple times.
A trigger based only on “Page View” can fire before transaction details exist.
If using GA4 directly
Check the Realtime report and DebugView, then inspect the event parameters.
Confirm:
transaction_idis present and stable.valueis numeric.currencyis present.itemscontains valid product data where required.- The event is sent after payment confirmation.
- Internal test traffic or developer filters aren’t hiding the event.
| GA4 symptom | Likely cause | Repair |
|---|---|---|
| Page view but no purchase | Purchase tag never fires | Fix the confirmation trigger |
| Purchase with zero revenue | Value mapping failed | Map the paid amount as a number |
| Event in DebugView, absent in reports | Processing or filter delay | Wait, then inspect filters and date range |
| Several purchases per order | Refresh or duplicate tags | Use transaction ID and one firing source |
| Wrong product name | Static tag values | Pass dynamic Teachable order data |
Don’t mark a random page view as a conversion just to make reports populate. That creates false revenue and makes later diagnosis harder.
Resolve Checkout Restrictions

Even correct code can fail when the checkout environment prevents it from running. Teachable checkouts may involve hosted pages, redirects, embedded elements, custom domains, consent tools, or payment-provider flows.
Domain and redirect problems
A buyer may start on yourdomain.com and finish on a Teachable-hosted domain. If the tracking code exists only on the first domain, it may never reach the confirmation page.
Check:
- Whether the final confirmation page uses the expected domain.
- Whether the checkout redirects through a payment provider.
- Whether cross-domain measurement is configured where applicable.
- Whether cookies or storage are restricted across domains.
- Whether the confirmation page is actually rendered after payment.
Consent and privacy controls
Consent tools may block advertising or analytics tags until the visitor agrees.
Test states:
- Consent accepted.
- Consent declined.
- No choice made.
- Ad blocker enabled.
- Private browsing enabled.
- Mobile browser with tracking restrictions.
Record intentional and accidental behavior. Don’t disable legally required consent controls to force an event.
Browser and script errors
Check the browser console for:
ReferenceErrorSyntaxError- blocked script messages
- consent-manager errors
- Content Security Policy violations
- failed network requests
One unrelated script error can stop custom purchase code from executing. If the code is inline, verify that the platform permits it and that the script isn’t being escaped or removed by the page editor.
Test Without Corrupting Data
A reliable test changes one variable at a time. Make a copy of the current configuration or record every existing ID and trigger before editing.
A controlled test sequence
| Test step | What to record | Pass condition |
|---|---|---|
| Open the intended sales page | URL and browser | Correct school and product load |
| Begin checkout | Checkout domain | Expected checkout opens |
| Complete approved test order | Order ID and time | Teachable marks it paid |
| Load confirmation page | Final URL | Confirmation page appears once |
| Inspect browser request | Pixel or tag request | Purchase request is sent |
| Check destination | Event time and parameters | Event is received with value |
| Review report later | Transaction ID | One sale appears, not several |
Use a clean browser profile for one test and a consented normal browser for another. If the event works only in one profile, the difference is probably consent, extensions, cached scripts, or browser privacy behavior.
Change one layer at a time
A disciplined order is:
- Confirm the Teachable order.
- Confirm the final page.
- Confirm the tag loads.
- Confirm the event request.
- Confirm the platform receives it.
- Confirm reporting and attribution.
Changing the page code, GTM trigger, Meta settings, and GA4 property simultaneously removes your ability to identify the cause.
Pro Tip: Save screenshots of the event details before and after a change. Include the event name, timestamp, transaction ID, and value. This creates an audit trail when delayed reports make the result unclear.
Diagnose With A Decision Table
Use the symptom that most closely matches what you see. Start with the earliest failed step rather than the most visible dashboard problem.
| Symptom | Probable cause | Practical fix |
|---|---|---|
| Teachable shows paid, no event anywhere | Confirmation page lacks tracking | Add or repair the confirmation-page implementation |
| Event fires on checkout start | Trigger is too broad | Move it to successful confirmation |
| Event appears in wrong account | Wrong pixel or measurement ID | Replace the ID after confirming ownership |
| Event appears twice | Native and manual tags both active | Disable one source or deduplicate |
| Event has no revenue | Missing value mapping | Send numeric value and currency |
| GA4 has event, ecommerce report is empty | Wrong event name or parameters | Use the platform’s required ecommerce schema |
| Meta receives event, ads show none | Attribution or date-window issue | Check campaign, attribution, and reporting delay |
| Desktop works, mobile fails | Responsive template or consent difference | Test mobile confirmation and mobile code |
| Test works once, then stops | Cache, one-time trigger, or stale script | Clear cache and inspect repeat-order behavior |
| Only logged-in buyers track | Conditional code or page mismatch | Test guest and logged-in checkout paths |
| Refund still counts as sale | No refund handling | Pass refunds to the reporting system separately |
If several platforms fail at the same time, suspect the Teachable confirmation page, consent layer, domain, or global script.
Prevent Repeat Failures
Once the purchase event works, protect it from future edits. Tracking often breaks when someone changes a landing-page template, adds a second analytics tool, switches domains, or edits a checkout flow without retesting.
Create a short tracking specification containing:
- The responsible data owner.
- Every pixel, tag, property, and account ID.
- The exact confirmation-page condition.
- Required event names and parameters.
- Whether browser, server, or both send events.
- The deduplication key.
- The test product or approved test procedure.
- The expected reporting delay.
- The date of the last successful test.
Schedule a check after any of these changes:
- Teachable theme or page-template update.
- Custom-domain change.
- New consent-management platform.
- New payment or checkout configuration.
- Google Tag Manager publish.
- Meta or GA4 account migration.
- New product or pricing model.
- Major browser or privacy-policy change.
Keep one source of truth for each event whenever possible.
Frequently Asked Questions
Why is my Teachable purchase event not showing?
The event may be missing from the confirmation page, blocked by consent or a browser extension, sent to the wrong pixel or property, or rejected because its name or parameters are invalid. First verify the paid Teachable order, then inspect the browser request and destination diagnostics in that order.
Does Teachable automatically track purchases?
Teachable may provide native analytics or advertising integrations depending on the account setup and current product features, but automatic tracking shouldn’t be assumed. Check the integrations available in your account and confirm with a real test that the intended destination receives one purchase with the correct value.
Why does Meta show a purchase but Teachable revenue is different?
The platforms may use different attribution windows, time zones, refund handling, taxes, discounts, and deduplication rules. Compare transaction IDs and gross versus net value before comparing totals. A purchase event can be correctly received while the ad report attributes it differently from Teachable’s order ledger.
Why does GA4 show a purchase with zero revenue?
Usually the event fired without a numeric value, without currency, or before the order data was available. Inspect the event parameters in DebugView and confirm that the tag sends the paid amount as a number, not formatted text such as a currency symbol plus digits.
Can ad blockers stop Teachable purchase tracking?
Yes. Browser extensions, privacy settings, consent tools, and network controls can prevent a browser tag or its request from loading. Test a clean browser, an ordinary browser with consent granted, and the affected browser separately. For important measurement, consider a compliant server-side method rather than relying only on browser events.
How do I stop duplicate Teachable purchases?
Find every active source first, including native integrations, GTM tags, page scripts, and server events. Keep one browser implementation where possible, fire only after successful payment, and use a stable transaction ID for deduplication. Test a refresh and a return visit to the confirmation page before declaring the issue fixed.
Conclusion
Start with one controlled Teachable order and trace it from paid status to confirmation-page request to destination receipt. Record the transaction ID and event parameters, repair the first failed step, then retest once. This method is faster and safer than repeatedly adding pixels or tags until the dashboard changes.