Every security team inevitably will run into the same problem when utilizing multiple different types of scanners. One tool exports JSON, another CSV, and another XML. One vendor's "critical" is another vendor's "medium” and you have the unfortunate task of making sense of your scan data.
In last month's Intro to Parsers, our Co-Founder Matt covered the basics on what parsers are, the five ways to get data into Dojo, what to do when a tool isn't supported, and how deduplication tuning works. Here are the essentials.
In DefectDojo, a parser turns a scan report into findings. It takes the file your scanner produces, breaks it apart, maps it into DefectDojo's finding data model, normalizes vulnerability identifiers like CVEs, and creates findings. Once findings exist, DefectDojo can deduplicate them and give you one consistent way to work with output from any tool.
That normalization is the fundamental problem DefectDojo was built to solve. Every scanner identifies security issues its own way. Parsers turn all of those formats into a single, consistent finding, so you deal with one data model instead of dozens of report formats.
Two vocabulary notes worth knowing:
Scan type is what DefectDojo calls a parser in practice. If you're importing Semgrep results, the scan type is Semgrep, and under the covers Dojo uses the Semgrep parser to read your JSON and create findings.
Re-import is a special way to bring data in when you're scanning the same scope repeatedly. Dojo compares what it found last time with what it found this time, then opens and closes findings as appropriate, leaving you with one actionable list. The key caveat: re-import only works when the scope is the same. Re-importing a scan of a different repo into the same test will not give you the results you want.
It's also worth noting that DefectDojo keeps its definition of a finding deliberately loose. If it's something you want tracked and addressed, it can live in Dojo. Matt described a financial services customer that stored the results of manual security control reviews, a desk exercise with no scanner involved at all, as findings.
Findings don't float in space. DefectDojo organizes data in a hierarchy:
One feature that makes this hierarchy painless in automation: auto-create context. Tell DefectDojo which organization and asset a scan belongs to, and if they don't exist yet, Dojo creates the whole hierarchy down to the engagement and test automatically. Your CI/CD jobs don't need lookup-then-create logic. As Matt put it, it's a simple feature that turns out to be a godsend for productivity.
DefectDojo ships parsers for more than 330 security tools, but every team eventually hits an edge case: an internal tool, a homegrown process, or that one scanner without a parser yet. You have options.
Generic importers (available in both editions) accept CSV or JSON. If your data is simple, CSV is fine. If it's more complex, JSON is the better choice: multi-value fields are much easier to represent, and you get access to the full finding model. Convert your data, upload it, and you can even rename the test type afterward so it reflects your actual source instead of saying "generic importer."
Universal Parser (DefectDojo Pro) lets you build a parser from a sample file with no code. Upload a JSON, CSV, or XML sample, give it a name, and DefectDojo lists every finding field alongside every data field it found in your file. You map them, preview what the findings will look like, and submit. The result behaves like any other parser.
Like we talked about in the training, Universal Parser is a parachute. It’s a fast way to get data in when no parser exists, and often a temporary bridge until a full parser covers your tool.
A few Universal Parser caveats worth knowing up front:
Contributing a parser is always an option too. DefectDojo is an open-source project, and parser contributions via pull request are one of the most welcome ways to give back to the community.
Deduplication is where parsers pay off. DefectDojo compares a selection of fields from each scan type to decide whether two findings are the same issue.
Sometimes it's easy. Some scanners, like Qualys, assign a unique vulnerability ID in their output, which makes matching straightforward. Most tools don't, so DefectDojo ships sensible default field selections for each scan type. But defaults can't anticipate everything. A framework that trips up scanners or a monorepo that confuses SCA tooling can break the general case, so DefectDojo lets you tune which fields determine a duplicate.
In Community Edition, you edit the dedupe field lists in your settings.py file (your local copy, so updates don't overwrite it), then restart Dojo. You can also run a manual job to recalculate deduplication after changing fields, since older findings were hashed under the previous formula. Community Edition supports dedupe tuning within a single tool per asset.
In DefectDojo Pro, there's a UI for the same tuning, no restart required, and you can also configure deduplication across tools. If you run both Veracode and Checkmarx and want duplicates matched between them, Pro can do that. Re-import matching uses the same hash code mechanism, so it can be tuned the same way.
|
Capability |
Community Edition |
DefectDojo Pro |
|---|---|---|
|
Parsers |
330+ parsers, plus generic CSV/JSON import |
Everything in Community Edition, plus Universal Parser |
|
Automation |
Full REST API with import, re-import, and auto-create context |
Adds the Universal Importer CLI |
|
Integrations |
File-based ingestion for every supported tool |
Adds 80+ scheduled API connectors |
|
Infrastructure scans |
Standard infrastructure scan imports |
Adds Smart Upload |
|
Deduplication |
Tune same-scan dedupe fields |
Adds cross-tool and re-import tuning via UI |
|
Prioritization |
CVSS, metadata, asset grading, EPSS if your tool provides it |
Automatic EPSS and KEV enrichment, risk and prioritization engine, AI triage |
|
Access and support |
Basic RBAC, community support |
SSO, granular RBAC, SLA-backed commercial support |
DefectDojo gives you many ways to get data in because no two AppSec programs work the same way. As Matt put it, the founding principle was never to make you adopt how Dojo works, but to have Dojo adopt how you work.
If your tool is supported, pick the import method that fits your workflow. If it isn't, the generic importers and Universal Parser have you covered. And once your data is flowing, think carefully about deduplication scope, and tune it when your environment doesn't match the general case.
Ready to try it? Explore the supported tools list or dive into the import method comparison in the DefectDojo docs.