# Tarot Matrix Generator & Market Trend Scraper (`constructive_junk/tarot-matrix-generator-market-trend-scraper`) Actor

Generate AI image prompts for all 78 tarot cards in minutes, and scrape real-time trends from Kickstarter and Etsy. Dual-mode Actor powered by GPT-4o. Perfect for tarot deck creators, spiritual product entrepreneurs, and market researchers who want data-driven insights to launch bestselling decks.

- **URL**: https://apify.com/constructive\_junk/tarot-matrix-generator-market-trend-scraper.md
- **Developed by:** [Maria Correa-Resto](https://apify.com/constructive_junk) (community)
- **Categories:** AI, E-commerce, Automation
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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

## 🎴 Tarot Matrix Generator & Market Trend Scraper

**The premium all-in-one tool for tarot deck creators and spiritual product entrepreneurs.**

Stop spending weeks manually writing image prompts for 78 tarot cards. Stop guessing which tarot styles sell on Kickstarter and Etsy. This Actor does both — powered by GPT-4o and built for production.

---

### 🔥 What Problem Does This Solve?

Creating a full tarot deck from scratch involves two painful steps:

**Step 1 — Creative Production:** You need a unique, detailed image prompt for every single one of the 78 cards. Writing them manually takes days. Hiring a prompt engineer costs hundreds of dollars.

**Step 2 — Market Validation:** Before investing in art, you need to know what styles are trending, what price points work, and what backers are actually asking for on crowdfunding platforms.

**This Actor eliminates both bottlenecks in a single run.**

---

### ✨ Two Powerful Modes

#### 🎴 Mode 1: MATRIX_GENERATOR — AI Tarot Prompt Engine

Generates a complete set of **78 production-ready image prompts** (one per tarot card) using OpenAI GPT-4o.

**Anti-Token Strategy:** The 78 cards are split into 4 sequential API calls to prevent JSON truncation:
- Batch 1: Major Arcana (22 cards)
- Batch 2: Suit of Wands (14 cards)
- Batch 3: Suit of Cups (14 cards)
- Batch 4: Swords + Pentacles (28 cards)

Each card receives a structured output object ready for Midjourney, DALL-E, Stable Diffusion, or any image AI.

#### 📈 Mode 2: MARKET_SCRAPER — Trend Intelligence Engine

Scrapes real market data from **Kickstarter** and **Etsy** to identify what's selling, what's trending, and what your customers actually want.

- **Kickstarter:** Hits the internal JSON API directly (faster, fewer Compute Units) and runs GPT-4o-mini semantic analysis on backer comments to extract buying motivations.
- **Etsy:** Uses PlaywrightCrawler for full JavaScript rendering to extract live product listings, prices, and review counts.

---

### 📊 Sample Output — MATRIX_GENERATOR

| Field | Example Value |
|-------|--------------|
| `id` | 0 |
| `name` | The Fool |
| `arcana` | major |
| `suit` | null |
| `visualStyle` | Cyberpunk |
| `colorPalette` | Neon brillante |
| `deckType` | Rider-Waite |
| `generatedAt` | 2026-07-01T10:00:00Z |

**Sample `imagePrompt`:**
> "A young androgynous figure in a neon-lit cyberpunk cityscape, standing at the edge of a skyscraper rooftop, one foot raised, glowing briefcase in hand. Electric neon palette — magenta, cyan and acid green. Holographic butterflies swirl. Rider-Waite iconography fused with cyberpunk aesthetic. Ultra-detailed digital illustration, 8K resolution."

**Sample `negativePrompt`:**
> "blurry, watermark, text, signature, low quality, pixelated, amateur, flat colors"

---

### 📊 Sample Output — MARKET_SCRAPER (Kickstarter)

```json
{
  "platform": "kickstarter",
    "id": 123456789,
      "name": "The Cosmic Neon Tarot Deck",
        "blurb": "78 cards of neon-lit cosmic energy for the modern mystic",
          "category": "Tabletop Games",
            "creator": "Studio Arcana",
              "pledged": 45820,
                "goal": 5000,
                  "backers": 612,
                    "fundingPercentage": 916,
                      "state": "successful",
                        "aiCommentInsights": "{\"supportReasons\": \"Backers love the unique neon aesthetic and the inclusion of a guidebook\", \"positiveFeatures\": [\"Holographic foiling\", \"Thick cardstock\", \"Inclusive imagery\"], \"concerns\": \"Some backers requested a larger card size\", \"sentimentScore\": 9}",
                          "scrapedAt": "2026-07-01T10:00:00Z"
                          }
                          ```

                          ---

                          ## ⚙️ How To Use

                          ### Step 1: Choose Your Mode
                          Select `MATRIX_GENERATOR` to create prompts, or `MARKET_SCRAPER` to analyze the market.

                          ### Step 2: Configure Your Input

                          | Parameter | Type | Required | Default | Description |
                          |-----------|------|----------|---------|-------------|
                          | `mode` | Select | ✅ | MATRIX_GENERATOR | Operating mode |
                          | `openaiApiKey` | Secret | ✅ | — | Your OpenAI API key (sk-...) |
                          | `visualStyle` | String | ❌ | Cyberpunk | Art style for all card prompts |
                          | `colorPalette` | String | ❌ | Neon brillante | Dominant color palette |
                          | `deckType` | Select | ❌ | Rider-Waite | Iconographic tradition |
                          | `platforms` | Array | ❌ | ["kickstarter","etsy"] | Platforms to scrape |
                          | `maxItemsPerPlatform` | Integer | ❌ | 20 | Max results per platform |
                          | `searchQuery` | String | ❌ | tarot deck | Search keyword for scraper |
                          | `proxyConfiguration` | Proxy | ❌ | Apify Proxy | Proxy settings |

                          ### Step 3: Export Your Data
                          All results are saved automatically to the default Dataset. Export instantly to **Excel, CSV, or JSON** from your Apify Dashboard.

                          ---

                          ## 💡 Use Cases

                          - **Tarot deck creators** launching on Kickstarter or Etsy who need a full prompt library before hiring an illustrator
                          - **AI art studios** producing tarot content at scale for print-on-demand platforms
                          - **Product researchers** analyzing the spiritual products niche for crowdfunding opportunities
                          - **Marketing teams** at spiritual brands tracking competitor pricing and sentiment on Etsy

                          ---

                          ## 🔧 Technical Specs

                          - **Runtime:** Node.js 18+ with TypeScript (ESM)
                          - **AI Model:** GPT-4o (generation), GPT-4o-mini (sentiment analysis)
                          - **Crawler:** PlaywrightCrawler (Etsy) + Axios (Kickstarter API)
                          - **Proxy:** Native Apify Proxy integration
                          - **Output:** Apify Dataset (auto-exportable to Excel, CSV, JSON)
                          - **Memory:** 512 MB minimum, 4 GB maximum

                          ---

                          ## 🚀 Ready to Launch Your Deck?

                          Run this Actor once and walk away with 78 fully-crafted image prompts AND a complete competitive intelligence report — in under 10 minutes.

                          **Your next bestselling tarot deck starts here.**

# Actor input Schema

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

MATRIX_GENERATOR generates prompts for all 78 tarot cards. MARKET_SCRAPER extracts trends.
## `openaiApiKey` (type: `string`):

Your OpenAI secret key (sk-...). Required for both modes.
## `visualStyle` (type: `string`):

Artistic style for image prompts. Examples: Cyberpunk, Watercolor, Art Nouveau.
## `colorPalette` (type: `string`):

Dominant color palette. Examples: Bright Neon, Vintage Sepia, Soft Pastel.
## `deckType` (type: `string`):

Iconographic tradition for the deck.
## `platforms` (type: `array`):

Platforms to extract trends from. Values: kickstarter, etsy.
## `maxItemsPerPlatform` (type: `integer`):

Maximum number of projects or products to extract per platform.
## `searchQuery` (type: `string`):

Keyword to search for on Kickstarter and Etsy.
## `proxyConfiguration` (type: `object`):

Apify proxy configuration to avoid blocks.

## Actor input object example

```json
{
  "mode": "MATRIX_GENERATOR",
  "visualStyle": "Cyberpunk",
  "colorPalette": "Bright Neon",
  "deckType": "Rider-Waite",
  "platforms": [
    "kickstarter",
    "etsy"
  ],
  "maxItemsPerPlatform": 20,
  "searchQuery": "tarot deck",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
````

# Actor output Schema

## `results` (type: `string`):

No description

# 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 = {
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("constructive_junk/tarot-matrix-generator-market-trend-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 = { "proxyConfiguration": { "useApifyProxy": True } }

# Run the Actor and wait for it to finish
run = client.actor("constructive_junk/tarot-matrix-generator-market-trend-scraper").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 '{
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call constructive_junk/tarot-matrix-generator-market-trend-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=constructive_junk/tarot-matrix-generator-market-trend-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Tarot Matrix Generator & Market Trend Scraper",
        "description": "Generate AI image prompts for all 78 tarot cards in minutes, and scrape real-time trends from Kickstarter and Etsy. Dual-mode Actor powered by GPT-4o. Perfect for tarot deck creators, spiritual product entrepreneurs, and market researchers who want data-driven insights to launch bestselling decks.",
        "version": "0.0",
        "x-build-id": "hlXHOcgfgAifxU5Rx"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/constructive_junk~tarot-matrix-generator-market-trend-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-constructive_junk-tarot-matrix-generator-market-trend-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/constructive_junk~tarot-matrix-generator-market-trend-scraper/runs": {
            "post": {
                "operationId": "runs-sync-constructive_junk-tarot-matrix-generator-market-trend-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/constructive_junk~tarot-matrix-generator-market-trend-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-constructive_junk-tarot-matrix-generator-market-trend-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "mode",
                    "openaiApiKey"
                ],
                "properties": {
                    "mode": {
                        "title": "Operating Mode",
                        "enum": [
                            "MATRIX_GENERATOR",
                            "MARKET_SCRAPER"
                        ],
                        "type": "string",
                        "description": "MATRIX_GENERATOR generates prompts for all 78 tarot cards. MARKET_SCRAPER extracts trends.",
                        "default": "MATRIX_GENERATOR"
                    },
                    "openaiApiKey": {
                        "title": "OpenAI API Key",
                        "type": "string",
                        "description": "Your OpenAI secret key (sk-...). Required for both modes."
                    },
                    "visualStyle": {
                        "title": "Visual Style",
                        "type": "string",
                        "description": "Artistic style for image prompts. Examples: Cyberpunk, Watercolor, Art Nouveau.",
                        "default": "Cyberpunk"
                    },
                    "colorPalette": {
                        "title": "Color Palette",
                        "type": "string",
                        "description": "Dominant color palette. Examples: Bright Neon, Vintage Sepia, Soft Pastel.",
                        "default": "Bright Neon"
                    },
                    "deckType": {
                        "title": "Tarot Deck Type",
                        "enum": [
                            "Rider-Waite",
                            "Marseille"
                        ],
                        "type": "string",
                        "description": "Iconographic tradition for the deck.",
                        "default": "Rider-Waite"
                    },
                    "platforms": {
                        "title": "Scraping Platforms",
                        "type": "array",
                        "description": "Platforms to extract trends from. Values: kickstarter, etsy.",
                        "items": {
                            "type": "string"
                        },
                        "default": [
                            "kickstarter",
                            "etsy"
                        ]
                    },
                    "maxItemsPerPlatform": {
                        "title": "Max Items Per Platform",
                        "minimum": 1,
                        "maximum": 100,
                        "type": "integer",
                        "description": "Maximum number of projects or products to extract per platform.",
                        "default": 20
                    },
                    "searchQuery": {
                        "title": "Search Query",
                        "type": "string",
                        "description": "Keyword to search for on Kickstarter and Etsy.",
                        "default": "tarot deck"
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Apify proxy configuration to avoid blocks.",
                        "default": {
                            "useApifyProxy": true
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
