Get the Category of Content Hosted by a Domain
Overview
Get the category of content hosted by a domain. Use Shallalist (service discontinued), 'VirusTotal' (which provides access to lots of services) https://www.virustotal.com/, 'DMOZ' https://archive.org/details/dmoz-rdf-20150327, University Domain list https://github.com/Hipo/university-domains-list, 'OpenAI' 'GPT' models, 'Anthropic' 'Claude' models, or validated machine learning classifiers based on 'Shallalist' data to learn about the kind of content hosted by a domain.
A label has a date, and now the package says so
Two of the four lookup sources are no longer published: DMOZ closed in March 2017 and
Shallalist stopped in 2022. Their labels were correct when assigned, but domains expire
and change hands, so a lookup today can return the previous registrant's category. Until
now that answer was presented identically to one from a list updated last week.
- New
source_vintage()reports every category source, when it was last published, whether it is still maintained, and its successor where one exists. shalla_cat(),dmoz_cat()andstevenblack_cat()now return asource_last_publishedcolumn. For the two dead lists this is a constant; for Steven Black's actively-maintained hosts file it is the fetched file's own date.- Looking up against a discontinued source warns **once per session** — not once per call, which is a warning people learn to filter out.
Show all changes in 0.5.0Hide the rest of the changes in 0.5.0
The sibling project piedomains measured what this confusion costs: its worst class
disagreed with its own page content 71% of the time, and the cause was not bad annotation
but roughly a decade between the label and the page. Only 60% of the domains it trained
on still resolve.
Fetch page content, not just look domains up
New collect_content() fetches homepage HTML and text, so a domain can be
classified on what it says **today** rather than on what a list said years ago.
It returns one row per requested domain, never dropped, each carrying status,
stage, error_code and retryable -- so a transient failure is
distinguishable from a permanent one and only the right rows get retried.
fetch_error_codes() documents the closed set of reasons; fetch_report()
summarises a run.
Supporting functions, all usable on their own if you already hold HTML:
page_signals()reports whether a page is an anti-bot interstitial, a domain-parking placeholder, a server's "nothing here" page, or too thin to classify. Vendor presence alone is not a block: reddit, walmart and quora all serve real pages while embedding reCAPTCHA.html_text_content()extracts text, title, description and language.
The crawler identifies itself as rdomains/<version> with a contact URL, obeys
robots.txt including Crawl-delay, spaces requests to the same host, caps the
response body, follows redirects by hand so every hop is re-validated, and
refuses hosts resolving to private or link-local addresses.
Static HTML only -- no headless browser, so a JavaScript-rendered page comes back
thin and says so.
Bug fixes
get_dmoz_data()built its output path withpaste0(), so the documented defaultoutdir = "."produced a hidden.dmoz_domain_category.csvthatdmoz_cat()would then fail to find. It now usesfile.path(), matching its two siblings.stevenblack_cat(use_file = NULL)re-downloaded roughly 4 MB on **every call**. The file is now cached for the session.
Testing
- The Shallalist and DMOZ tests download real files; they now carry
skip_on_cran()andskip_if_offline()guards, as CRAN policy requires.
From NEWS.md in the release
Install
Health
- OK13 OK2026-08-05
- NOTE12 OK, 1 NOTE2026-08-01
- OK13 OK2026-05-16
- NOTE12 OK, 2 NOTE2026-04-23
- ERROR11 OK, 2 NOTE, 1 ERROR2026-04-14
Show 3 earlier changesHide 3 earlier changes
- NOTE12 OK, 2 NOTE2026-03-22
- ERROR11 OK, 2 NOTE, 1 ERROR2026-03-15
- NOTE12 OK, 2 NOTE2026-03-10
Documentation
- Help pages
- 20includes a package overview page
- Examples that run
- 28%5 run in a plain check · 13 never run
- Exported functions with examples
- 95%
- Documented parameters
- 100%
- Return-value docs
- 79%
- Help pages citing references
- 30%
Downloads
Dependencies
Code & Tests
Datasets
People & History
Pick two releases to compare their code metrics.
- 0.5.0Latest2026-08-02 · current release · diff ↗ ·
added 6 exports
collect_content, fetch_error_codes, fetch_report, html_text_content, page_signals, source_vintage - 0.4.02026-05-13 · diff ↗ ·
removed 3 exports
alexa_cat, brightcloud_cat, get_alexa_dataadded 4 exports
claude_cat, get_stevenblack_data, openai_cat, stevenblack_cat - RR 4.6.0 released · 2026-04-24
- RR 4.5.0 released · 2025-04-11
- RR 4.4.0 released · 2024-04-24
- RR 4.3.0 released · 2023-04-21
- RR 4.2.0 released · 2022-04-22
- 0.2.12022-01-15 · diff ↗
- unarchivedReturned to CRAN2021-11-04
- 0.2.02021-11-04 · diff ↗
- archivedRemoved from CRAN2021-09-23policy violation On Internet access
- RR 4.1.0 released · 2021-05-18
- unarchivedReturned to CRAN2020-08-11
- 0.1.9
- RR 4.0.0 released · 2020-04-24
- RR 3.6.0 released · 2019-04-26
Show 7 earlier eventsHide 7 earlier events
- archivedRemoved from CRAN2018-05-03depends on archived package 'RSelenium'
- RR 3.5.0 released · 2018-04-23
- 0.1.7
- RR 3.4.0 released · 2017-04-21
- 0.1.52016-11-03 · diff ↗
- 0.1.02016-06-16
- RR 3.3.0 released · 2016-05-03
Package metadata
- First published
- 2016-06-16
- Total releases
- 8 / 10 yrs
- License
- MIT + file LICENSE OSI
- Minimum R
- ≥ 4.1.0
- Download size
- 350 KB
Cite
Cite this package
Run in R for the authors' preferred citation:
citation("rdomains")The package provides a citation file that builds its entry when R runs it. Run citation() to see it.
Cite the R Observatory
For a number measured here: a download total, a coverage figure, an archival date.
From data release v2026-10-24, which the citation names so these numbers can be found later. More on citing and the projects behind them.