# Scryfall Card Rulings Scraper (`parseforge/scryfall-card-rulings-scraper`) Actor

Fetch Magic the Gathering card rulings from Scryfall's API. For each card matching your search query, the scraper collects card name, set code, set name, card number, image URL, and all rulings with date, text, and source. Ideal for MTG deck builders and rules researchers.

- **URL**: https://apify.com/parseforge/scryfall-card-rulings-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Games
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.62 / 1,000 results

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

[![ParseForge](https://raw.githubusercontent.com/ParseForge/apify-assets/main/banner.jpg)](https://apify.com/parseforge?fpr=vmoqkp)

> **Unofficial.** This Actor is not affiliated with, endorsed by, or sponsored by Scryfall, Inc. It collects publicly available data only.

This actor collects official card rulings from Scryfall for Magic: The Gathering cards. It provides structured data including ruling text, date, and source for each card matching your search criteria.

Enter a search query to find cards from Scryfall's database, then the actor fetches rulings for each card using the Scryfall API. You can limit the number of cards processed with the maxItems setting. Free users get a preview of up to 10 items; paid users can set a maximum of 1,000,000 cards.

[**Open the input and run it**](https://apify.com/parseforge/scryfall-card-rulings-scraper/input?fpr=vmoqkp). Paste a search query (e.g., 'cmc>0'), set the max items, and the first rulings appear in under a minute.

| Target Audience | Primary Use Cases |
|---|---|
| MTG players, deck builders, tournament organizers, judges, content creators, collectors | Verify card rulings, check oracle text for interactions, prepare tournament rulings references, build a personal rulings database, analyze rule changes over time |

Jump to: [Data fields](#scryfall-data-fields) · [How to scrape](#how-to-scrape-scryfall) · [Use cases](#scryfall-data-use-cases) · [API](#use-this-scryfall-scraper-as-an-api) · [Troubleshooting](#troubleshooting) · [FAQ](#scryfall-scraper-faq)

***

### What the Scryfall Card Rulings Scraper does

- **Search and scrape**: Enter a query to find cards, then the actor fetches rulings for each card up to the limit.

***

### Scryfall Data Fields

Export to CSV, Excel, JSON or XML from the Dataset tab, or pull them straight from the API.

| Field group | Included data |
|---|---|
| Content | `rulingText` |
| Author and source | `rulingSource` |
| Media | `imageUrl` |
| Time | `rulingDate`, `scrapedAt` |
| Other | `name`, `cardUrl`, `setName`, `cardNumber` |

#### Sample record

```json
{
  "imageUrl": "https://cards.scryfall.io/png/front/d/e/de7a150b-1b0d-4928-a2cc-80a4b7412350.png?1783904837",
  "name": "Aang, Airbending Master",
  "cardUrl": "https://scryfall.com/card/tle/74/aang-airbending-master?utm_source=api",
  "setName": "Avatar: The Last Airbender Eternal",
  "cardNumber": "74",
  "rulingDate": "2025-10-02",
  "rulingText": "Since you are using an alternative cost to cast a spell from exile this way, you can't pay any other alternative costs. You can, however, pay additional costs, such as kicker costs. If the card has any mandatory additional costs, you must pay those.",
  "rulingSource": "wotc",
  "scrapedAt": "2026-08-10T05:55:40.286Z"
}
```

Abridged to the fields most people use.

***

### What this Scryfall scraper does not do

- **Single-threaded API calls.** The actor makes sequential requests to the Scryfall API for each card. Large sets may take time; consider reducing maxItems.
- **No historical rulings beyond the API.** The actor only retrieves rulings available through Scryfall's public API. It does not scrape the site for additional rulings.
- **Card count limit, not ruling count.** The maxItems limits the number of cards processed. Each card can have multiple rulings, and the output includes all rulings for those cards.
- **Free user preview limit.** Free accounts are restricted to a maximum of 10 items (cards). Full access requires a paid plan.
- **English rulings only.** Scryfall's API provides rulings in English. Translations are not available.

***

### Why choose this Scryfall scraper

|  | Capability |
|---|---|
| Ruling text | The official wording of each ruling as provided by Wizards of the Coast or judges. |
| Publish date | The date when the ruling was released or updated. |
| Source | Indicates whether the ruling came from an official FAQ, a judge forum, or another source. |

***

### How to Scrape Scryfall

1. **Sign up.** [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. **Open the Actor.** Go to the [Scryfall Card Rulings Scraper](https://apify.com/parseforge/scryfall-card-rulings-scraper?fpr=vmoqkp) page.
3. **Set your input.** Paste a search query (e.g., 'cmc>0'), set the max items, and the first rulings appear in under a minute.
4. **Run it, then download.** Results appear in the Dataset tab as CSV, Excel, JSON or XML.

**A first run with the defaults**

```json
{
  "searchQuery": "cmc>0",
  "maxItems": 10
}
```

**A larger pull**

```json
{
  "searchQuery": "cmc>0",
  "maxItems": 200
}
```

***

### Scryfall Data Use Cases

#### Verify a card's current ruling before a tournament

A judge enters the card name as the search query, sets maxItems to 1, and reads the ruling text and source fields. The decision it supports: whether a card interaction works as ruled.

#### Check rulings for multiple cards in a deck

A deck builder uses a query like 'o:draw o:card' to find cards with draw abilities, sets maxItems to 50, and reviews all rulings for those cards. The decision it supports: which cards to include based on official interactions.

#### Create a rulings reference for a set release

A content creator uses a query like 'set:m21' to get all cards from a set, sets maxItems to 300, and exports all rulings for an article. The decision it supports: what rulings to highlight for players adjusting to new mechanics.

#### Analyze rule changes across card reprints

A rules researcher uses a query for a specific card like 'Tarmogoyf', sets maxItems to 10, and compares ruling dates and texts to track changes over time. The decision it supports: understanding how the card's interaction was updated.

***

### Beyond business use cases

- **Research.** Track how rulings evolve across sets or card reprints for academic or game design study.
- **Journalism.** Write articles about controversial rulings or rule changes with verified data.
- **Public interest.** Help casual players understand card interactions without visiting the Scryfall site.
- **Side projects.** Build a personal rulings lookup app or a Discord bot that answers ruling questions.

***

### Use This Scryfall Scraper as an API

Call it from anything that can send an HTTP request. This returns the dataset in the same response:

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/parseforge~scryfall-card-rulings-scraper/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{ "searchQuery": "cmc>0", "maxItems": 10 }'
```

`$APIFY_TOKEN` is your Apify API token, from Settings in the console. For larger jobs, start the run asynchronously and collect results with a webhook. Client libraries exist for Node.js and Python as `apify-client`, and the full reference is in the [Apify API documentation](https://docs.apify.com/api/v2).

Save a tested input as an Apify Task and attach a [schedule](https://docs.apify.com/platform/schedules) for recurring collection.

***

### Troubleshooting

**I see 'No results found' after running the actor.** Check your search query syntax. Scryfall uses specific operators (e.g., 'o:draw' for oracle text). Make sure the query returns cards on Scryfall's site.

**The actor finishes quickly but the dataset is empty.** Your query may match no cards, or the cards found have no rulings. Try a different query like 'cmc=1' to confirm the search works.

**I get an error: 'Request timed out'.** Scryfall is temporarily slow or your network is unstable. Retry with a smaller maxItems. If the issue persists, contact support.

**The output shows cards but no rulings even though Scryfall lists rulings for them.** Some cards have rulings that are only available through the Scryfall website, not the API. The actor relies on the API; if a ruling is missing on the API, it won't appear.

**I'm a free user and get only 10 items, but I need more.** Free accounts are limited to 10 items for preview. Upgrade to a paid plan to increase the maxItems limit.

**Something else.** Open an issue with the run ID, your input with any secrets removed, what you expected and what came back, or email parseforge@protonmail.com.

***

### Scryfall Scraper FAQ

**Can I use this actor for non-MTG cards or other games?** No, this actor is specifically for Magic: The Gathering cards on Scryfall. It will not work for other TCGs or games.

**How many rulings can I get in one run?** The maxItems limit applies to the number of cards, not rulings. Each card can have zero or more rulings. You can set maxItems up to 1,000,000 for paid users.

**What happens if a card has no rulings?** The actor still creates a record for the card but the rulings array will be empty. You will see the card details but no ruling entries.

**Does it support different languages or translations?** Scryfall's rulings API returns English text only. There is no language filter.

**Is the actor rate-limited by Scryfall?** Scryfall allows up to 10 requests per second. The actor stays within this limit, so you should not get blocked.

**Can I use it for bulk data extraction of all rulings?** Yes, but with the 1,000,000 card limit you can cover a large portion of the database. For the entire set of cards (about 70,000+), a single run with high maxItems should suffice.

**What should I enter as the search query to get all cards?** Use a broad query like 'cmc>0' or 'game:paper' to include most cards. Check Scryfall's search syntax for more options.

**Is there a way to get rulings for a specific card ID instead of a search?** Not directly. The actor uses your search query to find cards first. If you need a specific card, use its name exactly as the query.

***

### Integrate with any app

Connects to any cloud service through [Apify integrations](https://apify.com/integrations):

- [Make](https://docs.apify.com/platform/integrations/make): multi-step automations
- [Zapier](https://docs.apify.com/platform/integrations/zapier): 5,000+ apps
- [Slack](https://docs.apify.com/platform/integrations/slack): run notifications
- [Airbyte](https://docs.apify.com/platform/integrations/airbyte): pipe rows into a warehouse
- [GitHub](https://docs.apify.com/platform/integrations/github): trigger runs from commits
- [Google Drive](https://docs.apify.com/platform/integrations/drive): export straight to Sheets

***

### Related Scryfall Actors

- [mtg-card-prices-scraper](https://apify.com/parseforge/mtg-card-prices-scraper?fpr=vmoqkp): Use this if you need card prices and market data instead of rulings.

Browse the full [ParseForge collection](https://apify.com/parseforge?fpr=vmoqkp) for more scrapers.

***

**Need help?** [Open our contact form](https://tally.so/r/BzdKgA) or email parseforge@protonmail.com to report an issue, request a scraper, or discuss a custom data project.

# Actor input Schema

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

Search for cards by name, type, or other criteria (e.g., 'cmc>0').

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

Free users: Limited to 10 items (preview). Paid users: Optional, max 1,000,000

## Actor input object example

```json
{
  "searchQuery": "cmc>0",
  "maxItems": 10
}
```

# 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 = {
    "searchQuery": "cmc>0",
    "maxItems": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/scryfall-card-rulings-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 = {
    "searchQuery": "cmc>0",
    "maxItems": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/scryfall-card-rulings-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 '{
  "searchQuery": "cmc>0",
  "maxItems": 10
}' |
apify call parseforge/scryfall-card-rulings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,parseforge/scryfall-card-rulings-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/ReTaMzt7lW0FcSgrv/builds/ATyNfUzon2WJBjr4B/openapi.json
