# MyCardPost Graded Card Marketplace Scraper (`maximedupre/mycardpost`) Actor

Collect public MyCardPost graded and raw trading-card listings with card details, grades, asking prices, sellers, statuses, and image URLs. Filter by category, card details, grading, price, and listing status, then review structured dataset rows.

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

## Pricing

$0.90 / 1,000 card listings

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### 🃏 MyCardPost card listings for research

For card collectors, resellers, marketplace researchers, and developers, this Actor collects public MyCardPost graded and raw trading-card listings. It saves card details, grades, asking prices, seller names, listing status, and image URLs as structured dataset rows so you can compare listings and review a card market in one place.

- Collect [**Trading card listings**](https://apify.com/maximedupre/mycardpost/examples/trading-card-listings) for a broad marketplace view.
- Find [**PSA 10 cards**](https://apify.com/maximedupre/mycardpost/examples/psa-10-cards) with a specific grade filter.
- Review [**Pokemon cards**](https://apify.com/maximedupre/mycardpost/examples/pokemon-cards) from one marketplace category.
- Check [**Sold baseball cards**](https://apify.com/maximedupre/mycardpost/examples/sold-baseball-cards) with the source-published sold status.
- Find [**Cheap baseball cards**](https://apify.com/maximedupre/mycardpost/examples/cheap-baseball-cards) by setting a maximum asking price.
- Search for [**Mike Trout cards**](https://apify.com/maximedupre/mycardpost/examples/mike-trout-cards) with card detail text.

#### 📦 MyCardPost listing data

Each saved row represents the first eligible occurrence of one public MyCardPost listing. If the same source listing appears again through another submitted value, later matches are ignored. The saved row reflects the first match and does not combine later matches.

Rows always include the listing ID, direct detail-page URL, and card title and category. They can also include the year, set, player, subject, variation, listing status, seller description, grading details, asking price, seller name, and image URLs when the public listing provides them.

#### ▶️ Run a MyCardPost listing search

Choose one marketplace category or leave it empty to include all categories. Add card, grading, grade, price, and listing-status filters when you want a narrower collection. Leave Maximum results empty to return all available results until the source is exhausted. The Actor reads public MyCardPost pages and does not need a MyCardPost login or source credentials.

#### ⚙️ Input

**Input fields**

| Field | Type | What it does |
|---|---|---|
| `category` | string | Includes listings from one supported MyCardPost sport or marketplace category. Leave it empty to include all categories. |
| `card` | string | Matches card details such as a title, player, subject, set, year, or variation. Leave it empty to include all card details. |
| `gradingCompany` | string | Includes only listings with the published grading company you enter. Leave it empty to include all companies. |
| `grade` | string | Includes only listings with the published grade you enter. Leave it empty to include all grades. |
| `minPrice` | number | Sets the lowest asking price to include. Leave it empty for no lower limit. |
| `maxPrice` | number | Sets the highest asking price to include. Leave it empty for no upper limit. |
| `listingStatus` | string | Includes a source-published status such as `active` or `sold`. Leave it empty to include all available statuses. |
| `maxItems` | integer | Stops after this many listings. Leave it empty to return all available results until the source is exhausted. |

**Example input**

This is the smallest successful common input from the current-beta QA runs:

```json
{
  "maxItems": 20
}
```

#### 🧾 Output

**Run output**

| Field | Type | What it does |
|---|---|---|
| `dataset` | string (URL) | Opens the collected listing rows in the default dataset overview. |

**Dataset row fields**

Every dataset row uses this shape. Optional fields are present when the public listing provides the related value.

| Field | Type | What it does |
|---|---|---|
| `listingId` | string (required) | Identifies the listing as published by MyCardPost. |
| `detailUrl` | string (URL, required) | Links to the direct MyCardPost detail page. |
| `card` | object (required) | Contains the card identity and classification fields. |
| `card.title` | string (required) | Gives the card title published on the listing. |
| `card.category` | string (required) | Gives the sport or marketplace category published for the card. |
| `card.year` | string | Gives the card year or year range when published. |
| `card.set` | string | Gives the card set when published. |
| `card.player` | string | Gives the player name when published. |
| `card.subject` | string | Gives the subject name when the card is not tied to a player. |
| `card.variation` | string | Gives the card variation when published. |
| `status` | string | Gives the listing state published by MyCardPost, such as `active` or `sold`. |
| `description` | string | Gives the seller-written listing description when published. |
| `grading` | object | Contains the published grading company and grade when available. |
| `grading.company` | string | Gives the grading company published on the listing. |
| `grading.grade` | string | Gives the grade published on the listing. |
| `price` | object | Contains the published asking price when available. |
| `price.amount` | number (required in `price`) | Gives the asking price amount. |
| `price.currency` | string | Gives the currency for the asking price. |
| `seller` | object | Contains the published seller identity when available. |
| `seller.name` | string (required in `seller`) | Gives the seller name published on the listing. |
| `images` | object | Contains the published card image URLs when available. |
| `images.primaryUrl` | string (URL) | Links to the primary card image. |
| `images.galleryUrls` | string\[] | Lists the other card image URLs. |

**Example listing row**

This unshortened row is copied from the successful current-beta run that used `category`, `card`, and `gradingCompany` filters:

```json
{
  "listingId": "1165130",
  "detailUrl": "https://mycardpost.com/marketplace/pokemon/2022-pokemon-hisuian-typhlosion-v-308s-p-sword-shield-promos-common-holo-japanese-championship-series-2023-winner-p/1165130",
  "card": {
    "title": "2022 Pokemon—Hisuian Typhlosion V #308/S-P Sword & Shield Promos—Common Holo Japanese (Championship Series 2023 Winner P",
    "category": "Pokemon",
    "year": "2022",
    "variation": "Common Holo Japanese (Championship Series 2023 Winner P"
  },
  "status": "active",
  "description": "2022 Pokémon Japanese Sword & Shield Promos Hisuian Typhlosion V holo card #308/S-P, graded PSA 10. This Championship Series 2023 Winner Prize issue is part of the Sword & Shield Promos set and is a Japanese-language Pokémon card with a common rarity designation. PSA population is 330 with 0 higher, and the certification number is 139711814.",
  "grading": {
    "company": "PSA",
    "grade": "10"
  },
  "price": {
    "amount": 87.62,
    "currency": "USD"
  },
  "seller": {
    "name": "Mascot"
  },
  "images": {
    "primaryUrl": "https://cdn.mycardpost.com/frontend/card/u5f568558bcef65a12c79693eaadaad5e.png",
    "galleryUrls": [
      "https://cdn.mycardpost.com/frontend/card/u67fba4c060ba22c6d82149011a4a0610.jpg",
      "https://cdn.mycardpost.com/frontend/card_new/u5f568558bcef65a12c79693eaadaad5e.png",
      "https://cdn.mycardpost.com/frontend/card_new/u67fba4c060ba22c6d82149011a4a0610.jpg"
    ]
  }
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. One graded or raw card listing is charged when it is successfully saved to the dataset. The Store pricing panel shows the current price for the event.

#### 🔌 Integrations

Run the Actor in Apify Console or through the Apify API, then open the linked dataset to read or export the structured listing rows.

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

#### ❓ FAQ

##### Which listings can I collect?

The Actor collects public graded and raw trading-card listings from MyCardPost. Choose one supported category or leave the category empty to include all categories.

##### Can I filter by card details, grading, price, and status?

Yes. Use `card`, `gradingCompany`, `grade`, `minPrice`, `maxPrice`, and `listingStatus` to narrow one collection.

##### What happens when I leave Maximum results empty?

The Actor returns all available results until the source is exhausted. Set Maximum results when you want a cap.

##### Does this collect COMC cards?

No. This Actor reads public MyCardPost listings. It is not a COMC collector.

##### Does this provide a card valuation or authentication?

No. It returns source-published listing details and asking prices when available. It does not appraise, authenticate, or grade cards, and it does not calculate completed-sale values.

##### Why are some fields missing from a row?

MyCardPost does not publish every detail for every listing. Optional fields stay unfilled when the source does not provide them.

##### How are duplicate listings handled?

The Actor saves the first eligible occurrence of a listing and ignores later matches for that same source listing. The saved row reflects the first match and does not merge later matches.

### 📝 Changelog

**v0.0** (21-09-2026)

- Initial release.

### 🆘 Support

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

### 🔗 Related Actors

- [Facebook Marketplace Listings](https://apify.com/maximedupre/facebook-marketplace-listings): Collect public marketplace listing IDs, prices, locations, availability, and images for local offer research.
- [Whatnot Seller Scraper](https://apify.com/maximedupre/whatnot): Compare public Whatnot trading card listings, sellers, prices, and source URLs.
- [eBay Seller Scraper](https://apify.com/maximedupre/ebay-seller-scraper): Review public seller profiles, active listing snippets, feedback summaries, and item prices.
- [Allegro Scraper for Prices, Sellers, and Specs](https://apify.com/maximedupre/allegro-scraper): Collect public marketplace listing prices, seller data, images, and product parameters.
- [Reverb Sold Listings](https://apify.com/maximedupre/reverb-sold-listings): Compare historical sold musical-gear listings with prices, sellers, conditions, and source links.

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

# Actor input Schema

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

Enter one supported MyCardPost sport or marketplace category. Leave it empty to collect listings from all categories.

## `card` (type: `string`):

Enter card details to match, such as the title, player, subject, set, year, or variation. Leave it empty to include all card details.

## `gradingCompany` (type: `string`):

Enter a grading company to include only listings with that published grading company. Leave it empty to include all companies.

## `grade` (type: `string`):

Enter a published grade to include only listings with that grade. Leave it empty to include all grades.

## `minPrice` (type: `number`):

Enter the lowest asking price to include. Leave it empty for no lower limit.

## `maxPrice` (type: `number`):

Enter the highest asking price to include. Leave it empty for no upper limit.

## `listingStatus` (type: `string`):

Choose a source-published listing status, such as active or sold. Leave it empty to include all available statuses.

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

Stop after this many listings. Leave it empty to return all available results until the source is exhausted.

## Actor input object example

```json
{
  "maxItems": 20
}
```

# Actor output Schema

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

Listings collected from MyCardPost.

# 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 = {
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("maximedupre/mycardpost").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 = { "maxItems": 20 }

# Run the Actor and wait for it to finish
run = client.actor("maximedupre/mycardpost").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 '{
  "maxItems": 20
}' |
apify call maximedupre/mycardpost --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,maximedupre/mycardpost"
        }
    }
}
```

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/pU9JGuFRZAZBhmQZj/builds/kOrgGgUcIKfBIwywY/openapi.json
