Repository navigation
Conversation
…y-app#373) A project can now read its traffic from a self-hosted Umami server or Umami Cloud. An Umami login (URL, username/password or API key, optional auth-proxy headers) is saved once per organization with the secret and headers encrypted by BETTER_AUTH_SECRET; each project picks its own website from it. - Settings > Integrations: Umami card to add a login, pick a website, change it, disconnect, or remove a saved login. - Dashboard: Organic traffic card from Umami's organicSearch channel, last 28 days vs the previous 28, with a daily visitors trend. - MCP and chat: get_umami_organic_overview, get_umami_landing_pages, get_umami_page_performance, get_umami_traffic_sources, in the GA4 tools' ok/error envelope. - The Umami URL passes the outbound URL policy; redirects are rejected. - New umami_instances / umami_connections tables (SQLite + Postgres), covered by workspace merge and GDPR erasure. - Plugin version 1.0.24 for the new MCP tools.
Overview totals come from Umami's Organic search channel, while entry pages, referrers and the trend filter on the visit's referrer. The tool text and docs now say so, and the traffic sources description no longer promises pageviews for the referrer breakdown.
snowopsdev
pushed a commit
to snowopsdev/open-seo
that referenced
this pull request
Oct 22, 2026
|
Yeah ! |
Main added pg 0038-0039 and sqlite 0060-0061, so the Umami migrations are regenerated on top as pg 0040 and sqlite 0062 (SQL unchanged). Plugin version bumped to 1.0.26 past main's 1.0.25. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Author
|
Merged main to resolve conflicts. The Umami migrations are regenerated on top of main’s as pg 0040 and sqlite 0062 (SQL unchanged). Plugin version is now 1.0.26, since main moved to 1.0.25. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TL;DR
Projects whose sites use Umami instead of Google Analytics get no traffic data in OpenSEO. This PR connects a project to an Umami website (self-hosted or Umami Cloud), so the dashboard, the chat and the MCP tools show its organic traffic the same way they show a GA4 property.
Closes #373.
What changes
In Project settings → Integrations there's a new Umami card. It takes the Umami URL and a login: username and password for self-hosted, or an API key for Umami Cloud. Optional request headers can be added for an auth proxy. The login is saved once per organization, and each project picks its own website from it. Once connected:
The dashboard shows an Organic traffic · Umami card. It has visits, visitors, pageviews and bounce rate from Umami's Organic search channel, comparing the last 28 complete days with the previous 28, plus a daily visitors trend.
MCP and the chat get four new tools, in the same ok/error envelope as the GA4 tools:
get_umami_organic_overviewget_umami_landing_pages: organic entry pages, to put next to Search Consoleget_umami_page_performance: all trafficget_umami_traffic_sources: referrers or channelsEvery tool also accepts
channel: "all".Screenshots
Umami card in Project settings → Integrations (connected; project, website and login blurred):
Organic traffic card on the project dashboard:
Setup (self-hosted Umami)
BETTER_AUTH_SECRETis set to at least 32 characters. It encrypts the stored Umami credentials, the same way the Google tokens are encrypted. The new D1 and Postgres migrations run on deploy.The full guide is in
docs/UMAMI_ANALYTICS.md, and the design record is indocs/maintainers/specs/0017-umami-analytics.md.Notes for review
normalizeAndValidateStartUrl), redirects aren't followed, and response bodies are size-bounded.get_search_opportunities, which stays GA4-only for now.umami_instancesandumami_connections, with SQLite and Postgres migrations and parity tests. Workspace merge and GDPR erase cover them.Testing
pnpm buildpasses.pnpm testpasses 1681 of 1681. That includes tests for the client, the service (real SQLite running the shipped migration), reporting and the MCP tools.