CoolFace
Datasetpublic

nyuuzyou/phishing-snapshots

Phishing & Malware Website Snapshots 136,414 phishing and malware website snapshots captured by a headless Chromium browser between July 24 and August 15, 2024. URLs were confirmed or high-confidence phishing/malware at the time of collection, though some hosts had already been blocked or taken down when the snapshot was taken. Each row contains the full HTML source, extracted visible text, complete network traffic from HAR recording, parsed page features, and resource… See the full description on the dataset page: https://huggingface.co/datasets/nyuuzyou/phishing-snapshots.

sourceHugging Facecc0-1.0updated 7mo agoView on Hugging Face
1likes172downloads
Dataset Card

Phishing & Malware Website Snapshots

136,414 phishing and malware website snapshots captured by a headless Chromium browser between July 24 and August 15, 2024. URLs were confirmed or high-confidence phishing/malware at the time of collection, though some hosts had already been blocked or taken down when the snapshot was taken. Each row contains the full HTML source, extracted visible text, complete network traffic from HAR recording, parsed page features, and resource fingerprints.

Collected in mid-2024, published March 2026. All of the phishing domains and infrastructure captured here are long dead. The value is in page content, kit patterns, and network behavior rather than live IOCs.

55,339 unique domains, 23,588 of which appear more than once.

Use Cases

  • Training phishing/malware classifiers (URL-level, page-level, or multimodal)
  • Static rule generation for phishing kit detection
  • Threat intelligence on phishing infrastructure and hosting
  • Feature engineering for browser-based detection extensions
  • Academic research on web-based social engineering

Schema

Single flat Parquet table, 42 columns per row. Nested columns use Parquet list<struct> types.

Identification & Metadata

ColumnTypeDescription
idstringUnique archive ID (hostname_rand5)
domainstringTarget hostname
urlstringOriginal URL visited
scan_timestampstringISO timestamp of capture
languagestringDeclared page language

Page Content

ColumnTypeDescription
htmllarge_stringFull page HTML source
html_lengthint64HTML byte length
extracted_textlarge_stringVisible text via trafilatura
text_lengthint64Extracted text byte length
titlestringPage <title> content
meta_tagslist\<struct\>All <meta> tags (name + content)
html_commentslist\<string\>HTML comments (useful for kit signatures)

Scripts & Styles

ColumnTypeDescription
external_script_urlslist\<string\>External <script src> URLs
inline_scriptslist\<large_string\>Full inline JavaScript
inline_scripts_countint32Number of inline <script> blocks
inline_scripts_total_bytesint64Total inline JS size
external_css_urlslist\<string\>External stylesheet URLs
inline_style_countint32Number of inline <style> blocks

Forms & Inputs

ColumnTypeDescription
form_actionslist\<string\><form action> URLs
form_countint32Number of <form> elements
input_fieldslist\<struct\>Input fields with type, name, placeholder
input_countint32Number of <input> elements
has_password_fieldboolPage contains a password input
has_file_uploadboolPage contains a file upload input

Linked Resources

ColumnTypeDescription
favicon_urlslist\<string\>Favicon link hrefs
favicon_hasheslist\<struct\>MD5/SHA256 of favicon content
anchor_hrefslist\<string\>All <a href> targets
image_srcslist\<string\>All <img src> URLs
iframe_srcslist\<string\>All <iframe src> URLs
external_domainslist\<string\>Unique external domains referenced

Network & HTTP

ColumnTypeDescription
final_urlstringURL after redirects
redirect_chainlist\<string\>Full redirect path
server_headerstringServer response header
x_powered_bystringX-Powered-By response header
content_security_policystringContent-Security-Policy header
http_statusint32Final HTTP status code
network_requestslist\<struct\>All HAR entries (see below)
network_request_countint32Total network requests
resource_hasheslist\<struct\>MD5/SHA256 of served resources (see below)

Availability Flags

ColumnTypeDescription
has_htmlboolRow has HTML content
has_harboolRow has HAR data
has_textboolRow has extracted text

Nested Struct: network_requests

Each entry: method, url, url_domain, status, mime_type, response_size, server_ip, is_redirect, redirect_url, response_headers (list of key/value structs), request_cookies, response_cookies (with name, domain, httpOnly, secure).

Nested Struct: resource_hashes

Each entry: url, mime_type, resource_type (script / style / image / font / document / other), body_size, body_md5, body_sha256, is_favicon.

Nested Struct: input_fields

Each entry: type, name, placeholder, id, class_name, required, autocomplete.

Nested Struct: meta_tags

Each entry: name, content.

Statistics

MetricValue
Rows136,414
Unique domains55,339
Multi-snapshot domains23,588
Rows with HTML135,407 (99.3%)
Rows with HAR data126,747 (92.9%)
Rows with extracted text134,114 (98.3%)
Rows with forms52,089 (38.2%)
Rows with password fields33,199 (24.3%)
Total resource hashes2,349,290
Median network requests/row11
Mean network requests/row20.2
Median HTML size25 KB
Mean HTML size124 KB
Total inline JS6.1 GB (uncompressed)
Shards28
Total size on disk2.0 GB (zstd level 19)

Language Distribution (top 10)

LanguageRows
en50,925
en-US9,037
ru7,926
fr3,618
en-us1,759
zh-CN1,483
ja1,378
(empty)1,290
de1,226
fr-FR777

Collection Method

A headless Chromium browser (Playwright) running inside Docker, controlled by a Flask API, visited each URL. Per visit:

  1. 1.Navigate to URL with HAR recording active
  2. 2.Save rendered HTML (index.html)
  3. 3.Capture all network requests and responses (requests.har, HAR 1.2 format)
  4. 4.Extract visible text via trafilatura (trafilatura.txt)
  5. 5.Compress into a .7z archive

During conversion to Parquet, HAR response bodies were hashed (MD5 + SHA256) rather than stored. This reduced the dataset from ~76 GB of raw archives to 2 GB of compressed Parquet. Full HTML and inline JavaScript are preserved.

Archives containing blocked or error pages were excluded. Filtered titles: "403 Forbidden", "Not found", "Attention Required! | Cloudflare", "Suspected phishing site | Cloudflare". Empty and corrupted archives were also removed. 31,793 archives were filtered in total.

Safety

This dataset contains snapshots of malicious websites. The HTML and scripts include:

  • Credential harvesting forms that mimic legitimate services
  • Obfuscated JavaScript for redirects, fingerprinting, or exploit delivery
  • References to attacker-controlled infrastructure

Do not execute JavaScript or render HTML from this dataset in a browser without sandboxing. This data is for defensive security research.

License

CC0-1.0