<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kiwon Song</title>
    <description>The latest articles on DEV Community by Kiwon Song (@kiwon_song_1a5298f771b9ef).</description>
    <link>https://dev.to/kiwon_song_1a5298f771b9ef</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3907058%2F0207514e-ef65-4732-b176-ea7d651fdd17.png</url>
      <title>DEV Community: Kiwon Song</title>
      <link>https://dev.to/kiwon_song_1a5298f771b9ef</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kiwon_song_1a5298f771b9ef"/>
    <language>en</language>
    <item>
      <title>I Vibe-Coded a Stock Screener Into Production. Then My 2GB Server OOMed and Google De-Indexed Me.</title>
      <dc:creator>Kiwon Song</dc:creator>
      <pubDate>Wed, 27 May 2026 02:26:40 +0000</pubDate>
      <link>https://dev.to/kiwon_song_1a5298f771b9ef/i-vibe-coded-a-stock-screener-into-production-then-my-2gb-server-oomed-and-google-de-indexed-me-11hi</link>
      <guid>https://dev.to/kiwon_song_1a5298f771b9ef/i-vibe-coded-a-stock-screener-into-production-then-my-2gb-server-oomed-and-google-de-indexed-me-11hi</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Series intro.&lt;/strong&gt; I'm a non-CS solo dev who built and shipped a production stock screener almost entirely by "vibe coding" with an AI agent. The site works. Users use it. And it has cost me, in real ways, every shortcut I took. This series documents those costs honestly — what broke, why, what I shipped to fix it, and what I'd do differently. Part 1 is the one that still stings: a server OOM that killed my SEO right as Google was starting to notice me.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What I built
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://stockdigging.com/en" rel="noopener noreferrer"&gt;StockDigging&lt;/a&gt; is a free stock screener and ranking site covering Korean (KOSPI + KOSDAQ) and US (NYSE + NASDAQ) markets — about 5,600 active tickers in total. Every valuation metric (PER, PBR, market cap, etc.) is recomputed daily from that day's close × the latest financials. No stale snapshots, no aggregator middlemen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F982npzqupdk18b4l79e7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F982npzqupdk18b4l79e7.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The stack is conventional indie-dev fare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend&lt;/strong&gt;: Next.js 16 (App Router, Turbopack), React 19, TypeScript&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend&lt;/strong&gt;: FastAPI on Python 3.14&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DB&lt;/strong&gt;: SQLite (~2.3 GB on disk, single-file)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting&lt;/strong&gt;: a single 2 GB Vultr VPS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Edge&lt;/strong&gt;: Cloudflare in front for caching + DDoS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I shipped the first public version after writing maybe 5% of the code by hand. The other 95% was generated, reviewed, and iterated on with an AI agent. That part actually worked — the AI is a relentless and patient pair. The part that didn't work was &lt;em&gt;operations&lt;/em&gt;. Specifically: capacity planning, memory hygiene, and the temperament not to push to production three times a day.&lt;/p&gt;

&lt;p&gt;This post is about the worst single consequence of getting that wrong — and, just as importantly, what I did about it after.&lt;/p&gt;




&lt;h2&gt;
  
  
  The day Google noticed me wrong
&lt;/h2&gt;

&lt;p&gt;Around mid-May, my Google Search Console graphs did the thing every indie dev fears. Impressions, which had been climbing steadily, fell off a cliff. Average position drifted downward across a wide range of queries. Pages that used to show up on page 1 quietly slid to page 3, 4, never.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1c1qp1jzp9alo5rzpjc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1c1qp1jzp9alo5rzpjc.png" alt=" " width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I didn't notice immediately because the site itself looked fine when I checked it. It only looked fine &lt;em&gt;to me&lt;/em&gt;. The crawler had a different experience.&lt;/p&gt;

&lt;p&gt;Earlier in the month, the FastAPI backend had run out of memory. Hard. Several in-memory caches I'd written — TTL-keyed dicts for rankings, stats, indices — were unbounded. Every unique query combination added an entry. Entries technically expired, but nothing evicted them between expiries. The dict kept growing. Resident memory climbed past what a 2 GB VPS can hand out to a single Python process, the OOM killer fired, systemd restarted the service.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxhnwwqyswz7q8m1g5t4u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxhnwwqyswz7q8m1g5t4u.png" alt=" " width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;From my dashboard this looked like a brief blip. From Googlebot's perspective, a non-trivial slice of crawls during that window saw 5xx responses or connection failures. Google does not forgive 5xx politely. It does not send you an email saying "hey, your server flaked, we're going to discount your rankings for a bit." It just stops giving you the impressions you were getting before, and waits to see if you've fixed the problem.&lt;/p&gt;

&lt;p&gt;The technical fix took an evening. Earning back the rankings is taking weeks, and is not finished as I write this.&lt;/p&gt;




&lt;h2&gt;
  
  
  What actually went wrong (the boring root causes)
&lt;/h2&gt;

&lt;p&gt;In hindsight, none of this needed an AI to predict. It's all in the systems-design canon. I just wasn't reading that part of the canon while I was vibing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Unbounded in-memory caches.&lt;/strong&gt; Six of them. Each one started as a sensible "let me memoize this expensive query for 5 minutes" and grew over months as I added query parameters. The cache key got wider, the entry count got higher, nothing ever capped the size. An LRU with a max size would have been one extra line of code per cache.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. A 2 GB VPS for a real workload.&lt;/strong&gt; Python + SQLite + Next.js + a fair bit of in-process state is not a 2 GB workload. It barely fits in 2 GB on a quiet day. The moment anything misbehaves — a cache leak, a long batch job, a sudden traffic spike — there's no headroom. I knew this on day one and shipped anyway because $6/month is $6/month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. No memory monitoring.&lt;/strong&gt; I had logs. I had request metrics. I did not have a single chart of RSS over time. If I'd been watching that one line, I'd have seen it climbing for weeks before it ever hit the OOM threshold.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Deploying during crawler hours.&lt;/strong&gt; My deploy script does atomic swap with rollback, so it's "zero downtime" — &lt;em&gt;for users&lt;/em&gt;. For the crawler, even a few seconds of cache eviction during deploy plus the chunked rebuild of CSR routes is enough to register a degraded experience. I was pushing two or three times a day, often right when Googlebot was active.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Trusting that the AI would flag this.&lt;/strong&gt; This is the one I want to be the most honest about. I assumed an agent that good at code would also catch architectural smells like "this dict has no upper bound." It doesn't, by default. It writes code that does what you asked. If you didn't ask "what's the maximum size this structure can reach in a year of traffic," you don't get that answer.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I've actually shipped since (the real work)
&lt;/h2&gt;

&lt;p&gt;I want to be specific here, because most postmortems stop at the root cause and skip the part that takes most of the calendar — the patient, unglamorous fixing. Here is what landed, in roughly the order it landed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. A 4-hour &lt;code&gt;RuntimeMaxSec&lt;/code&gt; floor in systemd.&lt;/strong&gt; A confession before it's a fix: even before I knew where every leak was, I added a systemd directive that hard-restarts the backend every 4 hours. It is not a solution. It is a ceiling on damage from any leak I haven't found yet. It is also $0 and took 20 minutes. If you're running anything stateful on a small VPS without one of these, add it tonight.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. A watchdog cron for the daily batch jobs.&lt;/strong&gt; My data pipeline pulls prices and financials nightly. After the OOM event, those batches were getting silently skipped because the backend was restarting through their lock window. I added a watchdog cron that detects a missed batch and re-runs it with a leaner code path. Then I had to fix the watchdog because, the very next week, its first scheduled tick was firing five minutes &lt;em&gt;before&lt;/em&gt; the main batch and hijacking the lock — accidentally turning the safety net into the cause. That story gets its own post.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Static JSON for every hot read path.&lt;/strong&gt; This was the biggest single architectural change, and the one I'd recommend to anyone running similar stack. Instead of the homepage and ranking pages hitting the API on every request, the nightly batch now precomputes those views into &lt;code&gt;data/rankings/{market}_{sort}.json&lt;/code&gt; files. The Next.js server reads the JSON directly during SSR. The API doesn't get touched at all for the hottest pages.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;flowchart LR
    subgraph Before["Before — every page = DB hit"]
      U1[User / Googlebot] --&amp;gt; CF1[Cloudflare]
      CF1 --&amp;gt; NX1[Next.js SSR]
      NX1 --&amp;gt; API1[FastAPI]
      API1 --&amp;gt; DB1[(SQLite + unbounded caches)]
    end
    subgraph After["After — hot paths bypass the backend"]
      U2[User / Googlebot] --&amp;gt; CF2[Cloudflare]
      CF2 --&amp;gt; NX2[Next.js SSR]
      NX2 --&amp;gt; JSON[(precomputed static JSON)]
      NX2 -.cold paths only.-&amp;gt; API2[FastAPI]
      API2 --&amp;gt; DB2[(SQLite)]
      BATCH[Nightly batch] --&amp;gt; JSON
    end
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Even if the backend OOMs in the middle of a Google crawl, the pages Google cares about still serve correct data from the JSON files. The blast radius of "the backend is unhappy" shrank from "the whole site is degraded" to "the long tail of less-popular detail pages is degraded." That's a real architectural win — not a band-aid.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Post-batch validation that calls the public API.&lt;/strong&gt; A separate failure I had to admit: my batch jobs were happily reporting "success" on days when the data they produced was wrong (one sector silently lost a metric for ~109 stocks). Now, after every batch finishes, a validation script makes real HTTP calls to the same endpoints users hit, for each market × sort combination. If a combination returns zero rows, or noticeably fewer than its 30-day baseline, the batch is flagged failed and I get an email regardless of what the row counts said. The validator caught two real regressions in its first month.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. A "data health" check that runs every night and emails me when something looks off.&lt;/strong&gt; I have an internal admin page that also exposes the same data, but the more important piece is the cron job behind it: a script that runs after the nightly batch and verifies a dozen specific invariants per market. Failures email me; warnings get logged to inspect later. A representative night looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ python -m scripts.automation.data_health_check
data_health_check — 2026-05-26 22:00 KST
─────────────────────────────────────────────────────────────
[PASS]  kr_daily_price_recent           last=2026-05-22
[PASS]  us_daily_price_recent           last=2026-05-22
[PASS]  kr_trading_value_filled         99.8%  (2541 / 2544)
[PASS]  kr_valuations_per_filled        99.5%  (2531 / 2544)
[PASS]  kr_top50_mcap_match             50 / 50  within 1%
[PASS]  kr_financial_margin_impossible  0 stocks
[PASS]  kr_override_staleness           up to FY2025 (current)
[PASS]  annual_revenue_lost             0 stocks
[PASS]  batch_failed_24h                0
[WARN]  us_shares_outstanding_filled    97.2%  (3033 / 3120)
─────────────────────────────────────────────────────────────
summary:  9 pass · 1 warn · 0 fail
email sent: no   (only on fail)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Each line corresponds to an actual mistake I've made or seen. &lt;code&gt;financial_margin_impossible&lt;/code&gt; exists because a sector's revenue line was misclassified and operating margin briefly read 73% for a securities firm. &lt;code&gt;override_staleness&lt;/code&gt; exists because I have a hand-curated override file for financial-sector revenue that I have to update once a year and would otherwise forget. &lt;code&gt;top50_mcap_match&lt;/code&gt; exists because I once shipped a deploy that quietly broke market cap for the most-visited page on the site. Each check is a scar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. An emergency repatch script — one command, full recovery.&lt;/strong&gt; When something &lt;em&gt;is&lt;/em&gt; wrong on the public site, the recovery used to be: stop backend, run patch, restart, regenerate JSON, regenerate stats, regenerate stock detail JSON, purge edge cache, validate. Roughly ten steps, easy to forget one, very error-prone at 11pm on a weekend. I rewrote it as a single command (&lt;code&gt;emergency_repatch --market KR&lt;/code&gt;) that runs every step in order, fails fast, and prints a checklist of what passed and what didn't. It's the single biggest reduction in "how scared am I of operating this site" I've ever made.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. A three-agent independent review for any risky change.&lt;/strong&gt; This one isn't infrastructure, it's process. For any change I judge as risky to data integrity or SEO — schema migrations, anything that touches deploy timing, anything that changes a ranking calculation — I run the proposal past three separate AI agents in parallel and read all three reviews before I touch the code. They disagree about a third of the time, and the disagreement is usually the most useful signal. Pairing this with "deploy less" has, more than any other single habit, kept me from shooting myself in the foot in the recovery period.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Title/meta micro-tuning on edge-of-page-1 queries.&lt;/strong&gt; With the site itself stable, the SEO recovery is now an active project, not just waiting. I pulled Google Search Console data, identified queries where my pages were ranking 5–15 (the "edge of page 1" zone where small wording changes can move you up), and rewrote titles and meta descriptions for those specific pages. I track each change in an optimization log and check positions weekly. Not glamorous. Working slowly.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I should have done before launch
&lt;/h2&gt;

&lt;p&gt;For anyone about to ship their first vibe-coded thing to a real domain with real SEO ambitions, this is the list I wish I'd had taped to my monitor:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pick a VPS with at least 2× the RAM you "need."&lt;/strong&gt; Memory is the cheapest insurance against the dumbest class of outages. Going from 2 GB to 4 GB roughly doubles your monthly cost and roughly halves the number of ways a runaway process can take you down.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bound every cache.&lt;/strong&gt; Every single one. &lt;code&gt;functools.lru_cache(maxsize=N)&lt;/code&gt;. &lt;code&gt;cachetools.TTLCache(maxsize=N, ttl=...)&lt;/code&gt;. Anything with &lt;code&gt;maxsize&lt;/code&gt;. If you can't name a reasonable cap, you can't have the cache.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Plot RSS from day one.&lt;/strong&gt; A single line chart of &lt;code&gt;ps -o rss&lt;/code&gt; over 24 hours, scraped every minute, would have caught this in week one. You don't need Prometheus and Grafana on day one; a cron job to a CSV is fine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;RuntimeMaxSec&lt;/code&gt; is a $0 safety net.&lt;/strong&gt; Use it from the start. It's an admission of defeat that buys you a flat ceiling on any leak you haven't found yet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decouple your hot read paths from your DB at deploy time.&lt;/strong&gt; Precompute the heaviest views to static files. Frontends read files. Deploys, restarts, even backend outages no longer affect the pages Google cares about. The single highest-leverage change in this post.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deploy less.&lt;/strong&gt; Not "deploy carefully" — deploy &lt;em&gt;less often&lt;/em&gt;. Batch your fixes. Pick a quiet window. A small VPS does not enjoy being rebuilt three times a day.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Treat the crawler as a separate, fragile user.&lt;/strong&gt; Real users will refresh and forgive. Googlebot will silently downgrade you for weeks. Design for the crawler's experience, not just yours.&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  What's still in flight
&lt;/h2&gt;

&lt;p&gt;Honesty about the things not yet done is the other half of an honest postmortem.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cache bounding is still pending.&lt;/strong&gt; The &lt;code&gt;RuntimeMaxSec&lt;/code&gt; floor masks the leaks. The actual fix — putting a &lt;code&gt;maxsize&lt;/code&gt; on every TTL dict — is the next merged PR. Mechanical work; the audit was the slow part.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One full week of stability monitoring&lt;/strong&gt; after the cache fix lands, watching RSS, response times, and crawl errors. No new features during that window.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;VPS upgrade&lt;/strong&gt; to a larger instance once the leak is gone. Throwing RAM at a leak first would hide it; fixing it first means the upgrade is real headroom, not a bigger trash can.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL evaluation&lt;/strong&gt; comes after that. SQLite has been heroic for a single-process read-mostly workload, but the batch jobs and the API contend for the same file. I want to be honest about whether that's sustainable at the next traffic tier rather than wait until it isn't.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO recovery itself is mostly waiting.&lt;/strong&gt; Positions are coming back, slowly, in clusters. There is no lever I can pull to speed this up other than "don't break the site again."&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Tips for fellow vibe coders
&lt;/h2&gt;

&lt;p&gt;Some of these are technical, some are about the relationship with the AI itself.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Ask the agent for the failure modes.&lt;/strong&gt; After every feature, the prompt I now always run: &lt;em&gt;"What can fail in this code under 10× current traffic? Be specific about memory, locks, and unbounded structures."&lt;/em&gt; The agent is excellent at this when asked. It is not excellent at volunteering it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ask for the worst-case size of any data structure you introduce.&lt;/strong&gt; "How large can this cache get in a year if every query has unique parameters?" If the answer is "unbounded" you have a bug waiting to be born.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atomic-swap deploys with auto-rollback aren't optional.&lt;/strong&gt; Mine is a ~200-line Python script: build into a temp directory, swap symlinks, restart, health-check, roll back on fail. Boring infrastructure that has saved me more than once.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Put your hot pages behind Cloudflare with a sane &lt;code&gt;Cache-Control&lt;/code&gt;.&lt;/strong&gt; Indie dev cheat code. Let the edge serve the majority of your traffic for free, and your origin gets to focus on the part that's actually dynamic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run risky proposals past multiple agents in parallel.&lt;/strong&gt; Disagreement between agents is signal, not noise. The cost is one extra prompt; the upside is catching the obvious miss before it ships.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write down what you decided not to do.&lt;/strong&gt; Half of my bugs are "I considered this and chose wrong" rather than "I never considered this." A &lt;code&gt;DECISIONS.md&lt;/code&gt; next to your CLAUDE.md / cursor rules turns vague guilt into a reviewable artifact.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The AI is a great pair programmer and a bad ops engineer.&lt;/strong&gt; Treat capacity planning, monitoring, and incident response as your job, not the agent's. The agent implements what you decide. It cannot, in my experience, reliably &lt;em&gt;notice&lt;/em&gt; that you forgot to decide.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What's next in this series
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Part 2 — Data quality failures.&lt;/strong&gt; How a single misclassified financial line silently corrupted an entire metric for one sector for weeks, the validation harness I built after the fact, and the painful manual data override that's still patching the rest. The most uncomfortable post in this series, because the bug ran in production for far longer than the OOM did and nobody (including me) noticed.&lt;/p&gt;

&lt;p&gt;There's a longer queue behind that — batch jobs failing in interesting ways, a data-licensing problem I'm currently migrating away from — but I'll only commit to posts when the story has a clear ending. More to come as the dust settles.&lt;/p&gt;

&lt;p&gt;If you've shipped a vibe-coded thing into production and have your own story, I'd genuinely like to read it. The thing the AI tooling discourse is missing right now is the boring, post-launch half: not "look what I built in a weekend" but "look what it cost me on day 90."&lt;/p&gt;

&lt;p&gt;I'll be writing the rest of that half here.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;StockDigging is at &lt;a href="https://stockdigging.com/en" rel="noopener noreferrer"&gt;stockdigging.com&lt;/a&gt;. It's free, ad-supported, no signup required to browse. The "Why I Built It" post is &lt;a href="https://stockdigging.com/en/blog/why-i-built-stockdigging" rel="noopener noreferrer"&gt;here&lt;/a&gt; if you want the founding context for this series.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>postmortem</category>
      <category>seo</category>
      <category>ai</category>
    </item>
    <item>
      <title>How to Track the Largest Korean Companies by Market Cap in 2026 — KOSPI &amp; KOSDAQ Live Rankings</title>
      <dc:creator>Kiwon Song</dc:creator>
      <pubDate>Fri, 15 May 2026 05:34:05 +0000</pubDate>
      <link>https://dev.to/kiwon_song_1a5298f771b9ef/how-to-track-the-largest-korean-companies-by-market-cap-in-2026-kospi-kosdaq-live-rankings-18pd</link>
      <guid>https://dev.to/kiwon_song_1a5298f771b9ef/how-to-track-the-largest-korean-companies-by-market-cap-in-2026-kospi-kosdaq-live-rankings-18pd</guid>
      <description>&lt;p&gt;&lt;em&gt;A practical guide to KOSPI &amp;amp; KOSDAQ rankings, with live data sources.&lt;/em&gt;&lt;/p&gt;

&lt;blockquote&gt;
📌 All figures in this article are &lt;strong&gt;objective data points&lt;/strong&gt; read directly from stockdigging.com. Nothing here constitutes a &lt;strong&gt;buy or sell recommendation&lt;/strong&gt;. Investment decisions are solely your responsibility.
&lt;/blockquote&gt;

&lt;p&gt;If you've been watching the AI semiconductor cycle, you've probably noticed Korean names appearing more often in global market-cap conversations. The two giants — Samsung Electronics and SK hynix — supply the high-bandwidth memory (HBM) chips that power NVIDIA's data-center GPUs, and that exposure has pulled Korea back into the global spotlight.&lt;/p&gt;

&lt;p&gt;But finding good, English-language data on Korean stocks is harder than it should be. Most Korean financial portals are Korean-only, and US-focused screeners often skip KOSPI and KOSDAQ entirely. This post walks through how I track Korea market cap rankings as a non-Korean investor — and shares the live resource I built to fill that gap.&lt;/p&gt;

&lt;h2&gt;The largest Korean companies right now&lt;/h2&gt;

&lt;p&gt;As of &lt;strong&gt;May 13, 2026&lt;/strong&gt;, the top 5 KOSPI companies by market capitalization are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Samsung Electronics&lt;/strong&gt; (005930) — global leader in memory chips, smartphones, and displays&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SK hynix&lt;/strong&gt; (000660) — pure-play memory specialist, HBM market share leader&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SK Square&lt;/strong&gt; (402340) — SK group's holding company for semiconductor and ICT investments&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hyundai Motor&lt;/strong&gt; (005380) — automotive group, expanding aggressively into EVs and software-defined vehicles&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;LG Energy Solution&lt;/strong&gt; (373220) — EV battery manufacturer, supplier to Tesla, GM, and others&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Live, daily-updated rankings: &lt;a href="https://stockdigging.com/en/ranking/kr/market-cap" rel="noopener noreferrer"&gt;Korea market cap rankings (KOSPI &amp;amp; KOSDAQ)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstockdigging.com%2Fblog%2Flargest-korean-companies-2026-en%2F1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstockdigging.com%2Fblog%2Flargest-korean-companies-2026-en%2F1.png" alt="Korea market cap rankings — top 10 KOSPI &amp;amp; KOSDAQ companies as of May 13, 2026." width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;
Top 10 KOSPI &amp;amp; KOSDAQ companies by market capitalization (live page: stockdigging.com/en/ranking/kr/market-cap).



&lt;p&gt;These rankings refresh daily after Korean market close. Values are calculated as the day's closing price × shares outstanding, which matches the methodology used by exchanges and major financial data providers.&lt;/p&gt;

&lt;h2&gt;KOSPI vs KOSDAQ — what's the difference?&lt;/h2&gt;

&lt;p&gt;Korea has two main exchanges, and the distinction matters for portfolio construction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;KOSPI&lt;/strong&gt; (Korea Composite Stock Price Index) — the main board. Hosts the country's largest, most established companies. Samsung, SK hynix, Hyundai, POSCO, KB Financial all trade here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;KOSDAQ&lt;/strong&gt; — the growth-oriented secondary market. Much smaller than KOSPI (roughly one-tenth the total market cap), more tech and biotech-heavy, higher volatility, more retail-driven. It's sometimes loosely compared to NASDAQ for its tech tilt, but the size comparison doesn't hold — NASDAQ rivals NYSE in total market cap, while KOSDAQ is a small fraction of KOSPI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When people say "Korean stocks," they usually mean KOSPI by default. KOSDAQ is where you go hunting for smaller, higher-growth names.&lt;/p&gt;

&lt;h2&gt;Beyond market cap — what else to look at&lt;/h2&gt;

&lt;p&gt;Market cap tells you size, not value. The same screener ranks the same KOSPI + KOSDAQ universe by a wide range of other metrics — valuation, profitability, growth, balance sheet, dividend, price performance, and trading activity. Sorting on any of them re-orders the table in place.&lt;/p&gt;

&lt;p&gt;A few I check most often (examples, not the complete list):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstockdigging.com%2Fblog%2Flargest-korean-companies-2026-en%2F2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstockdigging.com%2Fblog%2Flargest-korean-companies-2026-en%2F2.png" alt="Korean stocks sorted by a different metric — same KOSPI + KOSDAQ universe re-ranked." width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;
The same universe re-sorted by a different metric (live page: stockdigging.com/en/ranking/kr/per).



&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;P/E ratio&lt;/strong&gt; — how the market is pricing earnings. Korean blue chips have historically traded at lower P/Es than US comparables (the "Korea discount"). Live: &lt;a href="https://stockdigging.com/en/ranking/kr/per" rel="noopener noreferrer"&gt;Korean stocks with lowest P/E ratio&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dividend yield&lt;/strong&gt; — Korean dividend culture has been improving since the government's "Value-Up" reforms. Live: &lt;a href="https://stockdigging.com/en/ranking/kr/dividend-yield" rel="noopener noreferrer"&gt;Korean dividend stocks (highest yield)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ROE&lt;/strong&gt; — capital efficiency. Korean conglomerates (chaebol) have historically been criticized for sprawling, low-ROE structures. Live: &lt;a href="https://stockdigging.com/en/ranking/kr/roe" rel="noopener noreferrer"&gt;Korean stocks with highest ROE&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
💡 &lt;strong&gt;What is "Value-Up"?&lt;/strong&gt; A Korean government program announced in February 2024 explicitly to close the Korea discount. Listed companies publish their own plans to lift PBR and ROE in exchange for tax incentives and a shot at inclusion in the Korea Value-Up Index (with related ETFs). The government also began publishing quarterly PBR / PER / ROE figures for all KOSPI and KOSDAQ listings — making the kind of cross-company comparison this post is about much easier.
&lt;/blockquote&gt;

&lt;p&gt;Other metrics the screener tracks (not linked above): P/B, PEG, P/S, EV/EBITDA, FCF yield, operating margin, revenue, net income, free cash flow, revenue growth, dividend growth, total assets, total equity, total debt, cash on hand, current ratio, debt ratio, net debt/EBITDA, 1-day / 30-day / 1-year price returns, max drawdown, volume, trading value, employees, and (for Korea only) foreign ownership ratio. Any of them can sort or filter the same universe.&lt;/p&gt;

&lt;h2&gt;A note on data quality&lt;/h2&gt;

&lt;p&gt;Korean stock data in English has some traps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Market cap in won, not USD.&lt;/strong&gt; Most local sources report market cap in 조원 (trillions of won). You need to apply the daily USD/KRW rate to compare against US peers. A trillion won is roughly $670M at ₩1,500/USD.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stock splits.&lt;/strong&gt; Samsung Electronics did a 50:1 split in 2018. Some legacy data sources still serve pre-split historical prices, which makes long-term charts useless. Always verify the source adjusts for splits.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ADRs vs primary listings.&lt;/strong&gt; Some Korean names (KEPCO, POSCO) historically had US ADRs that have since delisted. The primary KOSPI/KOSDAQ listing is the right reference.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstockdigging.com%2Fblog%2Flargest-korean-companies-2026-en%2F3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstockdigging.com%2Fblog%2Flargest-korean-companies-2026-en%2F3.png" alt="Samsung Electronics stock detail page — historical price chart and key metrics in one view." width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;
Drilling into a single company — Samsung Electronics detail page (live: stockdigging.com/en/stock/005930).



&lt;h2&gt;Bottom line&lt;/h2&gt;

&lt;p&gt;If you want to follow Korean stocks seriously as a non-Korean investor, the workflow that worked for me is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start from the &lt;a href="https://stockdigging.com/en/ranking/kr/market-cap" rel="noopener noreferrer"&gt;Korea market cap rankings&lt;/a&gt; for the universe.&lt;/li&gt;
&lt;li&gt;Filter by sector and exchange (KOSPI vs KOSDAQ) for what you care about.&lt;/li&gt;
&lt;li&gt;Switch the sort to whatever metric matters for your thesis — valuation, quality, income, growth, balance sheet, price performance. Layer range filters on top if you want to narrow further.&lt;/li&gt;
&lt;li&gt;Read the original DART filings (Korea's SEC equivalent) for the names you want to actually own.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Nothing in this post is investment advice. All figures are point-in-time snapshots — live numbers refresh on the linked pages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stockdigging.com/en/ranking/kr/market-cap" rel="noopener noreferrer"&gt;Open Korea Market Cap Rankings →&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I built StockDigging as the data layer I wished existed when I first started looking at Korean stocks. Free, no signup, daily-updated. KOSPI, KOSDAQ, NYSE, NASDAQ — same screener, same metrics. If you find a metric missing or a number that looks wrong, the contact page is the fastest way to flag it.&lt;/p&gt;

</description>
      <category>korea</category>
      <category>stock</category>
      <category>investing</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Korean Stocks Up 3x in a Year. Where Does This End? Data on TSMC, Samsung, SK Hynix, Micron, AMD</title>
      <dc:creator>Kiwon Song</dc:creator>
      <pubDate>Mon, 11 May 2026 18:15:48 +0000</pubDate>
      <link>https://dev.to/kiwon_song_1a5298f771b9ef/semiconductor-stocks-tsmc-samsung-sk-hynix-micron-amd-5-years-of-data-eog</link>
      <guid>https://dev.to/kiwon_song_1a5298f771b9ef/semiconductor-stocks-tsmc-samsung-sk-hynix-micron-amd-5-years-of-data-eog</guid>
      <description>&lt;p&gt;May 12, 2026 · 7 min read · Originally posted on &lt;a href="https://stockdigging.com/en/blog/compare-semiconductor-companies" rel="noopener noreferrer"&gt;stockdigging.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;📌 All figures in this article are &lt;strong&gt;objective data points&lt;/strong&gt; read directly from the comparison page on stockdigging.com. Nothing here constitutes a &lt;strong&gt;buy or sell recommendation&lt;/strong&gt;. Investment decisions are solely your responsibility.&lt;/p&gt;

&lt;p&gt;Five semiconductor names: TSMC, Samsung Electronics, SK hynix, Micron, AMD. Five years of data. Let's see what the numbers actually say — and at the end, I'll be honest about how the numbers feel to me, sitting in Korea and watching this play out without participating.&lt;/p&gt;

&lt;h2&gt;1. Top of the market cap list — semiconductors are already there&lt;/h2&gt;

&lt;p&gt;Looking at the global market cap leaderboard, &lt;strong&gt;seven of the top 17&lt;/strong&gt; publicly listed companies are semiconductor names — including NVIDIA, which sits above the frame shown below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstockdigging.com%2Fblog%2Fcompare-semiconductor-companies-en%2F1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstockdigging.com%2Fblog%2Fcompare-semiconductor-companies-en%2F1.png" alt="Global market cap ranking" width="800" height="579"&gt;&lt;/a&gt;&lt;/p&gt;
Global market cap ranking (#6–#17) — TSMC ($2.13T), Broadcom ($2.04T), Samsung ($1.15T), SK hynix ($909.56B), Micron ($840.14B), AMD ($741.96B). NVIDIA sits above this frame.



&lt;ul&gt;
&lt;li&gt;NVIDIA &lt;em&gt;(largest of the seven, above the frame)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;TSMC: &lt;strong&gt;$2.13T&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Broadcom: $2.04T&lt;/li&gt;
&lt;li&gt;Samsung Electronics: $1.15T&lt;/li&gt;
&lt;li&gt;SK hynix: $909.56B&lt;/li&gt;
&lt;li&gt;Micron Technology: $840.14B&lt;/li&gt;
&lt;li&gt;Advanced Micro Devices: $741.96B&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That's seven out of the top seventeen — over 40% of the global market cap leaderboard.&lt;/p&gt;

&lt;p&gt;NVIDIA sits above the frame of this image. The five names tracked from here on are TSMC, Samsung, SK hynix, Micron, and AMD.&lt;/p&gt;

&lt;h2&gt;2. Year-to-date — four out of five are up triple digits&lt;/h2&gt;

&lt;p&gt;Through May 2026, YTD cumulative returns:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstockdigging.com%2Fblog%2Fcompare-semiconductor-companies-en%2F2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstockdigging.com%2Fblog%2Fcompare-semiconductor-companies-en%2F2.png" alt="YTD cumulative return" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;
YTD cumulative return — SK hynix +177.70%, Micron +136.76%, Samsung +122.18%, AMD +103.69%, TSMC +28.75%.



&lt;ul&gt;
&lt;li&gt;SK hynix: &lt;strong&gt;+177.70%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Micron: &lt;strong&gt;+136.76%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Samsung Electronics: &lt;strong&gt;+122.18%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;AMD: +103.69%&lt;/li&gt;
&lt;li&gt;TSMC: +28.75%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For context, the KOSPI is up +81.51% YTD and the S&amp;amp;P 500 is up +7.88%. Four of the five names sit above both benchmarks; TSMC sits between the KOSPI and the S&amp;amp;P 500.&lt;/p&gt;

&lt;h2&gt;3. Three-year view — SK hynix and Micron lead the group&lt;/h2&gt;

&lt;p&gt;Zooming out to 2023 → 2026:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstockdigging.com%2Fblog%2Fcompare-semiconductor-companies-en%2F3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstockdigging.com%2Fblog%2Fcompare-semiconductor-companies-en%2F3.png" alt="3Y cumulative return" width="800" height="417"&gt;&lt;/a&gt;&lt;/p&gt;
3Y cumulative return — SK hynix +2,055.96%, Micron +1,140.97%, TSMC +383.79%, AMD +378.84%, Samsung +345.40%.



&lt;ul&gt;
&lt;li&gt;SK hynix: &lt;strong&gt;+2,055.96%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Micron: &lt;strong&gt;+1,140.97%&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;TSMC: +383.79%&lt;/li&gt;
&lt;li&gt;AMD: +378.84%&lt;/li&gt;
&lt;li&gt;Samsung Electronics: +345.40%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;SK hynix is up roughly 20x. Micron more than 11x. The other three are between 4.4x and 4.8x. Next, the revenue and operating income figures.&lt;/p&gt;

&lt;h2&gt;4. Revenue — Samsung leads every year&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstockdigging.com%2Fblog%2Fcompare-semiconductor-companies-en%2F4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstockdigging.com%2Fblog%2Fcompare-semiconductor-companies-en%2F4.png" alt="5-year revenue" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;
5-year revenue bar chart. Samsung's bar is the tallest every year. FY2025: Samsung $226.87B, TSMC $124.15B, SK hynix $66.07B, Micron $37.38B, AMD $34.64B.



&lt;p&gt;Samsung Electronics has the tallest revenue bar in every year of the five-year window. FY2025 figures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Samsung: &lt;strong&gt;$226.87B&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;TSMC: $124.15B&lt;/li&gt;
&lt;li&gt;SK hynix: $66.07B&lt;/li&gt;
&lt;li&gt;Micron: $37.38B&lt;/li&gt;
&lt;li&gt;AMD: $34.64B&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Samsung's revenue is roughly 1.8x TSMC, 3.4x SK hynix, 6x Micron, and 6.5x AMD.&lt;/p&gt;

&lt;h2&gt;5. Operating income — the picture flips&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstockdigging.com%2Fblog%2Fcompare-semiconductor-companies-en%2F5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstockdigging.com%2Fblog%2Fcompare-semiconductor-companies-en%2F5.png" alt="5-year operating income" width="800" height="291"&gt;&lt;/a&gt;&lt;/p&gt;
5-year operating income chart. TSMC's bar is the tallest in FY2025. SK hynix and Micron show negative op. income in FY2023 and large positives in FY2025.



&lt;p&gt;Move from top line to operating income and the rankings change:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FY2023 was the trough year — SK hynix and Micron both posted &lt;strong&gt;negative&lt;/strong&gt; operating income.&lt;/li&gt;
&lt;li&gt;In FY2025, TSMC's operating income bar is the tallest in the chart.&lt;/li&gt;
&lt;li&gt;SK hynix moved from a loss in FY2023 to a large positive in FY2025.&lt;/li&gt;
&lt;li&gt;Samsung's FY2025 op. income bar is shorter than TSMC's, despite Samsung's larger revenue.&lt;/li&gt;
&lt;li&gt;AMD's op. income bar is the smallest among the five in FY2025.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On the operating income line, Samsung's lead from the revenue chart disappears. TSMC, SK hynix, and Micron post higher operating margins (53.25%, 48.59%, 48.52%) than Samsung (13.07%) and AMD (10.67%).&lt;/p&gt;

&lt;h2&gt;6. The full metric snapshot&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstockdigging.com%2Fblog%2Fcompare-semiconductor-companies-en%2F6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fstockdigging.com%2Fblog%2Fcompare-semiconductor-companies-en%2F6.png" alt="Full comparison table" width="800" height="1000"&gt;&lt;/a&gt;&lt;/p&gt;
Full comparison table across Size, Value, Profitability, Financial Health. Leaders are marked with ✓ in each row.



&lt;p&gt;Per-name analysis of the same table follows in §7.&lt;/p&gt;

&lt;h2&gt;7. Strengths and weaknesses&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;TSMC — most profitable, most cash. Weakest YTD.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Op margin 53.25%&lt;/strong&gt;, &lt;strong&gt;net income $55.99B&lt;/strong&gt; — both highest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cash $89.03B&lt;/strong&gt;, &lt;strong&gt;FCF $35.41B&lt;/strong&gt; — both largest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;EV/EBITDA 23.42x&lt;/strong&gt;, &lt;strong&gt;Net Debt/EBITDA 0.39x&lt;/strong&gt; — both lowest.&lt;/li&gt;
&lt;li&gt;Weakness: &lt;strong&gt;YTD +28.75%&lt;/strong&gt; — lowest of the five.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Samsung — largest by scale, lowest per-dollar profitability.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Revenue $226.87B&lt;/strong&gt; (1.8x TSMC), largest total assets and workforce.&lt;/li&gt;
&lt;li&gt;Weakness: &lt;strong&gt;Op margin 13.07%, ROE 10.36%&lt;/strong&gt; — bottom half of the group.&lt;/li&gt;
&lt;li&gt;Bright spot: &lt;strong&gt;P/B 4.46x&lt;/strong&gt; — lowest, the cheapest on price-to-book.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SK hynix — strongest returns and cheapest P/E. Highest leverage.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;3Y +2,055.96%&lt;/strong&gt;, &lt;strong&gt;YTD +177.70%&lt;/strong&gt; — both highest.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Op margin 48.59%, ROE 35.57%, P/E 31.89x&lt;/strong&gt; (lowest) — profitable and still cheap after a 20x run.&lt;/li&gt;
&lt;li&gt;Weakness: &lt;strong&gt;debt ratio 48.43%&lt;/strong&gt; — highest of the five.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Micron — strongest growth and ROE. Smallest absolute earnings.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Revenue growth 85.55%, ROE 40.84%, PEG 0.40x&lt;/strong&gt; — all best-in-group.&lt;/li&gt;
&lt;li&gt;Catch: &lt;strong&gt;net income $8.54B, FCF $1.67B&lt;/strong&gt; — smallest of the five.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;AMD — cleanest balance sheet. Highest valuation, weakest profitability.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Debt ratio 22.11%, current ratio 2.85x&lt;/strong&gt; — safest balance sheet of the five.&lt;/li&gt;
&lt;li&gt;Disconnect: &lt;strong&gt;P/E 170.53x&lt;/strong&gt; (5x the others), &lt;strong&gt;ROE 7.18%, Op margin 10.67%&lt;/strong&gt; — both lowest.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cross-reference — revenue growth lines up with 3-year return&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;By FY2025 revenue growth: Micron (85.55%) → SK hynix (46.76%) → AMD (34.34%) → TSMC (31.35%) → Samsung (10.88%).&lt;/li&gt;
&lt;li&gt;By 3Y return: SK hynix (+2,055.96%) → Micron (+1,140.97%) → TSMC (+383.79%) → AMD (+378.84%) → Samsung (+345.40%).&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Top and bottom match; the middle reshuffles.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Operating margin doesn't follow — TSMC has the highest margin but the lowest YTD.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;So… is anything still cheap here?&lt;/h2&gt;

&lt;p&gt;The data tells a different story for each name:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TSMC&lt;/strong&gt;: highest operating margin, largest cash, lowest EV/EBITDA, lowest YTD return. Market cap $2.13T.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Samsung Electronics&lt;/strong&gt;: largest revenue and assets, lowest P/B (4.46x), highest FCF Yield (2.24%). Operating margin 13.07% and ROE 10.36% — in the lower half of the group.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SK hynix&lt;/strong&gt;: highest 3Y return (+2,055.96%), lowest P/E (31.89x). Highest debt ratio (48.43%).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Micron&lt;/strong&gt;: highest ROE (40.84%) and revenue growth (85.55%), lowest PEG (0.40x). Smallest absolute net income ($8.54B) and FCF ($1.67B) in the group.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AMD&lt;/strong&gt;: lowest debt ratio (22.11%). P/E 170.53x — the highest in the group.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Five names, five different profiles. On traditional value multiples (P/E, P/B, EV/EBITDA), SK hynix, Samsung, and TSMC sit at the lower end of the group, while Micron and AMD trade at higher multiples — Micron with a PEG of 0.40x, AMD with a P/E of 170.53x.&lt;/p&gt;

&lt;p&gt;And here's the personal part. I'm Korean. I'm not an investor — I'm hooked on vibe coding and busy building a stock website while watching all of this happen. Most of the move came in roughly the last year — the KOSPI itself is up more than 3x in that window.&lt;/p&gt;

&lt;p&gt;Korea right now is obsessed with stocks. It's the topic at lunch, on the subway. Almost everyone I know is buying, and most of them keep buying more. The FOMO is real, and I don't pretend it isn't.&lt;/p&gt;

&lt;p&gt;🤔 What's your read on these five? Look at the data on &lt;a href="https://stockdigging.com/en/compare?items=TSM%3AUS%2C005930%3AKR%2C000660%3AKR%2CMU%3AUS%2CAMD%3AUS" rel="noopener noreferrer"&gt;stockdigging.com/compare&lt;/a&gt; and decide for yourself. No targets, no recommendations — just numbers.&lt;/p&gt;




&lt;p&gt;
Tags: &lt;code&gt;semiconductors&lt;/code&gt; &lt;code&gt;stocks&lt;/code&gt; &lt;code&gt;data&lt;/code&gt; &lt;code&gt;investing&lt;/code&gt; &lt;code&gt;korea&lt;/code&gt;&lt;br&gt;
Originally published at &lt;a href="https://stockdigging.com/en/blog/compare-semiconductor-companies" rel="noopener noreferrer"&gt;stockdigging.com&lt;/a&gt;.
&lt;/p&gt;



</description>
    </item>
    <item>
      <title>US Top 5 by Market Cap — NVIDIA, Alphabet, Apple, Microsoft, Amazon: The Numbers Tell a Different Story</title>
      <dc:creator>Kiwon Song</dc:creator>
      <pubDate>Fri, 08 May 2026 16:24:37 +0000</pubDate>
      <link>https://dev.to/kiwon_song_1a5298f771b9ef/us-top-5-by-market-cap-nvidia-alphabet-apple-microsoft-amazon-the-numbers-tell-a-different-56c1</link>
      <guid>https://dev.to/kiwon_song_1a5298f771b9ef/us-top-5-by-market-cap-nvidia-alphabet-apple-microsoft-amazon-the-numbers-tell-a-different-56c1</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;📌 All figures in this article are objective data points. Nothing here constitutes a buy or sell recommendation. Investment decisions are solely your responsibility.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;NVIDIA, Alphabet, Apple, Microsoft, Amazon — the five most valuable companies on the US stock market. Their combined market cap is roughly &lt;strong&gt;$20 trillion&lt;/strong&gt;. We all "know" these companies, but lay 31 metrics side by side and the numbers tell a different story than the headlines.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F919od4vwdtk5t89nrhjc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F919od4vwdtk5t89nrhjc.png" alt="US top 5 by market cap — NVIDIA $5.14T, Alphabet $4.77T, Apple $4.24T, Microsoft $3.13T, Amazon $2.90T." width="800" height="860"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  1-year returns — Alphabet +159%, Microsoft the only one in the red
&lt;/h2&gt;

&lt;p&gt;We start every stock at the same baseline (0%) and chart the cumulative return over the past year.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjq4a4xy0j5xzttaltz1v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjq4a4xy0j5xzttaltz1v.png" alt="Cumulative 1Y returns — Alphabet +159.42%, NVIDIA +80.61%, Apple +47.10%, Amazon +43.70%, Microsoft -2.12%." width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The standout is &lt;strong&gt;Alphabet at +159.42%&lt;/strong&gt;. Long dismissed as falling behind in AI search and cloud, Google ended up topping this group — driven by Gemini's improvements and a recovery in YouTube and ad revenue.&lt;/p&gt;

&lt;p&gt;At the other end, &lt;strong&gt;Microsoft at -2.12%&lt;/strong&gt; is the only stock in the group that lost ground over the year. The market's read: Azure growth post-Copilot fell short of expectations. NVIDIA's +80.61% is still excellent in absolute terms, but it's only second place here.&lt;/p&gt;

&lt;p&gt;One thing worth pausing on: these are companies with market caps of $3T–$5T each. A $100B company posting +80% in a year would be front-page news. The most-followed, most-institutionally-held companies in the world delivered these returns in a single year. 2025 was clearly not an ordinary year.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 The Index Comparison tab on StockDigging lets you overlay S&amp;amp;P 500 and NASDAQ on the same chart. A quick check of how much each stock outperformed the broader market.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Size and value — the most valuable company has the smallest revenue
&lt;/h2&gt;

&lt;p&gt;The metrics table compares all 31 indicators across categories. The best value in each row gets a ✓.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwyft1267yz8q8ovmr0rm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwyft1267yz8q8ovmr0rm.png" alt="Metric comparison — Size and Value sections. Largest market cap NVIDIA $5.14T; revenue, total assets, and headcount all led by Amazon. Lowest PEG: NVIDIA at 0.65x." width="800" height="655"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On size&lt;/strong&gt;, there's an interesting paradox. NVIDIA leads market cap at $5.14T, but its revenue of $215.94B is the lowest of the five. Revenue is led by Amazon (&lt;strong&gt;$716.92B&lt;/strong&gt;), total assets also Amazon ($818.04B), and headcount also Amazon (1.57 million). Amazon sweeps all three "scale" metrics — yet its market cap of &lt;strong&gt;$2.90T is the smallest of the five&lt;/strong&gt;. A textbook case of "biggest company ≠ most valuable company."&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On valuation&lt;/strong&gt;, PEG stands out. NVIDIA's PEG of &lt;strong&gt;0.65x&lt;/strong&gt; is the lowest in the group. P/E alone (42.79x) looks expensive, but factoring in 65% revenue growth, it's actually the cheapest on a growth-adjusted basis. On raw P/E, Microsoft at 26.23x is the cheapest.&lt;/p&gt;




&lt;h2&gt;
  
  
  Profitability and financial health
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcbrzne52ezvqxvfkq7li.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcbrzne52ezvqxvfkq7li.png" alt="Metric comparison — Profitability, Health, Dividend, Performance sections. Apple ROE 160%, NVIDIA op margin 60% and revenue growth 65%, Apple debt ratio 330%." width="800" height="744"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On profitability&lt;/strong&gt;, ROE is led by Apple at &lt;strong&gt;159.94%&lt;/strong&gt; — higher than NVIDIA's 104.37%. The reason: decades of buybacks have driven Apple's book equity to extremely low levels, mechanically inflating ROE. On operating margin and revenue growth, NVIDIA dominates with &lt;strong&gt;60.38%&lt;/strong&gt; and &lt;strong&gt;65.47%&lt;/strong&gt; respectively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On financial health&lt;/strong&gt;, Apple's debt ratio of &lt;strong&gt;330%&lt;/strong&gt; is by far the highest. That's not a warning sign — Apple generates $98.77B in annual FCF and uses that cash for ongoing buybacks. Leverage here is a deliberate strategy, not a weakness. NVIDIA, by contrast, has a debt ratio of 31.48% and net debt/EBITDA of 0.08x — the cleanest balance sheet in the group.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On dividends&lt;/strong&gt;, Microsoft leads with a yield of 0.81%, and Alphabet's dividend growth of 38.77% is the highest. Amazon doesn't pay one. Big tech yields are structurally low for a reason — these companies funnel free cash into R&amp;amp;D, infrastructure, and buybacks rather than dividends. If income is your goal, telecom, energy, financials, and REITs are typically the better fit.&lt;/p&gt;




&lt;h2&gt;
  
  
  Revenue trend — Amazon's dominant scale, NVIDIA's vertical climb
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsnqaqczi4j8kcef54cgo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsnqaqczi4j8kcef54cgo.png" alt="Financial time series — Revenue (USD), FY2022–FY2026. Amazon largest in every period; NVIDIA inflects sharply higher from FY2024." width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Two patterns jump out from the revenue time series. First, &lt;strong&gt;Amazon is the largest by revenue across every period&lt;/strong&gt;, hitting $716.92B in FY2025 — well ahead of #2 Apple at $416.16B. Second, &lt;strong&gt;NVIDIA was the smallest in FY2022–2023&lt;/strong&gt;, then inflects almost vertically from FY2024 onward. AI data center demand rewrote the company's scale in a span of two years — visible directly in the data.&lt;/p&gt;

&lt;p&gt;Alphabet and Microsoft show steady growth. Apple has the largest absolute revenue but the slowest growth, at +10.07%.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;The compare feature on &lt;a href="https://stockdigging.com/en" rel="noopener noreferrer"&gt;StockDigging&lt;/a&gt; is free for everyone, no login required. Plug in your own list of stocks and you'll see returns, metrics, and financial trends on a single page.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://stockdigging.com/en/compare?items=NVDA:US,GOOGL:US,AAPL:US,MSFT:US,AMZN:US" rel="noopener noreferrer"&gt;Open the comparison for these 5 stocks →&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Have a stock combination you'd like analyzed, or a metric you wish were included? Feedback is always welcome.&lt;/p&gt;

</description>
      <category>stock</category>
      <category>investing</category>
      <category>finance</category>
      <category>data</category>
    </item>
    <item>
      <title>Stuck Picking Stocks? Composite Ranking + 6 Quick Sort Presets</title>
      <dc:creator>Kiwon Song</dc:creator>
      <pubDate>Thu, 07 May 2026 02:20:45 +0000</pubDate>
      <link>https://dev.to/kiwon_song_1a5298f771b9ef/stuck-picking-stocks-composite-ranking-6-quick-sort-presets-2ilb</link>
      <guid>https://dev.to/kiwon_song_1a5298f771b9ef/stuck-picking-stocks-composite-ranking-6-quick-sort-presets-2ilb</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;⚠️ &lt;strong&gt;Before we start&lt;/strong&gt;: nothing in this post is a stock recommendation. StockDigging ranks every stock by each metric and sorts them by the lowest sum of those ranks. &lt;strong&gt;A sorted list is not a recommendation.&lt;/strong&gt; It is a data processing result, and it doesn't include any qualitative or external factors.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  1. "How do I find stocks that fit this idea?"
&lt;/h2&gt;

&lt;p&gt;A common question for any stock investor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;"A high-quality company that's also undervalued and growing"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"A reliable dividend payer that's not at risk of going bust"&lt;/em&gt;&lt;/li&gt;
&lt;li&gt;&lt;em&gt;"A value stock with low P/B and strong equity"&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each of these requires &lt;strong&gt;looking at multiple metrics at once&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://stockdigging.com/en" rel="noopener noreferrer"&gt;StockDigging&lt;/a&gt; makes that one-click via &lt;strong&gt;Composite Ranking&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. How does Composite Ranking work?
&lt;/h2&gt;

&lt;p&gt;The mechanism is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You pick 2–5 metrics (e.g., ROE, P/E, Revenue Growth)&lt;/li&gt;
&lt;li&gt;Every stock in the market is &lt;strong&gt;ranked by each metric individually&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Each stock's rank scores are &lt;strong&gt;summed up&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Stocks are sorted by the &lt;strong&gt;lowest sum first&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stock A ranks ROE 5th + P/E 12th + Revenue Growth 30th = sum of 47.&lt;/li&gt;
&lt;li&gt;Stock B ranks ROE 3rd + P/E 50th + Revenue Growth 8th = sum of 61.&lt;/li&gt;
&lt;li&gt;→ A appears above B.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;💡 Important: this sort is &lt;strong&gt;purely a math operation&lt;/strong&gt;. It does &lt;em&gt;not&lt;/em&gt; mean A is a "better stock" than B — only that &lt;strong&gt;A's combined rank-sum across the chosen metrics is lower&lt;/strong&gt;. If you weigh one metric more heavily, just sort by that single metric.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  3. Quick Sort — when you don't know which metrics to combine
&lt;/h2&gt;

&lt;p&gt;The strength of Composite Ranking is freedom of metric choice. But that's also its weakness:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"Out of 31 metrics, which combination is actually meaningful?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's why we added &lt;strong&gt;Quick Sort&lt;/strong&gt;: 6 preset investment lenses, each auto-selecting 5 metrics with one click.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhs543foqf5pmltr9sj4o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhs543foqf5pmltr9sj4o.png" alt="Quick Sort — clicking a preset auto-selects 5 metric chips and instantly displays the composite ranking result (example: Quality Growth)" width="800" height="584"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt;: these 6 are not "answers" — they're &lt;strong&gt;starting points&lt;/strong&gt;. Begin with a preset and customize from there by adding or removing metrics.&lt;/p&gt;




&lt;h3&gt;
  
  
  3-1. Quality Growth
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Lens&lt;/strong&gt;: sustainable alpha through high entry barriers and operational efficiency&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;What it captures&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Revenue Growth&lt;/td&gt;
&lt;td&gt;Scalability of the business model&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Op Margin&lt;/td&gt;
&lt;td&gt;Cost-structure efficiency + pricing power&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ROE&lt;/td&gt;
&lt;td&gt;Profit generation per unit of equity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FCF Yield&lt;/td&gt;
&lt;td&gt;Real cash conversion of accounting earnings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Market Cap&lt;/td&gt;
&lt;td&gt;Industry dominance + institutional liquidity stability&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Looks for stocks satisfying revenue growth + margin + capital efficiency simultaneously.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  3-2. GARP (Growth at a Reasonable Price)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Lens&lt;/strong&gt;: balance between growth and value metrics&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;What it captures&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;PEG&lt;/td&gt;
&lt;td&gt;Price relative to growth (under 1.0 = undervalued)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;P/E&lt;/td&gt;
&lt;td&gt;Price relative to earnings&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Op Margin&lt;/td&gt;
&lt;td&gt;Margin retention from core business&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Debt Ratio&lt;/td&gt;
&lt;td&gt;Financial leverage discipline&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Net Income&lt;/td&gt;
&lt;td&gt;Absolute scale of bottom-line earnings&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Find growth stocks without overpaying. Peter Lynch's PEG concept is the centerpiece.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  3-3. Cash-Cow
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Lens&lt;/strong&gt;: sustainable shareholder return based on robust cash generation&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;What it captures&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Dividend Yield&lt;/td&gt;
&lt;td&gt;Direct measure of cash inflow vs. principal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;FCF Yield&lt;/td&gt;
&lt;td&gt;Self-sustaining dividend payment capacity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ROE&lt;/td&gt;
&lt;td&gt;Underlying basis for dividend capacity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Net Debt/EBITDA&lt;/td&gt;
&lt;td&gt;Debt servicing ability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Trading Value&lt;/td&gt;
&lt;td&gt;Market liquidity (ease of entry/exit)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Targets &lt;strong&gt;sustainable&lt;/strong&gt; dividends, not just high-yield outliers.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  3-4. Blue-Chip
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Lens&lt;/strong&gt;: market dominance + financial soundness&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;What it captures&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Market Cap&lt;/td&gt;
&lt;td&gt;Firm size&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Net Income&lt;/td&gt;
&lt;td&gt;Absolute earnings scale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Op Margin&lt;/td&gt;
&lt;td&gt;Competitive edge (margin level)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Debt Ratio&lt;/td&gt;
&lt;td&gt;Capital structure stability&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ROE&lt;/td&gt;
&lt;td&gt;Capital efficiency retained at maturity&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;For investors who prefer large-cap stability over high-volatility plays.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  3-5. Deep Value
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Lens&lt;/strong&gt;: extreme undervaluation vs. liquidation/intrinsic value&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;What it captures&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;P/B&lt;/td&gt;
&lt;td&gt;Price relative to book net assets&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total Equity&lt;/td&gt;
&lt;td&gt;Base capital scale&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Current Ratio&lt;/td&gt;
&lt;td&gt;Short-term debt coverage&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Net Debt/EBITDA&lt;/td&gt;
&lt;td&gt;Insolvency risk filter&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ROE&lt;/td&gt;
&lt;td&gt;Minimum profitability to dodge value traps&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Benjamin Graham-style value investing. The point is &lt;strong&gt;filtering out value traps via Current Ratio + ROE&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  3-6. Earnings Momentum
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Lens&lt;/strong&gt;: synchronized earnings improvement and price trends&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;What it captures&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;From 52W High&lt;/td&gt;
&lt;td&gt;Trend strength (proximity to highs)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;30D Return&lt;/td&gt;
&lt;td&gt;Short-term capital inflow velocity&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Revenue Growth&lt;/td&gt;
&lt;td&gt;Business expansion supporting price action&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Net Income&lt;/td&gt;
&lt;td&gt;Qualitative earnings growth&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ROE&lt;/td&gt;
&lt;td&gt;Capital efficiency acceleration&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Not pure chart momentum — looks for stocks where &lt;strong&gt;fundamentals and price are moving together&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  4. Customize — from preset to your own style
&lt;/h2&gt;

&lt;p&gt;The 6 Quick Sort presets are just &lt;strong&gt;starting points&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Drop Market Cap if size doesn't matter to you, swap in another metric&lt;/li&gt;
&lt;li&gt;Replace Debt Ratio with Net Debt/EBITDA&lt;/li&gt;
&lt;li&gt;Add Dividend Yield to build a "growth + dividend" hybrid&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Metric chips toggle on a single click. Adjust freely on the same screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj16ni5i0445klur4ck17.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj16ni5i0445klur4ck17.png" alt="Customizing — adding and removing metric chips on top of a preset" width="800" height="735"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Composite Ranking also pairs with &lt;strong&gt;range filters&lt;/strong&gt;. Example: narrow down candidates with "P/E between 5 and 15 + ROE ≥ 10%", then sort that subset by your composite ranking.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Once more — sorting is not recommending
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;StockDigging does &lt;strong&gt;not&lt;/strong&gt; provide price targets&lt;/li&gt;
&lt;li&gt;StockDigging does &lt;strong&gt;not&lt;/strong&gt; give buy/sell calls&lt;/li&gt;
&lt;li&gt;The 6 Quick Sort strategies are &lt;strong&gt;not "the right answer"&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Composite Ranking results are &lt;strong&gt;not a recommendation list&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tool does exactly one thing: &lt;strong&gt;processes market data and presents it through your chosen lens&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Try it yourself
&lt;/h2&gt;

&lt;p&gt;Open the &lt;a href="https://stockdigging.com/en" rel="noopener noreferrer"&gt;StockDigging home page&lt;/a&gt; and click the &lt;strong&gt;"Quick Sort"&lt;/strong&gt; button above the sort chips. Pick one of the 6 presets, see the result, then adjust to your own taste.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://stockdigging.com/en" rel="noopener noreferrer"&gt;stockdigging.com/en&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Got feedback or a preset you'd like to see? Let me know.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Tags: #webdev #investing #finance #productivity&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>investing</category>
      <category>finance</category>
      <category>productivity</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Kiwon Song</dc:creator>
      <pubDate>Fri, 01 May 2026 14:01:23 +0000</pubDate>
      <link>https://dev.to/kiwon_song_1a5298f771b9ef/-1d62</link>
      <guid>https://dev.to/kiwon_song_1a5298f771b9ef/-1d62</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/kiwon_song_1a5298f771b9ef/i-built-a-stock-screener-because-financial-sites-keep-adding-features-i-dont-need-4aj0" class="crayons-story__hidden-navigation-link"&gt;I Built a Stock Screener Because Financial Sites Keep Adding Features I Don't Need&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/kiwon_song_1a5298f771b9ef" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3907058%2F0207514e-ef65-4732-b176-ea7d651fdd17.png" alt="kiwon_song_1a5298f771b9ef profile" class="crayons-avatar__image" width="180" height="180"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/kiwon_song_1a5298f771b9ef" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Kiwon Song
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Kiwon Song
                
              
              &lt;div id="story-author-preview-content-3596406" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/kiwon_song_1a5298f771b9ef" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3907058%2F0207514e-ef65-4732-b176-ea7d651fdd17.png" class="crayons-avatar__image" alt="" width="180" height="180"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Kiwon Song&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/kiwon_song_1a5298f771b9ef/i-built-a-stock-screener-because-financial-sites-keep-adding-features-i-dont-need-4aj0" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 1&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/kiwon_song_1a5298f771b9ef/i-built-a-stock-screener-because-financial-sites-keep-adding-features-i-dont-need-4aj0" id="article-link-3596406"&gt;
          I Built a Stock Screener Because Financial Sites Keep Adding Features I Don't Need
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/python"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;python&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/react"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;react&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/kiwon_song_1a5298f771b9ef/i-built-a-stock-screener-because-financial-sites-keep-adding-features-i-dont-need-4aj0#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>I Built a Stock Screener Because Financial Sites Keep Adding Features I Don't Need</title>
      <dc:creator>Kiwon Song</dc:creator>
      <pubDate>Fri, 01 May 2026 14:01:03 +0000</pubDate>
      <link>https://dev.to/kiwon_song_1a5298f771b9ef/i-built-a-stock-screener-because-financial-sites-keep-adding-features-i-dont-need-4aj0</link>
      <guid>https://dev.to/kiwon_song_1a5298f771b9ef/i-built-a-stock-screener-because-financial-sites-keep-adding-features-i-dont-need-4aj0</guid>
      <description>&lt;p&gt;&lt;strong&gt;Subtitle&lt;/strong&gt;: A clean stock screener for anyone who just wants the data.&lt;/p&gt;







&lt;p&gt;Every time I opened a stock site, the same thought hit me.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;"More features than ever — so why is it harder to answer a simple question?"&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yahoo Finance, TradingView, Investing.com, Bloomberg. Each is a great tool. Yet every year, more features get added, screens get more crowded, and navigation gets trickier. Meanwhile, a simple question like &lt;em&gt;"Among the top 100 stocks by market cap, who's up the most today?"&lt;/em&gt; takes four clicks and two tabs.&lt;/p&gt;

&lt;p&gt;Information is not the problem. There's too much of it — and it's buried under popups, ad banners, and features I'll never use.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://stockdigging.com/en" rel="noopener noreferrer"&gt;StockDigging&lt;/a&gt; — the simplest way I know to rank, filter, and compare stocks. Just the data you actually need.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdr7323fwmiv3ddpt2fzt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdr7323fwmiv3ddpt2fzt.png" alt="StockDigging home — ranking table, sort chips, and filters all on one screen" width="800" height="645"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  One screen. That's it.
&lt;/h2&gt;

&lt;p&gt;You open the page and everything is there — sort options, filters, and the ranking table. No popups, no ad banners, no notification overlays.&lt;/p&gt;

&lt;p&gt;Sort chips are organized into &lt;strong&gt;8 categories&lt;/strong&gt;: Size, Value, Profitability, Financial Health, Dividend, Performance, Trading, and Flow. Click one chip and the entire table re-ranks. Under a second.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32edvrb5jztrzuvvyc6j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32edvrb5jztrzuvvyc6j.png" alt="Sort chips — 8 categories, one click to re-rank" width="800" height="645"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  31 metrics. Not 100.
&lt;/h2&gt;

&lt;p&gt;Most financial sites list 50–100 metrics. In practice, maybe 5–10 actually drive decisions. I picked &lt;strong&gt;31 and stopped&lt;/strong&gt;.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Size&lt;/strong&gt; — Market Cap, Revenue, Net Income, Total Assets, Net Assets, Employees&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Value&lt;/strong&gt; — P/E, P/B, PEG, P/S, FCF Yield, EV/EBITDA&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Profitability&lt;/strong&gt; — ROE, Operating Margin, Revenue Growth&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Financial Health&lt;/strong&gt; — Debt Ratio, Total Debt, FCF, Cash on Hand, Current Ratio, Net Debt/EBITDA&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dividend&lt;/strong&gt; — Dividend Yield, Dividend Growth&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance&lt;/strong&gt; — 1D Return, 30D Return, 1Y Return, % from 52W High, MDD&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trading&lt;/strong&gt; — Volume, Trading Value&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No clutter. If I need to add one more someday, I'll remove one.&lt;/p&gt;




&lt;h2&gt;
  
  
  Composite Ranking — the feature I use every day
&lt;/h2&gt;

&lt;p&gt;This solves the problem I had most often.&lt;/p&gt;

&lt;p&gt;Say you want a company that's &lt;strong&gt;high quality, undervalued, and growing&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ROE&lt;/strong&gt; — capital efficiency (higher = quality)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;P/E&lt;/strong&gt; — valuation (lower = undervalued)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Revenue Growth&lt;/strong&gt; — momentum (higher = growing)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On most sites, you'd look at each metric separately and mentally combine them. Here, select all three chips and the table ranks by their combined score. One click.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft315fgn1yqwcm462pcvs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft315fgn1yqwcm462pcvs.png" alt="Composite Ranking result — three criteria, one ranked table" width="800" height="645"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Range filter — with the distribution shown
&lt;/h2&gt;

&lt;p&gt;Most range filters are just a min/max box. Mine shows a &lt;strong&gt;distribution histogram&lt;/strong&gt; next to the slider.&lt;/p&gt;

&lt;p&gt;When you set P/E between 10 and 20, you immediately see where that sits in the market — what the median is, where the outliers are, how wide or narrow your filter really is. Filtering stops being a guess and becomes a positional decision.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx4j0v9od73p418qmotd5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx4j0v9od73p418qmotd5.png" alt="Range filter with histogram" width="800" height="309"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Stock comparison — the workflow I actually think in
&lt;/h2&gt;

&lt;p&gt;After filtering, you narrow to 2–5 candidates and compare them side by side. The best value for each metric is highlighted.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cumulative Return Chart&lt;/strong&gt; — all stocks aligned to a 0% baseline. NVIDIA vs Apple vs Microsoft over the last year — the gap is immediately clear. Relative return, not absolute price, so very different price levels still compare fairly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhwg8v50ycvw4py5wkgy1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhwg8v50ycvw4py5wkgy1.png" alt="Cumulative return comparison chart" width="800" height="645"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Macro Overlay&lt;/strong&gt; — overlay a stock's price with S&amp;amp;P 500, NASDAQ, USD/KRW, US Fed rate, or Korea base rate. How did this stock respond when rates went up? How does it track the index? One chart, answers there.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ab9tgeozlzh1owy7iij.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1ab9tgeozlzh1owy7iij.png" alt="Stock detail with macro overlay" width="800" height="645"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All charts support drag-to-zoom and pan, with a fullscreen mode on mobile.&lt;/p&gt;




&lt;h2&gt;
  
  
  Financial history — 10 years, one chart
&lt;/h2&gt;

&lt;p&gt;A single quarter's numbers can mislead. A company that looks strong this quarter can tell a very different story when you look at ten years of trend.&lt;/p&gt;

&lt;p&gt;The stock detail page shows up to &lt;strong&gt;10 years of annual financials as a bar chart&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Revenue, operating income, net income, EBITDA, FCF, total assets, equity, total debt — &lt;strong&gt;16 metrics&lt;/strong&gt;, each switchable in one click. Toggle between 5Y and 10Y.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3jvexrl4z6vnkc2k6xb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg3jvexrl4z6vnkc2k6xb.png" alt="Financial history bar chart — 10 years of annual data, 16 metrics switchable in one click" width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A company with seven straight years of flat revenue but rising debt is a different story from one with steady cash flow growth — even if this quarter's EPS looks similar. The bar chart makes that obvious.&lt;/p&gt;

&lt;p&gt;On the &lt;strong&gt;comparison page&lt;/strong&gt;, this same timeline works across multiple stocks simultaneously — compare NVIDIA vs Apple vs Microsoft revenue side by side, not just price.&lt;/p&gt;




&lt;h2&gt;
  
  
  What we deliberately don't do
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;❌ &lt;strong&gt;No price targets&lt;/strong&gt; — no "this stock should be worth $X"&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;No buy/sell calls&lt;/strong&gt; — no "strong buy" or "hold today"&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;No data-blocking ads&lt;/strong&gt; — the data stays visible&lt;/li&gt;
&lt;li&gt;❌ &lt;strong&gt;No subscription&lt;/strong&gt; — all features free&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;The market has too many opinions. What investors actually lack is accurate data to verify them. StockDigging focuses on the latter.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Who it's for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Anyone tired of cluttered financial sites&lt;/li&gt;
&lt;li&gt;Investors who want to screen by multiple criteria at once&lt;/li&gt;
&lt;li&gt;People who'd rather judge from data than from headlines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bonus&lt;/strong&gt;: also covers 2,400+ Korean stocks (KOSPI/KOSDAQ) with data pulled directly from DART — Korea's official corporate disclosure system.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;Free. No signup needed for most features.&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://stockdigging.com/en" rel="noopener noreferrer"&gt;stockdigging.com/en&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you have feedback or a metric you'd like added — I'd genuinely love to hear it.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Tags: #webdev #python #react #typescript #database #opensource #javascript&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>python</category>
      <category>react</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Built this because Korean stock data on global platforms is unreliable. 2,400+ KOSPI/KOSDAQ stocks, DART-sourced. Free.</title>
      <dc:creator>Kiwon Song</dc:creator>
      <pubDate>Fri, 01 May 2026 10:55:30 +0000</pubDate>
      <link>https://dev.to/kiwon_song_1a5298f771b9ef/built-this-because-korean-stock-data-on-global-platforms-is-unreliable-2400-kospikosdaq-stocks-29m2</link>
      <guid>https://dev.to/kiwon_song_1a5298f771b9ef/built-this-because-korean-stock-data-on-global-platforms-is-unreliable-2400-kospikosdaq-stocks-29m2</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/kiwon_song_1a5298f771b9ef/i-built-a-stock-screener-because-i-was-tired-of-fighting-my-own-tools-1dic" class="crayons-story__hidden-navigation-link"&gt;I Built a Stock Screener Because I Was Tired of Fighting My Own Tools&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/kiwon_song_1a5298f771b9ef" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3907058%2F0207514e-ef65-4732-b176-ea7d651fdd17.png" alt="kiwon_song_1a5298f771b9ef profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/kiwon_song_1a5298f771b9ef" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Kiwon Song
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Kiwon Song
                
              
              &lt;div id="story-author-preview-content-3595549" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/kiwon_song_1a5298f771b9ef" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3907058%2F0207514e-ef65-4732-b176-ea7d651fdd17.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Kiwon Song&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/kiwon_song_1a5298f771b9ef/i-built-a-stock-screener-because-i-was-tired-of-fighting-my-own-tools-1dic" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 1&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/kiwon_song_1a5298f771b9ef/i-built-a-stock-screener-because-i-was-tired-of-fighting-my-own-tools-1dic" id="article-link-3595549"&gt;
          I Built a Stock Screener Because I Was Tired of Fighting My Own Tools
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/python"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;python&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/react"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;react&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/javascript"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;javascript&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/kiwon_song_1a5298f771b9ef/i-built-a-stock-screener-because-i-was-tired-of-fighting-my-own-tools-1dic#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            6 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
  </channel>
</rss>
