Swift Package Index Scraper avatar

Swift Package Index Scraper

Pricing

from $3.00 / 1,000 results

Go to Apify Store
Swift Package Index Scraper

Swift Package Index Scraper

Scrape the Swift Package Index (swiftpackageindex.com) - search packages, look up rich package details or CI build matrices, list every package by a GitHub author/org, browse by keyword or SSWG maturity collection, pull recently added packages or releases, or list the entire package catalog.

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

2 days ago

Last modified

Share

Scrape the Swift Package Index — the community catalog of open-source Swift packages. Search packages by keyword, pull a rich package detail page or its full CI build matrix, list every package published by a GitHub author or organization, browse packages by keyword/tag or by Swift Server Work Group (SSWG) maturity level, track recently added packages or releases, or list the entire package catalog in one run.

No login, no API key, and no cookies required — every mode reads data that is publicly visible on swiftpackageindex.com.

What this actor does

  • Search packages by free-text query (name, description, keywords), with support for the site's built-in filter tokens (stars:>500, platform:ios,linux, product:plugin, etc.)
  • Package detail — full metadata for one exact owner/repo package: summary, license, stars, Swift-tool and platform compatibility, SSWG collection membership, dependency/build stats, keywords, homepage and documentation links
  • Package build matrix — the full CI build results for one exact owner/repo package: pass/fail status for every Swift version × platform × package version combination the site has tested, with a direct link to each build's log page
  • By author/org — every package published under a GitHub username or organization (e.g. every package from vapor, apple, pointfreeco)
  • By keyword/tag — every package tagged with a given keyword (e.g. server, networking, swiftui)
  • By SSWG collection — browse the three official Swift Server Work Group maturity tiers: Sandbox, Incubating, Graduated
  • Recently added packages — the newest packages indexed by the site
  • Recent releases — the newest package releases, filterable by release kind (major / minor / patch / pre-release) and including changelog notes
  • Full package catalog — every package the site has ever indexed (~11,000+), each with its last-updated date, straight from the site's sitemap index — the only unscoped, non-time-limited way to enumerate the entire catalog
  • Empty fields are always omitted — every record only contains data that was actually found

Output per record

Every record is a flat JSON object. Fields are only present when the source page/feed actually contains that data — this actor never emits null, empty strings, or placeholder values.

FieldDescription
ownerGitHub user/org that owns the package
repoGitHub repository name
packageNameDisplay name of the package
summaryShort package description
githubUrlGitHub repository URL
packageUrlSwift Package Index page URL
licenseName / licenseUrlPackage license (e.g. MIT) and link to the license file
readmeUrlDirect link to the package's README on GitHub
latestVersion / stableVersionMost recent stable release version
betaVersionMost recent beta/pre-release version, if any
defaultBranchName of the default Git branch
versionCountNumber of published versions indexed
swiftToolsVersionSwift tools version declared by the latest manifest
compatibleSwiftVersions[]Swift language versions the latest release builds against
compatiblePlatforms[]Apple/Linux/Android/Wasm platforms the latest release builds for
keywords[]Tags/keywords associated with the package
matchingKeywords[](search mode) keywords that matched the search query
starCountGitHub star count
hasDocumentation(search mode) whether hosted documentation is available
lastActivity(search mode) human-readable recency of the last commit/release
maintainerInfoFree-text maintainer/ownership description
developmentSummary / commitsCount / releasesCount(packageDetail) development history stats
activitySummary / openIssuesCount / openPullRequestsCount(packageDetail) GitHub issue/PR activity
dependenciesSummary / dependenciesCount(packageDetail) number of dependency packages
librariesCount / executablesCount / pluginsCount / macrosCount(packageDetail) product counts by type
sswgCollectionSlug / sswgCollectionName(packageDetail) SSWG maturity collection membership, if any
products[](packageDetail) every library/executable/plugin/macro product the package vends, with its name and type
dataRaceSafetySummary(packageDetail) Swift 6 strict-concurrency status, e.g. Zero data race safety errors
dataRaceSafetyErrorCounts(packageDetail) per-platform data-race error counts (e.g. {"iOS": 0, "Linux": 0}), when the site publishes a breakdown
fundingText(packageDetail) sponsorship/funding blurb, if the maintainer has one configured
firstPublishedAt(packageDetail) ISO-8601 UTC timestamp the package was first published
homepageUrl / documentationUrl(packageDetail) package homepage and hosted documentation links
lastUpdated(packageDetail, allPackages) ISO date the package's page was last refreshed
version(recentReleases) the released version string
releasedAt / addedAtISO-8601 UTC timestamp of the release/addition
changelogNotes(recentReleases) changelog/release-notes text, if published
swiftVersion(packageBuilds) Swift language version the build was run under, e.g. 6.3
platform(packageBuilds) target platform of the build, e.g. macOS (SPM), iOS, Linux, Wasm, Android
packageVersion(packageBuilds) package version/branch the build was run against
versionKind(packageBuilds) stable, beta, or branch — which release channel packageVersion represents
buildStatus(packageBuilds) succeeded or failed
buildUrl(packageBuilds) link to the individual build's log page
hasGeneratedDocs(packageBuilds) whether this specific build generated hosted documentation
recordTypepackage, packageDetail, build, or release
scrapedAtUTC ISO timestamp of when the actor collected the record

Input

FieldTypeApplies to modeDefaultDescription
modeselectbyAuthorWhich lookup to run — see the mode table below
searchQuerystringsearchvaporFree-text query, optionally with filter tokens like stars:>500
packageOwnerstringpackageDetail, packageBuildsvaporGitHub user/org that owns the package
packageRepostringpackageDetail, packageBuildsvaporGitHub repository name of the package
authorNamestringbyAuthorvaporGitHub user/org to list every indexed package for
keywordstringbyKeywordserverKeyword/tag slug to list every package tagged with it
collectionSlugselectbyCollectionsswg-graduatedsswg-sandbox / sswg-incubating / sswg-graduated
releaseMajorbooleanrecentReleasestrueInclude major-version releases
releaseMinorbooleanrecentReleasestrueInclude minor-version releases
releasePatchbooleanrecentReleasestrueInclude patch-version releases
releasePrebooleanrecentReleasesfalseInclude pre-release / beta / alpha versions
maxItemsintegerall50Hard cap on the number of records emitted (1–1000)

Modes

ModeWhat it returns
searchPackages matching a free-text search query, newest-ranked-first, paginated
packageDetailOne record with the full detail page for an exact packageOwner/packageRepo
packageBuildsOne record per Swift-version/platform/package-version build cell for an exact packageOwner/packageRepo
byAuthorEvery package published by a GitHub user/org
byKeywordEvery package tagged with a keyword
byCollectionEvery package in an SSWG maturity collection
recentPackagesThe most recently added packages, newest first
recentReleasesThe most recent releases across all indexed packages, newest first
allPackagesEvery package in the full catalog (owner/repo + last-updated date), unscoped and not time-limited

Example: search for networking packages

{
"mode": "search",
"searchQuery": "networking",
"maxItems": 30
}

Example: full detail for one package

{
"mode": "packageDetail",
"packageOwner": "vapor",
"packageRepo": "vapor"
}

Example: build matrix for one package

{
"mode": "packageBuilds",
"packageOwner": "vapor",
"packageRepo": "vapor"
}

Example: every package by an organization

{
"mode": "byAuthor",
"authorName": "pointfreeco",
"maxItems": 100
}

Example: browse the graduated SSWG collection

{
"mode": "byCollection",
"collectionSlug": "sswg-graduated"
}

Example: recent stable releases only (no pre-releases)

{
"mode": "recentReleases",
"releaseMajor": true,
"releaseMinor": true,
"releasePatch": true,
"releasePre": false,
"maxItems": 100
}

Example: full package catalog

{
"mode": "allPackages",
"maxItems": 500
}

Use cases

  • Dependency research — check a Swift package's license, Swift-tools version, and platform compatibility before adding it to a project
  • Ecosystem monitoring — track new packages and releases across the whole Swift open-source community as they're published
  • Server-side Swift adoption — browse the SSWG Sandbox/Incubating/Graduated tiers to find production-ready server packages
  • CI/build health audits — pull a package's full build matrix to see which Swift versions and platforms it currently passes on
  • Author/organization audits — list every package a company or maintainer publishes, e.g. Vapor, Apple, PointFree
  • Catalog-wide analytics — export the entire Swift Package Index catalog to analyze ecosystem trends over time

FAQ

Do I need a Swift Package Index account or API key? No. Every mode reads publicly available pages and feeds — no login, API key, or cookies are needed.

Why do some records have fewer fields than others? packageDetail reads the richest, most complete data (a single package's full page). byAuthor/byKeyword/byCollection read a lighter public JSON feed that doesn't include GitHub star counts or issue/PR activity. search and recentPackages/recentReleases each expose whatever their respective page/feed publishes. Fields that a given mode can't populate are simply omitted rather than sent as empty or fake values.

Can I filter recent releases to only stable versions? Yes — set releaseMajor/releaseMinor/releasePatch to true and releasePre to false to exclude pre-releases. Note that if all four toggles are left off, the Swift Package Index feed falls back to showing every release kind (this is upstream behavior, not a bug).

Does search support the site's advanced filter syntax? Yes — anything you could type into the search box on swiftpackageindex.com (e.g. stars:>500, last_activity:>2024-01-01, platform:ios,linux, product:plugin) works in searchQuery since it's passed straight through.

How many packages can I fetch in one run? Use maxItems (1–1000) to cap how many records are emitted. byKeyword and byCollection return their full result set in one response; search and recentPackages/recentReleases paginate until maxItems is reached or the source runs out of results.

What's the difference between allPackages and byAuthor/byKeyword/byCollection? allPackages is the entire, unscoped catalog — every package the site has ever indexed, in one list — while byAuthor/byKeyword/byCollection are scoped to a single author, tag, or SSWG tier. allPackages records only carry owner, repo, packageName, lastUpdated, and the two URL fields (no summary/license/stars); run packageDetail on a specific owner/repo from the results for the richer fields.

Why might search, packageDetail, packageBuilds, or allPackages occasionally return 0 results or fewer fields than expected? These four modes read swiftpackageindex.com's web pages, which very occasionally throttle a request. On the rare run where that happens the actor reports it with a clear status message — simply re-run. byAuthor, byKeyword, byCollection, recentPackages, and recentReleases read public data feeds instead and aren't affected.

Is this affiliated with Apple or the Swift project? No. The Swift Package Index is an independent, community-run, open-source project. This actor is an independent scraper of its publicly available pages and feeds.