Skip to content
    ↑↓ to choose · Enter to open

    · 18 min read

    Nexus Mods Scraper: Up to 1,000 Free Results a Month (2026)

    By CrawlerBros Engineering Team

    Mod records carry 32 fields, including the full description, endorsement counts, and author details across more than 4,900 games. This collector returns everything from file version history to individual archive contents like ESP and BSA paths without requiring an API key or cookies. A thousand results cost $5.00 on the free-plan price, and Apify's free plan provides a $5.00 monthly credit that covers the majority of that volume. This is for developers building compatibility trackers or community dashboards who need public modding data; it is not for those seeking private user email addresses.

    Try it before you read further. Apify's free plan includes $5.00 of usage every month with no credit card, enough for up to 1,000 results at $0.005 each before platform usage. Open Nexus Mods Scraper on Apify and run the prefilled example.

    How reliable is Nexus Mods Scraper in production?

    Across the last 30 days of public runs on the Apify platform, Nexus Mods Scraper recorded 61 runs with the following outcomes.

    Outcome Runs Share
    Succeeded 61 100.0%
    Failed 0 0.0%
    Aborted by the user 0 0.0%
    Timed out 0 0.0%
    Total 61 100.0%

    No run failed or timed out in the last 30 days. Keep a retry and an alert on scheduled runs all the same: a clean month is a record, not a guarantee.

    What does it cost to run Nexus Mods Scraper?

    Each result costs $0.005 on Apify's free plan, which is $5.00 per 1,000 results. Starting a run is charged separately at $0.005 per GB of Actor memory. Apify also bills the platform usage each run consumes, at the rates of your Apify plan, on top of these charges.

    Apify plan Per result Per 1,000 results
    FREE $0.005 $5.00
    BRONZE $0.00433 $4.33
    SILVER $0.00367 $3.67
    GOLD $0.003 $3.00
    PLATINUM $0.003 $3.00
    DIAMOND $0.003 $3.00

    Worked example: collecting 10,000 results costs $50.00 in result charges before run-start fees and platform usage. No run failed or timed out in the last 30 days, so the list price is a fair budget; keep a retry in place all the same.

    The maxItems control has the largest effect on the bill because it directly limits the number of results written to the dataset. The cheapest way to verify your setup is to set this to a small value like 5 and run a test before scaling to a full search.

    How do you run Nexus Mods Scraper from the API?

    The schema marks 1 of its 38 controls as required: mode. Nothing in the payload below is illustrative. Those are the schema's prefilled defaults for Nexus Mods Scraper, so the request works once your token is in place.

    Call the synchronous endpoint to start a run and receive dataset items in one request:

    curl -X POST "https://api.apify.com/v2/acts/crawlerbros~nexus-mods-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
      -H "Content-Type: application/json" \
      -d '{"mode":"search","collectionSlug":"rqhcxy","username":"Chesko","userSearchQuery":"chesko"}'
    

    The same run from Python, using the official client:

    from apify_client import ApifyClient
    
    client = ApifyClient("<YOUR_APIFY_TOKEN>")
    
    run_input = {
      "mode": "search",
      "collectionSlug": "rqhcxy",
      "username": "Chesko",
      "userSearchQuery": "chesko"
    }
    
    run = client.actor("crawlerbros~nexus-mods-scraper").call(run_input=run_input)
    
    for item in client.dataset(run["defaultDatasetId"]).iterate_items():
        print(item)
    

    And from Node.js:

    import { ApifyClient } from 'apify-client'
    
    const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' })
    
    const input = {
      "mode": "search",
      "collectionSlug": "rqhcxy",
      "username": "Chesko",
      "userSearchQuery": "chesko"
    }
    
    const run = await client.actor('crawlerbros~nexus-mods-scraper').call(input)
    const { items } = await client.dataset(run.defaultDatasetId).listItems()
    console.log(items)
    

    Because the call is synchronous, your client waits for the whole run. Keep it for exploration. For scheduled work, start the run without waiting and collect the dataset afterwards, so network trouble costs you a retry rather than the results.

    Which Nexus Mods Scraper inputs matter, and which can you skip?

    The mode control is the most important setting, as it defines whether you receive mod metadata, user profiles, or file hashes. Most practitioners should provide a gameDomainName and leave advanced filters like minFileSizeKb at their defaults for an initial run.

    • mode (string): What to fetch from Nexus Mods. Default: "search".
    • collectionSlug (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//collections/).
    • username (string): Exact Nexus Mods username to look up, e.g. Chesko. Ignored if memberId is set.
    • userSearchQuery (string): Free-text query matched against Nexus Mods usernames (partial/substring match), e.g. chesko, dark, mod. Must be at least 2 characters.
    • searchQuery (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. Default: "survival".
    • gameDomainName (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/). 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). Default: "skyrimspecialedition".
    • modIds (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. Default: [].
    • fileExtensionFilter (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 (string): Which side of the dependency relationship to return for each mod ID. Default: "all".
    • collectionRevisionNumber (integer): Exact revision number to fetch. Leave blank to fetch the collection's current published revision.
    • collectionCommentsSortBy (string): Collection comments sort order. Default: "createdAt".
    • bugReportStatusFilter (string): Which bug reports to return for the collection. Default: "open".

    The other 26 controls, with their defaults, are listed in the input schema on Nexus Mods Scraper on Apify.

    Fixed-choice controls: mode accepts 18 values (default search), including search (Search mods (text query + filters)), modDetails (exact lookup by game + mod ID), modFiles (download/version list by game + mod ID), modFileContents (archive file/folder listing by game + mod ID); requirementDirection accepts all (Both directions), requires (Only what this mod requires (dependencies + DLC)), requiredBy (Only mods that require this mod (dependents)); collectionCommentsSortBy accepts createdAt (Date posted), likesCount (Likes); bugReportStatusFilter accepts open (Open only), closed (Closed only), all (Both).

    What does Nexus Mods Scraper return?

    The returned records are ideal for tracking version updates or monitoring game trends through endorsement counts. They do not contain restricted file download links or any data that is not publicly visible on the Nexus Mods website.

    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
    • uploaderName
    • uploaderMemberId
    • uploaderAvatarUrl
    • gameId
    • gameDomainName
    • gameName
    • modUrl

    Mod file record (recordType: "modFile")

    • fileId
    • name
    • version
    • category
    • description
    • 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
    • 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
    • isExternal
    • notes
    • externalUrl
    • 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
    • endorsements
    • totalDownloads
    • uniqueDownloads
    • overallRating
    • overallRatingCount
    • recentRating
    • recentRatingCount
    • collectionStatus
    • allowUserMedia
    • categoryName
    • gameId
    • gameDomainName
    • gameName
    • authorName
    • authorMemberId
    • authorAvatarUrl
    • headerImageUrl
    • tileImageUrl
    • latestPublishedRevisionNumber
    • modCount
    • totalSizeBytes
    • 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
    • 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
    • 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
    • uniqueModDownloads
    • profileUrl

    Tag record (recordType: "tag")

    • tagId
    • name
    • isAdult
    • isGlobal
    • taggablesCount
    • categoryName
    • gameDomainName

    Media record (recordType: "media")

    • mediaId
    • mediaType
    • image
    • video
    • supporterImage
    • title
    • caption
    • description
    • mediaUrl
    • thumbnailUrl
    • siteUrl
    • isAdultContent
    • 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

    These are the documented fields. Optional ones can be empty on a given record, so measure how often each field your deliverable depends on is populated across a real sample before automating the handoff.

    How do you build the workflow end to end?

    Open Nexus Mods Scraper and work through these in order. Each step ends with something to check, so a bad configuration surfaces on a small run rather than a scheduled one.

    1. Select mode based on the specific artifact you need, such as modDetails for metadata or modFileContents for archive paths.
    2. Locate the gameDomainName from the Nexus Mods URL, using slugs like skyrimspecialedition or baldursgate3.
    3. Enter the numeric modIds into the array if you are using mod-specific modes to target exact records.
    4. Set maxItems to a low value like 5 for a trial run to verify that the returned recordType fields meet your requirements.
    5. Configure the adultContentFilter to include or exclude 18+ content based on your project's content policy.
    6. Verify the output in the dataset to ensure fields like uploaderName or downloads are populated as expected.
    7. Download the final results in your preferred format such as JSON or CSV once the run status shows SUCCESS.

    How do you apply it? Three worked playbooks

    These are Nexus Mods Scraper's own documented use cases, each worked through as an operating pattern rather than a description.

    Use case 1: Modding tool integrations

    Outcome: Build mod-list managers, update checkers, or compatibility trackers

    Configure: Set mode to "modFiles", gameDomainName to a slug like "stardewvalley", and input the target modIds.

    Working method: Retrieve the file list for specific mods to extract the version and uploadedAt fields. Compare these values against your local version database on a regular schedule to detect new releases.

    Deliverable: A JSON dataset containing the latest file versions and download stats for a set of mod IDs.

    Stop condition: The run returns zero results for a mod ID that is confirmed to be public on the site.

    Use case 2: Conflict/compatibility checks

    Outcome: Inspect a mod's archive contents (modFileContents) to see exactly which ESP/BSA/texture files it packs before installing

    Configure: Set mode to "modFileContents", gameDomainName to the game slug, and fileExtensionFilter to ".esp".

    Working method: Input the modIds of two mods you wish to compare and examine the filePath fields in the output. Look for overlapping paths or identical file names that indicate potential file overwrites.

    Deliverable: A file listing of archive contents including file paths, sizes, and extensions.

    Stop condition: The fileExtensionFilter yields no results for an archive known to contain those specific extensions.

    Use case 3: Community dashboards

    Outcome: Track a game's most-endorsed or most-downloaded mods over time

    Configure: Set mode to "search", gameDomainName to the game slug, and sortBy to "endorsements".

    Working method: Execute the search mode at set intervals, such as weekly, and capture the endorsements and totalDownloads for the top mods. Compare snapshots to identify trending content.

    Deliverable: A time-series dataset of mod popularity metrics for a specific game catalog.

    Stop condition: The endorsements field returns null or missing values for a top-ranked mod.

    What breaks, and how do you design around it?

    • 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".

    When you hit the restriction on adult-only collection mod lists, remember that these specific lookups are blocked for anonymous requests by the site's API. For tracing unlabeled archives, use the fileHashLookup mode to resolve MD5 checksums back to their source mod records.

    When should you not use Nexus Mods Scraper?

    If you need to scrape open-source Minecraft data specifically, Modrinth Scraper is a more focused alternative for that ecosystem. For those who need to download video content linked in mod media, the TikTok Downloader API is better suited if the source is external to Nexus. This Actor cannot access private modder data or collection mod lists flagged as adult-only, so look elsewhere if those specific non-public fields are required.

    What should you check before trusting the output?

    • Confirm that recordType matches the requested mode, as each mode emits a different schema.
    • Check that modId is present in modFile records to ensure the data is correctly mapped to its parent mod.
    • Monitor for 403 errors on modUrl links, which occur when accessing them with non-browser tools due to site protections.
    • Validate that gameDomainName matches the official slug, otherwise the Actor may return an empty dataset.
    • Alert if the downloads count for a known high-traffic mod remains at zero, indicating a potential change in the source layout.

    None of this proves a record is correct. It gives a scheduled Nexus Mods Scraper run defined points where it should stop instead of quietly passing bad data downstream.

    Frequently asked questions

    What is the cost for 1,000 results?

    At the free-plan price, 1,000 results cost $5.00. Apify's free plan includes a $5.00 monthly usage credit with no credit card required, which covers nearly 1,000 results once the small run-start fee and platform usage are considered. Result charges only apply to items written to the dataset.

    How reliable is this Actor for scheduled tasks?

    The Actor has a 100.0% success rate based on 61 of 61 public runs finishing successfully in the last 30 days. No run failed or timed out during this period, indicating it is a stable choice for automated mod-update checkers or community dashboards.

    Do I need a Nexus Mods account to use this?

    No. This Actor requires no login, API key, or cookies. It retrieves data from public endpoints, allowing you to fetch mod details, file versions, and user profiles without managing any credentials or authentication headers.

    How can I identify an unknown mod file?

    Use the fileHashLookup mode and provide the MD5 hashes of the files you want to identify. The Actor will return every mod and specific file version on Nexus Mods that matches that checksum, making it easy to trace unlabeled archives back to their source.

    How do I find a game's domain name?

    The gameDomainName is the slug found in the game's URL on the site, such as skyrimspecialedition or fallout4. If you don't know the slug, you can run the browseGames mode to get a list of all 4,900+ supported games and their domain names.

    Where to go next

    When you are ready to run it, open Nexus Mods Scraper on Apify; the free plan covers up to 1,000 results a month.

    Start with the Nexus Mods Scraper Actor page for the current input schema, pricing tier, and run history.

    Other Actors we maintain for related data:

    • Modrinth Scraper: Scrape Modrinth â€" the largest open-source Minecraft mod and plugin registry.
    • Hacker News Stories, Comments & Users Scraper: Scrape Hacker News - search stories and comments, fetch top/new/best stories, get user profiles and submission history.
    • Roblox Scraper: Scrape Roblox, search games by keyword, fetch game details by universe ID, browse trending games, search catalog UGC items, and get user profiles with their published games.
    • TikTok Downloader API: Download TikTok videos and their cover thumbnails by URL.

    Related guides:

    Resources

    • Actor documentation, input schema, and pricing: verified against the published Actor on 2026-09-27.

    • Actor last updated by its maintainers on 2026-08-03.

    • Run outcome figures cover the 30 day public window ending 2026-09-27.

    • Nexus Mods Scraper on Apify

    Featured actors

    Nexus Mods Scraper

    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.

    Run on Apify ↗