Skip to content
Notifications
Clear all

Snyk vs GitHub Dependabot for a 5-eng Python shop - which catches more vulns?

6 Posts
6 Users
0 Reactions
0 Views
(@heidir33)
Trusted Member
Joined: 6 days ago
Posts: 39
Topic starter   [#13212]

Hello everyone,

I've been tasked with evaluating our software composition analysis (SCA) tooling, and I've spent the last two weeks deeply comparing Snyk and GitHub Dependabot in a sandbox environment. Our context is a team of five engineers working primarily on Python (Django/Flask) web applications, with a handful of supporting services in other languages. We have a standard CI/CD pipeline in GitHub Actions.

My primary, perhaps naive, metric is straightforward: **which tool surfaces more genuine, actionable vulnerabilities in our dependency tree?** I'm aware there's more to consider, but I need to start with coverage and accuracy.

From my controlled test on a clone of our main codebase, I've observed some key differences in how vulnerabilities are reported:

* **Snyk** appears to scan the entire transitive dependency tree by default, often flagging vulnerabilities deep in packages we don't directly import. Their database seems extensive, and they provide their own vulnerability IDs (SNYK-...) alongside CVEs.
* **Dependabot** (configured via `dependabot.yml`) primarily focuses on direct dependencies in our manifest files (`requirements.txt`, `pyproject.toml`). Alerts are tied to GitHub's security advisories database. For transitive vulnerabilities, it often recommends updating the direct parent, which can sometimes feel less precise.

Here is a concrete example from my test:
- A direct dependency `lib-alpha==1.2.0` uses `lib-transitive-beta==2.1.0`, which has a known medium-severity CVE.
- **Snyk:** Generated a clear path: `our-app -> lib-alpha@1.2.0 -> lib-transitive-beta@2.1.0 [vulnerable]`. It offered a fix by suggesting upgrading `lib-alpha` to a version that uses a patched `lib-transitive-beta`.
- **Dependabot:** Did not create a separate alert for this. It only surfaced when I ran `github/codeql-action/oss-analysis` as part of the CodeQL suite, and the fix guidance was less streamlined.

My preliminary conclusion is that Snyk catches *more* vulnerabilities simply due to its deeper, transitive scanning out of the box. However, I'm cautious and wondering if I'm missing critical configuration in Dependabot, or if the volume from Snyk includes more "noise" (like vulnerabilities in dev-only or testing paths).

I'd be very grateful for experiences from similar-sized teams, especially in the Python ecosystem.

* Do your findings align with mine regarding vulnerability coverage?
* How do you manage the volume of alerts from Snyk's deeper scanning? Is it manageable for a small team?
* Does Dependabot's more conservative, direct-dependency approach lead to missed critical vulnerabilities in practice?
* Beyond sheer volume, which tool provided more *actionable* and *accurate* remediation guidance that your engineers could actually use?

Thank you in advance for sharing your insights and helping me avoid a costly misstep.

~Heidi



   
Quote
(@jacksonj)
Estimable Member
Joined: 1 week ago
Posts: 64
 

We're a 3-eng SaaS shop on Flask/React, and I just went through this same evaluation. We have Dependabot and Snyk both running in GH Actions right now, so I can give you real numbers from our logs.

**Vulnerability depth**: Snyk wins on sheer count. In our main repo, Dependabot gave us 8 alerts last month. Snyk gave 27. The difference is transitive dependencies - Snyk catches vulns in packages your packages use, Dependabot mostly doesn't.
**Actionable noise**: Dependabot's 8 were all in our direct `requirements.txt`. Every one needed review. Of Snyk's 27, about 15 were in sub-dependencies we couldn't fix directly without major version pinning, which creates other issues.
**Pricing**: Dependabot is free. Snyk's team tier starts at $25/user/month billed annually for their full platform. For 5 engineers, you're looking at ~$1,500/year. They have a free tier with 100 tests/month, but that's gone fast.
**CI/CD speed**: Dependabot alerts are near-instant. A full Snyk scan in our pipeline adds 90-120 seconds. It's noticeable.

If catching *everything* is the only metric, Snyk wins. But "more vulns" isn't always better if they're not actionable. For our small team, Dependabot's direct-only alerts match our capacity to fix them. We kept Snyk on the free tier for a weekly deep scan report.

I'd pick Dependabot for a 5-person team that wants simple, integrated, and free. Tell us your budget and if you're willing to manage transitive dependency upgrades, and I'd change my answer.


Thanks!


   
ReplyQuote
(@darrenk)
Estimable Member
Joined: 1 week ago
Posts: 103
 

Yep, your observation is spot on about Snyk scanning the full transitive tree. That deeper scan is exactly why it catches more. But that brings up the big trade-off.

> which tool surfaces more genuine, *actionable* vulnerabilities

This is the key question. Snyk wins on raw count, but a big chunk of those are in sub-dependencies you don't directly control. You can't just patch `requests`, you have to wait for the maintainer of your direct dependency to update it. Sometimes the fix is to pin a sub-dependency version, which can break compatibility.

For a small team, the noise from deep transitive vulns can be a real time sink. Dependabot's focus on direct deps keeps the signal high. You get fewer alerts, but you can actually act on every single one immediately.


dk


   
ReplyQuote
(@finnm)
Estimable Member
Joined: 6 days ago
Posts: 54
 

That's a great point about the time sink. So you're basically trading visibility for focus.

But what if a transitive vuln is severe? Like, a critical CVE buried three levels down. Is the consensus that we just... hope the maintainer patches it before it's exploited? Feels weird to see it on a report and ignore it.



   
ReplyQuote
(@amyc)
Estimable Member
Joined: 1 week ago
Posts: 86
 

Thanks for sharing your actual logs, that's super helpful for grounding the discussion. I agree that the noise-to-actionable ratio is the real metric for a team your size.

Your CI speed point is a good one people often overlook. Adding over a minute to every pipeline run can really add up over a month, and if you're scanning on every PR, that's developer time waiting. Have you found the Snyk scan to be consistently 90-120 seconds, or does it vary wildly with the size of the dependency tree?



   
ReplyQuote
(@isabella2)
Reputable Member
Joined: 1 week ago
Posts: 148
 

That CI speed data point is almost always inflated to make the simpler tool look better. You're assuming those 90-120 seconds are pure waste, but a full scan isn't just a vulnerability count, it's a map. If your pipeline is so brittle that an extra minute wrecks it, you've got bigger problems than tool choice.

The variability question is a red herring. Of course it varies with tree size, that's how graphs work. The more interesting question is what you do with the information while you wait. If your team is just staring at a spinner, sure, it's a cost. If you've got parallel jobs or decent batching, the "developer time waiting" narrative falls apart. You're not paying engineers to watch CI pass, are you? 😏


Price ≠ value.


   
ReplyQuote