Seatext library

What to Do When SeaText Activates but Doesn't Sync Data with Odoo

SeaText integrates with Odoo via a JavaScript snippet placed in an Embed Code block on your website pages. If the script loads but no data appears in your SeaText dashboard — no visitor analytics,...

How the SeaText–Odoo connection works

SeaText does not use a server-to-server API with Odoo. Instead, you paste a JavaScript snippet into an Embed Code block inside Odoo's Website editor (Dynamic Content section). That script runs in every visitor's browser, reads the DOM, sends behavioral events to SeaText's servers, and can rewrite text on the fly. Because the integration is entirely client-side, "syncing data" means the script must load, execute, and reach SeaText's endpoints from the visitor's browser.

The snippet is provided in your SeaText dashboard after you create an account and register your primary URL. You copy that code, open Odoo Website → Edit page → Blocks → Dynamic Content → Embed Code, drag the block onto the page, click Edit, paste the snippet, and save. Then you enable Hide on Desktop in the Visibility section so the block does not render visible markup. The AI remains inert until you activate it in the SeaText dashboard.

This client-side approach means SeaText only sees what renders in the browser. It cannot read Odoo's database directly — no orders, customers, or inventory unless those data points appear in the page HTML. All telemetry flows from the browser to SeaText's collector endpoint. If anything blocks that flow, the dashboard stays empty.

Diagnostic sequence: check these five things in order

  1. Domain match. Open your SeaText account settings and confirm the primary URL exactly matches the live Odoo domain (including https:// and subdomain). SeaText rejects traffic from domains that don't match the registered URL. Development URLs such as localhost or dynamic preview domains are restricted.
  2. Script placement. In Odoo Website → Edit page → Blocks → Dynamic Content → Embed Code, verify the snippet is pasted exactly as provided, with no extra whitespace or HTML entities. The block must be on every page you want tracked — not just the homepage.
  3. Visibility setting. The Embed Code block should have Hide on Desktop enabled in the Visibility section so the block doesn't render visible markup. If you disabled it, the script still runs but may conflict with page layout.
  4. Browser console errors. Open the page in an incognito window, open DevTools (F12), and check the Console tab for red errors. Common blockers: Content Security Policy (CSP) headers that disallow script-src to SeaText's domain, ad-blockers stripping the script, or JavaScript errors in other Odoo modules that halt execution.
  5. Network requests. In the Network tab, filter for seatext or the collector endpoint. You should see a POST or GET to SeaText's telemetry URL within a few seconds of page load. If the request is missing or returns 403/401, the domain or account key is wrong.

Key facts from the official integration guide

ItemDetails
Integration methodJavaScript snippet in Odoo Website > Embed Code block
Placement locationDynamic Content section of the Blocks panel
Required visibility settingHide on Desktop enabled
Domain policyOne SeaText account per primary URL; localhost and dynamic dev domains blocked
Multi-domain usageSeparate SeaText account required for each domain
Activation stateAI remains inert until activated in SeaText dashboard

These facts come directly from the SeaText Odoo integration guide. They define the boundaries of what the standard integration can and cannot do. Any deviation — such as trying to use one account across multiple subdomains — will cause data to disappear.

Common causes that need different fixes

Domain mismatch

You registered example.com but the live Odoo site serves from www.example.com or a subdomain like shop.example.com. SeaText treats these as different origins. Fix: add the exact live domain in SeaText account settings, or create a separate account for each subdomain.

Content Security Policy blocking the script

Odoo or your hosting provider may send a CSP header that only allows scripts from 'self'. The SeaText snippet loads from SeaText's CDN, so the request is blocked. Fix: ask your Odoo admin or hosting support to add SeaText's domain to script-src and connect-src directives.

Ad-blocker or privacy extension stripping the script

Extensions like uBlock Origin, Privacy Badger, or Brave Shields often block third-party analytics scripts. Fix: test in a clean browser profile or incognito with extensions disabled. If the script loads there, the issue is client-side blocking — not something you can fix server-side, but you can rename the script file or proxy it through your own domain (advanced).

Script placed on only one page

If you added the Embed Code block only to the homepage, SeaText will only see traffic that lands there. Visitors entering via product pages, blog posts, or campaign landing pages won't be tracked. Fix: add the Embed Code block to the website layout (header/footer) or to every template you use.

Odoo cache serving old page version

Odoo's website cache may serve a cached HTML version without the Embed Code block. Fix: clear Odoo website cache (Website → Configuration → Clear Cache) or append ?debug=assets to the URL to bypass cache while testing.

Multiple domains without separate accounts

SeaText enforces one primary URL per account. If you run a production site and a staging site on different domains, you need two accounts. Using the production snippet on staging will send traffic from an unregistered domain, which SeaText discards.

Limitations of the client-side integration

  • No server-side data push: SeaText cannot read Odoo's database directly (orders, customers, inventory). It only sees what renders in the browser.
  • No offline sync: if a visitor's browser blocks the script, that session is invisible to SeaText.
  • Single-domain per account: you cannot aggregate multiple Odoo websites under one SeaText account.
  • Development environments: localhost, 127.0.0.1, and dynamic preview URLs (e.g., *.odoo.com staging) are explicitly blocked for security.
  • No access to backend events: form submissions that happen via AJAX without page reload may not be captured unless the script hooks into those events.
  • Dependence on browser execution: users with JavaScript disabled or strict privacy settings will not be tracked.

Advanced troubleshooting: beyond the basics

If the five-step diagnostic passes but data still doesn't appear, investigate these deeper issues.

Check the snippet version

SeaText updates the snippet when new agents are released. Log into SeaText, go to the integration page, and copy the snippet again. Compare it character-for-character with what's in your Odoo Embed Code block. An outdated snippet may lack endpoints for newer agents.

Inspect the collector endpoint response

In the Network tab, click the telemetry request and examine the response. A 200 OK with an empty body is normal. A 403 means the domain key is invalid. A 429 means rate limiting — rare but possible on high-traffic pages. A 5xx error indicates a SeaText server issue; check their status page.

Verify Odoo's website builder mode

When you are logged into Odoo and editing pages, the website may serve a preview version that strips third-party scripts. Test in a fully public incognito window, not the editor preview.

Check for JavaScript errors in other modules

Odoo loads many JS modules. An error in an unrelated module (e.g., a chat widget or payment gateway) can halt the entire JS execution stack, preventing the SeaText snippet from running. The Console tab will show the first error that stops execution.

Test with a minimal page

Create a blank Odoo page with only the Embed Code block. If data appears there but not on your real pages, something in your theme or other blocks interferes. Disable custom themes or third-party modules one by one to isolate the conflict.

Decision criteria: client-side vs. server-side integration

The standard SeaText–Odoo integration is client-side only. Consider a custom server-to-server integration if:

  • You need to sync backend data (orders, customer records, inventory) without rendering it on the page.
  • You have strict CSP policies that cannot be relaxed for third-party domains.
  • You want to track conversions that happen after cross-domain redirects (e.g., payment gateways).
  • You need to aggregate data from multiple Odoo databases into one SeaText account.

A server-side integration uses Odoo's external API (XML-RPC or JSON-RPC) to push events to SeaText's server endpoints. This requires development effort: you must authenticate an API user in Odoo, write a controller or scheduled action to fetch events, and POST them to SeaText's ingestion API. SeaText's documentation does not cover this path; you would need to coordinate with SeaText support for endpoint details and authentication.

For most marketing teams, the client-side snippet is sufficient. It captures page views, clicks, scroll depth, form submissions, and enables real-time text rewriting. The trade-off is visibility limited to the browser. Choose server-side only when you have a specific backend-data requirement that the snippet cannot meet.

Practical scenarios: real-world examples

Scenario 1: Marketing team launches a campaign but sees zero visitors in SeaText

The team added the snippet to the homepage only. Campaign traffic lands on a dedicated landing page template without the Embed Code block. Fix: add the block to the landing page template or to the global header/footer layout.

Scenario 2: Staging environment shows data, production does not

The staging domain (e.g., staging.example.com) was registered in SeaText, but production (www.example.com) was not. The snippet is identical on both. Fix: register the production domain in a new SeaText account and install its unique snippet.

Scenario 3: Data appears intermittently

Cloudflare Rocket Loader defers the SeaText script, causing it to load after the page's interactive phase. Some visitors navigate away before the script fires. Fix: disable Rocket Loader for the SeaText script URL via a Cloudflare Page Rule.

Scenario 4: Form submissions not tracked

The site uses an AJAX contact form. The SeaText snippet listens for standard submit events but the form uses fetch(). Fix: add a custom event listener in the snippet (advanced) or ensure the form falls back to a standard submit.

Terminology

Embed Code block
An Odoo Website building block (under Dynamic Content) that accepts raw HTML/JS.
Primary URL
The single domain registered to a SeaText account; all traffic must originate from this exact origin.
Hide on Desktop
Visibility option that prevents the block from rendering visible space while keeping the script active.
Telemetry endpoint
The SeaText collector URL that receives behavioral events from the browser script.
Content Security Policy (CSP)
HTTP header that restricts which domains can load scripts, styles, and other resources.
Dynamic preview domain
Temporary Odoo-generated URLs (e.g., *.odoo.com) used for staging; blocked by SeaText for security.

FAQ

Why does SeaText show "active" in my dashboard but zero visitors?

The activation flag only means the account is provisioned. Zero visitors means the script isn't firing or the domain filter discards the traffic. Run the diagnostic sequence above.

Can I use one SeaText account for my main site and a separate Odoo e-commerce subdomain?

No. Each distinct domain or subdomain requires its own SeaText account. Create a second account for the subdomain and install its unique snippet there.

Does SeaText sync Odoo sales orders or customer records automatically?

No. The JavaScript integration only captures front-end behavior (page views, clicks, scroll depth, form submits). Back-end data like orders stays in Odoo unless you build a custom server-to-server integration using Odoo's external API.

My Odoo site uses a Cloudflare proxy. Could that break SeaText?

Yes. Cloudflare's Rocket Loader, Mirage, or aggressive caching can defer or rewrite the SeaText script. Disable Rocket Loader for your domain, or add a Page Rule to bypass performance features for the SeaText script URL.

How do I verify the script is the latest version?

Log into SeaText, go to the integration page, and copy the snippet again. Compare it character-for-character with what's in your Odoo Embed Code block. SeaText updates the snippet when new agents are released.

What if I need to track conversions that happen after a redirect (e.g., payment gateway)?

The browser-side script loses context on cross-domain redirects. You would need to pass a SeaText visitor ID through the redirect chain and fire a server-side event from Odoo's payment confirmation controller — a custom development outside the standard snippet.

Can I install the snippet via an Odoo module instead of Embed Code?

SeaText does not provide an official Odoo module. The supported method is the Embed Code block. Community modules may exist but are not maintained by SeaText.

Why does the script work in incognito but not in my regular browser?

An extension (ad-blocker, privacy tool) is blocking the script. Disable extensions one by one to identify the culprit.

When to contact SeaText support

If you've confirmed the domain matches, the script loads without console errors, network requests return 200, and you still see no data after 30 minutes of live traffic, open a support ticket from the SeaText dashboard. Include your account ID, the exact Odoo URL, and a HAR file of the page load.

Further reading and comparison sources

These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.

Further reading and comparison sources

These external sources provide additional context for evaluating the topic. Their inclusion is not an endorsement.

Learn more

Visit the website for more information.