# CocoaPods iOS Library Scraper - Versions & Pod Metadata (`ninhothedev/cocoapods-scraper`) Actor

$0.5/1K 🔥 CocoaPods scraper! iOS/macOS library versions, release dates & owners. No key. JSON, CSV, Excel or API in seconds. Track iOS dependencies & library health ⚡

- **URL**: https://apify.com/ninhothedev/cocoapods-scraper.md
- **Developed by:** [ninhothedev](https://apify.com/ninhothedev) (community)
- **Categories:** Developer tools, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.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.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## CocoaPods iOS Library Scraper

Scrape **CocoaPods** — the dependency manager behind hundreds of thousands of iOS, macOS, watchOS and tvOS libraries — without an API key, without a login and without a proxy. Give the Actor a list of pod names and get back the complete version history, first and latest release dates, version counts and the maintainers behind each library, as clean JSON, CSV, Excel or XML.

Perfect for **iOS dependency research**, **library discovery**, **open-source intelligence** and **developer tooling** that needs reliable, structured package data instead of scraped HTML.

***

### What this Actor does

For every pod you pass in, the Actor queries the official public CocoaPods trunk API and returns one dataset row containing:

- The **full published version list** (capped at 100 version strings per row)
- The **latest version** and the **total number of released versions**
- The **first release** and **latest release** timestamps, normalised to ISO-8601 UTC
- The **pod owners / maintainers** and how many there are
- The canonical **cocoapods.org URL** for the library

Because it hits a documented JSON API rather than rendering pages, runs are fast, cheap and datacenter-friendly — no residential proxies needed.

***

### Use cases

| Use case | How this Actor helps |
| --- | --- |
| **iOS dependency research** | Audit which pods in your `Podfile` are still actively released and which have gone stale. |
| **Library discovery** | Compare candidate libraries by release cadence, version count and maintainer depth before you adopt one. |
| **Open-source intelligence** | Track maintainer changes, release velocity and abandonment signals across the Apple ecosystem. |
| **Developer tooling** | Feed dashboards, internal package catalogues, SBOM tooling or Slack alerts with fresh CocoaPods metadata. |

***

### Input

| Field | Type | Default | Description |
| --- | --- | --- | --- |
| `mode` | select | `pods` | What to scrape. Currently `pods`: look up each pod name and return its versions and owners. |
| `pods` | array | `["Alamofire", "SDWebImage", "SnapKit"]` | Pod names exactly as published on cocoapods.org (**case-sensitive**). Full pod URLs are accepted too. |
| `maxItems` | integer | `100` | Cap on how many pods are scraped and pushed. Maximum `1000`. |

#### Example input

```json
{
  "mode": "pods",
  "pods": ["Alamofire", "SDWebImage", "SnapKit", "Kingfisher", "Realm"],
  "maxItems": 100
}
```

***

### Output

One dataset item per pod:

```json
{
  "name": "Alamofire",
  "latest_version": "5.9.1",
  "version_count": 99,
  "first_release": "2015-01-09T22:10:57+00:00",
  "latest_release": "2024-03-31T01:24:57+00:00",
  "versions": ["1.1.3", "1.1.4", "1.1.5", "..."],
  "owners": ["Christian Noon", "Kevin Harwood", "Jon Shier"],
  "owner_count": 3,
  "url": "https://cocoapods.org/pods/Alamofire",
  "source": "cocoapods",
  "scraped_at": "2026-07-28T12:14:48+00:00"
}
```

#### Field reference

| Field | Description |
| --- | --- |
| `name` | Pod name as published on CocoaPods. |
| `latest_version` | Name of the last version entry returned by the trunk API. |
| `version_count` | Number of published (non-deleted) versions. |
| `first_release` | ISO-8601 UTC timestamp of the first version entry. |
| `latest_release` | ISO-8601 UTC timestamp of the last version entry. |
| `versions` | List of version strings, capped at the first 100. |
| `owners` | Maintainer display names registered on CocoaPods trunk. |
| `owner_count` | Number of maintainers. |
| `url` | Canonical `https://cocoapods.org/pods/<name>` page. |
| `source` | Always `cocoapods`. |
| `scraped_at` | When the row was produced. |

All fields are nullable — if CocoaPods omits a value, you get `null` instead of a crash.

***

### Pricing

Roughly **$0.5 per 1,000 pods** scraped, plus Apify platform usage. The Actor runs on 512 MB and needs no proxy, so runs are inexpensive: a full audit of a 200-pod `Podfile` costs about ten cents.

***

### Notes & limitations

- Pod names are **case-sensitive**. `Alamofire` works, `alamofire` returns nothing.
- Data comes from the public **CocoaPods trunk API** (`trunk.cocoapods.org/api/v1/pods/{pod}`), which exposes version history and owners. Richer podspec fields (license, homepage, platform requirements, summary) are **not** available from this endpoint — they live in per-version podspec files in the CocoaPods Specs repository. This Actor deliberately ships the reliable, key-free subset rather than a fragile spec-repo crawl.
- The `cocoapods.org/api/v1/pods?query=` search path returns the HTML site, not JSON, so keyword search is not offered.
- Versions are returned in the order the trunk API provides them (broadly semantic-version order, which is not always strictly chronological for parallel release branches).
- Unknown pods are logged and skipped; if **no** pod resolves, the run fails loudly so you notice bad input.

***

### Related Actors

- [npms Search Scraper](https://apify.com/ninhothedev/npms-search-scraper) — npm package search and metadata
- [pkg.go.dev Scraper](https://apify.com/ninhothedev/pkg-go-dev-scraper) — Go module discovery
- [Hex.pm Scraper](https://apify.com/ninhothedev/hex-pm-scraper) — Elixir/Erlang package data
- [Anaconda Scraper](https://apify.com/ninhothedev/anaconda-scraper) — conda package intelligence

***

### Legal

This Actor only reads publicly available data from the official CocoaPods trunk API. Owner display names are published by maintainers themselves on a public registry; e-mail addresses returned by the API are **not** written to the dataset. Use the output in line with CocoaPods' terms and applicable data-protection law.

# Actor input Schema

## `mode` (type: `string`):

What the Actor should scrape. 'pods' looks up each pod name on the public CocoaPods trunk API and returns its full version history plus its maintainers (one dataset item per pod).

## `pods` (type: `array`):

List of CocoaPods pod names to scrape, exactly as published on cocoapods.org (names are case-sensitive, e.g. 'Alamofire', not 'alamofire'). You can also paste full pod URLs such as https://cocoapods.org/pods/Alamofire - the Actor extracts the name automatically.

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

Maximum number of pods to scrape and push to the dataset. Use it to cap runs and control platform usage. Defaults to 100, hard limit 1000.

## Actor input object example

```json
{
  "mode": "pods",
  "pods": [
    "Alamofire",
    "SDWebImage",
    "SnapKit"
  ],
  "maxItems": 100
}
```

# 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 = {
    "pods": [
        "Alamofire",
        "SDWebImage",
        "SnapKit"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ninhothedev/cocoapods-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 = { "pods": [
        "Alamofire",
        "SDWebImage",
        "SnapKit",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("ninhothedev/cocoapods-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 '{
  "pods": [
    "Alamofire",
    "SDWebImage",
    "SnapKit"
  ]
}' |
apify call ninhothedev/cocoapods-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ninhothedev/cocoapods-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/u0DwabCtVqKMeiYZm/builds/o0eByDm5zpDzqqBCj/openapi.json
