This policy explains what data Web Tutorial AI collects, why we collect it, and how it is handled. We believe in being straightforward about our practices.
Last updated: March 8, 2026
When you install and use the extension, the following data is collected automatically:
chrome.storage.local. This ID persists across browser sessions and reinstalls. It is sent to our server for session management and authentication recovery.The following data is only collected when you take a specific action:
How Page Reading Works: The extension can read the content of any page you visit, but it only does so when you submit a chat prompt — your question serves as the explicit trigger. Page content is never passively scanned, collected, or transmitted in the background. When you submit a question, the page content is extracted and sent directly from the extension to your chosen AI provider using your own API key — our server never receives it. To minimize redundant processing, extracted content is cached locally for up to 5 minutes and automatically cleared when you navigate away or close the tab.
Rate Limiting: Per-user rate limits are enforced on server-routed API endpoints to prevent abuse. Rate limit status is communicated via standard X-RateLimit response headers. No personal content is stored as part of rate limiting.
| Data | Purpose |
|---|---|
| Email address | Account authentication, linking your subscription, responding to feedback |
| Persistent device ID | Session management, enforcing per-device limits, authentication recovery, abuse prevention |
| Device fingerprint | Device verification, detecting multi-account abuse, enforcing session limits across devices |
| IP address & user agent | Session record keeping, security monitoring, abuse prevention |
| Session activity (heartbeat) | Enforcing usage-time limits per subscription tier, detecting inactive sessions |
| Subscription status | Determining access level (free trial, limited, premium), processing payments |
| Page content, URL & AI questions | Generating AI responses to your questions. Sent directly from the extension to your chosen AI provider using your own API key — our server never receives this data |
| Feedback | Improving the extension, fixing reported issues |
We rely on the following third-party services to operate Web Tutorial AI. Each service receives only the data necessary for its function.
Web Tutorial AI connects to third-party services in two ways:
Used for: Authentication (Google Sign-In), Firestore database (session records, feedback, subscription data, device fingerprints)
Data received: Email address, device ID, device fingerprint, IP address, user agent, session activity, subscription status, feedback
Used for: Subscription billing and payment processing
Data received: Email address, payment information (handled directly by Stripe)
Used for: Primary AI-powered question answering and content analysis
Data received: Page content, page URL, and your questions, sent per-request
Connection: The extension connects directly to the Google Gemini API from your browser using your own API key. Our server is not involved in this data flow and never receives your page content or questions. Because you provide your own API key, we (the developer) have zero access to your Google AI account, usage logs, or billing.
Used for: AI-powered question answering (alternative provider)
Data received: Page content, page URL, and your questions, sent per-request
Connection: The extension connects directly to OpenRouter from your browser using your own API key. Our server is not involved in this data flow and never receives your page content or questions. Because you provide your own API key, we (the developer) have zero access to your OpenRouter account, usage logs, or billing. Your use of OpenRouter is subject to OpenRouter's own privacy policy.
Used for: AI-powered question answering (when Claude model is selected via OpenRouter)
Data received: Page content, page URL, and your questions, routed through OpenRouter
Connection: When you select a Claude model, requests are sent directly from your browser to OpenRouter, which routes them to Anthropic's Claude API. Our server is not involved. Your use is subject to both OpenRouter's and Anthropic's privacy policies.
Used for: Web search (when you enable Brave as your search provider)
Data received: Your search queries, sent per-request only when Web Search is enabled for a specific prompt
Connection: The extension connects directly to the Brave Search API from your browser using your own API key. Our server is not involved in this data flow.
Used for: AI-powered web search (when you enable Perplexity as your search provider)
Data received: Your search queries, sent per-request only when Web Search is enabled for a specific prompt
Connection: The extension connects directly to Perplexity from your browser using your own API key. Our server is not involved in this data flow.
Used for: Google search results (when you enable Serper as your search provider)
Data received: Your search queries, sent per-request
Connection: The extension connects directly to Serper.dev from your browser using your own API key. Our server is not involved in this data flow.
Used for: Semantic search (when you enable Exa as your search provider)
Data received: Your search queries, sent per-request
Connection: The extension connects directly to Exa.ai from your browser using your own API key. Our server is not involved in this data flow.
Used for: Text-to-speech (when you use the TTS feature)
Data received: Text content to be spoken aloud
Connection: The extension connects directly to ElevenLabs from your browser using your own API key. Our server is not involved in this data flow.
Used for: Text-to-speech (when you select Google Cloud TTS as your TTS provider)
Data received: Text content to be spoken aloud, voice selection, speaking rate, and pitch settings
Connection: The extension connects directly to Google's Text-to-Speech API from your browser using your own API key. Our server is not involved in this data flow.
Used for: Text-to-speech using Chrome's native TTS engine (when you select Chrome as your TTS provider)
Data received: Text content to be spoken aloud, processed locally by the browser
Connection: Chrome's built-in TTS runs entirely on your device. No data is sent to any external server. No API key is required.
Used for: Academic paper search and citation data
Data received: Your search queries (paper titles, authors, keywords)
Connection: Queries are routed through our server as a stateless proxy. No query content is stored on our server.
Used for: Preprint paper search
Data received: Your search queries (paper titles, authors, keywords)
Connection: Queries are routed through our server as a stateless proxy. No query content is stored on our server.
Used for: US patent search via the USPTO PatentsView API
Data received: Your patent search queries (keywords, patent numbers, assignee names)
Connection: Queries are routed through our server as a stateless proxy. No query content is stored on our server.
Used for: Google Patents search across 100+ patent offices and trademark search
Data received: Your patent/trademark search queries
Connection: Queries are routed through our server as a stateless proxy to Apify's cloud actors. No query content is stored on our server.
Used for: FDA drug, device, and food safety data lookup
Data received: Your FDA search queries (drug names, device types, food categories)
Connection: Queries are routed through our server as a stateless proxy. No query content is stored on our server.
Used for: Email spam analysis (when you use the spam checker feature)
Data received: Email content you submit for spam analysis
Connection: Email content is routed through our server as a stateless proxy to Postmark's SpamAssassin API. No email content is stored on our server.
The extension integrates with specialized documentation servers to provide up-to-date technical information from:
Data received: Query strings only (search terms for documentation lookup)
Connection: Queries are routed through our server as a stateless proxy to the respective MCP documentation servers. No query content is stored on our server.
chrome.storage.local. Remains until you clear extension data or uninstall.chrome.storage.local or chrome.storage.sync. They are never sent to our server.chrome.storage.session for authenticating API requests to our server (session management, rate limiting, and premium verification).API Key Encryption: Your API keys are encrypted using AES-GCM before being stored locally. Encrypted keys are identified by an enc_ prefix. Keys are decrypted only in memory when needed for API calls and are never sent to our servers in any form.
When you delete your account, all associated data in Firestore (session records, subscription data, feedback, device fingerprints) is deleted within 30 days. Stripe retains payment records according to their own retention policy. Local data can be cleared by removing the extension.
We do NOT sell, rent, or share your personal data with third parties for advertising or marketing purposes.
Your data is shared only with the service providers listed in Section 3, and only to the extent necessary for the service to function. Specifically:
We do not use advertising networks, data brokers, or marketing partners.
We may disclose information if required by law (e.g., court orders, subpoenas) or to protect the safety of our users or the public.
You have the following rights regarding your data:
To exercise any of these rights, contact us at privacy@webtutorial.ai or use the feedback feature in the extension.
Web Tutorial AI is not intended for children under 13 years of age. We do not knowingly collect personal information from children under 13. Google Sign-In requires users to meet Google's minimum age requirements.
If we learn that we have collected personal information from a child under 13, we will promptly delete that information. If you believe a child under 13 has provided us with personal data, please contact us at privacy@webtutorial.ai.
The Web Tutorial AI extension requests the following browser permissions. Each permission follows the Principle of Least Privilege — we request only what is strictly necessary for the extension to function.
<all_urls> (Content Scripts) — Essential for injecting the chat overlay and extracting text from the page you are viewing. Text extraction is triggered only when you submit a chat prompt. The extension does not passively scan, monitor, or record your browsing activity. Extracted content is cached locally for up to 5 minutes to avoid redundant processing.Each permission is used solely for the functionality described above. We do not use permissions to collect data beyond what is disclosed in this policy.
We may update this Privacy Policy from time to time. When we do:
If you have questions about this Privacy Policy or want to exercise your privacy rights:
© 2026 Web Tutorial AI. All rights reserved.