GitHub Marketplace Scraper avatar

GitHub Marketplace Scraper

Pricing

from $2.99 / 1,000 marketplace listings

Go to Apify Store
GitHub Marketplace Scraper

GitHub Marketplace Scraper

Extract public GitHub Marketplace listings, types, descriptions, links, and logos.

Pricing

from $2.99 / 1,000 marketplace listings

Rating

0.0

(0)

Developer

w3crawler

w3crawler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

7 days ago

Last modified

Categories

Share

Collect public GitHub Marketplace listings from the rendered Marketplace pages. The Actor extracts the listing slug, name, canonical URL, card description, displayed type, public logo URL, and optional detail-page description. It supports bounded query/category URLs and public Marketplace pagination.

Source behavior

The public Marketplace page exposes a search/filter surface, Apps and Actions categories, listing cards with names, types, descriptions and logos, and page controls. The observed Apps page returned cards such as Render, LovableBot, GitGuardian, OpenCode, Google Cloud Build and CircleCI, and exposed page links through page 71. The Actor follows the public page query parameter for bounded pages; it does not access private listings, require a GitHub token, bypass CAPTCHA/challenge pages, or use undocumented APIs.

Input

{
"query": "slack",
"listingType": "apps",
"maxItems": 20,
"maxPages": 2,
"includeDetails": false,
"timeoutSecs": 30
}

Use startUrls for one or more public https://github.com/marketplace URLs. If omitted, the Actor builds a URL from query and listingType (all, apps, actions, or packages). maxItems is capped at 200 and maxPages at 20 per start URL. includeDetails makes one bounded public detail request per selected listing. Timeouts are capped at 120 seconds. Unknown input keys are rejected.

Dataset output

Normal rows contain listingSlug, name, canonical Marketplace url, card description, listingType, optional detailDescription, public logoUrl, the discovery sourceUrl, and scrapedAt. These are source-backed listing fields. Internal record IDs/types, status/data flags, source-website markers, HTTP status fields, and diagnostic messages are not emitted in normal rows.

When GitHub returns a challenge page, no listing cards, or a failed detail/list request, an optional minimal diagnostic row contains only url, error, errorCode, and scrapedAt. OUTPUT_SUMMARY retains source URLs, normal record count, diagnostics, request count, failed request count, page count, data availability, and completion time.

Listing example

{
"listingSlug": "render",
"name": "Render",
"url": "https://github.com/marketplace/render",
"description": "Continuous integration and deploys with Render, the modern cloud for ambitious developers",
"listingType": "App",
"logoUrl": "https://avatars.githubusercontent.com/ml/4937?s=400&v=4",
"sourceUrl": "https://github.com/marketplace?type=apps&page=1",
"scrapedAt": "2026-08-24T00:00:00.000Z"
}

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

Local run

npm ci
npm run check
npm test
apify validate-schema
apify run --purge --input-file input.json
npm run validate

Keep page and detail bounds reasonable, respect GitHub terms, and treat challenge or empty responses as honest source outcomes.