1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="UTF-8"> 5 <meta http-equiv="X-UA-Compatible" content="IE=edge"> 6 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 7 <!-- Prevent auth flash - runs before page renders --> 8
8<script> 9 (function() { 10 const user = localStorage.getItem('user'); 11 if (user) { 12 document.documentElement.classList.add('user-logged-in'); 13 } 14 })(); 15 </script>
15 16 17 <!-- Theme Color --> 18 <meta name="theme-color" content="#232323"> 19 20 <!-- Always present SEO --> 21 22 23 24 <meta name="robots" content="index, follow"> 25 26 27 28 <link rel="canonical" href="https://undervalued.ai/pricing"> 29 30 31 32 <meta property="og:image" content="https://undervalued.ai/static/images/logo.webp"> 33 <meta name="twitter:image" content="https://undervalued.ai/static/images/logo.webp"> 34 35 36 37 38
38<script type="application/ld+json"> 39 { 40 "@context": "https://schema.org", 41 "@graph": [ 42 { 43 "@type": "Organization", 44 "@id": "https://undervalued.ai#organization", 45 "name": "Undervalued.ai", 46 "url": "https://undervalued.ai/", 47 "logo": "https://undervalued.ai/static/images/logo.webp" 48 }, 49 { 50 "@type": "WebSite", 51 "@id": "https://undervalued.ai#website", 52 "name": "Undervalued.ai", 53 "url": "https://undervalued.ai/", 54 "publisher": { "@id": "https://undervalued.ai#organization" } 55 } 56 ] 57 } 58 </script>
58 59 60 61 62 63 64 65<meta name="description" content="Pricing for Undervalued.ai's AI hedge fund analysis: Free, Starter for active investors at $9/month, and Investor for full access at $39/month."> 66<meta property="og:title" content="Pricing | Undervalued.ai"> 67<meta property="og:description" content="Pricing for Undervalued.ai's AI hedge fund analysis: Free, Starter for active investors at $9/month, and Investor for full access at $39/month."> 68<meta property="og:url" content="https://undervalued.ai/pricing"> 69<meta property="og:type" content="website"> 70<meta name="twitter:card" content="summary_large_image"> 71<meta name="twitter:title" content="Pricing | Undervalued.ai"> 72<meta name="twitter:description" content="Pricing for Undervalued.ai's AI hedge fund analysis: Free, Starter for active investors at $9/month, and Investor for full access at $39/month."> 73 74 75 <title> 76 77 Pricing | Undervalued.ai 78 79 </title> 80 <link rel="shortcut icon" href="https://undervalued.ai/static/favicon.ico"> 81 <link rel="stylesheet" href="https://undervalued.ai/static/css/base.css?v=2.208"> 82 <link rel="stylesheet" href="https://undervalued.ai/static/css/modals.css?v=2.208"> 83 <link rel="stylesheet" href="https://undervalued.ai/static/css/loader.css?v=2.208"> 84 <link rel="stylesheet" href="https://undervalued.ai/static/css/user-menu.css?v=2.208"> 85 <link rel="stylesheet" href="https://undervalued.ai/static/css/shimmer.css?v=2.208"> 86 87 88
88<script id="server-config" type="application/json"> 89 {"auth_cookie": "uv_token", "cap_tooltips": {"LargeCap": "Companies over $10B market capitalization.", "MicroCap": "Companies under $300M market capitalization.", "MidCap": "$2B - $10B market capitalization.", "SmallCap": "$300M - $2B market capitalization."}, "csrf_cookie": "uv_csrf", "csrf_header": "X-UV-CSRF-TOKEN", "fake_actions": false, "gate": {"precedence": ["premium", "auth", "quota"], "types": {"auth": "auth", "premium": "premium", "quota": "quota"}}, "trades_days_default": 60} 90 </script>
90 91 <!-- Google tag (gtag.js) -->
vendor: 68 bytes, lines 91-92
91 92 <script async src="https://www.googletagmanager.com/gtag/js?id=
92G-95940LKTDZ
vendor: 16 bytes, lines 92-93
92"></script> 93
93<script> 94
vendor: 151 bytes, lines 94-97
94window.dataLayer = window.dataLayer || []; 95 function gtag(){dataLayer.push(arguments);} 96 gtag('js', new Date()); 97 gtag('config', '
97G-95940LKTDZ
vendor: 8 bytes, lines 97-98
97'); 98
98</script>
98 99
99<script data-cfasync="false" src="https://accounts.google.com/gsi/client" async></script>
99 100 101<link rel="stylesheet" href="https://undervalued.ai/static/css/pricing.css?v=2.208"> 102 103</head> 104<body 105 id="top" 106 data-debug-mode="false" 107 data-heartbeat="9" 108 data-stale-timeout="18000" 109 data-dead-timeout="27000" 110 data-google-client-id="95122102972-u88qma52h1a38vo3gm0eiqjfj4ce6oui.apps.googleusercontent.com" 111> 112 <div class="loader-container"> 113 <div class="loader"></div> 114 </div> 115 116 <header> 117 <nav> 118 <div class="nav-left"> 119 <a class="logo" href="https://undervalued.ai/">Undervalued.ai</a> 120 <div id="breadcrumbs" class="breadcrumbs"></div> 121 </div> 122 <div id="logged-out-view" class="auth-buttons"> 123 <button class="login" data-modal-type="login">Log in</button> 124 <button class="signup" data-modal-type="signup">Sign up</button> 125 </div> 126 <div id="user-profile" class="user-profile-container" style="display: none;"> 127 <div class="user-avatar-wrap"> 128 <img id="user-avatar" src="" alt="User Avatar" class="user-avatar"> 129 <span id="avatar-dot" class="avatar-dot" title="No credits remaining" hidden></span> 130 </div> 131 <div class="profile-dropdown" id="profile-dropdown"> 132 <div class="profile-info"> 133 <div class="profile-name" id="profile-name"></div> 134 <div class="profile-email" id="profile-email"></div> 135 </div> 136 <!-- QUOTA PANEL (inserted above Logout) --> 137 <div class="um-quota-panel" id="um-quota-panel"> 138 <div class="um-header"> 139 <div class="um-plan-icon" id="um-plan-icon" aria-hidden="true"></div> 140 <div class="um-plan-meta"> 141 <div class="um-plan-title" id="um-plan-title">â</div> 142 <div class="um-plan-subtitle" id="um-plan-subtitle">â</div> 143 </div> 144 </div> 145 146 <div class="um-rows"> 147 <div class="um-row"> 148 <div class="um-row-head"> 149 <span class="um-row-label">Analyses</span> 150 </div> 151 <div class="um-bar"> 152 <div class="um-bar-fill" id="um-bar-analyses"></div> 153 </div> 154 <div class="um-row-meta" id="um-text-analyses">â</div> 155 </div> 156 157 <div class="um-row"> 158 <div class="um-row-head"> 159 <span class="um-row-label">Refreshes</span> 160 </div> 161 <div class="um-bar"> 162 <div class="um-bar-fill" id="um-bar-refreshes"></div> 163 </div> 164 <div class="um-row-meta" id="um-text-refreshes">â</div> 165 </div> 166 167 <div class="um-row"> 168 <div class="um-row-head"> 169 <span class="um-row-label">Reports</span> 170 </div> 171 <div class="um-bar"> 172 <div class="um-bar-fill" id="um-bar-reports"></div> 173 </div> 174 <div class="um-row-meta" id="um-text-reports">â</div> 175 </div> 176 </div> 177 <div class="um-footer"> 178 <a class="um-manage" href="https://undervalued.ai/pricing">Manage plan</a> 179 <a class="um-upgrade-plan" id="um-upgrade-plan" href="https://undervalued.ai/pricing" hidden>Upgrade plan</a> 180 </div> 181 </div> 182 <button class="profile-menu-item" id="logout-button"> 183 <svg viewBox="0 0 24 24" fill="none"> 184 <path d="M17 7l-1.41 1.41L18.17 11H8v2h10.17l-2.58 2.58L17 17l5-5zM4 5h8V3H4c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h8v-2H4V5z" fill="currentColor"/> 185 </svg> 186 Log out 187 </button> 188 </div> 189 </div> 190 </nav> 191 </header> 192 193 <!-- AUTH MODAL: close button first, then chart, then content --> 194 <div id="authModal" class="modal-overlay"> 195 <div class="modal modal-login"> 196 <!-- Close button as direct child of modal (not inside header) --> 197 <button class="modal-close" onclick="closeModal('authModal')">
198 <span id="authCloseIcon"></span> 199 </button> 200 201 <div class="modal-header"> 202 <!-- Chart in header section --> 203 <div class="chart-rectangle" aria-hidden="true"> 204 <!-- SVG content unchanged --> 205 <svg class="investment-chart-svg" viewBox="0 0 300 160" preserveAspectRatio="xMidYMid meet"> 206 <defs> 207 <linearGradient id="authLineGradient" x1="0%" y1="0%" x2="100%" y2="0%"> 208 <stop offset="0%" style="stop-color:var(--green2);stop-opacity:0.8" /> 209 <stop offset="100%" style="stop-color:var(--green);stop-opacity:1" /> 210 </linearGradient> 211 </defs> 212 <line class="chart-grid-line" x1="0" y1="40" x2="300" y2="40"></line> 213 <line class="chart-grid-line" x1="0" y1="70" x2="300" y2="70"></line> 214 <line class="chart-grid-line" x1="0" y1="100" x2="300" y2="100"></line> 215 <line class="chart-grid-line" x1="0" y1="130" x2="300" y2="130"></line> 216 <path class="chart-line" 217 d="M10,115 Q25,108 40,110 T70,95 Q85,88 100,92 T130,85 Q145,78 160,82 T190,75 Q205,70 220,74 T250,72" 218 stroke="url(#authLineGradient)"></path> 219 <path id="auth-animated-segment" 220 class="chart-line animated-segment" 221 d="M250,72 Q265,68 275,55 T285,38" 222 stroke="url(#authLineGradient)"></path> 223 <g id="auth-endpoint-group" class="endpoint-group"> 224 <circle class="pulse-circle pulse-2" cx="285" cy="38" r="4.5"></circle> 225 <circle class="pulse-circle pulse-1" cx="285" cy="38" r="4.5"></circle> 226 <circle class="endpoint-dot" cx="285" cy="38" r="4.5"></circle> 227 </g> 228 </svg> 229 </div> 230 </div> 231 232 <div class="modal-content"> 233 <h2 class="modal-title">Welcome Back</h2> 234 <p class="modal-message">Access institutional-grade tools and analysis to identify undervalued opportunities.</p> 235 236 <!-- Google button injected here --> 237 <div id="google-signin-container-in-modal" class="google-signin-center"></div> 238 <p class="privacy-note"> 239 By using Undervalued.ai, you agree with our 240 <a href="https://undervalued.ai/terms-and-policies">Terms</a> 241 and have read our 242 <a href="https://undervalued.ai/terms-and-policies">Privacy Policy</a>. 243 </p> 244 </div> 245 </div> 246 </div> 247 248 249 <!-- QUOTA / PAYWALL MODAL (with soft gradient banner and two actions) --> 250 <div id="quotaModal" class="modal-overlay"> 251 <div class="modal"> 252 <!-- close chip as direct child --> 253 <button class="modal-close" onclick="closeModal('quotaModal')"> 254 <span id="quotaCloseIcon"></span> 255 </button> 256 257 <div class="modal-banner"> 258 <h2 class="modal-title"></h2> 259 <p class="modal-description">You've reached your monthly limit. Upgrade to continue accessing premium features.</p> 260 </div> 261 262 <div class="modal-content"> 263 <p class="modal-message" id="quota-message"></p> 264 <div class="modal-actions"> 265 <button type="button" class="modal-button-secondary" onclick="closeModal('quotaModal')">Maybe later</button> 266 <a id="quota-upgrade-btn" class="modal-button" href="/pricing"> 267 Upgrade plan 268 <svg width="16" height="16" viewBox="0 0 24 24" fill="none" aria-hidden="true"> 269 <path d="M5 12h14M12 5l7 7-7 7" stroke="currentColor" stroke-width="2"/> 270 </svg> 271 </a> 272 273 </div> 274 </div> 275 </div> 276 </div> 277 278 <!-- REFRESHING MODAL (single, wide, with soft gradient banner) --> 279 <div id="refreshingModal" class="modal-overlay" aria-hidden="true"> 280 <div class="modal modal-wide" role="dialog" aria-modal="true" aria-labelledby="refreshingModalTitle"> 281 <!-- Close button as direct child --> 282 <button class="modal-close" onclick="closeModal('refreshingModal')">
283 <span id="refreshingCloseIcon"></span> 284 </button> 285 286 <div class="modal-banner"> 287 <h2 id="refreshingModalTitle" class="modal-title">Refreshing Analysis</h2> 288 <div class="modal-description"> 289 <p>Refreshing the analysis with the latest market data (~ 2 minutes)</p> 290 <p>You can close this dialog. Keep the tab open for updates.</p> 291 </div> 292 </div> 293 294 <div class="modal-content"> 295 <!-- Same shimmer text behavior used in search.js --> 296 <div id="refreshing-status" class="status-text shimmer">Requesting a fresh analysisâ¦</div> 297 </div> 298 </div> 299 </div> 300 301 302 <main> 303 304 305 306 307 308<!-- Server-provided plan context for SSR + JS -->
309<script id="plan-ctx" type="application/json">{"can_manage": false, "current_plan": "free", "is_authenticated": false}</script>
309 310 311<div class="pricing-container"> 312 <header class="pricing-header"> 313 <h1>Choose Your Plan</h1> 314 <p class="pricing-subtitle">Institutional-grade analysis. Retail pricing</p> 315 316 <div class="billing-toggle"> 317 <!-- Explicit type="button" to avoid accidental form submit --> 318 <button type="button" class="toggle-btn active" data-period="monthly">Monthly</button> 319 <button type="button" class="toggle-btn" data-period="annual"> 320 Annual 321 <!-- <span class="discount-badge">Save 15-22%</span> --> 322 </button> 323 </div> 324 </header> 325 326 <div class="pricing-grid"> 327 <!-- Free Plan --> 328 <div class="pricing-card plan-free "> 329 <div class="card-header"> 330 331 <h2 class="plan-name">Free</h2> 332 333 <div class="plan-price"> 334 <span class="price monthly-price">$0</span> 335 <span class="price annual-price" style="display: none;">$0</span> 336 <span class="period">per month</span> 337 </div> 338 <p class="annual-note" style="display: none;">No credit card required</p> 339 </div> 340 341 <!-- Plan CTA rules: 342 - Visitor: "Start Free" 343 - Free user: "Current" (disabled) 344 - Starter: "Downgrade to Free" 345 - Investor: "Downgrade to Free" 346 Always type="button" --> 347 <button type="button" 348 class="plan-cta" 349 data-plan="free" 350 data-role="plan-cta" 351 > 352 353 Start Free 354 355 </button> 356 357 <div class="features-list"> 358 <div class="feature-item"> 359 <svg class="check-icon" viewBox="0 0 24 24" fill="none"> 360 <path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 361 </svg> 362 <span><strong>15</strong> stock analyses per month</span> 363 </div> 364 <div class="feature-item"> 365 <svg class="check-icon" viewBox="0 0 24 24" fill="none"> 366 <path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 367 </svg> 368 <span><strong>2</strong> analysis refreshes per month</span> 369 </div> 370 <!-- Free: first slice of each list only (gated by LIST_DISPLAY_LIMIT) --> 371 <div class="feature-item"> 372 <svg class="check-icon" viewBox="0 0 24 24" fill="none"> 373 <path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 374 </svg> 375 <span>Access to up to <strong>20</strong> stocks in each list</span> 376 </div> 377 <div class="feature-item disabled"> 378 <svg class="x-icon" viewBox="0 0 24 24" fill="none"> 379 <path d="M18 6L6 18M6 6l12 12" stroke="currentColor" stroke-width="2" stroke-linecap="round"/> 380 </svg> 381 <span>No PDF reports</span> 382 </div> 383 <div class="feature-item disabled"> 384 <svg class="x-icon" viewBox="0 0 24 24" fill="none"> 385 <path d="M18 6L6 18M6 6l12 12" stroke="currentColor" stroke-width="2" stroke-linecap="round"/> 386 </svg> 387 <span>No Insider trading alerts</span> 388 </div> 389 <!-- Intentionally not listing an alerts cap here, as Free has 0 --> 390 </div> 391 </div> 392 393 <!-- Starter Plan --> 394 <div class="pricing-card plan-starter "> 395 <div class="card-header"> 396 397 <h2 class="plan-name">Starter</h2> 398 <div class="plan-price">
399 <span class="price monthly-price">$9</span> 400 <span class="price annual-price" style="display: none;">$7</span> 401 <span class="period">per month</span> 402 </div> 403 <p class="annual-note" style="display: none;">Billed $84 annually</p> 404 </div> 405 406 <!-- Plan CTA rules: 407 - Visitor: "Choose Starter" 408 - Free user: "Upgrade to Starter" (green primary) 409 - Starter user: "Downgrade to Free" and data-plan="free" to actually cancel 410 - Investor user: "Downgrade to Starter" 411 Always type="button" --> 412 <button type="button" 413 class="plan-cta primary" 414 data-plan="starter" 415 data-role="plan-cta" 416 > 417 418 Choose Starter 419 420 </button> 421 422 <div class="features-list"> 423 <div class="feature-item"> 424 <svg class="check-icon" viewBox="0 0 24 24" fill="none"> 425 <path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 426 </svg> 427 <span><strong>100</strong> stock analyses per month</span> 428 </div> 429 <div class="feature-item"> 430 <svg class="check-icon" viewBox="0 0 24 24" fill="none"> 431 <path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 432 </svg> 433 <span><strong>15</strong> analysis refreshes per month</span> 434 </div> 435 <!-- Starter: full list access --> 436 <div class="feature-item"> 437 <svg class="check-icon" viewBox="0 0 24 24" fill="none"> 438 <path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 439 </svg> 440 <span>Access to up to <strong>80</strong> stocks in each list</span> 441 </div> 442 <div class="feature-item"> 443 <svg class="check-icon" viewBox="0 0 24 24" fill="none"> 444 <path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 445 </svg> 446 <span><strong>5</strong> reports per month</span> 447 </div> 448 <div class="feature-item"> 449 <svg class="check-icon" viewBox="0 0 24 24" fill="none"> 450 <path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 451 </svg> 452 <span>Insider trading alerts</span> 453 </div> 454 <div class="feature-item"> 455 <svg class="check-icon" viewBox="0 0 24 24" fill="none"> 456 <path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 457 </svg> 458 <span>Up to <strong>20</strong> stocks with alerts</span> 459 </div> 460 </div> 461 </div> 462 463 <!-- Investor Plan --> 464 <div class="pricing-card featured plan-investor "> 465 <div class="card-header"> 466 467 468 <h2 class="plan-name">Investor</h2> 469 <div class="plan-price"> 470 <span class="price monthly-price">$39</span> 471 <span class="price annual-price" style="display: none;">$33</span> 472 <span class="period">per month</span> 473 </div> 474 <p class="annual-note" style="display: none;">Billed $396 annually</p> 475 </div> 476 477 <!-- Plan CTA rules: 478 - Visitor: "Choose Investor" 479 - Free user: "Upgrade to Investor" (green primary) 480 - Starter user: "Upgrade to Investor" (green primary) 481 - Investor user: "Downgrade to Free" and data-plan="free" 482 Absolutely no âUpgradeâ anywhere when already Investor. 483 Always type="button" --> 484 <button type="button" 485 class="plan-cta primary" 486 data-plan="investor" 487 data-role="plan-cta" 488 > 489 490 Choose Investor 491 492 </button> 493 494 <div class="features-list"> 495 <div class="feature-item">
496 <svg class="check-icon" viewBox="0 0 24 24" fill="none"> 497 <path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 498 </svg> 499 <span><strong>Unlimited</strong> stock analyses*</span> 500 </div> 501 <div class="feature-item"> 502 <svg class="check-icon" viewBox="0 0 24 24" fill="none"> 503 <path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 504 </svg> 505 <span><strong>60</strong> analysis refreshes per month</span> 506 </div> 507 <!-- Investor: full list access --> 508 <div class="feature-item"> 509 <svg class="check-icon" viewBox="0 0 24 24" fill="none"> 510 <path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 511 </svg> 512 <span>Access to up to <strong>80</strong> stocks in each list</span> 513 </div> 514 <div class="feature-item"> 515 <svg class="check-icon" viewBox="0 0 24 24" fill="none"> 516 <path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 517 </svg> 518 <span><strong>25</strong> reports per month</span> 519 </div> 520 <div class="feature-item"> 521 <svg class="check-icon" viewBox="0 0 24 24" fill="none"> 522 <path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 523 </svg> 524 <span>Insider trading alerts</span> 525 </div> 526 <div class="feature-item"> 527 <svg class="check-icon" viewBox="0 0 24 24" fill="none"> 528 <path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 529 </svg> 530 <span>Up to <strong>100</strong> stocks with alerts</span> 531 </div> 532 <div class="feature-item"> 533 <svg class="check-icon" viewBox="0 0 24 24" fill="none"> 534 <path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 535 </svg> 536 <span>Priority support</span> 537 </div> 538 </div> 539 </div> 540 </div> 541 542 <div class="fair-use-note"> 543 *Fair use policy applies. 544 </div> 545 546 <!-- Comparison Table --> 547 <section class="comparison-section"> 548 <h2>Compare Plans</h2> 549 550 <div class="comparison-table-wrapper"> 551 <table class="comparison-table"> 552 <thead> 553 <tr> 554 <th class="feature-col">Feature</th> 555 <th>Free</th> 556 <th>Starter</th> 557 <th class="featured-col">Investor</th> 558 </tr> 559 </thead> 560 <tbody> 561 <tr> 562 <td class="feature-col">Stock analyses per month</td> 563 <td>15</td> 564 <td>100</td> 565 <td class="featured-col"> 566 Unlimited* 567 </td> 568 </tr> 569 <tr> 570 <td class="feature-col">Analysis refreshes per month</td> 571 <td>2</td> 572 <td>15</td> 573 <td class="featured-col">60</td> 574 </tr> 575 <tr> 576 <td class="feature-col">Full report downloads (PDF) per month</td> 577 <td>â</td> 578 <td>5</td> 579 <td class="featured-col">25</td> 580 </tr> 581 <tr> 582 <td class="feature-col">Insider trading alerts</td> 583 <td>â</td> 584 <td>
585 <svg class="table-check" viewBox="0 0 24 24" fill="none"> 586 <path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 587 </svg> 588 </td> 589 <td class="featured-col"> 590 <svg class="table-check" viewBox="0 0 24 24" fill="none"> 591 <path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 592 </svg> 593 </td> 594 </tr> 595 <tr> 596 <td class="feature-col">Max stocks with alerts</td> 597 <td>0</td> 598 <td>20</td> 599 <td class="featured-col">100</td> 600 </tr> 601 <tr> 602 <td class="feature-col">Stocks per undervalued stocks list</td> 603 <td>Up to 20 stocks in each list</td> 604 <td>Up to 80 stocks in each list</td> 605 <td class="featured-col">Up to 80 stocks in each list</td> 606 </tr> 607 <tr> 608 <td class="feature-col">Priority support</td> 609 <td>â</td> 610 <td>â</td> 611 <td class="featured-col"> 612 <svg class="table-check" viewBox="0 0 24 24" fill="none"> 613 <path d="M20 6L9 17l-5-5" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 614 </svg> 615 </td> 616 </tr> 617 </tbody> 618 </table> 619 </div> 620 </section> 621 622 <!-- FAQ Section --> 623 <section class="faq-section"> 624 <h2>Questions?</h2> 625 626 <div class="faq-accordion"> 627 <div class="faq-item"> 628 <!-- Explicit type="button" (avoid submit) --> 629 <button type="button" class="faq-question" aria-expanded="false"> 630 <span>What counts as an "analysis refresh"?</span> 631 <svg class="faq-icon" viewBox="0 0 24 24" fill="none"> 632 <path d="M19 9l-7 7-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 633 </svg> 634 </button> 635 <div class="faq-answer"> 636 <p>
636An analysis refresh is a full re-run of the analysis using the latest market data, effectively generating a new, up-to-date assessment of the stock.</p> 637 </div> 638 </div> 639 640 <div class="faq-item"> 641 <button type="button" class="faq-question" aria-expanded="false"> 642 <span>Can I switch plans?</span> 643 <svg class="faq-icon" viewBox="0 0 24 24" fill="none"> 644 <path d="M19 9l-7 7-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 645 </svg> 646 </button> 647 <div class="faq-answer"> 648 <p>Yes. Upgrades take effect immediately with any prorated charge. Downgrades take effect at the end of your current term.</p> 649 </div> 650 </div> 651 652 <div class="faq-item"> 653 <button type="button" class="faq-question" aria-expanded="false"> 654 <span>How does the fair use policy work?</span> 655 <svg class="faq-icon" viewBox="0 0 24 24" fill="none"> 656 <path d="M19 9l-7 7-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 657 </svg> 658 </button> 659 <div class="faq-answer"> 660 <p>Unlimited plans are designed for individual investor use. Automated scraping, data extraction, or redistribution is prohibited and will result in account suspension.</p> 661 </div> 662 </div> 663 664 <div class="faq-item"> 665 <button type="button" class="faq-question" aria-expanded="false"> 666 <span>Do you offer refunds?</span> 667 <svg class="faq-icon" viewBox="0 0 24 24" fill="none"> 668 <path d="M19 9l-7 7-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 669 </svg> 670 </button> 671 <div class="faq-answer"> 672 <p>We offer a 14 day money back guarantee on the first purchase of a paid plan. This does not apply to renewals or accounts suspended for violations.</p> 673 </div> 674 </div> 675 676 <div class="faq-item"> 677 <button type="button" class="faq-question" aria-expanded="false"> 678 <span>Have more questions?</span> 679 <svg class="faq-icon" viewBox="0 0 24 24" fill="none"> 680 <path d="M19 9l-7 7-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/> 681 </svg> 682 </button> 683 <div class="faq-answer"> 684 <p>Email me at <span data-obf-type="email" data-revb64="=kWYuQWZ1xWY2JXZk5WdAlncuVGa"></span>. If you prefer, connect on <span data-obf-type="linkedin" data-revb64="vk2ZlJ2b5Jnblh2Lul2Lt92Yu4WakV2aulGbuc3d39yL6MHc0RHa"></span>.</p> 685 </div> 686 </div> 687 </div> 688 </section> 689</div> 690 691<!-- Plan Change Confirmation Modal --> 692<div id="planConfirmModal" class="modal-overlay"> 693 <div class="modal"> 694 <!-- Explicit type="button" (avoid submit) --> 695 <button type="button" class="modal-close" onclick="closeModal('planConfirmModal')"> 696 <span id="planConfirmCloseIcon"></span> 697 </button> 698 <div class="modal-banner"> 699 <h2 class="modal-title">Confirmation needed</h2> 700 <p class="modal-description">Please review your plan change.</p> 701 </div> 702 <div class="modal-content"> 703 <p class="modal-message" id="planConfirmMessage">Please confirm that you want to proceed.</p> 704 <div class="modal-actions"> 705 <button type="button" class="modal-button-secondary" id="planConfirmCancelBtn">Cancel</button> 706 <!-- Keep spinner/label so the confirm shows activity *while we fetch redirect_url*, then we redirect to Stripe --> 707 <button type="button" class="modal-button btn" id="planConfirmConfirmBtn"> 708 <span class="spinner-inline" aria-hidden="true"></span>
709 <span class="btn-label">Confirm</span> 710 </button> 711 </div> 712 </div> 713 </div> 714</div> 715 716 </main> 717 <footer> 718 719 720 </footer> 721 <!-- First Order Imports --> 722
722<script src="https://undervalued.ai/static/js/init.js"></script>
722 723 <!-- constants (split, ordered) --> 724
724<script src="https://undervalued.ai/static/js/constants/base.js?v=2.208"></script>
724 725
725<script src="https://undervalued.ai/static/js/constants/ui.js?v=2.208"></script>
725 726
726<script src="https://undervalued.ai/static/js/constants/endpoints.js?v=2.208"></script>
726 727 728
728<script src="https://undervalued.ai/static/js/primitives.js?v=2.208"></script>
728 <!-- central primitives --> 729 <!-- Also immediately (before any module script) we define the import map --> 730
730<script type="importmap"> 731 { 732 "imports": { 733 "uv-config": "https://undervalued.ai/static/js/config.js?v=2.208", 734 "uv-sse-watchdog": "https://undervalued.ai/static/js/sse-watchdog.js?v=2.208", 735 "uv-fund-common": "https://undervalued.ai/static/js/fund-common.js?v=2.208" 736 } 737 } 738 </script>
738 739 740 <!-- Second Order Imports --> 741
741<script src="https://undervalued.ai/static/js/utils.js?v=2.208"></script>
741 742
742<script src="https://undervalued.ai/static/js/quota.js?v=2.208"></script>
742 <!-- ensure before api.js --> 743
743<script src="https://undervalued.ai/static/js/api.js?v=2.208"></script>
743 744
744<script src="https://undervalued.ai/static/js/modals.js?v=2.208"></script>
744 745
745<script src="https://undervalued.ai/static/js/loader.js?v=2.208"></script>
745 746
746<script src="https://undervalued.ai/static/js/help-btn.js?v=2.208"></script>
746 747
747<script src="https://undervalued.ai/static/js/auth.js?v=2.208"></script>
747 748
748<script src="https://undervalued.ai/static/js/breadcrumbs.js?v=2.208"></script>
748 749 750 <!-- Last Imports --> 751
751<script type="module" src="https://undervalued.ai/static/js/user-menu.js?v=2.208"></script>
751 752 753
754<script src="https://undervalued.ai/static/js/pricing.js?v=2.208"></script>
754 755 756 757 <!-- To ensure SSE popup def just before /body --> 758 759
760<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a45d57f66d517792',t:'MTc5MTIxMjkyNg=='};var a=document.createElement('script');a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script>
760<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"a3d8fd68e8a04eeab835200ced586024","r":1,"spa":2}' crossorigin="anonymous"></script>
760 761</body> 762</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.