CLI tool
JosephLai241/URS avatar
JosephLai241/URS

URS: a Reddit scraper built on PRAW with a Rust core

Universal Reddit Scraper - A comprehensive Reddit scraping/archival command-line tool.

1,037 stars126 forksPythonMIT

At a glance

What is it?
URS is a command line Reddit scraping and archival tool written in Python on top of PRAW, with a small Rust extension module called taisun doing the heavy lifting, and it adds word frequency and wordcloud analysis on top of the collection. Its last tagged release is from 2023, so the recent commit activity is worth reading carefully.
Who is it for?
Adopt URS if you are doing research on Reddit content, you need subreddit, redditor and comment archives in JSON or CSV, and you can supply the API credentials it needs. Do not adopt it for real-time monitoring, for analysis of sources other than Reddit, or as a dependency you expect a steady release stream from, because the newest tagged release is v3.4.0 from 2023-05-11 even though the repository was pushed on 2026-07-11.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 104 days ago.
What is it written in?
Mainly Python, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.

Editorial analysis

Collection first, analysis second

URS is a comprehensive Reddit scraping tool that integrates several features, and the list in the README is the clearest statement of what it is. It scrapes Reddit via PRAW, the official Python Reddit API Wrapper, and within that it scrapes Subreddits, scrapes Redditors, and scrapes submission comments. It livestreams Reddit via PRAW as well, covering comments submitted within Subreddits or by Redditors and submissions submitted within Subreddits or by Redditors. And it adds analytical tools for the scraped data, generating frequencies for words found in submission titles, bodies and comments, and generating a wordcloud from the scrape results. The audience is someone doing open source intelligence work, archival, or research on Reddit content, and the project describes itself as an OSINT tool in the package metadata. The important thing to notice is the design decision underneath the feature list. URS is not scraping Reddit by parsing HTML, it is going through the API layer, which is what makes subreddit listings, comment trees and rate limits behave the way a user expects. It also means the tool's reach is bounded by what the API offers a given account.

The command surface, and the flags that matter

The full option list, as the README prints it, is:

bash
[-h]
[-e]
[-v]

[-t [<optional_date>]]
[--check]

[-r <subreddit> <(h|n|c|t|r|s)> <n_results_or_keywords> [<optional_time_filter>]]
    [-y]
    [--csv]
    [--rules]
[-u <redditor> <n_results>]
[-c <submission_url> <n_results>]
    [--raw]
[-b]
    [--csv]

[-lr <subreddit>]
[-lu <redditor>]

    [--nosave]
    [--stream-submissions]

[-f <file_path>]
    [--csv]
[-wc <file_path> [<optional_export_format>]]
    [--nosave]

The usage overview in the README is a compact summary of the whole interface, and it is worth reading as the tool's feature list. The options are grouped: -h for help, -e and -v, -t with an optional date and --check, which the table of contents ties to checking PRAW rate limits. The scraping group is -r with a subreddit, a letter selector of h, n, c, t, r or s, a result count or keywords, an optional time filter, and the flags -y, --csv and --rules. Then -u for a redditor with a result count, and -c for a submission URL with a result count plus an optional --raw. The livestream group is -lr for a subreddit, -lu for a redditor, with --nosave and --stream-submissions. The analysis group is -f for a file path with an optional --csv for word frequencies, and -wc for a file path with an optional export format for the wordcloud. The tool is written to be driven from a shell, with a --csv export on the paths where a spreadsheet is the sensible destination.

A Rust extension module called taisun

The repository is not a pure Python project, and the Cargo.toml explains why. The Rust crate is named taisun, described as the heavy lifter for URS, at version 1.0.0 with the MIT licence, built as a cdylib from taisun/lib.rs using pyo3 with the extension-module and serde features, and serde_json for serialisation. The Python side is built with maturin, configured with the pyo3/extension-module feature and python-source pointing at urs, and the build backend is maturin with poetry-core, which is the modern way to ship a compiled extension inside a Python package that is otherwise managed by Poetry. The Python dependencies are small and familiar: praw for the API, colorama and rich for terminal output, halo for the spinner, prettytable for tabular display, python-dotenv for configuration and wordcloud for the visualisation. The Python floor is ^3.11, and the dev group carries black, isort, pytest, coverage and maturin. The point of the split is performance on the parsing and serialisation path, which is where a scraper spends its time, while the command line and the API handling stay in Python where the ecosystem lives.

Livestreaming and the word analysis extras

Two of the capabilities go beyond collecting a snapshot, and they are the ones that make the tool a research instrument rather than a downloader. The livestreaming mode follows new comments and new submissions as they appear in a given subreddit or from a given redditor, which turns the tool into a monitor for a live conversation. The README's demo section lists separate recordings for subreddit scraping, redditor scraping, submission comments scraping, livestreaming Reddit, generating word frequencies, generating wordclouds, checking PRAW rate limits and displaying a directory tree, so each of these is a first-class path rather than a flag nobody has tried. The frequency generator works on submission titles, bodies and comments, which is the difference between measuring what people post and measuring what they say. The wordcloud is generated from the same data, and the -wc flag takes an optional export format. The directory tree output comes from a companion tool: the README explains that the nd command is nomad, a modern tree alternative written in Rust by the same author, which is a small piece of context about how the Rust side of the project is used.

The manual moved to mdBook, and the docs site

The README admits its own limits, which is unusual and useful. It explains that the README has become too long to comfortably contain all usage information for this tool, and that the information that used to be in the file has been moved to a separate manual created with mdBook, a Rust command-line tool for creating books from Markdown files, with a note that the link can also be found in the About sidebar in the repository. The tree confirms the structure, with a manual/ directory holding the book, a supplemental_docs/ directory for material that does not fit the book, urs/ for the Python package, taisun/ for the Rust crate, and tests/. The project also publishes a documentation site at josephlai241.github.io/URS. For a tool with this many modes, an mdBook manual is a reasonable choice, since it can be versioned with the code, searched, and built for a website, and the split between the book and supplemental_docs is a way of keeping the manual coherent. The project also asks for feedback on use cases and invites email for contributions, questions, or things built on top of it, and it is explicit that it wants to hear from people using it for enterprise or personal use.

The sponsor section tells you the real constraint

The README carries a sponsor block for three proxy providers, MangoProxy, RapidProxy and Swiftproxy, each with an affiliate link and a discount code, describing residential, ISP, datacenter and mobile proxies across more than a hundred countries, rotating sessions, geo-targeting and high-concurrency collection aimed at scraping developers. Read as marketing, this is noise. Read as engineering feedback, it is informative. The sponsors of a Reddit scraping tool being proxy vendors tells you what the hardest operational problem is. The hard part is not parsing Reddit, it is getting a large number of requests through without being rate limited or banned, and the presence of a dedicated rate limit check feature in the tool confirms that rate limits are a first-class concern for its users. It also tells you something about the tool's intended scale, which is a scale where the API access you personally have is not enough. The other sponsor information is the sponsorship link itself, offered to those who want to support the development.

Where URS is the wrong tool

There are four clear limits. The first is scope of source. This is a Reddit tool, and while the analysis side works on any file you feed it, the collection side is Reddit and PRAW, so a project that needs to archive several platforms is looking at a different tool. The second is the release history. The newest tagged release listed is v3.4.0 from 2023-05-11, with v3.3.2 from 2021-07-22 and v3.3.1 from 2021-07-03 before it, while the pyproject version still reads 3.4.0 and the last push was on 2026-07-11, so the code is being touched but nothing has been published in three years. For a research script that is fine, and for a pipeline with a service level attached to it, a three-year-old tag is a risk you have to weigh. The third is the API dependency. Because everything goes through PRAW, you need credentials, and what those credentials can reach is what you can scrape, so the tool's capability is a function of your account tier. The fourth is the runtime floor. Python ^3.11 and a compiled extension module mean this is not something you drop into an older environment, and the Rust side means a build toolchain rather than a pure wheel if you are on an unsupported platform.

Editorial conclusion

Adopt URS if you are doing research on Reddit content, you need subreddit, redditor and comment archives in JSON or CSV, and you can supply the API credentials it needs. Do not adopt it for real-time monitoring, for analysis of sources other than Reddit, or as a dependency you expect a steady release stream from, because the newest tagged release is v3.4.0 from 2023-05-11 even though the repository was pushed on 2026-07-11. Before you build a pipeline on it, confirm that the PRAW credentials you have cover the endpoints you need, and check the rate limit command against your own quota expectations, since the README's own sponsor section is largely about proxy providers and the practical problem here is access rather than parsing.

Frequently asked questions

What is URS and what does it scrape?

URS is the Universal Reddit Scraper, a comprehensive Reddit scraping and archival command line tool written in Python. It scrapes subreddits, redditors and submission comments via PRAW, the official Python Reddit API Wrapper, and it can livestream new comments and submissions.

What analysis tools does URS include?

It generates word frequencies for words found in submission titles, bodies and comments, and it generates a wordcloud from the scrape results, with the -f and -wc options and a --csv export for the frequency path.

Why does URS have a Rust component?

The repository includes a Rust crate named taisun, described as the heavy lifter for URS, built as a cdylib with pyo3 and serde. The Python package is built with maturin using the pyo3 extension-module feature, with python-source pointing at the urs directory.

Where is the URS manual?

The README says it became too long to hold all usage information, so the documentation was moved to a separate manual created with mdBook, a Rust tool for building books from Markdown. The tree has a manual/ directory and a supplemental_docs/ directory, and the project also publishes a site at josephlai241.github.io/URS.

What licence is URS released under?

MIT, declared in both the pyproject.toml for the Python package and the Cargo.toml for the Rust crate. The last push to the repository was on 2026-07-11 and the most recent tagged release is v3.4.0 from 2023-05-11.

Official sources

  1. JosephLai241/URS on GitHub
  2. License: MIT
  3. Project website
  4. README
  5. Releases
Add this badge to your README

If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.

Add this badge to your README

markdown
[![Hysen Labs](https://hysenlabs.com/badge/josephlai241-urs.svg)](https://hysenlabs.com/projects/josephlai241-urs)

Was this useful?