CoolFace
Datasetpublic

Podric/prowl-secrets-corpus

Prowl secrets corpus A labeled corpus for training and evaluating secret detectors (credentials, API keys, tokens, database URIs, private keys, and passwords) across code, Jira tickets, Confluence pages, chat, and logs, in multiple languages. It is the training data behind Prowl and its stage-3 encoder. 503,027 records: 181,530 positive, 321,497 negative. No live credentials. Every value is synthetic, format-preserving-obfuscated, or drawn from a public test fixture. The… See the full description on the dataset page: https://huggingface.co/datasets/Podric/prowl-secrets-corpus.

sourceHugging Facecc-by-nc-4.0updated 3mo agoView on Hugging Face
2likes594downloads
Dataset Card

<p align="center"><img src="https://huggingface.co/datasets/Podric/prowl-secrets-corpus/resolve/main/logo.png" width="360" alt="Prowl"></p>

Prowl secrets corpus

A labeled corpus for training and evaluating secret detectors (credentials, API keys, tokens, database URIs, private keys, and passwords) across code, Jira tickets, Confluence pages, chat, and logs, in multiple languages. It is the training data behind Prowl and its stage-3 encoder.

503,027 records: 181,530 positive, 321,497 negative.

No live credentials. Every value is synthetic, format-preserving-obfuscated, or drawn from a public test fixture. The corpus is built so it can be handled without leaking a real secret.

Loading

python
from datasets import load_dataset

ds = load_dataset("Podric/prowl-secrets-corpus")                    # full corpus (default config)
bench = load_dataset("Podric/prowl-secrets-corpus", "prowlbench")   # the held-out evaluation config

ex = ds["train"][0]   # {"text", "value", "label_binary", "label_type", "span", "source", "origin", "context"}

Fields

fieldtypemeaning
textstringthe fragment to classify (code line, config value, ticket/log/chat text)
valuestring \nullthe secret substring, when positive
label_binary0 \1contains a secret
label_typestring \nullsecret type (aws_access_key_id, stripe_secret_key, generic_password, ...)
span[int,int] \null[start,end) of value inside text (for NER)
sourcestringchannel: code \jira \confluence \log \slack
originstringprovenance tag (see below)
contextstring \nullsurrounding context, when available

Composition by channel

codeJiraConfluencelogchat
302,15397,12280,09219,8833,777

Non-code (tickets, wiki, logs, chat) is ~40% of the corpus, the realistic-leak surface that code-only datasets omit.

Provenance: where each part comes from

originsharesourcehow it was made
synthetic73.8%originalformat- and checksum-correct fake secrets generated per type, injected into templated carriers at known spans
creddata8.4%Samsung/CredDatareal-world credential samples, character-class obfuscated so format survives but no real value does
hf6.8%ai4privacy/pii-masking-200k, nvidia/Nemotron-PIIsynthetic PII prose; passwords → positives, other PII → hard negatives (neg_pii)
fleet* / authored / carrier10.9%originalsynthetic carriers: code in 17 languages, 44 config formats, ticket/wiki/chat/log documents, hard negatives, obfuscation
fixture<0.1%gitleaks / detect-secrets / whispers test suites (public)imported public test fixtures

The synthetic, fleet*, authored, and carrier portions are original to this project. The creddata, hf, and fixture portions are derived from the linked upstream datasets and remain under their respective licenses (CredData; ai4privacy and Nemotron-PII per their HF cards; the tool fixtures per each project's license). Attribute the originals if you redistribute.

Splits and leakage control

The corpus is meant to be split value-disjoint (no secret value appears in both train and eval) and origin-disjoint: the real-secret sources (creddata, hf) are held out so a validation score measures generalization, not memorization. The encoder's operating threshold is calibrated on such a held-out split.

prowlbench config

The second config is ProwlBench: 3,843 leakage-safe evaluation cases (structured tokens, generic high-entropy keys, multilingual free-form prose) with per-case tier and language, used to compare scanners as real subprocesses. It is value-disjoint from corpus.

Intended use

Training and evaluating secret/credential detectors and DLP classifiers. Not a source of real credentials and not usable as one.

License

Noncommercial use only (CC BY-NC 4.0). Not for use in commercial products. The original portions (synthetic, fleet*, authored, carrier) are released under CC BY-NC 4.0. The derived portions (creddata, hf, fixture) stay under their upstream licenses, listed in the provenance table. Attribute the originals if you redistribute.

Citation

bibtex
@misc{prowl_secrets_corpus,
  title        = {Prowl secrets corpus},
  author       = {Prowl},
  year         = {2026},
  howpublished = {Hugging Face Datasets},
  url          = {https://huggingface.co/datasets/Podric/prowl-secrets-corpus}
}