PageSourceSearch

https://undervalued.ai/pricing

html undervalued.ai collected 2026-10-05 15:08:46 UTC 37,700 bytes, 762 lines download raw bytes

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.