1<!doctype html> 2<html lang="en"> 3 <head> 4 <meta charset="UTF-8" /> 5 <link rel="icon" href="/favicon.png?v=20260509" type="image/png" /> 6 <link rel="apple-touch-icon" href="/favicon.png" /> 7 <meta name="viewport" content="width=device-width, initial-scale=1.0" /> 8 <meta name="referrer" content="strict-origin-when-cross-origin" /> 9 10 <!-- Start cookieyes banner --> 11 <!-- 12 Cookie consent. Loaded first and NOT async on purpose: it has to be running 13 before anything that sets non-essential cookies, otherwise tracking can fire 14 in the gap before the visitor has answered. 15 16 src/lib/consent.ts reads this banner's answer and holds Hotjar and Rewardful 17 until consent is given. The RevTrack snippet on the landing pages already 18 checks for CookieYes on its own. 19 --> 20
20<script id="cookieyes" type="text/javascript" src="https://cdn-cookieyes.com/client_data/bed06a1dc1014acb7d330d7b4de67f98/script.js"></script>
20 21
21<script> 22 // Tag dynamically-injected CookieYes banner copy so crawlers/scanners ignore it. 23 (function markCookieBannerNoSnippet() { 24 var selectors = [ 25 '.cky-banner-container', 26 '.cky-consent-container', 27 '.cky-overlay', 28 '#cookie-law-info-bar', 29 '.cookie-law-info-bar' 30 ]; 31 function tag() { 32 selectors.forEach(function (sel) { 33 document.querySelectorAll(sel).forEach(function (el) { 34 el.setAttribute('data-nosnippet', 'true'); 35 }); 36 }); 37 } 38 tag(); 39 if (window.MutationObserver) { 40 new MutationObserver(tag).observe(document.documentElement, { childList: true, subtree: true }); 41 } 42 })(); 43 </script>
43 44 <!-- End cookieyes banner --> 45 46 <title>StoryOS - YouTube Channel Growth Platform</title> 47 <meta name="description" content="StoryOS is a YouTube channel management and niche research platform that uses the YouTube Data API to provide creators with audience retention audits and market gap analysis." /> 48 <meta name="author" content="StoryOS" /> 49 50 <meta property="og:title" content="StoryOS - YouTube Channel Growth Platform" /> 51 <meta property="og:description" content="StoryOS is a YouTube channel management and niche research platform that uses the YouTube Data API to provide creators with audience retention audits and market gap analysis." /> 52 <meta property="og:type" content="website" /> 53 <meta property="og:image" content="/favicon.png" /> 54 55 <meta name="twitter:card" content="summary_large_image" /> 56 <meta name="twitter:site" content="@storyos_ai" /> 57 <meta name="twitter:image" content="/favicon.png" /> 58 59 60
60<script type="module" crossorigin src="/assets/index-Dk_EdvrQ.js"></script>
60 61 <link rel="modulepreload" crossorigin href="/assets/react-vendor-CHx29PyI.js"> 62 <link rel="modulepreload" crossorigin href="/assets/ui-vendor-sd9EibYn.js"> 63 <link rel="modulepreload" crossorigin href="/assets/utils-vendor-Cchy62ty.js"> 64 <link rel="modulepreload" crossorigin href="/assets/supabase-vendor-DQD4jYU5.js"> 65 <link rel="stylesheet" crossorigin href="/assets/index-DDXOEN-H.css"> 66 </head> 67 68 <body> 69 <!-- Static content for Google OAuth verification crawler - shown before React loads --> 70 <div id="static-content" style="font-family: system-ui, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px;"> 71 <!-- Homepage static content --> 72 <div id="static-home"> 73 <h1 style="color: #ea580c;">StoryOS - YouTube Channel Growth Platform</h1> 74 <p>StoryOS is a YouTube channel management and niche research platform that uses the YouTube Data API to provide creators with audience retention audits and market gap analysis.</p> 75 <p><strong>What StoryOS Does:</strong></p> 76 <ul> 77 <li>Provides AI-powered video planning and scripting tools</li> 78 <li>Analyzes YouTube channel performance with audience retention data</li> 79 <li>Offers training and coaching for content creators</li> 80 </ul> 81 <p><strong>API Scope Justification:</strong> StoryOS uses the youtube.readonly and yt-analytics.readonly scopes to provide authorized creators with frame-by-frame audience retention analysis and competitive niche gap reports.</p> 82 <p> 83 <a href="/privacy">Privacy Policy</a> | 84 <a href="/terms">Terms of Service</a> | 85 <a href="https://www.youtube.com/t/terms">YouTube Terms of Service</a> 86 </p> 87 </div> 88 89 <!-- Privacy Policy static content --> 90 <div id="static-privacy" style="display: none;"> 91 <h1 style="color: #ea580c;">Privacy Policy - StoryOS</h1> 92 <p><strong>Last Updated:</strong> January 2025</p> 93 <h2>Introduction</h2> 94 <p>StoryOS ("we," "our," or "us") is committed to protecting your privacy. This Privacy Policy explains how we collect, use, and safeguard your information when you use our YouTube channel management and research platform.</p> 95 <h2>Information We Collect via YouTube API</h2> 96 <p>When you connect your YouTube channel, we access:</p> 97 <ul> 98 <li><strong>Channel Analytics:</strong> View counts, watch time, audience retention data, and traffic sources</li> 99 <li><strong>Video Metadata:</strong> Titles, descriptions, thumbnails, and publishing dates</li> 100 <li><strong>Audience Demographics:</strong> Aggregated geographic and demographic data</li> 101 </ul> 102 <h2>YouTube API Scopes</h2> 103 <p>We request the following read-only scopes:</p> 104 <ul> 105 <li><code>youtube.readonly</code> - To access your channel and video information</li> 106 <li><code>yt-analytics.readonly</code> - To access your channel analytics and retention data</li> 107 </ul> 108 <h2>Google API Limited Use Disclosure</h2> 109 <p>StoryOS's use and transfer of information received from Google APIs adheres to the <a href="https://developers.google.com/terms/api-services-user-data-policy">Google API Services User Data Policy</a>, including the Limited Use requirements.</p> 110 <h2>How We Use Your Data</h2> 111 <ul> 112 <li>Provide audience retention analysis and performance insights</li> 113 <li>Generate competitive benchmarking reports</li> 114 <li>Power AI-assisted video planning and scripting tools</li> 115 </ul> 116 <h2>Data Security</h2> 117 <p>We use industry-standard encryption and security measures. Your YouTube access tokens are stored securely and never shared with third parties.</p> 118 <h2>Revoking Access</h2> 119 <p>You can disconnect your YouTube account at any time through the StoryOS dashboard or via <a href="https://myaccount.google.com/permissions">Google's security settings</a>.</p> 120 <h2>Contact</h2> 121 <p>For privacy questions, contact us at: [email protected]</p> 122 <p><a href="/">Back to StoryOS</a> | <a href="/terms">Terms of Service</a></p> 123 </div> 124 125 <!-- Terms of Service static content --> 126 <div id="static-terms" style="display: none;"> 127 <h1 style="color: #ea580c;">Terms of Service - StoryOS</h1> 128 <p><strong>Last Updated:</strong> January 2025</p> 129 <h2>Acceptance of Terms</h2> 130 <p>
130By accessing or using StoryOS, you agree to be bound by these Terms of Service and our Privacy Policy.</p> 131 <h2>Description of Service</h2> 132 <p>StoryOS is a YouTube channel management and niche research platform that provides:</p> 133 <ul> 134 <li>AI-powered video planning and scripting tools</li> 135 <li>YouTube channel analytics and audience retention analysis</li> 136 <li>Training and coaching resources for content creators</li> 137 </ul> 138 <h2>Use of YouTube API Services</h2> 139 <p>Our platform uses YouTube API Services. By using StoryOS, you also agree to be bound by the <a href="https://www.youtube.com/t/terms">YouTube Terms of Service</a>.</p> 140 <h2>User Responsibilities</h2> 141 <ul> 142 <li>Maintain the security of your account credentials</li> 143 <li>Use the service in compliance with all applicable laws</li> 144 <li>Not attempt to access data from channels you do not own</li> 145 </ul> 146 <h2>Intellectual Property</h2> 147 <p>All content, features, and functionality of StoryOS are owned by us and protected by intellectual property laws.</p> 148 <h2>Limitation of Liability</h2> 149 <p>StoryOS is provided "as is" without warranties. We are not liable for any indirect, incidental, or consequential damages arising from your use of the service.</p> 150 <h2>Termination</h2> 151 <p>We reserve the right to terminate or suspend access to our service at our sole discretion, without notice, for conduct that we believe violates these Terms.</p> 152 <h2>Contact</h2> 153 <p>For questions about these terms, contact us at: [email protected]</p> 154 <p><a href="/">Back to StoryOS</a> | <a href="/privacy">Privacy Policy</a></p> 155 </div> 156 </div> 157 158 <!-- Fallback for browsers with JavaScript disabled --> 159 <noscript> 160 <div style="font-family: system-ui, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px;"> 161 <h1 style="color: #ea580c;">StoryOS - YouTube Channel Growth Platform</h1> 162 <p>StoryOS is a YouTube channel management and niche research platform. JavaScript is required to use this application.</p> 163 <p><a href="/privacy">Privacy Policy</a> | <a href="/terms">Terms of Service</a></p> 164 </div> 165 </noscript> 166 167 <div id="root"></div> 168 169 <!-- Show correct static content based on path, then hide after React loads --> 170
170<script> 171 (function() { 172 var path = window.location.pathname; 173 var staticContent = document.getElementById('static-content'); 174 var homeEl = document.getElementById('static-home'); 175 var privacyEl = document.getElementById('static-privacy'); 176 var termsEl = document.getElementById('static-terms'); 177 178 // Only show static content on SEO-relevant pages (/, /privacy, /terms) 179 // Hide immediately on all other app routes to prevent flash 180 if (path !== '/' && path !== '/privacy' && path !== '/terms') { 181 if (staticContent) staticContent.style.display = 'none'; 182 } else { 183 // Show the correct static content based on current path 184 if (path === '/privacy') { 185 if (homeEl) homeEl.style.display = 'none'; 186 if (privacyEl) privacyEl.style.display = 'block'; 187 } else if (path === '/terms') { 188 if (homeEl) homeEl.style.display = 'none'; 189 if (termsEl) termsEl.style.display = 'block'; 190 } 191 192 // Hide static content after React mounts (only for SEO pages) 193 window.addEventListener('DOMContentLoaded', function() { 194 if (staticContent) staticContent.style.display = 'none'; 195 }); 196 } 197 })(); 198 </script>
198 199 </body> 200</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.