NetSendo v2.5.1: Google Analytics Removed from Your Panel
You chose a self-hosted email and SMS platform so you would control your data. Until this release, NetSendo did not fully live up to that. Every installation, self-hosted or NetSendo Cloud, loaded a Google Analytics script in the admin panel, and it reported your page views to NetSendo's own analytics property. Nobody asked you first, and the panel showed no notice about it.
NetSendo v2.5.1 removes that script completely. We want to explain plainly what was sent, what has changed and what you should do now.
gtag.js with NetSendo's measurement ID G-96J7WQ3SMT. v2.5.1 removes it. The panel and portal now load no analytics or tracking scripts from NetSendo or anyone else. You don't need to configure anything. Just update. Your own open/click tracking, the NetSendo pixel and Live Visitors are not affected.
🔍 What Changed in v2.5.1
What was being sent before
The main layout template, app.blade.php, included a partial called resources/views/partials/google-analytics.blade.php. Because that layout renders the whole panel, the script ran on:
- The NetSendo admin panel: campaigns, lists, stats and settings
- The sign-in page
- The affiliate partner portal (
/portal/...)
On each page view, Google and NetSendo's analytics received:
- The page address, for example
/messages/36/stats - The page title
- The browser details and IP address of the person using the page
This applied to your team members and, through the partner portal, to your affiliates. There was no consent banner, and operators were not told.
⚠️ Important: Installations on 2.5.0 or earlier keep sending these page views until they are updated. The fix only takes effect after you upgrade.
What v2.5.1 does
- The
google-analytics.blade.phppartial and its include are deleted - The panel and partner portal load no analytics or tracking script from NetSendo or any third party
- A new regression test,
tests/Feature/NoThirdPartyAnalyticsTest.php, checks that the sign-in page and panel load no Google Analytics or Google Tag Manager script - No configuration needed. Updating is enough.
What stays exactly the same
Removing analytics from the panel does not affect the tracking you set up yourself. These features send data only to your own installation:
Open & Click Tracking
Campaign statistics work as before.
NetSendo Pixel
Site tracking still reports to your server.
Live Visitors
Real-time visitor data stays on your installation.
ℹ️ Note: Think of the difference this way. Your tracking is a camera you installed in your own shop. The removed script was a camera the shop builder installed, and it sent footage of you working to someone else. v2.5.1 removes the second camera. Yours keeps working.
💼 Why This Matters: Real-World Scenarios
Agencies Running Multi-Client Setups
Agency staff move between client campaigns all day. Each panel URL and page title revealed some of that activity, such as which messages they opened and which stats they reviewed. After updating:
- Panel activity is no longer reported to a third party
- You can tell clients accurately that the panel loads no external analytics
- Your vendor and sub-processor list for the panel gets shorter
Affiliate & Partner Programs
The partner portal at /portal/... is used by people outside your company. Before this release, their visits were sent to Google too. Now partners can sign in and check their results without any third-party scripts running.
E-commerce & SaaS Teams Under GDPR
If you operate in the EU, an analytics script that runs without consent is something your privacy team will want to know about. Updating to v2.5.1 stops it going forward. Then you can:
- Check whether your privacy documentation mentions panel analytics
- Record when you updated
- Ask your DPO or legal advisor whether the earlier data flow needs further action
🛠️ Step-by-Step: Update and Verify
-
Back up first
Take a database dump and back up your
.envfile and storage volumes, as you would for any upgrade. -
Pull and restart (Docker)
From the directory that contains your
docker-compose.yml:docker compose pull docker compose up -dIf you deploy from source, check out the
v2.5.1tag and run your usual build and deploy steps. -
Clear cached views
Make sure no compiled template still contains the old include:
docker compose exec app php artisan view:clearAdjust the service name (
app) to match your compose file. -
Verify from the command line
Fetch your sign-in page and search it for Google tags. This command should print nothing:
curl -s https://your-netsendo-domain/login | grep -iE "gtag|googletagmanager|G-96J7WQ3SMT" -
Verify in the browser
Open DevTools → Network, sign in and click through a few panel pages and the partner portal. You should see no requests to
googletagmanager.comorgoogle-analytics.com. -
Run the regression test (optional)
If you maintain a fork or run CI:
php artisan test --filter=NoThirdPartyAnalyticsTest
Common pitfalls
- Customized layouts: If you edited
app.blade.phpin a fork, merge carefully and confirm the@includefor the analytics partial is gone. - Stale caches: A CDN or reverse proxy that caches HTML may keep serving old pages for a while. Purge it after the update.
- Pinned image tags: If your compose file pins a specific version, change it to
v2.5.1or later before you pull.
🎯 Expert Tips
A strict script-src header on your reverse proxy stops third-party scripts from loading, even if one comes back by mistake. Start with Content-Security-Policy-Report-Only so you can see what would be blocked before you enforce it.
Add the curl | grep check from step 4 to a scheduled job or uptime monitor. If an external tracking domain shows up in your panel HTML, you'll know about it.
Write down the date you updated and review your record of processing activities and your privacy notice. If you're unsure about the period before the update, ask your DPO or legal advisor.
If you run an affiliate program, a short note saying the partner portal no longer loads third-party analytics shows them you take their privacy seriously.
Keep NoThirdPartyAnalyticsTest in your pipeline when you customize NetSendo, so new layout changes can't bring tracking back.
✅ Conclusion
Self-hosting is supposed to mean your data stays with you, and before this release the panel's analytics script didn't respect that. v2.5.1 removes it. The panel, sign-in page and partner portal now load no third-party tracking, and a test checks that it stays that way.
- Versions 2.5.0 and earlier send page views to Google until you update
- You don't need to configure anything. Updating is the fix.
- Your open/click tracking, NetSendo pixel and Live Visitors work exactly as before
Update to v2.5.1 Today
Read the upgrade guide, check your integrations, or get the latest release:
Want to follow privacy-focused changes as they ship? Star NetSendo on GitHub and see the full v2.5.1 release notes.

