# OpenSea Collection Scraper (`maximedupre/opensea`) Actor

Use public OpenSea collection URLs or slugs to collect collection stats, NFT items, or activity. Choose one scope or All data, then review structured rows with market values, traits, links, and event details when available.

- **URL**: https://apify.com/maximedupre/opensea.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Developer tools, E-commerce, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $6.75 / 1,000 collection overviews

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

### 🐙 OpenSea collection data for NFT research

OpenSea collection data for NFT researchers, marketplace analysts, and developers. Enter collection URLs or slugs to get collection stats, NFT items, traits, market values, links, and selected activity as structured dataset rows. Use the rows to compare collections, study NFT sales, check floor prices, or build a small data workflow.

**Try these tasks**

- Review [**NFT rarity**](https://apify.com/maximedupre/opensea/examples/nft-rarity) for returned NFT items.
- Track [**NFT sales data**](https://apify.com/maximedupre/opensea/examples/nft-sales-data) from a submitted collection.
- Check the [**NFT floor price**](https://apify.com/maximedupre/opensea/examples/nft-floor-price) in collection market data.
- Inspect an [**NFT collection**](https://apify.com/maximedupre/opensea/examples/nft-collection) through its public reference.
- Explore [**OpenSea NFT art**](https://apify.com/maximedupre/opensea/examples/opensea-nft-art) with item metadata and traits.
- Collect [**OpenSea NFT**](https://apify.com/maximedupre/opensea/examples/opensea-nft) data for a collection.
- Build [**OpenSea NFT marketplace**](https://apify.com/maximedupre/opensea/examples/opensea-nft-marketplace) collection datasets.

#### 📊 OpenSea collection and market data

**What you get**

Each saved row corresponds to one eligible collection reference. It can include collection identity, OpenSea links, market values, trait summaries, NFT items, and activity events. Optional source values stay empty when OpenSea does not provide them, and source errors are kept in `sourceErrors` when available.

For repeated references to the same collection, the first eligible match is saved. Later matches for that collection are ignored, so one saved row does not collect every later match.

#### ▶️ Run an OpenSea collection audit

**How to run it**

1. Choose `Collection overview`, `NFT items`, `Activity`, or `All data` in **Target**.
2. Add one or more public OpenSea collection URLs or slugs.
3. Set the item limit, activity limit, and activity categories when they apply.
4. Start the Actor and open the dataset link in the output.

All submitted collections use the same target and options. Choose `All data` when you want the collection overview, NFT items, and activity in each row.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
|---|---|---|
| `target` | string (choice) | Selects `collectionOverview`, `nftItems`, `activity`, or `combined` (`All data`). |
| `collectionReferences` | array of strings | Adds one or more public OpenSea collection URLs or slugs. The same target and options apply to every reference. |
| `maxItems` | positive integer (optional) | Sets the NFT item count for each collection when the target is `nftItems` or `combined`. Leave it empty to return all available items until the source is exhausted. |
| `maxActivityEvents` | positive integer (optional) | Sets the activity record count for each collection when the target is `activity` or `combined`. Leave it empty to return all available records until the source is exhausted. |
| `activityTypes` | array of strings | Selects `sales`, `listings`, `transfers`, `collectionOffers`, or `traitOffers`. It applies to `Activity` and `All data`; it is ignored for `Collection overview` and `NFT items`. |

**Default input example**

This is the public input from a successful current-beta default-input run.

```json
{
  "target": "collectionOverview",
  "collectionReferences": [
    "pudgypenguins"
  ],
  "activityTypes": [
    "sales",
    "listings",
    "transfers",
    "collectionOffers",
    "traitOffers"
  ]
}
```

#### 🧾 Output

**Output link**

The output schema returns a `dataset` URL. That dataset contains one row for each saved collection. The row shape depends on the selected target.

| Field | Type | What it does |
|---|---|---|
| `dataset` | string | URL for the dataset rows returned for the selected OpenSea collections. |

**Collection overview shape**

This shape contains `collectionReference`, `collection`, `observedAt`, and optional `sourceErrors`. It does not add `nftItems` or `activity`.

| Field | Type | What it does |
|---|---|---|
| `collectionReference` | string | The public OpenSea URL or slug used for the row. |
| `collection` | object | Holds collection identity, links, market data, and trait summaries. |
| `collection.name` | string | The collection name. |
| `collection.slug` | string | The OpenSea collection slug. |
| `collection.url` | string | The public OpenSea collection page. |
| `collection.contractAddress` | string | The collection contract address. |
| `collection.chain` | string | The blockchain that holds the collection. |
| `collection.description` | string | The collection description from OpenSea. |
| `collection.imageUrl` | string | The main collection image URL. |
| `collection.bannerImageUrl` | string | The collection banner image URL. |
| `collection.createdAt` | string | When the collection was created, when provided. |
| `collection.websiteUrl` | string | The collection website URL. |
| `collection.socialLinks` | array of objects | Social and community links for the collection. |
| `collection.socialLinks[].platform` | string | The social or community platform name. |
| `collection.socialLinks[].url` | string | The link on that platform. |
| `collection.market` | object | Market values and counts for the collection. |
| `collection.market.floorPrice` | object | The lowest asking price, when available. |
| `collection.market.floorPrice.amount` | number | The floor price in the named currency. |
| `collection.market.floorPrice.currency` | string | The currency for the floor price. |
| `collection.market.floorPrice.usd` | number | The floor price in US dollars, when available. |
| `collection.market.supply` | integer | The number of items in the collection. |
| `collection.market.totalVolume` | object | The total trading volume, when available. |
| `collection.market.totalVolume.amount` | number | The volume in the named currency. |
| `collection.market.totalVolume.currency` | string | The currency for the volume. |
| `collection.market.totalVolume.usd` | number | The volume in US dollars, when available. |
| `collection.market.totalSales` | integer | The total number of sales, when available. |
| `collection.market.ownerCount` | integer | The number of owners, when available. |
| `collection.market.listedCount` | integer | The number of items listed for sale, when available. |
| `collection.traitSummaries` | array of objects | Collection-wide trait and attribute summaries, when available. |
| `collection.traitSummaries[].traitType` | string | The trait name. |
| `collection.traitSummaries[].values` | array of objects | Values found for the trait. |
| `collection.traitSummaries[].values[].value` | string, number, or boolean | The trait value. |
| `collection.traitSummaries[].values[].itemCount` | integer | The number of items with that value. |
| `collection.traitSummaries[].values[].percentage` | number | The share of collection items with that value, when available. |
| `observedAt` | string | When these OpenSea values were gathered. |
| `sourceErrors` | array of objects (optional) | Source errors or unavailable optional data; valid data stays in the other fields. |
| `sourceErrors[].scope` | string | The affected area: `collection`, `nftItems`, or `activity`. |
| `sourceErrors[].message` | string | A clear source error or unavailable-data note. |

**Example collection overview row**

This genuine current-beta row is shortened: the collection description, social links, and trait summaries use `"..."` as omission markers.

```json
{
  "collectionReference": "pudgypenguins",
  "collection": {
    "name": "Pudgy Penguins",
    "slug": "pudgypenguins",
    "url": "https://opensea.io/collection/pudgypenguins",
    "contractAddress": "0xbd3531da5cf5857e7cfaa92426877b022e612cf8",
    "chain": "ethereum",
    "description": "...",
    "imageUrl": "https://i2c.seadn.io/collection/pudgypenguins/image/f489fb69fd11886b468c0f7ff1376c/cdf489fb69fd11886b468c0f7ff1376c.png",
    "bannerImageUrl": "https://i2c.seadn.io/collection/pudgypenguins/banner/26e3de0f309089cbb1e5ab969fc0bc/8a26e3de0f309089cbb1e5ab969fc0bc.png",
    "createdAt": "2021-07-22T12:48:58.000Z",
    "websiteUrl": "https://www.pudgypenguins.com/",
    "socialLinks": "...",
    "market": {
      "floorPrice": {
        "amount": 3.85499998,
        "currency": "ETH",
        "usd": 7205.4961126174
      },
      "supply": 8888,
      "totalVolume": {
        "amount": 518507.0318483487,
        "currency": "ETH",
        "usd": 1421868389.7623217
      },
      "totalSales": 91559,
      "ownerCount": 5094,
      "listedCount": 247
    },
    "traitSummaries": "..."
  },
  "observedAt": "2026-08-03T19:14:48.360Z"
}
```

**NFT item shape**

This shape contains the collection fields above and adds `nftItems`. Each NFT item can include the following fields.

| Field | Type | What it does |
|---|---|---|
| `collectionReference` | string | The public OpenSea URL or slug used for the row. |
| `collection` | object | The collection object described in the collection overview table. |
| `nftItems` | array of objects | NFT items returned for the collection. |
| `nftItems[].tokenId` | string | The NFT token ID. |
| `nftItems[].contractAddress` | string | The contract address for the NFT. |
| `nftItems[].url` | string | The public OpenSea page for the NFT. |
| `nftItems[].name` | string | The NFT item name. |
| `nftItems[].description` | string | The NFT item description. |
| `nftItems[].imageUrl` | string | The main NFT image URL. |
| `nftItems[].animationUrl` | string | The animation or media URL, when available. |
| `nftItems[].attributes` | array of objects | Traits and attributes for the NFT. |
| `nftItems[].attributes[].traitType` | string | The trait name. |
| `nftItems[].attributes[].value` | string, number, or boolean | The trait value. |
| `nftItems[].attributes[].displayType` | string | The source display type, when available. |
| `nftItems[].rarity` | object | Rarity data, when available. |
| `nftItems[].rarity.rank` | integer | The rarity rank. |
| `nftItems[].rarity.category` | string | The rarity category. |
| `nftItems[].market` | object | Sale, listing, floor, and best-offer data. |
| `nftItems[].market.lastSale` | object | The latest sale, when available. |
| `nftItems[].market.lastSale.price` | object | The latest sale price. |
| `nftItems[].market.lastSale.price.amount` | number | The sale price in the named currency. |
| `nftItems[].market.lastSale.price.currency` | string | The sale currency. |
| `nftItems[].market.lastSale.price.usd` | number | The sale price in US dollars, when available. |
| `nftItems[].market.lastSale.occurredAt` | string | When the latest sale happened, when available. |
| `nftItems[].market.listing` | object | The current listing, when available. |
| `nftItems[].market.listing.price` | object | The listing price. |
| `nftItems[].market.listing.price.amount` | number | The listing price in the named currency. |
| `nftItems[].market.listing.price.currency` | string | The listing currency. |
| `nftItems[].market.listing.price.usd` | number | The listing price in US dollars, when available. |
| `nftItems[].market.listing.expiresAt` | string | When the listing expires, when available. |
| `nftItems[].market.floorPrice` | object | The current collection floor price for the NFT, when available. |
| `nftItems[].market.floorPrice.amount` | number | The floor price in the named currency. |
| `nftItems[].market.floorPrice.currency` | string | The floor price currency. |
| `nftItems[].market.floorPrice.usd` | number | The floor price in US dollars, when available. |
| `nftItems[].market.bestOffer` | object | The best offer for the NFT, when available. |
| `nftItems[].market.bestOffer.price` | object | The best offer price. |
| `nftItems[].market.bestOffer.price.amount` | number | The offer price in the named currency. |
| `nftItems[].market.bestOffer.price.currency` | string | The offer currency. |
| `nftItems[].market.bestOffer.price.usd` | number | The offer price in US dollars, when available. |
| `nftItems[].market.bestOffer.expiresAt` | string | When the offer expires, when available. |
| `nftItems[].owner` | string | The current owner account reference, when available. |
| `nftItems[].createdAt` | string | When the NFT was created, when available. |
| `observedAt` | string | When these OpenSea values were gathered. |
| `sourceErrors` | array of objects (optional) | Source errors or unavailable optional data. |
| `sourceErrors[].scope` | string | The affected area: `collection`, `nftItems`, or `activity`. |
| `sourceErrors[].message` | string | A clear source error or unavailable-data note. |

**Example NFT item row**

This genuine current-beta row is shortened: the full `collection` object is replaced with the omission marker `"..."`; the NFT item values are real.

```json
{
  "collectionReference": "https://opensea.io/collection/pudgypenguins/",
  "collection": "...",
  "nftItems": [
    {
      "tokenId": "4340",
      "contractAddress": "0xbd3531da5cf5857e7cfaa92426877b022e612cf8",
      "url": "https://opensea.io/assets/ethereum/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/4340",
      "name": "Pudgy Penguin #4340",
      "description": "A collection 8888 Cute Chubby Pudgy Penquins sliding around on the freezing ETH blockchain.",
      "imageUrl": "https://i2c.seadn.io/ethereum/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/66cd08e8cd87d4f519a0993add2b5e70.png",
      "attributes": [
        {
          "traitType": "Background",
          "value": "Blue"
        },
        {
          "traitType": "Body",
          "value": "Tank Top Yellow"
        },
        {
          "traitType": "Face",
          "value": "Winking"
        },
        {
          "traitType": "Head",
          "value": "Macaroni"
        },
        {
          "traitType": "Skin",
          "value": "Maroon"
        }
      ],
      "rarity": {
        "rank": 6846,
        "category": "NONE"
      },
      "market": {
        "listing": {
          "price": {
            "amount": 3.85499998,
            "currency": "ETH",
            "usd": 7205.0720626196
          },
          "expiresAt": "2026-08-03T19:20:25.000Z"
        },
        "floorPrice": {
          "amount": 3.85499998,
          "currency": "ETH",
          "usd": 7205.0720626196
        },
        "bestOffer": {
          "price": {
            "amount": 3.76,
            "currency": "WETH",
            "usd": 7035.4864
          }
        }
      },
      "owner": "0x29469395eaf6f95920e59f858042f0e28d98a20b",
      "createdAt": "2021-07-22T20:09:48.000Z"
    }
  ],
  "observedAt": "2026-08-03T19:14:45.957Z"
}
```

**Activity shape**

This shape contains the collection fields above and adds `activity`. The `type` value is one of `sales`, `listings`, `transfers`, `collectionOffers`, or `traitOffers`.

| Field | Type | What it does |
|---|---|---|
| `collectionReference` | string | The public OpenSea URL or slug used for the row. |
| `collection` | object | The collection object described in the collection overview table. |
| `activity` | array of objects | Sales, listings, transfers, and offer events for the collection. |
| `activity[].type` | string | The activity category. |
| `activity[].occurredAt` | string | When the activity happened, when available. |
| `activity[].item` | object | The linked NFT item, when available. |
| `activity[].item.tokenId` | string | The NFT token ID. |
| `activity[].item.contractAddress` | string | The NFT contract address. |
| `activity[].item.url` | string | The public OpenSea page for the NFT. |
| `activity[].accounts` | object | Accounts involved in the event, when available. |
| `activity[].accounts.from` | string | The account that sent or owned the NFT before the event. |
| `activity[].accounts.to` | string | The account that received or owns the NFT after the event. |
| `activity[].accounts.seller` | string | The seller account. |
| `activity[].accounts.buyer` | string | The buyer account. |
| `activity[].accounts.offerer` | string | The account that made the offer. |
| `activity[].accounts.recipient` | string | The account that receives the NFT or payment. |
| `activity[].offerCriteria` | object | The item or trait rules for an offer, when available. |
| `activity[].offerCriteria.kind` | string | The offer rule kind: `collection`, `trait`, or `item`. |
| `activity[].offerCriteria.traitType` | string | The trait name in a trait offer. |
| `activity[].offerCriteria.value` | string, number, or boolean | The trait value in a trait offer. |
| `activity[].offerCriteria.tokenId` | string | The NFT token ID in an item offer. |
| `activity[].payment` | object | The payment value and currency, when available. |
| `activity[].payment.amount` | number | The payment in the named currency. |
| `activity[].payment.currency` | string | The payment currency. |
| `activity[].payment.usd` | number | The payment in US dollars, when available. |
| `activity[].transactionHash` | string | The blockchain transaction hash, when available. |
| `observedAt` | string | When these OpenSea values were gathered. |
| `sourceErrors` | array of objects (optional) | Source errors or unavailable optional data. |
| `sourceErrors[].scope` | string | The affected area: `collection`, `nftItems`, or `activity`. |
| `sourceErrors[].message` | string | A clear source error or unavailable-data note. |

**Example activity row**

This genuine current-beta row is shortened: the full `collection` object is replaced with `"..."`; the sales event and public account values are real.

```json
{
  "collectionReference": "pudgypenguins",
  "collection": "...",
  "activity": [
    {
      "type": "sales",
      "occurredAt": "2026-08-03T19:10:59.000Z",
      "item": {
        "tokenId": "8365",
        "contractAddress": "0xbd3531da5cf5857e7cfaa92426877b022e612cf8",
        "url": "https://opensea.io/assets/ethereum/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/8365"
      },
      "accounts": {
        "from": "0x6d56bc42d7330360f0f4ad3126cd96e712751720",
        "to": "0xa1c6b7d556bb56408bb3991d29a5e574e10dfe48",
        "seller": "0x6d56bc42d7330360f0f4ad3126cd96e712751720",
        "buyer": "0xa1c6b7d556bb56408bb3991d29a5e574e10dfe48"
      },
      "transactionHash": "0xe1eaf5799fa174dceca83a41ba9eca34383a0d61bd27904cd767af59e608175c"
    }
  ],
  "observedAt": "2026-08-03T19:14:28.696Z"
}
```

**All data shape**

This shape combines the complete collection, NFT item, and activity fields above. It returns `collectionReference`, `collection`, `nftItems`, `activity`, `observedAt`, and optional `sourceErrors` in one row.

| Field | Type | What it does |
|---|---|---|
| `collectionReference` | string | The public OpenSea URL or slug used for the row. |
| `collection` | object | The collection identity, links, market data, and trait summaries described above. |
| `nftItems` | array of objects | NFT items returned for the collection. |
| `nftItems[].tokenId` | string | The NFT token ID. |
| `nftItems[].contractAddress` | string | The NFT contract address. |
| `nftItems[].url` | string | The public OpenSea page for the NFT. |
| `nftItems[].name` | string | The NFT item name. |
| `nftItems[].description` | string | The NFT item description. |
| `nftItems[].imageUrl` | string | The main NFT image URL. |
| `nftItems[].animationUrl` | string | The animation or media URL, when available. |
| `nftItems[].attributes` | array of objects | Traits and attributes for the NFT. |
| `nftItems[].attributes[].traitType` | string | The trait name. |
| `nftItems[].attributes[].value` | string, number, or boolean | The trait value. |
| `nftItems[].attributes[].displayType` | string | The source display type, when available. |
| `nftItems[].rarity` | object | Rarity data, when available. |
| `nftItems[].rarity.rank` | integer | The rarity rank. |
| `nftItems[].rarity.category` | string | The rarity category. |
| `nftItems[].market` | object | Sale, listing, floor, and best-offer data. |
| `nftItems[].market.lastSale` | object | The latest sale, when available. |
| `nftItems[].market.lastSale.price` | object | The latest sale price. |
| `nftItems[].market.lastSale.price.amount` | number | The sale price in the named currency. |
| `nftItems[].market.lastSale.price.currency` | string | The sale currency. |
| `nftItems[].market.lastSale.price.usd` | number | The sale price in US dollars, when available. |
| `nftItems[].market.lastSale.occurredAt` | string | When the latest sale happened, when available. |
| `nftItems[].market.listing` | object | The current listing, when available. |
| `nftItems[].market.listing.price` | object | The listing price. |
| `nftItems[].market.listing.price.amount` | number | The listing price in the named currency. |
| `nftItems[].market.listing.price.currency` | string | The listing currency. |
| `nftItems[].market.listing.price.usd` | number | The listing price in US dollars, when available. |
| `nftItems[].market.listing.expiresAt` | string | When the listing expires, when available. |
| `nftItems[].market.floorPrice` | object | The collection floor price for the NFT, when available. |
| `nftItems[].market.floorPrice.amount` | number | The floor price in the named currency. |
| `nftItems[].market.floorPrice.currency` | string | The floor price currency. |
| `nftItems[].market.floorPrice.usd` | number | The floor price in US dollars, when available. |
| `nftItems[].market.bestOffer` | object | The best offer for the NFT, when available. |
| `nftItems[].market.bestOffer.price` | object | The best offer price. |
| `nftItems[].market.bestOffer.price.amount` | number | The offer price in the named currency. |
| `nftItems[].market.bestOffer.price.currency` | string | The offer currency. |
| `nftItems[].market.bestOffer.price.usd` | number | The offer price in US dollars, when available. |
| `nftItems[].market.bestOffer.expiresAt` | string | When the offer expires, when available. |
| `nftItems[].owner` | string | The current owner account reference, when available. |
| `nftItems[].createdAt` | string | When the NFT was created, when available. |
| `activity` | array of objects | Sales, listings, transfers, and offer events for the collection. |
| `activity[].type` | string | The activity category. |
| `activity[].occurredAt` | string | When the activity happened, when available. |
| `activity[].item` | object | The linked NFT item, when available. |
| `activity[].item.tokenId` | string | The NFT token ID. |
| `activity[].item.contractAddress` | string | The NFT contract address. |
| `activity[].item.url` | string | The public OpenSea page for the NFT. |
| `activity[].accounts` | object | Accounts involved in the event, when available. |
| `activity[].accounts.from` | string | The account that sent or owned the NFT before the event. |
| `activity[].accounts.to` | string | The account that received or owns the NFT after the event. |
| `activity[].accounts.seller` | string | The seller account. |
| `activity[].accounts.buyer` | string | The buyer account. |
| `activity[].accounts.offerer` | string | The account that made the offer. |
| `activity[].accounts.recipient` | string | The account that receives the NFT or payment. |
| `activity[].offerCriteria` | object | The item or trait rules for an offer, when available. |
| `activity[].offerCriteria.kind` | string | The offer rule kind: `collection`, `trait`, or `item`. |
| `activity[].offerCriteria.traitType` | string | The trait name in a trait offer. |
| `activity[].offerCriteria.value` | string, number, or boolean | The trait value in a trait offer. |
| `activity[].offerCriteria.tokenId` | string | The NFT token ID in an item offer. |
| `activity[].payment` | object | The payment value and currency, when available. |
| `activity[].payment.amount` | number | The payment in the named currency. |
| `activity[].payment.currency` | string | The payment currency. |
| `activity[].payment.usd` | number | The payment in US dollars, when available. |
| `activity[].transactionHash` | string | The blockchain transaction hash, when available. |
| `observedAt` | string | When these OpenSea values were gathered. |
| `sourceErrors` | array of objects (optional) | Source errors or unavailable optional data. |
| `sourceErrors[].scope` | string | The affected area: `collection`, `nftItems`, or `activity`. |
| `sourceErrors[].message` | string | A clear source error or unavailable-data note. |

**Example All data row**

This genuine current-beta row is shortened: the full `collection` object is replaced with `"..."`; the NFT and activity values are real.

```json
{
  "collectionReference": "pudgypenguins",
  "collection": "...",
  "nftItems": [
    {
      "tokenId": "4340",
      "contractAddress": "0xbd3531da5cf5857e7cfaa92426877b022e612cf8",
      "url": "https://opensea.io/assets/ethereum/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/4340",
      "name": "Pudgy Penguin #4340",
      "description": "A collection 8888 Cute Chubby Pudgy Penquins sliding around on the freezing ETH blockchain.",
      "imageUrl": "https://i2c.seadn.io/ethereum/0xbd3531da5cf5857e7cfaa92426877b022e612cf8/66cd08e8cd87d4f519a0993add2b5e70.png",
      "attributes": [
        {
          "traitType": "Background",
          "value": "Blue"
        },
        {
          "traitType": "Body",
          "value": "Tank Top Yellow"
        },
        {
          "traitType": "Face",
          "value": "Winking"
        },
        {
          "traitType": "Head",
          "value": "Macaroni"
        },
        {
          "traitType": "Skin",
          "value": "Maroon"
        }
      ],
      "rarity": {
        "rank": 6846,
        "category": "NONE"
      },
      "market": {
        "listing": {
          "price": {
            "amount": 3.85499998,
            "currency": "ETH",
            "usd": 7205.4961126174
          },
          "expiresAt": "2026-08-03T19:20:25.000Z"
        },
        "floorPrice": {
          "amount": 3.85499998,
          "currency": "ETH",
          "usd": 7205.4961126174
        },
        "bestOffer": {
          "price": {
            "amount": 3.76,
            "currency": "WETH",
            "usd": 7028.4928
          }
        }
      },
      "owner": "0x29469395eaf6f95920e59f858042f0e28d98a20b",
      "createdAt": "2021-07-22T20:09:48.000Z"
    }
  ],
  "activity": [
    {
      "type": "traitOffers",
      "occurredAt": "2026-08-03T19:14:45.527Z",
      "accounts": {
        "from": "0xf76246b0842c92ad5bd745973ca9eb85b937b126",
        "offerer": "0xf76246b0842c92ad5bd745973ca9eb85b937b126"
      },
      "payment": {
        "amount": 3.73,
        "currency": "WETH",
        "usd": 6979.3522
      },
      "offerCriteria": {
        "kind": "trait",
        "traitType": "Head",
        "value": "Viking Helmet"
      }
    }
  ],
  "observedAt": "2026-08-03T19:14:48.360Z"
}
```

#### 💳 Pricing

**Charged events**

Pay-per-event pricing applies to the successful saved events below. The Store shows the current price for your tier.

| Event | What it charges for |
|---|---|
| `collection-overview` | One collection overview saved with identity and available market statistics. |
| `nft-item-record` | One NFT item saved with identity and available market data. |
| `collection-activity-event` | One activity event saved with its type and any available token, account, offer, or payment data. |

#### 🔌 Integrations

**Apify workflows**

Start runs with the Apify API, read the dataset URL from the output, schedule repeat runs, or connect finished datasets to supported Apify integrations.

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

#### ❓ FAQ

##### Which target should I choose?

Choose `Collection overview` for collection identity, links, market data, and trait summaries. Choose `NFT items` for NFT records, `Activity` for sales, listings, transfers, or offers, and `All data` for all three areas in one row.

##### Can I submit a collection URL or a slug?

Yes. Add one or more public OpenSea collection URLs or slugs in `collectionReferences`.

##### What happens when an item or activity limit is empty?

The Actor returns all available items or activity records until the source is exhausted. The limits apply separately to each collection.

##### Can one run cover more than one collection?

Yes. Add multiple references. The same target and options are used for every reference.

##### Does `All data` include every output area?

Yes. `All data` returns the collection overview, NFT items, and activity for each collection.

##### Will every NFT or historical event be returned?

Not always. The Actor returns data made available by OpenSea during the run. It does not promise every NFT, every historical event, or every optional field.

##### What happens when OpenSea does not provide a value?

Optional values can be missing. Valid fields stay in the row, and the Actor can add a source error or unavailable-data note in `sourceErrors`.

##### Can I use this for a wallet or another marketplace?

No. Runs use submitted OpenSea collection references. Wallet portfolio analysis, private or account-authenticated data, trading, minting, blockchain transaction execution, and unrelated marketplaces are outside this Actor's scope.

### 📝 Changelog

**0.0: Initial release**

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~opensea/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- **[Etherscan Scraper](https://apify.com/maximedupre/etherscan-scraper)** — Compare Ethereum holder, gas, and token leaderboard data with NFT collection research.
- **[GMGN Wallet Activity Scraper](https://apify.com/maximedupre/gmgn-wallet-activity-scraper)** — Track public wallet trades, transfers, and liquidity activity around NFT market research.
- **[Opensea Collection Data Scraper](https://apify.com/argusapi/opensea-collection-data-scraper)** — Collect OpenSea collection volume, floor, and social-link data.
- **[Opensea Collection Activity Scraper](https://apify.com/argusapi/opensea-collection-activity-scraper)** — Collect sales, listings, transfers, and offer events from a collection.
- **[OpenSea NFT Collection Scraper](https://apify.com/lulzasaur/opensea-scraper)** — Export NFT collection metadata, token IDs, prices, traits, and rarity ranks.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

## `target` (type: `string`):

Choose what OpenSea data to return for each collection. All data includes the collection overview, NFT items, and activity.

## `collectionReferences` (type: `array`):

Add one or more public OpenSea collection URLs or slugs. The same target and options are used for every reference.

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

Optional number of NFT items to return for each collection. Leave this empty to return all available items until the source is exhausted. Used for NFT items and All data.

## `maxActivityEvents` (type: `integer`):

Optional number of activity records to return for each collection. Leave this empty to return all available records until the source is exhausted. Used for Activity and All data.

## `activityTypes` (type: `array`):

Choose activity categories for Activity and All data. All five categories are selected by default. This field is ignored for Collection overview and NFT items.

## Actor input object example

```json
{
  "target": "collectionOverview",
  "collectionReferences": [
    "pudgypenguins"
  ],
  "activityTypes": [
    "sales",
    "listings",
    "transfers",
    "collectionOffers",
    "traitOffers"
  ]
}
```

# Actor output Schema

## `dataset` (type: `string`):

URL for the dataset rows returned for the selected OpenSea collections.

# 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 = {
    "target": "collectionOverview",
    "collectionReferences": [
        "pudgypenguins"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/opensea").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 = {
    "target": "collectionOverview",
    "collectionReferences": ["pudgypenguins"],
}

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/opensea").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "target": "collectionOverview",
  "collectionReferences": [
    "pudgypenguins"
  ]
}' |
apify call maximedupre/opensea --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=maximedupre/opensea",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/7yhyg6V0mRfbm903Y/builds/frneOYfVXMKnSb1jJ/openapi.json
