From 61ebdb05aba98b969b12add2bb70caf57013906d Mon Sep 17 00:00:00 2001
From: Ben Senescu <44480372+bensenescu@users.noreply.github.com>
Date: Sat, 15 Aug 2026 18:27:59 -0400
Subject: [PATCH] Google OAuth verification: privacy policy disclosures + GA4
reviewer access (#488)
* Add Google user data disclosures and Limited Use statement to privacy policy
* Show GA4 connect surfaces to the Google OAuth verification reviewer account
* List OpenAI as a potential AI model provider in the privacy policy
---
.../features/dashboard/DashboardPage.tsx | 6 ++--
.../ga4/GoogleAnalyticsConnectionCard.tsx | 6 ++--
src/shared/ga4.ts | 13 ++++++++
web/content/legal/privacy.md | 31 ++++++++++++++-----
4 files changed, 44 insertions(+), 12 deletions(-)
diff --git a/src/client/features/dashboard/DashboardPage.tsx b/src/client/features/dashboard/DashboardPage.tsx
index 4c07fa1..2b2b20a 100644
--- a/src/client/features/dashboard/DashboardPage.tsx
+++ b/src/client/features/dashboard/DashboardPage.tsx
@@ -26,7 +26,8 @@ import {
refreshDashboardBacklinkSnapshot,
} from "@/serverFunctions/dashboard";
import { setProjectDomain } from "@/serverFunctions/projects";
-import { GA4_OAUTH_APP_PENDING } from "@/shared/ga4";
+import { useSession } from "@/lib/auth-client";
+import { isGa4ConnectAvailable } from "@/shared/ga4";
import type { DashboardHeroStep } from "@/types/schemas/dashboard";
const HERO_COPY: Record<
@@ -235,6 +236,7 @@ function OnboardingChecklist({
export function DashboardPage({ projectId }: { projectId: string }) {
const queryClient = useQueryClient();
+ const { data: session } = useSession();
const activationQuery = useQuery({
queryKey: ["dashboardActivation", projectId],
@@ -336,7 +338,7 @@ export function DashboardPage({ projectId }: { projectId: string }) {
hasData: gscConnected,
node: ,
},
- ...(!GA4_OAUTH_APP_PENDING &&
+ ...(isGa4ConnectAvailable(session?.user?.email) &&
(ga4Connected || !activation.ga4.cardDismissedAt)
? [
{
diff --git a/src/client/features/ga4/GoogleAnalyticsConnectionCard.tsx b/src/client/features/ga4/GoogleAnalyticsConnectionCard.tsx
index 27520f4..849b6df 100644
--- a/src/client/features/ga4/GoogleAnalyticsConnectionCard.tsx
+++ b/src/client/features/ga4/GoogleAnalyticsConnectionCard.tsx
@@ -19,9 +19,10 @@ import {
listGa4Properties,
setGa4Property,
} from "@/serverFunctions/ga4";
+import { useSession } from "@/lib/auth-client";
import {
- GA4_OAUTH_APP_PENDING,
GA4_SELF_HOSTED_SETUP_DOCS_URL,
+ isGa4ConnectAvailable,
} from "@/shared/ga4";
export function GoogleAnalyticsConnectionCard({
@@ -37,6 +38,7 @@ export function GoogleAnalyticsConnectionCard({
}) {
const hosted = isHostedClientAuthMode();
const queryClient = useQueryClient();
+ const { data: session } = useSession();
const [picking, setPicking] = React.useState(false);
const [selection, setSelection] = React.useState(
null,
@@ -52,7 +54,7 @@ export function GoogleAnalyticsConnectionCard({
// approval, but keep the card for users who already hold a grant so they
// can finish property selection or disconnect.
const hiddenPendingApproval =
- GA4_OAUTH_APP_PENDING &&
+ !isGa4ConnectAvailable(session?.user?.email) &&
hosted &&
!connected &&
!connection?.currentUserHasGrant;
diff --git a/src/shared/ga4.ts b/src/shared/ga4.ts
index c2ba748..3048e6a 100644
--- a/src/shared/ga4.ts
+++ b/src/shared/ga4.ts
@@ -7,6 +7,19 @@ export const GA4_OAUTH_PROVIDER_ID = "google-analytics";
// own OAuth app, so only hosted mode is gated.
export const GA4_OAUTH_APP_PENDING = true;
+// Google's OAuth verification reviewer tests with this account, so the GA4
+// connect/disconnect surfaces stay visible for it while the app is pending
+// approval. MCP tool registration stays gated for everyone until approval.
+const GA4_OAUTH_REVIEWER_EMAILS = new Set(["walkthrough@everyapp.dev"]);
+
+/** Whether GA4 connect surfaces are visible to this user despite the pending gate. */
+export function isGa4ConnectAvailable(
+ email: string | null | undefined,
+): boolean {
+ if (!GA4_OAUTH_APP_PENDING) return true;
+ return email != null && GA4_OAUTH_REVIEWER_EMAILS.has(email);
+}
+
export const GA4_OAUTH_SCOPES = [
"openid",
"email",
diff --git a/web/content/legal/privacy.md b/web/content/legal/privacy.md
index cd87e83..4097827 100644
--- a/web/content/legal/privacy.md
+++ b/web/content/legal/privacy.md
@@ -3,7 +3,7 @@ title: Privacy Policy
description: How OpenSEO collects, uses, and stores personal data.
---
-_Last updated: April 28, 2026_
+_Last updated: August 15, 2026_
Every App, Inc PRIVACY POLICY
@@ -33,7 +33,7 @@ The Site and the Service are not directed to anyone under the age of 13\. As sta
II. HOW WE USE AND SHARE INFORMATION
_Personal Information:_
-Except as otherwise stated in this Privacy Policy, we do not sell, trade, rent or otherwise share for marketing purposes your Personal Information with third parties without your consent. We do share Personal Information with vendors who are performing services for the Company, such as providers that help us send email communications, operate analytics, measure advertising conversions, process billing, provide data requested through the Service, and host or support the infrastructure behind the Site and Service. These vendors may include Loops for email communications, Plausible for public-site analytics, PostHog for hosted analytics, session replay, and error monitoring, Reddit Ads for advertising conversion measurement, Autumn and Stripe for hosted billing and payment processing, Cloudflare for hosting, storage, and access controls, and DataForSEO for data requested through the Service. Those vendors use your Personal Information only at our direction and in accordance with our Privacy Policy.
+Except as otherwise stated in this Privacy Policy, we do not sell, trade, rent or otherwise share for marketing purposes your Personal Information with third parties without your consent. We do share Personal Information with vendors who are performing services for the Company, such as providers that help us send email communications, operate analytics, measure advertising conversions, process billing, provide data requested through the Service, and host or support the infrastructure behind the Site and Service. These vendors may include Loops for email communications, Plausible for public-site analytics, PostHog for hosted analytics, session replay, and error monitoring, Reddit Ads for advertising conversion measurement, Autumn and Stripe for hosted billing and payment processing, Cloudflare for hosting, storage, and access controls, DataForSEO for data requested through the Service, and OpenRouter and OpenAI for AI model access when you use AI assistant features of the Service. Those vendors use your Personal Information only at our direction and in accordance with our Privacy Policy.
In general, the Personal Information you provide to us is used to help us communicate with you and operate the Service. For example, we use Personal Information to create and secure accounts, authenticate users, provide technical support, process billing, send administrative or transactional emails, contact users in response to questions, solicit feedback from users, and inform users about product updates and promotional offers.
We may share Personal Information with outside parties if we have a good-faith belief that access, use, preservation or disclosure of the information is reasonably necessary to meet any applicable legal process or enforceable governmental request; to enforce applicable Terms of Service, including investigation of potential violations; address fraud, security or technical concerns; or to protect against harm to the rights, property, or safety of our users or the public as required or permitted by law.
@@ -41,20 +41,35 @@ _Non-Personal Information_
In general, we use Non-Personal Information to help us improve the Service and customize the user experience. We also aggregate Non-Personal Information in order to track trends and analyze use patterns on the Site. This Privacy Policy does not limit in any way our use or disclosure of Non-Personal Information, and we reserve the right to use and disclose such Non-Personal Information for lawful business purposes, including with service providers and analytics providers that help us operate and improve the Site and Service.
In the event we undergo a business transaction such as a merger, acquisition by another company, or sale of all or a portion of our assets, your Personal Information may be among the assets transferred. You acknowledge and consent that such transfers may occur and are permitted by this Privacy Policy, and that any acquirer of our assets may continue to process your Personal Information as set forth in this Privacy Policy. If our information practices change at any time in the future, we will post the policy changes to the Site so that you may opt out of the new information practices. We suggest that you check the Site periodically if you are concerned about how your information is used.
-III. HOW WE PROTECT INFORMATION
+III. GOOGLE USER DATA
+You may choose to connect Google services, such as Google Search Console and Google Analytics, to the hosted Service, or to sign in with your Google account. When you do, the Service accesses Google user data through Google's APIs with your authorization. This section describes how we handle that data, in addition to the other terms of this Privacy Policy. Self-hosted deployments of OpenSEO connect to Google using the operator's own credentials, and this section does not apply to them.
+
+_What Google user data we access._ If you sign in with Google, we receive your basic account information (name, email address, and profile picture) to create and authenticate your account. If you connect Google Search Console, we access search performance data for the sites you authorize, such as queries, pages, clicks, impressions, and average positions, as well as URL inspection results. If you connect Google Analytics, we access report data for the property you select, such as traffic and acquisition metrics, landing page and page performance, key events, ecommerce outcomes, site search terms, and audience breakdowns by device and country, along with property configuration details such as your list of properties, data streams, and measurement settings. We also receive the email address of the connected Google account so we can show you which account is linked. All Google API scopes we request for these integrations are read-only; we cannot modify data in your Google account.
+
+_How we use it._ We use Google user data solely to provide the user-facing features of the Service that you request: showing connection status, generating SEO reports and insights, and returning data you ask for through the Service, including through AI assistants and MCP clients that you explicitly connect. We do not use Google user data for advertising, and we do not use it to develop, improve, or train generalized AI or machine learning models.
+
+_How we share it._ We do not sell Google user data, and we do not transfer it to data brokers or advertisers. Google user data leaves our systems only in these cases: (a) when you connect the Service to an AI assistant or other MCP client and request data through it, the results are returned to that client, whose own privacy terms then apply; (b) when you use the in-app AI assistant, relevant data may be processed by an AI model accessed through providers such as OpenRouter or OpenAI in order to generate your response; and (c) our infrastructure provider, Cloudflare, hosts the systems that process this data on our behalf.
+
+_How we protect it._ The OAuth tokens that grant access to your Google account are stored encrypted at rest, and all data is transferred over encrypted connections (TLS). Google Search Console and Google Analytics report data is retrieved on demand to answer your requests and is not stored in our databases.
+
+_Retention and deletion._ Because report data is not stored, there is no retained copy of it to delete. While an integration is connected, we retain the OAuth tokens and connection details (such as the selected site or property and the connected account email). Disconnecting an integration in your settings removes that connection and its details immediately, and the stored tokens for the Google account are deleted once none of your projects use it. You can also revoke OpenSEO's access at any time from your Google account's security settings at https://myaccount.google.com/permissions. Deleting your OpenSEO account revokes our access with Google and erases all associated data.
+
+_Limited Use._ OpenSEO's use and transfer to any other app of information received from Google APIs will adhere to the [Google API Services User Data Policy](https://developers.google.com/terms/api-services-user-data-policy), including the Limited Use requirements.
+
+IV. HOW WE PROTECT INFORMATION
We implement security measures designed to protect your information from unauthorized access. Your account is protected by your account password and we urge you to take steps to keep your personal information safe by not disclosing your password and by logging out of your account after each use. We further protect your information from potential security breaches by implementing certain technological security measures including encryption, firewalls and secure socket layer technology. However, these measures do not guarantee that your information will not be accessed, disclosed, altered or destroyed by breach of such firewalls and secure server software. By using our Service, you acknowledge that you understand and agree to assume these risks. If you operate a self-hosted deployment of OpenSEO, you are responsible for the security measures and privacy practices of that deployment.
-IV. YOUR RIGHTS REGARDING THE USE OF YOUR PERSONAL INFORMATION
+V. YOUR RIGHTS REGARDING THE USE OF YOUR PERSONAL INFORMATION
You have the right at any time to prevent us from contacting you for marketing purposes. When we send a promotional communication to a user, the user can opt out of further promotional communications by following the unsubscribe instructions provided in each promotional e-mail. You can also indicate that you do not wish to receive marketing communications from us by contacting us at ben@openseo.so. Please note that notwithstanding the promotional preferences you indicate by either unsubscribing or contacting us, we may continue to send you administrative or transactional emails including, for example, account verification, password reset, billing, security, support, and periodic updates to our Privacy Policy.
-V. LINKS TO OTHER WEBSITES
+VI. LINKS TO OTHER WEBSITES
As part of the Service, we may provide links to or compatibility with other websites or applications. However, we are not responsible for the privacy practices employed by those websites or the information or content they contain. This Privacy Policy applies solely to information collected by us through the Site and the Service. Therefore, this Privacy Policy does not apply to your use of a third party website accessed by selecting a link on our Site or via our Service. To the extent that you access or use the Service through or on another website or application, then the privacy policy of that other website or application will apply to your access or use of that site or application. We encourage our users to read the privacy statements of other websites before proceeding to use them.
-VI. CHANGES TO OUR PRIVACY POLICY
+VII. CHANGES TO OUR PRIVACY POLICY
The Company reserves the right to change this policy and our Terms of Service at any time. We will notify you of significant changes to our Privacy Policy by sending a notice to the primary email address specified in your account or by placing a prominent notice on our site. Significant changes will go into effect 30 days following such notification. Non-material changes or clarifications will take effect immediately. You should periodically check the Site and this privacy page for updates.
-VII. CONTACT US
+VIII. CONTACT US
If you have any questions regarding this Privacy Policy or the practices of this Site, please contact us by sending an email to ben@openseo.so.
-Last Updated: This Privacy Policy was last updated on April 28, 2026.
+Last Updated: This Privacy Policy was last updated on August 15, 2026.
[image1]: data:image/png;base64,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