# RubyGems Scraper (`anyxsolutions/rubygems-scraper`) Actor

Scrape Ruby gems from RubyGems.org by search term, gem name, profile or release feed: versions, summaries, authors, licenses, total and per-version downloads, release dates, dependencies, required Ruby version, reverse dependency counts and project links. No login, no API key.

- **URL**: https://apify.com/anyxsolutions/rubygems-scraper.md
- **Developed by:** [Anyx Solutions](https://apify.com/anyxsolutions) (community)
- **Categories:** Developer tools
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

![banner](https://anyx.solutions/banners/rubygems-scraper.png)

## RubyGems Scraper

**Search RubyGems.org or list any profile's gems, and get each gem's metadata, downloads, release history, dependencies and reverse dependency count as clean JSON.**

RubyGems.org hosts every public Ruby library, from Rails and Nokogiri to the smallest
single-purpose gem. This Actor scrapes Ruby gems from RubyGems.org by search term, gem name, profile or
release feed and returns each gem's version, summary, description, authors, licenses, total and
per-version downloads, version count, first and latest release dates, dependencies, required Ruby
version, reverse dependency count and project links (homepage, source code, documentation, bug
tracker, changelog, funding). Search the way you would on rubygems.org, paste the pages you
already have, or follow the feeds of brand-new gems and the latest releases. There is no login, no
API key, and no proxy to configure. Built for developer-tool market research, open-source due
diligence, dependency and license audits, lead generation among gem authors, and Ruby ecosystem
tracking.

### ⚡ Quick start

```json
{
  "searchTerms": ["web scraping"],
  "startUrls": [{ "url": "https://rubygems.org/profiles/flavorjones" }],
  "maxItems": 5
}
```

Or follow the newest gems:

```json
{
  "feeds": ["newGems"],
  "maxItems": 10
}
```

### 🧩 Input

| Field                | Type    | Required | Default                      | Description                                                                                                                                                                                     |
| -------------------- | ------- | -------- | ---------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `searchTerms`        | array   | no       | —                            | Searches to run on RubyGems.org, one per line, such as `web scraping` or `http client`. RubyGems.org's search syntax works too, such as `name:rack` or `downloads:>1000000`.                    |
| `gemNames`           | array   | no       | —                            | Gem names, one per line, such as `nokogiri` or `rails`. Each returns the gem at its latest version.                                                                                             |
| `startUrls`          | array   | no       | —                            | RubyGems.org URLs: a search (`/search?query=…`), a gem (`/gems/nokogiri`), a gem version (`/gems/nokogiri/versions/1.15.0`), a profile (`/profiles/flavorjones`) or New Releases (`/releases`). |
| `feeds`              | array   | no       | —                            | Activity feeds: `newGems` (the 50 newest gems) and `justUpdated` (the 50 latest releases of any gem).                                                                                           |
| `maxItems`           | integer | no       | —                            | Maximum gems per search term, start URL or feed. The input form starts at 5; leave it empty to get everything (a search returns at most 9,990 gems, a feed 50).                                 |
| `includeVersions`    | boolean | no       | `false`                      | Include version history: every version of each gem with its release date, downloads, platform, prerelease flag, required Ruby and RubyGems versions and licenses.                               |
| `proxyConfiguration` | object  | no       | `{ "useApifyProxy": false }` | Proxy configuration. RubyGems.org's public gem data needs no proxy.                                                                                                                             |

Add search terms, gem names, URLs, feeds, or any mix. Searches come back in RubyGems.org's
relevance order. A profile returns the gems that user owns, most downloaded first. A gem version
URL returns that version, platform builds such as `/versions/1.19.4-x86_64-linux-gnu` included;
every other gem returns its latest version. The activity feeds are also how to watch RubyGems.org
for new launches and releases on a schedule.

### 📤 Output

Each gem is one dataset row, describing its latest version or the version you asked for.

#### Fields

| Field                      | Type    | Description                                                                                                                                                                                        |
| -------------------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `name`                     | string  | Gem name.                                                                                                                                                                                          |
| `version`                  | string  | The version this row describes: the latest, or the one a URL named.                                                                                                                                |
| `platform`                 | string  | The build's platform: `ruby` for pure-Ruby gems, or a native platform such as `x86_64-linux-gnu`.                                                                                                  |
| `summary`                  | string  | One-line summary.                                                                                                                                                                                  |
| `description`              | string  | Longer description, or the summary when the gem has none.                                                                                                                                          |
| `authors`                  | array   | Author names.                                                                                                                                                                                      |
| `licenses`                 | array   | Licenses, usually SPDX identifiers such as `MIT`.                                                                                                                                                  |
| `downloads`                | number  | All-time downloads of the gem, every version included.                                                                                                                                             |
| `versionDownloads`         | number  | Downloads of this version.                                                                                                                                                                         |
| `versionsCount`            | number  | Number of published versions (platform builds of one version count once).                                                                                                                          |
| `versionReleasedAt`        | string  | When this version was published (ISO 8601).                                                                                                                                                        |
| `firstReleasedAt`          | string  | When the gem's first version was published.                                                                                                                                                        |
| `lastReleasedAt`           | string  | When the gem's most recent version was published.                                                                                                                                                  |
| `prerelease`               | boolean | Whether this version is a prerelease, such as `2.0.0.beta1`.                                                                                                                                       |
| `homepageUrl`              | string  | Project homepage.                                                                                                                                                                                  |
| `sourceCodeUrl`            | string  | Source repository.                                                                                                                                                                                 |
| `documentationUrl`         | string  | Documentation.                                                                                                                                                                                     |
| `bugTrackerUrl`            | string  | Issue tracker.                                                                                                                                                                                     |
| `changelogUrl`             | string  | Changelog.                                                                                                                                                                                         |
| `fundingUrl`               | string  | Where to sponsor the project.                                                                                                                                                                      |
| `runtimeDependencies`      | array   | Gems this version needs to run: `name` and `requirements` (version range).                                                                                                                         |
| `developmentDependencies`  | array   | Gems needed only to develop or test it: `name` and `requirements`.                                                                                                                                 |
| `requiredRubyVersion`      | string  | Ruby versions it supports, such as `>= 3.2`; `null` when it sets no limit.                                                                                                                         |
| `requiredRubygemsVersion`  | string  | RubyGems versions it needs; `null` when it sets no limit.                                                                                                                                          |
| `reverseDependenciesCount` | number  | Number of gems that depend on this gem.                                                                                                                                                            |
| `mfaRequired`              | boolean | Whether its owners must use multi-factor authentication to publish.                                                                                                                                |
| `sha256`                   | string  | SHA-256 checksum of this version's `.gem` file.                                                                                                                                                    |
| `versions`                 | array   | Every version, newest first: `number`, `platform`, `createdAt`, `downloads`, `prerelease`, `requiredRubyVersion`, `requiredRubygemsVersion` and `licenses`. `null` unless `includeVersions` is on. |
| `searchQuery`              | string  | The search that found the gem; `null` for gem names, gem, profile and feed URLs.                                                                                                                   |
| `url`                      | string  | The gem's page on RubyGems.org (the version's page when a URL named one).                                                                                                                          |

<details><summary>Example output</summary>

```json
{
  "name": "kimurai",
  "version": "2.2.0",
  "platform": "ruby",
  "summary": "Modern web scraping framework written in Ruby and based on Capybara/Nokogiri",
  "description": "Modern web scraping framework written in Ruby and based on Capybara/Nokogiri",
  "authors": ["Victor Afanasev"],
  "licenses": ["MIT"],
  "downloads": 233132,
  "versionDownloads": 3339,
  "versionsCount": 12,
  "versionReleasedAt": "2026-01-27T17:36:19.443Z",
  "firstReleasedAt": "2018-08-23T12:08:49.078Z",
  "lastReleasedAt": "2026-01-27T17:36:19.443Z",
  "prerelease": false,
  "homepageUrl": "https://github.com/vifreefly/kimuraframework",
  "sourceCodeUrl": null,
  "documentationUrl": "https://www.rubydoc.info/gems/kimurai/2.2.0",
  "bugTrackerUrl": null,
  "changelogUrl": null,
  "fundingUrl": null,
  "runtimeDependencies": [
    {
      "name": "activesupport",
      "requirements": ">= 0"
    },
    {
      "name": "capybara",
      "requirements": "~> 3.40"
    },
    {
      "name": "capybara-mechanize",
      "requirements": "~> 1.13"
    },
    {
      "name": "cliver",
      "requirements": ">= 0"
    },
    {
      "name": "csv",
      "requirements": ">= 0"
    },
    {
      "name": "headless",
      "requirements": ">= 0"
    },
    {
      "name": "murmurhash3",
      "requirements": ">= 0"
    },
    {
      "name": "mutex_m",
      "requirements": ">= 0"
    },
    {
      "name": "nkf",
      "requirements": ">= 0"
    },
    {
      "name": "nokogiri",
      "requirements": ">= 0"
    },
    {
      "name": "nukitori",
      "requirements": ">= 0"
    },
    {
      "name": "ostruct",
      "requirements": ">= 0"
    },
    {
      "name": "pmap",
      "requirements": ">= 0"
    },
    {
      "name": "pry",
      "requirements": ">= 0"
    },
    {
      "name": "rbcat",
      "requirements": "~> 1.0"
    },
    {
      "name": "reline",
      "requirements": ">= 0"
    },
    {
      "name": "selenium-webdriver",
      "requirements": "~> 4.27"
    },
    {
      "name": "thor",
      "requirements": ">= 0"
    },
    {
      "name": "whenever",
      "requirements": ">= 0"
    }
  ],
  "developmentDependencies": [
    {
      "name": "rake",
      "requirements": "~> 13.0"
    },
    {
      "name": "rspec",
      "requirements": "~> 3.13"
    }
  ],
  "requiredRubyVersion": ">= 3.2.0",
  "requiredRubygemsVersion": null,
  "reverseDependenciesCount": 3,
  "mfaRequired": false,
  "sha256": "2a20fecfabb90c1e881d79b16fd156355364610d570cd484bd740462e71a7d69",
  "versions": null,
  "searchQuery": "web scraping",
  "url": "https://rubygems.org/gems/kimurai"
}
```

</details>

### 💡 Use cases

- **Developer-tool market research** — size a category by downloads and reverse dependencies, and see which gems lead it.
- **Open-source due diligence** — check how actively a gem is released, who maintains it, and whether its owners require multi-factor authentication.
- **Dependency and license audits** — collect licenses, dependencies and supported Ruby versions across the gems you rely on.
- **Ecosystem tracking** — schedule the new-gems or just-updated feed, or a profile, to catch new launches and releases as they appear.
- **Lead generation** — find the authors and companies behind the gems in your niche.

### ❓ FAQ

- **Do I need a RubyGems.org account or an API key?** No. The Actor reads the same public gem data anyone can see.
- **Do I need a proxy?** No. It runs without one by default.
- **Which search syntax works?** Free text, plus RubyGems.org's field searches such as `name:rack`, `summary:http`, `description:scraping` and `downloads:>1000000`, in search terms and in rubygems.org search URLs.
- **How many gems can one search return?** Up to 9,990, in relevance order. Split a broad search into narrower ones to go further.
- **Why do some gems have no source code or documentation link?** Those links are whatever the gem's authors declared. Many older gems set only a homepage.
- **How do I get an older version?** Paste its page, such as `https://rubygems.org/gems/nokogiri/versions/1.15.0`. Its dependencies, downloads and Ruby requirement are those of that version.
- **Why is `versions` so long for some gems?** Gems with native extensions publish one build per platform, so a single version can appear ten times or more. `versionsCount` counts each version once.

### 🔗 More scrapers by Anyx

- [npm Package Scraper](https://apify.com/anyxsolutions/npm-scraper)
- [PyPI Scraper](https://apify.com/anyxsolutions/pypi-scraper)
- [GitHub Trending Scraper](https://apify.com/anyxsolutions/github-trending-scraper)
- [Hacker News Scraper](https://apify.com/anyxsolutions/hacker-news-scraper)

### 🤝 Anyx Solutions

We build custom scrapers and data-extraction pipelines.

- Email: tantosthor@gmail.com

### 🖼 Image credit

Image credit: [rubygems.org](https://rubygems.org/)

# Actor input Schema

## `searchTerms` (type: `array`):

Searches to run on RubyGems.org, one per line, for example web scraping or http client. RubyGems.org's search syntax works too, such as name:rack or downloads:>1000000. Results come in RubyGems.org's relevance order.

## `gemNames` (type: `array`):

Gem names, one per line, for example nokogiri or rails. Each returns the gem at its latest version.

## `startUrls` (type: `array`):

rubygems.org pages: a search (https://rubygems.org/search?query=scraper), a gem (https://rubygems.org/gems/nokogiri), a gem version (https://rubygems.org/gems/nokogiri/versions/1.15.0), a profile (https://rubygems.org/profiles/flavorjones) or New Releases (https://rubygems.org/releases).

## `feeds` (type: `array`):

Follow RubyGems.org's activity feeds: the 50 newest gems (first releases) and the 50 latest releases of any gem. Each gem comes back at its latest version.

## `maxItems` (type: `integer`):

Maximum number of gems to return per search term, start URL or feed. A search returns at most 9,990 gems and a feed 50; leave empty to get all of them. Gem names and gem URLs always return one gem each.

## `includeVersions` (type: `boolean`):

Add every version of each gem with its release date, downloads, platform, prerelease flag, required Ruby and RubyGems versions and licenses, newest first. Large for gems with many platform builds.

## `proxyConfiguration` (type: `object`):

Proxy settings. RubyGems.org's public gem data needs no proxy; add one only for very large runs.

## Actor input object example

```json
{
  "searchTerms": [
    "web scraping"
  ],
  "startUrls": [
    {
      "url": "https://rubygems.org/profiles/flavorjones"
    }
  ],
  "maxItems": 5,
  "includeVersions": false,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "searchTerms": [
        "web scraping"
    ],
    "startUrls": [
        {
            "url": "https://rubygems.org/profiles/flavorjones"
        }
    ],
    "maxItems": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("anyxsolutions/rubygems-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "searchTerms": ["web scraping"],
    "startUrls": [{ "url": "https://rubygems.org/profiles/flavorjones" }],
    "maxItems": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("anyxsolutions/rubygems-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "searchTerms": [
    "web scraping"
  ],
  "startUrls": [
    {
      "url": "https://rubygems.org/profiles/flavorjones"
    }
  ],
  "maxItems": 5
}' |
apify call anyxsolutions/rubygems-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,anyxsolutions/rubygems-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/gkuo4u6GYRtwbnRPf/builds/rRbEBUEjs8SiA1tEy/openapi.json
