# Nexus Mods Scraper (`crawlerbros/nexus-mods-scraper`) Actor

Scrape Nexus Mods - the largest modding community. Search mods across 4,900+ games, fetch mod details and file/version history, browse games, mod collections and their bundled mods, news, user profiles, and identify files by MD5 hash. No login, API key, or cookies required.

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

## Pricing

from $3.00 / 1,000 results

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

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

## Nexus Mods Scraper

Scrape [Nexus Mods](https://www.nexusmods.com) — the largest video game modding community, home to millions of mods across 4,900+ games including Skyrim, Fallout, Cyberpunk 2077, The Witcher 3, Stardew Valley, and Baldur's Gate 3. Search mods by keyword, fetch exact mod details by ID, list a mod's downloadable files and version history, see who endorsed a mod, browse the full games catalog, discover curated mod collections and see exactly which mods they bundle, read official news, and look up public modder profiles. No login, no API key, no cookies required.

### What this actor does

- **Search mods** across any game with filters for category, tag, and adult content, sorted by downloads, endorsements, name, date, size, or randomly
- **Fetch exact mod details** for one or more mod IDs — full description, file size, download mirrors, uploader info, and tags
- **List a mod's files** — every uploaded version/file for a mod with changelog, size, download counts, and virus-scan status
- **List a mod's archive contents** — every individual file (ESP/ESL/BSA/DLL/texture/etc.) packed inside a mod's downloadable archive(s), with path and size, filterable by file extension
- **List a mod's endorsers** — every user who endorsed a mod, with their profile and the exact date they endorsed it
- **List a mod's requirements/dependents** — every mod and DLC a mod depends on, plus every mod that depends on it
- **Browse the games catalog** — 4,900+ supported games with mod counts, download totals, and genres
- **Browse mod collections** — curated "modpacks" built by the community, with ratings, badges, and download stats
- **List a collection's mods** — every mod bundled inside a specific collection revision, with per-mod version and optional/required flag
- **List a collection's comments** — every community comment posted on a collection's page, with likes, replies, and poster identity
- **List a collection's changelog** — every published-revision update note a curator has posted for a collection
- **List a collection's bug reports** — every community-reported issue for a collection, open or closed, with reporter identity and closure reason
- **Browse official news** — Nexus Mods site news, game news, interviews, competitions, and features
- **Look up user profiles** — public modder stats: kudos, mods authored, collections, join date
- **Search users by name** — find Nexus Mods members by partial username match, with the same public profile stats
- **Browse valid tags for a game** — discover the exact tag names to plug into `search`'s `tag` filter
- **Browse community media** — screenshots and videos uploaded by players for a game, with captions, ratings, and view counts
- **Identify a file by its MD5 hash** — look up which mod/file a downloaded archive belongs to from its checksum, useful for verifying or tracing unlabeled downloads
- **Empty fields are omitted** — a record only contains the fields Nexus Mods could actually populate for it

### Modes

| Mode | What it fetches |
|---|---|
| `search` | Mods matching a text query and/or filters |
| `modDetails` | Exact mods by game + mod ID |
| `modFiles` | All downloadable files/versions for one or more mods |
| `modFileContents` | Every individual file packed inside one or more mods' archive(s) |
| `modEndorsers` | Every user who endorsed one or more mods |
| `modRequirements` | What one or more mods require (DLC + other mods) and/or what requires them |
| `browseGames` | The Nexus Mods games catalog |
| `browseCollections` | Curated mod collections for a game |
| `collectionMods` | The mods bundled inside a specific collection revision |
| `collectionComments` | Community comments posted on a collection's page |
| `collectionChangelog` | Published-revision update notes for a collection |
| `collectionBugReports` | Community-reported bugs for a collection |
| `browseNews` | Official Nexus Mods news articles |
| `userProfile` | A single user's public profile |
| `searchUsers` | Users matching a partial username query |
| `browseTags` | Valid mod/collection tags for a game |
| `browseMedia` | Community-uploaded screenshots/videos for a game |
| `fileHashLookup` | Identify mod file(s) matching one or more MD5 checksums |

### Output

Every record includes `recordType`, `scrapedAt`, and a canonical page URL. Fields that can't be populated for a given record are omitted (never `null` or empty).

#### Mod record (`recordType: "mod"`)

`modId`, `uid`, `name`, `summary`, `description`, `version`, `category`, `categoryId`, `status`, `createdAt`, `updatedAt`, `adultContent`, `author`, `downloads`, `endorsements`, `fileSizeKb`, `supportsVortex`, `directDownloadEnabled`, `blockedFromEarningPoints`, `legacyModRequirementsEnabled`, `pictureUrl`, `thumbnailUrl`, `thumbnailLargeUrl`, `thumbnailBlurredUrl`, `thumbnailLargeBlurredUrl`, `mirrors[]` (name/url/totalDownloads), `tags[]`, `uploaderName`, `uploaderMemberId`, `uploaderAvatarUrl`, `gameId`, `gameDomainName`, `gameName`, `modUrl`

#### Mod file record (`recordType: "modFile"`)

`fileId`, `name`, `version`, `category`, `description`, `changelogText[]`, `uploadedAt`, `sizeKb`, `sizeBytes`, `totalDownloads`, `uniqueDownloads`, `archiveFileName`, `isPrimary`, `virusScanStatus`, `hasRequirementsAlert`, `fileGroupId`, `uploaderName`, `uploaderMemberId`, `modId`, `modName`, `gameDomainName`, `gameName`, `fileUrl`, `modUrl`

#### Mod file content record (`recordType: "modFileContent"`)

`fileName`, `filePath`, `filePathParts[]`, `fileExtension`, `fileSizeBytes`, `fileId`, `modId`, `modName`, `gameDomainName`, `gameName`, `modUrl`, `fileUrl`

#### Mod endorser record (`recordType: "modEndorser"`)

`memberId`, `name`, `avatarUrl`, `endorsedAt`, `modId`, `modName`, `gameDomainName`, `gameName`, `modUrl`, `profileUrl`

#### Mod requirement record (`recordType: "modRequirement"`)

`sourceModId`, `sourceModName`, `sourceModUrl`, `direction` (`requires` / `requiredBy`), `requirementType` (`mod` / `dlc`), `relatedName`, `relatedModId`, `relatedModUrl` (mod-type only), `isExternal` (mod-type only — whether the requirement is hosted off Nexus, e.g. a third-party tool), `notes`, `externalUrl` (mod-type only, when the requirement links off-site), `gameDomainName`, `gameName`

#### Game record (`recordType: "game"`)

`gameId`, `name`, `domainName`, `genre`, `modCount`, `collectionCount`, `imageCount`, `mediaCount`, `videoCount`, `downloadCount`, `uniqueDownloadCount`, `supportsVortex`, `copyrightedName`, `trendingPeriodDays`, `forumUrl`, `approvedAt`, `gameUrl`

#### Collection record (`recordType: "collection"`)

`collectionId`, `slug`, `name`, `summary`, `description` (longer markdown write-up; may repeat `summary` for short collections), `endorsements`, `totalDownloads`, `uniqueDownloads`, `overallRating`, `overallRatingCount`, `recentRating`, `recentRatingCount`, `collectionStatus`, `allowUserMedia`, `categoryName`, `tags[]`, `badges[]`, `gameId`, `gameDomainName`, `gameName`, `authorName`, `authorMemberId`, `authorAvatarUrl`, `editors[]` (co-authors with permission to edit the collection, deduplicated; omitted when there are none besides the primary author), `headerImageUrl`, `tileImageUrl`, `latestPublishedRevisionNumber`, `modCount` (mod count in the latest published revision), `totalSizeBytes` (total archive size in bytes for the latest published revision), `createdAt`, `updatedAt`, `firstPublishedAt`, `lastPublishedAt`, `collectionUrl`

#### Collection mod record (`recordType: "collectionMod"`)

`collectionSlug`, `collectionRevisionNumber`, `optional`, `updatePolicy`, `version`, `fileId`, `fileName`, `sizeKb`, `sizeBytes`, `fileTotalDownloads`, `fileUniqueDownloads`, `modId`, `modName`, `modSummary`, `modCategory`, `modAdultContent`, `modAuthor`, `gameDomainName`, `gameName`, `modUrl`, `collectionUrl`

#### Collection comment record (`recordType: "collectionComment"`)

`commentId`, `body`, `createdAt`, `updatedAt`, `likesCount`, `isPinned`, `isReply`, `parentCommentId` (only when `isReply` is true), `creatorName`, `creatorMemberId`, `creatorAvatarUrl`, `creatorProfileUrl`, `collectionSlug`, `collectionName`, `gameDomainName`, `gameName`, `collectionUrl`

#### Collection changelog record (`recordType: "collectionChangelog"`)

`changelogId`, `revisionNumber`, `collectionRevisionId`, `description`, `createdAt`, `updatedAt`, `collectionSlug`, `collectionName`, `gameDomainName`, `gameName`, `collectionUrl`

#### Collection bug report record (`recordType: "collectionBugReport"`)

`bugReportId`, `title`, `description`, `status` (`open` / `closed`), `collectionRevisionNumber`, `createdAt`, `updatedAt`, `closedAt`, `closureReason` (`resolved` / `not_a_bug` / `wont_fix`, only when set), `attachmentUrls[]`, `reporterName`, `reporterMemberId`, `reporterAvatarUrl`, `reporterProfileUrl`, `collectionSlug`, `collectionName`, `gameDomainName`, `gameName`, `collectionUrl`

#### News record (`recordType: "news"`)

`newsId`, `title`, `summary`, `content`, `isHtml`, `date`, `commentsCount`, `categoryName`, `authorName`, `authorMemberId`, `authorAvatarUrl`, `imageUrl`, `headerImageUrl`, `sourceName`, `sourceUrl`, `newsUrl`

#### User record (`recordType: "user"`)

`memberId`, `name`, `avatarUrl`, `about`, `country`, `joined`, `lastActive`, `kudos`, `endorsementsGiven`, `modCount`, `ownedModCount`, `contributedModCount`, `collectionCount`, `imageCount`, `videoCount`, `posts`, `views`, `recognizedAuthor`, `donationsEnabled`, `hasGivenKudos`, `banned`, `deleted`, `membershipRoles[]`, `uniqueModDownloads`, `roles[]`, `legacyRoles[]`, `profileUrl`

#### Tag record (`recordType: "tag"`)

`tagId`, `name`, `isAdult`, `isGlobal`, `taggablesCount` (number of mods/collections carrying this tag), `categoryName`, `gameDomainName`

#### Media record (`recordType: "media"`)

`mediaId`, `mediaType` (`image` / `video` / `supporterImage`), `title`, `caption` (images only), `description`, `mediaUrl`, `thumbnailUrl`, `siteUrl`, `isAdultContent` (images only), `views`, `rating`, `createdAt`, `categoryName`, `ownerName`, `ownerMemberId`, `gameId`, `gameDomainName`, `gameName`

#### File hash record (`recordType: "fileHash"`)

`md5`, `fileName`, `fileSizeBytes`, `fileType`, `createdAt`, `gameId`, `fileId`, `version`, `sizeKb`, `modFileSizeBytes`, `totalDownloads`, `uniqueDownloads`, `category`, `modId`, `modName`, `gameDomainName`, `gameName`, `modUrl`, `fileUrl` (`fileId`/`version`/`sizeKb`/`modFileSizeBytes`/`totalDownloads`/`uniqueDownloads`/`category`/`modId`/`modName`/`gameDomainName`/`gameName`/`modUrl`/`fileUrl` are only populated when Nexus Mods could resolve the matched file to a live mod/file record)

### Input

| Field | Type | Applies to | Description |
|---|---|---|---|
| `mode` | select | all | `search` / `modDetails` / `modFiles` / `modFileContents` / `modEndorsers` / `modRequirements` / `browseGames` / `browseCollections` / `collectionMods` / `collectionComments` / `collectionChangelog` / `collectionBugReports` / `browseNews` / `userProfile` / `searchUsers` / `browseTags` / `browseMedia` / `fileHashLookup` |
| `searchQuery` | string | search | Free-text query matched against mod names |
| `gameDomainName` | string | search, modDetails, modFiles, modFileContents, modEndorsers, modRequirements, browseCollections, collectionMods, collectionComments, browseNews, browseTags, browseMedia | Game slug, e.g. `skyrimspecialedition`, `fallout4`, `cyberpunk2077` |
| `modIds` | array | modDetails, modFiles, modFileContents, modEndorsers, modRequirements | Numeric mod IDs to fetch |
| `fileExtensionFilter` | string | modFileContents | Exact file extension to restrict the archive listing to, e.g. `.esp`, `.bsa`, `.dll` (leading dot optional) |
| `requirementDirection` | select | modRequirements | `all` / `requires` / `requiredBy` — which side of the dependency relationship to return |
| `category` | string | search | Exact mod category, e.g. `Armour`, `Weapons`, `Overhauls` |
| `tag` | string | search | Exact mod tag, e.g. `Overhaul`, `Quality of Life`, `Cheating` |
| `author` | string | search | Restrict results to mods credited to this author/uploader name |
| `languageName` | string | search | Restrict results to mods tagged with this translation language, e.g. `Russian`, `German` |
| `minDownloads` | integer | search | Only return mods with at least this many total downloads |
| `minEndorsements` | integer | search | Only return mods with at least this many endorsements |
| `supportsVortexFilter` | select | search | `any` / `vortexOnly` / `nonVortexOnly` — restrict by Vortex mod-manager support |
| `minFileSizeKb` | integer | search | Only return mods whose primary file size is at least this many kilobytes |
| `maxFileSizeKb` | integer | search | Only return mods whose primary file size is at most this many kilobytes |
| `directDownloadFilter` | select | search | `any` / `directDownloadOnly` / `nonDirectDownloadOnly` — restrict by direct-download API support |
| `adultContentFilter` | select | search, browseCollections, browseMedia | `includeAdult` / `excludeAdult` / `onlyAdult` |
| `sortBy` | select | search | `relevance` / `downloads` / `uniqueDownloads` / `endorsements` / `name` / `createdAt` / `updatedAt` / `size` / `random` / `lastComment` |
| `sortDirection` | select | search, browseGames, browseCollections, browseMedia, collectionComments, searchUsers | `ASC` / `DESC` |
| `gameNameQuery` | string | browseGames | Free-text filter on game name |
| `browseGamesSortBy` | select | browseGames | `mods` / `downloads` / `collections` / `name` / `approved` / `relevance` |
| `collectionCategory` | select | browseCollections | `Total Overhaul` / `Vanilla Plus` / `Themed` / `Essentials` / `Miscellaneous` |
| `collectionTag` | string | browseCollections | Exact collection tag, e.g. `Environment`, `Gameplay`, `Bug Fixes`, `Quality of Life` |
| `browseCollectionsSortBy` | select | browseCollections | `relevance` / `createdAt` / `updatedAt` / `endorsements` / `downloads` / `rating` / `recentRating` |
| `collectionSlug` | string | collectionMods, collectionComments, collectionChangelog, collectionBugReports | Collection slug to list mods/comments/changelog/bug reports for, e.g. `rqhcxy` |
| `collectionRevisionNumber` | integer | collectionMods | Exact revision to fetch; leave blank for the current published revision |
| `collectionCommentsSortBy` | select | collectionComments | `createdAt` / `likesCount` |
| `bugReportStatusFilter` | select | collectionBugReports | `open` / `closed` / `all` — which bug reports to return |
| `newsCategory` | select | browseNews | `all` / `SITE_NEWS` / `GAME_NEWS` / `MOD_NEWS` / `INTERVIEWS` / `COMPETITIONS` / `FEATURES` |
| `username` | string | userProfile | Exact Nexus Mods username |
| `memberId` | integer | userProfile | Exact numeric member ID (takes priority over `username`) |
| `userSearchQuery` | string | searchUsers | Free-text partial-match query against usernames (2+ characters) |
| `searchUsersSortBy` | select | searchUsers | `relevance` / `name` |
| `mediaSearchQuery` | string | browseMedia | Free-text query matched against screenshot/video captions and descriptions |
| `mediaTypeFilter` | select | browseMedia | `any` / `image` / `video` — restrict to only screenshots or only videos |
| `browseMediaSortBy` | select | browseMedia | `createdAt` / `views` / `rating` / `random` |
| `md5Hashes` | array | fileHashLookup | One or more 32-character hex MD5 checksums to identify matching mod file(s) |
| `maxItems` | integer | all | Hard cap on emitted records (1–500) |

#### Example: search mods

```json
{
  "mode": "search",
  "gameDomainName": "skyrimspecialedition",
  "searchQuery": "survival",
  "sortBy": "endorsements",
  "maxItems": 20
}
```

#### Example: exact mod lookup

```json
{
  "mode": "modDetails",
  "gameDomainName": "skyrimspecialedition",
  "modIds": ["671", "17729"]
}
```

#### Example: a mod's file/version history

```json
{
  "mode": "modFiles",
  "gameDomainName": "skyrimspecialedition",
  "modIds": ["671"]
}
```

#### Example: a mod's archive file listing

```json
{
  "mode": "modFileContents",
  "gameDomainName": "skyrimspecialedition",
  "modIds": ["671"],
  "fileExtensionFilter": ".esp"
}
```

#### Example: a mod's endorsers

```json
{
  "mode": "modEndorsers",
  "gameDomainName": "skyrimspecialedition",
  "modIds": ["671"],
  "maxItems": 50
}
```

#### Example: a mod's requirements and dependents

```json
{
  "mode": "modRequirements",
  "gameDomainName": "skyrimspecialedition",
  "modIds": ["12604"],
  "requirementDirection": "all",
  "maxItems": 30
}
```

#### Example: browse a game's top collections

```json
{
  "mode": "browseCollections",
  "gameDomainName": "fallout4",
  "browseCollectionsSortBy": "endorsements",
  "maxItems": 25
}
```

#### Example: mods bundled inside a collection

```json
{
  "mode": "collectionMods",
  "collectionSlug": "rqhcxy"
}
```

#### Example: a collection's community comments

```json
{
  "mode": "collectionComments",
  "collectionSlug": "rqhcxy",
  "collectionCommentsSortBy": "createdAt",
  "sortDirection": "DESC",
  "maxItems": 20
}
```

#### Example: a collection's changelog

```json
{
  "mode": "collectionChangelog",
  "collectionSlug": "rqhcxy",
  "maxItems": 20
}
```

#### Example: a collection's open bug reports

```json
{
  "mode": "collectionBugReports",
  "collectionSlug": "rqhcxy",
  "bugReportStatusFilter": "open",
  "maxItems": 20
}
```

#### Example: latest interviews

```json
{
  "mode": "browseNews",
  "newsCategory": "INTERVIEWS",
  "maxItems": 10
}
```

#### Example: user profile

```json
{
  "mode": "userProfile",
  "username": "Chesko"
}
```

#### Example: search users by partial name

```json
{
  "mode": "searchUsers",
  "userSearchQuery": "chesko",
  "maxItems": 10
}
```

#### Example: discover valid tags for a game

```json
{
  "mode": "browseTags",
  "gameDomainName": "skyrimspecialedition"
}
```

#### Example: search with author, minimum downloads, and language filters

```json
{
  "mode": "search",
  "gameDomainName": "skyrimspecialedition",
  "author": "Chesko",
  "minDownloads": 100000,
  "languageName": "Russian"
}
```

#### Example: community screenshots for a game

```json
{
  "mode": "browseMedia",
  "gameDomainName": "skyrimspecialedition",
  "mediaSearchQuery": "armor",
  "browseMediaSortBy": "rating",
  "maxItems": 20
}
```

#### Example: identify a file by MD5 hash

```json
{
  "mode": "fileHashLookup",
  "md5Hashes": ["d41d8cd98f00b204e9800998ecf8427e"],
  "maxItems": 20
}
```

### Use cases

- **Modding tool integrations** — build mod-list managers, update checkers, or compatibility trackers
- **Conflict/compatibility checks** — inspect a mod's archive contents (`modFileContents`) to see exactly which ESP/BSA/texture files it packs before installing
- **Community dashboards** — track a game's most-endorsed or most-downloaded mods over time
- **Content discovery** — surface trending mods, collections, or news for a specific game
- **Research & analytics** — study modding trends across genres, tags, and games
- **Creator tools** — monitor a mod author's or collection curator's public stats

### FAQ

**Do I need a Nexus Mods account or API key?** No. This actor uses Nexus Mods' public data endpoint — the same one that powers the website's own search and browse pages. No login, API key, or cookies are required.

**How do I find a game's `gameDomainName`?** It's the slug in the game's Nexus Mods URL: `nexusmods.com/<domainName>`. For example, Skyrim Special Edition is `skyrimspecialedition`, Fallout 4 is `fallout4`, Cyberpunk 2077 is `cyberpunk2077`.

**How do I find a mod's ID?** It's the number at the end of a mod page URL, e.g. `671` from `nexusmods.com/skyrimspecialedition/mods/671`.

**Are `category` and `tag` filters case-sensitive?** They must match Nexus Mods' exact label for that game (e.g. `Armour`, not `armour`). Check a game's mod-browse page for its exact category names, or run `mode=browseTags` for a game to get the exact list of valid tag names.

**Can I fetch adult-only (18+) content?** Yes — set `adultContentFilter` to `includeAdult` (default, shows everything) or `onlyAdult` to fetch only adult-tagged mods. Use `excludeAdult` to filter it out entirely.

**Why is `description` sometimes long or contain formatting markup?** Mod descriptions are authored in Nexus Mods' own BBCode-like markup (e.g. `[b]bold[/b]`, `[url=...]`). The actor returns the raw authored text as-is.

**Does this actor cover every game on Nexus Mods?** Yes — `browseGames` lists the full catalog (4,900+ games), and `search`/`modDetails`/`browseCollections`/`browseNews` accept any valid `gameDomainName` from that catalog.

**What's the difference between `collectionChangelog` and `collectionComments`?** `collectionChangelog` is the curator's own official update notes for each published revision (what changed and why). `collectionComments` is unrelated community discussion posted on the collection's page.

**What's the difference between `userProfile` and `searchUsers`?** `userProfile` looks up one exact user by their exact `username` or numeric `memberId`. `searchUsers` finds every member whose username contains a given text fragment (e.g. `userSearchQuery: "chesko"` matches `Chesko`, `BOCHESKO`, `CHESKO91`, etc.) — use it when you don't know a member's exact username.

**What can I do with `fileHashLookup`?** Given the MD5 checksum of a file (e.g. one you downloaded from somewhere else, or found unlabeled on disk), it identifies every mod file on Nexus Mods sharing that exact checksum — useful for tracing an unknown archive back to its source mod, or verifying a download matches the official upload.

**Is this affiliated with Nexus Mods?** No, this is a third-party actor using Nexus Mods' public data endpoint. It is not affiliated with, endorsed by, or sponsored by Nexus Mods.

### Limitations

- Private/authenticated fields (email addresses, IP addresses, moderation history) are never exposed — only public profile data is returned for `userProfile`.
- Mod page URLs (`modUrl`, `fileUrl`, `gameUrl`, `collectionUrl`, `newsUrl`, `profileUrl`, `siteUrl`) are standard browser links to nexusmods.com; they are not fetched by this actor and are provided for reference/click-through only. nexusmods.com sits behind a Cloudflare JS challenge, so these links return a 403 to non-browser tools like `curl` or server-side fetchers — they load normally in any real browser. Media URLs (`pictureUrl`, `thumbnailUrl`, `headerImageUrl`, `tileImageUrl`, `imageUrl`, `avatarUrl`, `mediaUrl`) are served from `staticdelivery.nexusmods.com`, which has no such challenge and is directly fetchable.
- `browseMedia` results are user-generated screenshots/videos; `caption`/`description`/`isAdultContent` are only populated for image uploads (Nexus Mods' schema does not expose an adult flag for videos), and `caption` is omitted entirely for videos since the underlying field doesn't exist on that type.
- `mode=modRequirements` DLC-type records (`requirementType: "dlc"`) never have `relatedModId`/`relatedModUrl`/`isExternal` — a DLC/game-expansion requirement isn't a mod, so only `relatedName` (the expansion's name, e.g. `Far Harbor`) and optionally `notes` are populated for those records.
- `searchQuery` (mode=search) and `gameNameQuery` (mode=browseGames) must be at least 2 characters — Nexus Mods' API rejects shorter values outright, so single-character queries are ignored (other filters/sort still apply, or the full catalog/game's mods are browsed unfiltered). `mediaSearchQuery` (mode=browseMedia) has no such minimum.
- `mode=collectionComments` only covers comments on collection pages — Nexus Mods' public data API does not expose a comparable comment thread for individual mod pages, so there is no equivalent `modComments` mode.
- `mode=collectionBugReports` with `bugReportStatusFilter: "all"` issues one request for `open` and one for `closed` and merges them (Nexus Mods' API requires an exact status per request, with no combined option) — the `open` batch is always emitted first.
- `mode=collectionChangelog`/`collectionBugReports` require `collectionSlug`; `gameDomainName` is optional context for both (same as `collectionMods`/`collectionComments`) since the slug alone already identifies the collection.
- `mode=fileHashLookup` can return multiple matching files for one hash — an MD5 checksum is not unique to a single mod file (unrelated uploads can legitimately share identical content, e.g. an empty file, a duplicate re-upload, or a shared readme); every match is returned as a separate `fileHash` record. Invalid entries in `md5Hashes` (wrong length or non-hex characters) are silently dropped before the request is made.
- `mode=collectionMods` cannot fetch the mod list of a collection that is flagged adult-only (18+) — Nexus Mods' API blocks that specific lookup for anonymous (non-logged-in) requests regardless of `collectionRevisionNumber`, even though the same collection still appears normally in `browseCollections` listings and its comments/changelog/bug reports remain fetchable. The actor detects this and reports it clearly via the run's status message rather than a misleading "not found".

# Actor input Schema

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

What to fetch from Nexus Mods.

## `searchQuery` (type: `string`):

Free-text query matched against mod names, e.g. `survival`, `armor`, `graphics overhaul`. Must be at least 2 characters (shorter values are ignored). Leave blank to browse a game's mods by filters/sort only.

## `gameDomainName` (type: `string`):

Nexus Mods game slug to scope results to, e.g. `skyrimspecialedition`, `fallout4`, `cyberpunk2077`, `witcher3`, `stardewvalley`, `baldursgate3`, `eldenring`. Find a game's slug in its Nexus Mods URL (nexusmods.com/<domainName>). Leave blank to search/browse across all games (not supported in modDetails/modFiles/modFileContents/modEndorsers/modRequirements/browseTags/browseMedia, which always require it; optional in collectionMods/collectionComments since `collectionSlug` alone already identifies the collection).

## `modIds` (type: `array`):

Numeric Nexus Mods mod IDs to fetch (found in a mod page URL, e.g. `671` from `nexusmods.com/skyrimspecialedition/mods/671`). Requires `gameDomainName` to also be set.

## `fileExtensionFilter` (type: `string`):

Restrict the archive file listing to an exact file extension, e.g. `.esp`, `.esl`, `.esm`, `.bsa`, `.ba2`, `.dll`, `.ini`, `.txt`, `.json`, `.dds`, `.nif`. The leading dot is optional (`esp` and `.esp` both work). Leave blank to list every file inside the mod's archive(s).

## `requirementDirection` (type: `string`):

Which side of the dependency relationship to return for each mod ID.

## `collectionSlug` (type: `string`):

Nexus Mods collection slug identifying the collection to list mods/comments/changelog/bug reports for, e.g. `rqhcxy` (found in a collection page URL: nexusmods.com/games/<domain>/collections/<slug>).

## `collectionRevisionNumber` (type: `integer`):

Exact revision number to fetch. Leave blank to fetch the collection's current published revision.

## `collectionCommentsSortBy` (type: `string`):

Collection comments sort order.

## `bugReportStatusFilter` (type: `string`):

Which bug reports to return for the collection.

## `category` (type: `string`):

Restrict results to a mod category exactly as Nexus Mods labels it for that game, e.g. `Armour`, `Weapons`, `Gameplay`, `Overhauls`, `Followers & Companions`. Categories are game-specific — check a game's mod-browse page for its exact category names.

## `tag` (type: `string`):

Restrict results to mods carrying an exact Nexus Mods tag, e.g. `Overhaul`, `Lore-Friendly`, `Quality of Life`, `Bug Fixes`, `Cheating`. Use `mode=browseTags` to discover the exact valid tag names for a game.

## `author` (type: `string`):

Restrict results to mods whose author/uploader credit contains this name, e.g. `Chesko`.

## `languageName` (type: `string`):

Restrict results to mods tagged with this exact translation language, e.g. `Russian`, `German`, `Polish`, `French`, `Spanish`.

## `minDownloads` (type: `integer`):

Only return mods with at least this many total downloads.

## `minEndorsements` (type: `integer`):

Only return mods with at least this many endorsements.

## `supportsVortexFilter` (type: `string`):

Restrict results by whether the mod supports one-click install via the Vortex mod manager.

## `minFileSizeKb` (type: `integer`):

Only return mods whose primary file size is at least this many kilobytes.

## `maxFileSizeKb` (type: `integer`):

Only return mods whose primary file size is at most this many kilobytes.

## `directDownloadFilter` (type: `string`):

Restrict results by whether the mod's files can be downloaded directly (no browser confirmation step) via the Nexus Mods API.

## `adultContentFilter` (type: `string`):

How to treat adult-only (18+) content in results.

## `sortBy` (type: `string`):

Mod sort order.

## `sortDirection` (type: `string`):

Ascending or descending sort order.

## `gameNameQuery` (type: `string`):

Free-text filter matched against game names, e.g. `skyrim`, `fallout`, `stardew`. Must be at least 2 characters (shorter values are ignored). Leave blank to browse the full games catalog.

## `browseGamesSortBy` (type: `string`):

Games catalog sort order.

## `collectionCategory` (type: `string`):

Restrict results to collections in one fixed Nexus Mods collection category.

## `collectionTag` (type: `string`):

Restrict results to collections carrying this exact Nexus Mods collection tag, e.g. `Environment`, `Gameplay`, `Bug Fixes`, `Quality of Life`, `Lore-friendly`, `UI`, `Visual`.

## `browseCollectionsSortBy` (type: `string`):

Collections sort order.

## `newsCategory` (type: `string`):

Restrict to one official news category, or `all` for every category.

## `username` (type: `string`):

Exact Nexus Mods username to look up, e.g. `Chesko`. Ignored if `memberId` is set.

## `memberId` (type: `integer`):

Exact numeric Nexus Mods member ID to look up. Takes priority over `username` when set.

## `userSearchQuery` (type: `string`):

Free-text query matched against Nexus Mods usernames (partial/substring match), e.g. `chesko`, `dark`, `mod`. Must be at least 2 characters.

## `searchUsersSortBy` (type: `string`):

User search sort order.

## `mediaSearchQuery` (type: `string`):

Free-text query matched against screenshot/video captions and descriptions, e.g. `armor`, `landscape`, `follower`. Leave blank to browse all community media for the game.

## `mediaTypeFilter` (type: `string`):

Restrict results to only screenshots or only videos.

## `browseMediaSortBy` (type: `string`):

Community media sort order.

## `md5Hashes` (type: `array`):

One or more 32-character hex MD5 checksums of a downloaded file to identify which Nexus Mods mod/file it belongs to, e.g. `d41d8cd98f00b204e9800998ecf8427e`. Invalid (non-hex or wrong-length) entries are dropped.

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

Hard cap on emitted records.

## Actor input object example

```json
{
  "mode": "search",
  "searchQuery": "survival",
  "gameDomainName": "skyrimspecialedition",
  "modIds": [],
  "requirementDirection": "all",
  "collectionSlug": "rqhcxy",
  "collectionCommentsSortBy": "createdAt",
  "bugReportStatusFilter": "open",
  "supportsVortexFilter": "any",
  "directDownloadFilter": "any",
  "adultContentFilter": "includeAdult",
  "sortBy": "endorsements",
  "sortDirection": "DESC",
  "browseGamesSortBy": "mods",
  "browseCollectionsSortBy": "endorsements",
  "newsCategory": "all",
  "username": "Chesko",
  "userSearchQuery": "chesko",
  "searchUsersSortBy": "relevance",
  "mediaTypeFilter": "any",
  "browseMediaSortBy": "createdAt",
  "md5Hashes": [],
  "maxItems": 20
}
```

# Actor output Schema

## `records` (type: `string`):

Dataset containing all scraped Nexus Mods records (mods, mod files, mod file archive contents, mod endorsers, mod requirements/dependents, games, collections, collection mods, collection comments, collection changelogs, collection bug reports, news, user profiles, tags, community media, or MD5 file-hash matches depending on mode).

# 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 = {
    "mode": "search",
    "searchQuery": "survival",
    "gameDomainName": "skyrimspecialedition",
    "modIds": [],
    "requirementDirection": "all",
    "collectionSlug": "rqhcxy",
    "collectionCommentsSortBy": "createdAt",
    "bugReportStatusFilter": "open",
    "supportsVortexFilter": "any",
    "directDownloadFilter": "any",
    "adultContentFilter": "includeAdult",
    "sortBy": "endorsements",
    "sortDirection": "DESC",
    "browseGamesSortBy": "mods",
    "browseCollectionsSortBy": "endorsements",
    "newsCategory": "all",
    "username": "Chesko",
    "userSearchQuery": "chesko",
    "searchUsersSortBy": "relevance",
    "mediaTypeFilter": "any",
    "browseMediaSortBy": "createdAt",
    "md5Hashes": [],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlerbros/nexus-mods-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 = {
    "mode": "search",
    "searchQuery": "survival",
    "gameDomainName": "skyrimspecialedition",
    "modIds": [],
    "requirementDirection": "all",
    "collectionSlug": "rqhcxy",
    "collectionCommentsSortBy": "createdAt",
    "bugReportStatusFilter": "open",
    "supportsVortexFilter": "any",
    "directDownloadFilter": "any",
    "adultContentFilter": "includeAdult",
    "sortBy": "endorsements",
    "sortDirection": "DESC",
    "browseGamesSortBy": "mods",
    "browseCollectionsSortBy": "endorsements",
    "newsCategory": "all",
    "username": "Chesko",
    "userSearchQuery": "chesko",
    "searchUsersSortBy": "relevance",
    "mediaTypeFilter": "any",
    "browseMediaSortBy": "createdAt",
    "md5Hashes": [],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlerbros/nexus-mods-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 '{
  "mode": "search",
  "searchQuery": "survival",
  "gameDomainName": "skyrimspecialedition",
  "modIds": [],
  "requirementDirection": "all",
  "collectionSlug": "rqhcxy",
  "collectionCommentsSortBy": "createdAt",
  "bugReportStatusFilter": "open",
  "supportsVortexFilter": "any",
  "directDownloadFilter": "any",
  "adultContentFilter": "includeAdult",
  "sortBy": "endorsements",
  "sortDirection": "DESC",
  "browseGamesSortBy": "mods",
  "browseCollectionsSortBy": "endorsements",
  "newsCategory": "all",
  "username": "Chesko",
  "userSearchQuery": "chesko",
  "searchUsersSortBy": "relevance",
  "mediaTypeFilter": "any",
  "browseMediaSortBy": "createdAt",
  "md5Hashes": [],
  "maxItems": 20
}' |
apify call crawlerbros/nexus-mods-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawlerbros/nexus-mods-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/e7veRrMzusid8kgDe/builds/1os9G8biKiQgXanrf/openapi.json
