RubyGems Package Scraper - Ruby Gem Downloads & Dependencies avatar

RubyGems Package Scraper - Ruby Gem Downloads & Dependencies

Pricing

from $8.32 / 1,000 results

Go to Apify Store
RubyGems Package Scraper - Ruby Gem Downloads & Dependencies

RubyGems Package Scraper - Ruby Gem Downloads & Dependencies

Search and inspect RubyGems.org gems: total and version downloads, versions, runtime dependencies, license, authors, links and reverse-dependency impact. Export to JSON, CSV or Excel. Optional AI gem classification.

Pricing

from $8.32 / 1,000 results

Rating

0.0

(0)

Developer

Scrapers Lat

Scrapers Lat

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

RubyGems Package Scraper - Ruby Gem Downloads & Dependencies

RubyGems Package Scraper - Ruby Gem Downloads & Dependencies

Ruby package intelligence from RubyGems.org. Search or look up gems and get download stats, dependencies, license, authors, links, and reverse-dependency ecosystem impact in one normalized record.

Here is one real result, with every field the actor returns:

{
"name": "sinatra",
"description": "Sinatra is a DSL for quickly creating web applications in Ruby with minimal effort.",
"latestVersion": "4.2.1",
"platform": "ruby",
"totalDownloads": 352872397,
"versionDownloads": 11208396,
"licenses": ["MIT"],
"authors": "Blake Mizerany, Ryan Tomayko, Simon Rozet, Konstantin Haase",
"homepageUrl": "http://sinatrarb.com/",
"sourceUrl": "https://github.com/sinatra/sinatra",
"projectUrl": "https://rubygems.org/gems/sinatra",
"documentationUrl": "https://www.rubydoc.info/gems/sinatra",
"changelogUrl": "https://github.com/sinatra/sinatra/blob/main/CHANGELOG.md",
"bugTrackerUrl": "https://github.com/sinatra/sinatra/issues",
"gemUri": "https://rubygems.org/gems/sinatra-4.2.1.gem",
"runtimeDependencies": [
{ "name": "logger", "requirements": ">= 1.6.0" },
{ "name": "mustermann", "requirements": "~> 3.0" },
{ "name": "rack", "requirements": ">= 3.0.0, < 4" },
{ "name": "rack-protection", "requirements": "= 4.2.1" },
{ "name": "rack-session", "requirements": ">= 2.0.0, < 3" },
{ "name": "tilt", "requirements": "~> 2.0" }
],
"runtimeDependencyCount": 6,
"developmentDependencyCount": 0,
"sha": "b7aeb9b11d046b552972ade834f1f9be98b185fa8444480688e3627625377080",
"yanked": false,
"versionCreatedAt": "2025-10-10T15:20:36.806Z",
"reverseDependencyCount": 3070,
"reverseDependencies": ["mpayer_ruby", "sinatra_cyclist", "gitall"],
"aiSummary": {
"whatItDoes": "Sinatra is a lightweight framework for building web applications in Ruby with ease.",
"category": "Web Framework",
"alternativeTo": "Ruby on Rails",
"targetUser": "Web developers"
},
"source": "rubygems",
"observedAt": "2026-08-17T10:23:38.913Z",
"error": null
}

The most complete RubyGems scraper available. It pairs total and per-version download counts with the full runtime dependency list, license, authors, and every project link, then optionally adds reverse-dependency impact (which gems depend on this one) and a short AI classification. Missing source values are returned as null.

📥 Input · 📤 Output · 💰 Pricing · ▶️ Examples

Apify Coverage Output Billing

Table of contents

What it does

The actor talks to the public RubyGems.org registry in two modes. In search mode it queries by keyword and paginates through matching gems. In gem mode it looks up an exact list of gem names. For each gem it writes one normalized record with the total download count, the latest version and its download count, the full runtime dependency list (name plus version requirement), the development dependency count, license(s), authors, checksum, yanked status, and every project link (homepage, source code, documentation, changelog, bug tracker, RubyGems page). Two optional add-ons enrich each gem: reverse dependencies (the count and a sample of gems that depend on it) and an AI classification of what the gem does.

Quickstart

Open the actor, paste this into the input, and press Run. It returns the 10 most relevant gems for the keyword json.

{
"mode": "search",
"query": "json",
"maxResults": 10
}

To inspect specific gems instead, switch to gem mode and pass exact names:

{
"mode": "gem",
"names": ["rails", "sinatra", "devise"],
"includeReverseDependencies": true
}

Input reference

FieldTypeDefaultDescription
modestringsearchsearch to query by keyword, or gem to look up exact gem names.
querystringjsonKeyword to search RubyGems.org (used in search mode).
namesarray["rails","sinatra"]Exact gem names to look up (used in gem mode).
maxResultsinteger10Maximum gems to collect. Free Apify plans are capped at 10 per run.
includeReverseDependenciesbooleanfalsePaid add-on. Adds the reverse-dependency count plus a sample of up to 50 gems that depend on each result.
withAiSummarybooleanfalsePaid add-on. Adds an AI classification (what it does, category, comparable library, target user).

Output reference

FieldTypeDescription
namestringGem name.
descriptionstringGem description (info).
latestVersionstringLatest published version.
platformstringGem platform (usually ruby).
totalDownloadsnumberAll-time download count.
versionDownloadsnumberDownloads of the latest version.
licensesarrayLicense identifiers.
authorsstringGem authors.
homepageUrlstringHomepage link.
sourceUrlstringSource code repository.
projectUrlstringRubyGems.org gem page.
documentationUrlstringDocumentation link.
changelogUrlstringChangelog link.
bugTrackerUrlstringIssue tracker link.
gemUristringDirect .gem download URI.
runtimeDependenciesarrayRuntime dependencies as {name, requirements}.
runtimeDependencyCountnumberNumber of runtime dependencies.
developmentDependencyCountnumberNumber of development dependencies.
shastringGem checksum.
yankedbooleanWhether the latest version is yanked.
versionCreatedAtstringPublication date of the latest version.
reverseDependencyCountnumberCount of gems that depend on this one (add-on).
reverseDependenciesarraySample of up to 50 dependent gem names (add-on).
aiSummaryobjectAI classification of the gem (add-on).
observedAtstringWhen the record was captured.
errorstringError message for a failed lookup, otherwise null.

Use cases

  • Ruby dependency analysis: map a gem's full runtime dependency tree and version requirements to plan upgrades and audit your Gemfile.
  • SCA and software supply chain: use reverse dependencies to measure blast radius. See how many and which gems depend on a package before you patch, deprecate, or flag it.
  • Package popularity research: rank gems by total and per-version downloads to pick the best-maintained option in a category.
  • Ruby dev tooling and dashboards: feed clean, structured gem metadata into internal catalogs, dependency dashboards, and CI checks.
  • Competitive and ecosystem intelligence: compare alternatives (for example web frameworks or auth libraries) side by side with an AI classification of what each gem does and who it targets.

Run via API and CLI

Start a run with the Apify API and fetch the dataset when it finishes:

curl -X POST "https://api.apify.com/v2/acts/scrapers_lat~rubygems-packages-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "content-type: application/json" \
-d '{"mode":"search","query":"authentication","maxResults":25}'

Or with the Apify CLI:

$apify call scrapers_lat/rubygems-packages-scraper --input '{"mode":"gem","names":["rails"]}'

Billing and limits

This actor is billed pay per event.

EventPrice (USD)When it is charged
result$0.008Once per gem record written to the dataset.
reverse_dependencies$0.008Once per gem, only when includeReverseDependencies is on and the dependent list is returned.
ai_summary$0.012Once per gem, only when withAiSummary is on and the AI returns usable output.

Notes:

  • Add-ons are off by default and are disabled entirely for free Apify plans.
  • Free Apify plans are capped at 10 results per run.
  • Failed lookups (a gem that does not exist, or a transient source error) are written as an unbilled error row and never charged.
  • The actor stops emitting and charging once your configured spend limit (maxTotalChargeUsd) is reached.

FAQ and troubleshooting

Do I need a RubyGems account or API key? No. The actor reads the public RubyGems.org registry.

Why is a gem's record an error row? The gem name does not exist on RubyGems.org, or the registry was briefly unavailable. Error rows are never billed.

How current are the downloads and versions? They are read live from RubyGems.org at run time, so they reflect the registry at the moment of the run.

Why are some fields null? RubyGems does not always populate every link or field for every gem. Missing values are returned as null so the record shape stays consistent.