MELPA Scraper avatar

MELPA Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
MELPA Scraper

MELPA Scraper

Scrape MELPA - the Milkypostman's Emacs Lisp Package Archive. Search or browse 6,000+ Emacs packages with descriptions, versions, dependencies, maintainers, source repos, and download counts.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Crawler Bros

Crawler Bros

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

11 days ago

Last modified

Share

Scrape MELPA — Milkypostman's Emacs Lisp Package Archive, the largest community package repository for GNU Emacs with 6,000+ packages. Search or browse the full catalog, or fetch specific packages by exact name. Get versions, descriptions, dependencies, keywords, maintainers, source-repo links, and cumulative download counts. Pure HTTP against MELPA's public JSON archives — no auth, no proxy, no cookies.

What this actor does

  • Two modes: search (free-text query or full browse) and byNames (exact package lookup)
  • Two channels: melpa (rolling, ~6,270 packages, rebuilt continuously) and melpa-stable (~3,430 packages, built only from tagged releases, semantic versions)
  • Filters: minimum downloads, source host (GitHub/GitLab/Codeberg/SourceHut/Git/Mercurial), keyword substring, last-updated date range, reverse-dependency lookup (dependsOn — find every package that depends on a given library)
  • Sorting: by download count, name, or most-recently-updated
  • Empty fields are omitted — you only ever see fields with real data

Output per package

  • name — package name (e.g. magit)
  • channelmelpa or melpa-stable
  • version — MELPA snapshot version (YYYYMMDD.HHMM on melpa; semantic version like 4.7.0 on melpa-stable)
  • description
  • packageTypetar (multi-file) or single
  • keywords[]
  • authors[], maintainers[], primaryMaintainer
  • dependencies[]{name, minVersion} pairs
  • fetcher — source host (github, gitlab, codeberg, sourcehut, git, hg)
  • repoowner/repo (when the host uses that form)
  • branch — the tracked git branch, when the recipe pins one
  • oldNames[] — previous package name(s), for packages that were renamed
  • repoUrl — canonical source-code repository URL
  • commit, revisionDescription
  • downloadCount — cumulative MELPA installs
  • lastUpdatedDate — ISO date of the latest build (only on melpa; melpa-stable versions are tag-derived and don't map to a build date, so this is omitted there)
  • sourceUrl — the package's MELPA page
  • recordType: "package", scrapedAt

Input

FieldTypeDefaultDescription
modestringsearchsearch / byNames
channelstringmelpamelpa (rolling) / melpa-stable (tagged releases only)
searchQuerystringFree-text query against name/description/keywords (mode=search)
namesarrayExact package names (mode=byNames)
fetcherstringFilter by source host
minDownloadsintMinimum cumulative downloads
containsKeywordstringSubstring match on name/description/keywords
dependsOnstringOnly packages that declare this exact package name as a dependency (e.g. dash)
updatedAfter / updatedBeforestringISO date range on last update (mode=search, melpa channel only)
sortBystringdownloadsdownloads / name / recentlyUpdated
maxItemsint50Hard cap (1–5000)
{
"mode": "search",
"containsKeyword": "completion",
"fetcher": "github",
"minDownloads": 10000,
"sortBy": "downloads",
"maxItems": 25
}

Example: lookup by exact names

{
"mode": "byNames",
"names": ["magit", "company", "flycheck", "projectile"]
}

Example: what depends on dash?

{
"mode": "search",
"dependsOn": "dash",
"sortBy": "downloads",
"maxItems": 25
}

Example: browse only stable (tagged-release) packages

{
"mode": "search",
"channel": "melpa-stable",
"searchQuery": "completion",
"sortBy": "downloads",
"maxItems": 25
}

Use cases

  • Track the most-downloaded Emacs packages over time
  • Build a dependency graph across the MELPA ecosystem
  • Audit which packages are hosted on which forge (GitHub vs GitLab vs self-hosted git)
  • Monitor recently-updated packages for a curated Emacs starter-kit

FAQ

Does this require a MELPA account or API key? No — MELPA publishes its full catalog as public JSON with no authentication.

How current is the data? MELPA rebuilds its archive continuously from each package's source repository; this actor reads the live archive.json/recipes.json/download_counts.json on every run.

Can I get every package in one run? Yes — leave searchQuery blank and set maxItems to 5000 (there are currently ~6,270 packages on melpa, ~3,430 on melpa-stable).

What's the difference between melpa and melpa-stable? melpa rebuilds continuously from each package's default branch, so versions are snapshot-dated (YYYYMMDD.HHMM) and can change several times a day. melpa-stable only rebuilds when a maintainer pushes a git tag, so versions look like conventional semantic versions (e.g. 4.7.0) and change far less often — pick this channel if you want fewer, more conservative releases. Not every melpa package has a tagged release, so melpa-stable has fewer packages overall.