# Creative Market Scraper — Products, Shops & Monitor (`crawloop/creative-market-scraper`) Actor

Creative Market scraper for keyword search, all 9 categories, designer shops, and product URLs. Pull license-tier prices, ratings, specs, and shop catalogs. Monitor new or changed listings. Public pages only, no login.

- **URL**: https://apify.com/crawloop/creative-market-scraper.md
- **Developed by:** [Andrej Kiva](https://apify.com/crawloop) (community)
- **Categories:** E-commerce, Automation, Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.99 / 1,000 product results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## Creative Market Scraper — Products, Shops & Monitor

> **Disclaimer:** Unofficial tool — not affiliated with, sponsored by, or endorsed by Creative Market, Autodesk, or their affiliates. Data is read from publicly accessible pages only. No login, no asset file downloads. You are responsible for complying with applicable law (including GDPR where personal data appears) and the site’s terms. No warranty on accuracy or availability. Provided for informational and research use.

**Creative Market scraper** for Apify — a **Creative Market products scraper** for **keyword search**, **all 9 categories** (fonts, templates, graphics, photos, illustrations, icons, mockups, brushes, 3D), **designer shops**, and **product URLs**. Built for **font and template research**, **license-price intelligence**, and **shop monitoring**. Export prices, Personal / Commercial / Extended license tiers, ratings, specs, and shop profiles as JSON. A practical **Creative Market API alternative** you can call from **Python**, **Node.js**, Sheets, or an **MCP** / AI assistant. HTTP-only (no browser).

> **Crawloop Marketplace & Digital Assets** — marketplace scrapers for product discovery and pricing intelligence.

| **Creative Market Scraper** ◄── *you are here* | [Gumroad Scraper](https://apify.com/crawloop/gumroad-scraper) | [Etsy Scraper](https://apify.com/crawloop/etsy-scraper) | [Unity Asset Store Scraper](https://apify.com/crawloop/unity-asset-store-scraper) |
| :---: | :---: | :---: | :---: |
| Fonts, templates, shops & license tiers | Discover, storefronts & products | Handmade / POD search, shops, reviews | Game assets, prices, publishers |

Also see: [Amazon Search Scraper](https://apify.com/crawloop/amazon-search-scraper) · [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper)

### When to use this Actor

- **Creative Market search scraper** — keyword listings with price, shop, and category
- **Creative Market fonts / templates scraper** — dump a vertical (`fonts`, `templates-themes`, graphics, photos, illustrations, icons, mockups, brushes, 3D)
- **Creative Market product scraper** — paste product URLs for the license matrix, specs, gallery, and tags
- **Shop catalog scraper** — public products on a designer shop, plus location and bio (emails stripped)
- **Creative Market API alternative** — structured rows from public pages when you need JSON, not a buyer account
- **Change monitor** — scheduled runs that emit only new or changed products (price, licenses, sales, ratings, name)

### When not to use this Actor

- **Downloading font, template, or paid asset files** — listing metadata only
- **Buyer accounts, carts, or messages** — public pages only; no login
- **Harvesting shop emails** — emails are stripped from bios and descriptions
- **Gumroad digital products, Etsy handmade, or Unity packages** — use the sibling scrapers linked above
- **Unlimited uncapped crawls** — set `maxItems` / `maxPages` to control spend

### Key features

- **All-in-one Creative Market data** — search, 9 categories, shops, start URLs, and product URLs in one Actor
- **License matrix** — Personal / Commercial / Extended Commercial, plus font Desktop / Webfont / E-pub / App / Enterprise when shown
- **Listing cards + details** — search/shop cards include name, price, shop, and category; turn `scrapeDetails` on for licenses, specs, gallery, and tags
- **Typed dataset rows** — `recordType`: `product`, `shop`, optional `review`
- **Monitor mode** — remember products and shops between runs; emit only `new` or `changed`
- **Caps that save budget** — `maxItems`, `maxPages` (~60 products per search page)
- **Residential-ready** — Cloudflare sits in front of the catalog; Apify Residential is the default proxy

### Input Parameters

| Parameter | Type | Default | Description |
| :--- | :--- | :--- | :--- |
| `searchQueries` | Array | — | Search keywords (`wedding invitation`, `script font`, `logo template`) |
| `categories` | Array | — | `fonts`, `templates-themes`, `graphics`, `photos`, `illustrations`, `icons`, `mockups`, `brushes-more`, `3d` |
| `startUrls` | Array | — | Search, category, shop, or product URLs (auto-detected) |
| `productUrls` | Array | — | Direct `/{shop}/{id}-{slug}` product links |
| `shopUrls` | Array | — | Shop profile URLs |
| `sort` | String | best match | `popular` / `newest` / `trending` / `price_asc` / `price_desc` |
| `minPrice` / `maxPrice` | Number | `0` | USD filter (`0` = off) |
| `minRating` | Number | `0` | Minimum average stars |
| `scrapeDetails` | Boolean | `true` | Extra product-page request (licenses, specs). Turn **off** for cheap monitor ticks |
| `scrapeReviews` | Boolean | `false` | Emit `review` rows |
| `includeShopProfile` | Boolean | `true` | Push a shop row when scraping shop URLs |
| `includeHtmlDescription` | Boolean | `false` | Add `descriptionHtml` when details are scraped |
| `maxItems` | Integer | `50` | Hard dataset cap (`0` = unlimited). In monitor mode this caps **new** rows emitted |
| `maxPages` | Integer | `0` | Page cap per query (`0` = unlimited) |
| `maxReviewsPerEntity` | Integer | `20` | Review cap per product/shop |
| `monitorMode` | Boolean | `false` | Emit only new & changed rows |
| `monitorKey` | String | `default` | Isolated monitor memory per saved search |
| `requestDelaySecs` | Number | `0.4` | Delay between HTTP requests |
| `proxyConfiguration` | Object | Residential | Apify Residential recommended (Cloudflare) |

Provide **at least one** of: `searchQueries`, `categories`, `startUrls`, `productUrls`, `shopUrls`.

#### Input example — search

```json
{
  "searchQueries": ["wedding invitation"],
  "sort": "popular",
  "maxItems": 50,
  "scrapeDetails": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["RESIDENTIAL"]
  }
}
```

#### Input example — fonts category

```json
{
  "categories": ["fonts"],
  "sort": "popular",
  "maxItems": 60,
  "scrapeDetails": false
}
```

#### Input example — product URLs + licenses

```json
{
  "productUrls": [
    "https://creativemarket.com/crocus.paperi/2807150-ROMANTIC-WEDDING-10-invitations"
  ],
  "scrapeDetails": true,
  "maxItems": 10
}
```

#### Input example — shop catalog + monitor

```json
{
  "shopUrls": [
    "https://creativemarket.com/crocus.paperi"
  ],
  "scrapeDetails": false,
  "monitorMode": true,
  "monitorKey": "crocus-paperi",
  "maxItems": 100
}
```

#### Input example — start URLs

```json
{
  "startUrls": [
    { "url": "https://creativemarket.com/search/logo-template?sort=popular" },
    { "url": "https://creativemarket.com/fonts" }
  ],
  "maxItems": 40,
  "scrapeDetails": false
}
```

### Output Format

| Field | Description |
| :--- | :--- |
| `recordType` | `product`, `shop`, or `review` |
| `id` / `url` / `name` | Product id or shop slug, canonical URL, title |
| `price` / `priceFormatted` / `originalPrice` | Listed / sale price (USD) |
| `licenses` / `licenseCount` | License-tier names and prices from the product page |
| `salesCount` | Public sales count when the product page shows it (often omitted) |
| `ratingsAverage` / `ratingsCount` | Stars |
| `shopName` / `shopUrl` / `featuredShop` | Designer shop |
| `specs` / `tags` / `imageUrls` | Details pass (`compatibleWith`, file size, DPI, vector/layered) |
| `location` / `bio` | Shop profile (emails stripped) |
| `source` | `search` / `category` / `shop` / `product_url` |
| `monitorChange` | `new` or `changed` when monitor mode is on |
| `scrapedAt` | UTC timestamp |

Listing cards include name, price, shop, and category. They do **not** include the full license matrix. Keep `scrapeDetails` on (or pass `productUrls`) to fill licenses, description, and specs.

```json
{
  "recordType": "product",
  "id": "2807150",
  "name": "ROMANTIC WEDDING | 10 invitations",
  "url": "https://creativemarket.com/crocus.paperi/2807150-ROMANTIC-WEDDING-10-invitations",
  "price": 22,
  "priceFormatted": "$22",
  "currencyCode": "USD",
  "licenses": [
    { "key": "personal", "name": "Personal", "price": 22 },
    { "key": "commercial", "name": "Commercial", "price": 26 },
    { "key": "extendedCommercial", "name": "Extended Commercial", "price": 290 }
  ],
  "shopName": "Crocus Paperi",
  "shopUrl": "https://creativemarket.com/crocus.paperi",
  "category": "Templates & Themes",
  "source": "product_url"
}
```

```json
{
  "recordType": "shop",
  "shopSlug": "crocus.paperi",
  "name": "Crocus Paperi",
  "url": "https://creativemarket.com/crocus.paperi",
  "location": "Etelä-Suomi",
  "ratingsAverage": 4.0,
  "source": "shop"
}
```

### Use cases

| Job | What you get |
| :--- | :--- |
| **License-price comps** | Personal vs Commercial vs Extended (or font Desktop / Webfont / App) before you buy or list a competing asset |
| **Font / template shortlist** | Search or category dump with price, shop, and category; details pass adds specs and gallery |
| **Shop catalog export** | A designer’s public Creative Market catalog plus location and bio |
| **Scheduled shop / search watch** | Monitor mode emits only `new` or `changed` rows (price, licenses, name) |
| **Foundry / marketplace research** | Compare how shops price similar fonts or wedding templates |
| **AI / MCP workflows** | Structured Creative Market JSON instead of HTML |

### Integration examples

#### Node.js

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });

const run = await client.actor('crawloop/creative-market-scraper').call({
  searchQueries: ['wedding invitation'],
  maxItems: 50,
  scrapeDetails: true,
  proxyConfiguration: {
    useApifyProxy: true,
    apifyProxyGroups: ['RESIDENTIAL'],
  },
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.slice(0, 5));
```

#### Python

```python
import os
from apify_client import ApifyClient

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("crawloop/creative-market-scraper").call(
    run_input={
        "searchQueries": ["wedding invitation"],
        "maxItems": 50,
        "scrapeDetails": True,
        "proxyConfiguration": {
            "useApifyProxy": True,
            "apifyProxyGroups": ["RESIDENTIAL"],
        },
    }
)
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(items[:5])
```

#### cURL

```bash
curl "https://api.apify.com/v2/acts/crawloop~creative-market-scraper/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchQueries":["wedding invitation"],"maxItems":20,"scrapeDetails":false}'
```

### MCP and AI assistants

Use this Actor from AI tools via [Apify MCP](https://docs.apify.com/platform/integrations/mcp).
Connect your Apify account, then call this Actor by its Store ID `crawloop/creative-market-scraper`.

Example prompts:

- "Run Creative Market Scraper for search query wedding invitation, max 30 products, and return name, license prices, shop, and URL as JSON"
- "Scrape Creative Market fonts category, popular sort, and list product name, price, and shop"
- "Chain Creative Market Scraper then [Gumroad Scraper](https://apify.com/crawloop/gumroad-scraper) to compare design templates vs digital products in the same niche"

### Suite next step

After a Creative Market catalog dump, run [Gumroad Scraper](https://apify.com/crawloop/gumroad-scraper) for digital-product comps, or [Unity Asset Store Scraper](https://apify.com/crawloop/unity-asset-store-scraper) when the niche is game assets. Handmade / POD comps: [Etsy Scraper](https://apify.com/crawloop/etsy-scraper).

### FAQ

**Does this use an official Creative Market API?**
No. There is no public catalog API. This Actor reads the same public search, shop, and product pages any visitor gets in the browser.

**Can I scrape Creative Market fonts and templates?**
Yes. Use `categories` (`fonts`, `templates-themes`, …) or a search query. All nine public verticals are supported.

**Why is sales count empty?**
Search cards never show sales. Many product pages also omit a public sales figure. `salesCount` is filled only when the page itself displays it.

**Which license prices are included?**
Whatever the product page shows: typically Personal / Commercial / Extended Commercial, or font Desktop / Webfont / E-pub / App / Enterprise. Listing cards show the card price only — turn `scrapeDetails` on for the matrix.

**Do I need a proxy?**
Yes in practice. Creative Market sits behind Cloudflare; the default input uses Apify Residential.

**Are shop emails included?**
No. Emails are stripped from bios and descriptions.

**How does monitor mode work?**
The Actor stores fingerprints (price, licenses, sales, ratings, name) in a named key-value store. Later runs emit only `new` or `changed` rows. `maxItems` caps how many **new** rows are written, so a large shop catalog continues across ticks until ingested. Turn `scrapeDetails` off for cheap ticks that watch listing price/name only.

### Related Actors

- [Gumroad Scraper](https://apify.com/crawloop/gumroad-scraper) — Discover, storefronts, products
- [Etsy Scraper](https://apify.com/crawloop/etsy-scraper) — search, shops, reviews
- [Unity Asset Store Scraper](https://apify.com/crawloop/unity-asset-store-scraper) — packages, prices, monitor
- [Amazon Search Scraper](https://apify.com/crawloop/amazon-search-scraper) — marketplace SERP
- [eBay Sold Listings Scraper](https://apify.com/crawloop/ebay-sold-listings-scraper) — sold comps

# Actor input Schema

## `searchQueries` (type: `array`):

Keywords for Creative Market search (e.g. wedding invitation, logo template, script font).

## `categories` (type: `array`):

Creative Market verticals. Empty = none (use search or URLs).

## `startUrls` (type: `array`):

Search, category, shop, or product URLs. Detected automatically.

## `productUrls` (type: `array`):

Direct product links such as https://creativemarket.com/{shop}/{id}-{slug}.

## `shopUrls` (type: `array`):

Shop profile URLs (https://creativemarket.com/{shop}). Emits a shop row plus catalog products.

## `sort` (type: `string`):

Search / category sort. Leave default for best match.

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

Keep products at or above this amount. 0 = no floor.

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

Keep products at or below this amount. 0 = no ceiling.

## `minRating` (type: `number`):

Minimum average stars (1–5). Products with no ratings are dropped when set. 0 = off.

## `scrapeDetails` (type: `boolean`):

Fetch each product page for license tiers, sales count, description, specs, gallery, and tags. Extra request per product. Product URLs always include details. Turn off for cheap monitor ticks.

## `scrapeReviews` (type: `boolean`):

Emit review rows from product pages and shop /reviews. Extra dataset items.

## `includeShopProfile` (type: `boolean`):

When scraping shop URLs, also push a shop record (name, location, bio without emails, ratings).

## `includeHtmlDescription` (type: `boolean`):

Add descriptionHtml in addition to stripped description text. Only filled when details are scraped.

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

Hard cap across products, shops, and reviews. 0 = unlimited.

## `maxPages` (type: `integer`):

Listing page cap per search, category, or shop. Each search page is ~60 products. 0 = no page cap (still limited by Max items).

## `maxReviewsPerEntity` (type: `integer`):

Cap reviews collected per product or shop. 0 = unlimited (still limited by Max items).

## `monitorMode` (type: `boolean`):

Remember products and shops between runs and emit only NEW or CHANGED rows (price, licenses, sales, ratings, name).

## `monitorKey` (type: `string`):

Distinct key per saved search so monitors do not share state.

## `requestDelaySecs` (type: `number`):

Throttle between HTTP requests. Keep ≥0.3s on residential.

## `proxyConfiguration` (type: `object`):

Creative Market sits behind Cloudflare. Apify Residential is recommended.

## Actor input object example

```json
{
  "searchQueries": [
    "wedding invitation"
  ],
  "categories": [],
  "startUrls": [],
  "productUrls": [],
  "shopUrls": [],
  "sort": "",
  "minPrice": 0,
  "maxPrice": 0,
  "minRating": 0,
  "scrapeDetails": true,
  "scrapeReviews": false,
  "includeShopProfile": true,
  "includeHtmlDescription": false,
  "maxItems": 50,
  "maxPages": 0,
  "maxReviewsPerEntity": 20,
  "monitorMode": false,
  "monitorKey": "default",
  "requestDelaySecs": 0.4,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

Default dataset items.

# 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 = {
    "searchQueries": [
        "wedding invitation"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawloop/creative-market-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 = { "searchQueries": ["wedding invitation"] }

# Run the Actor and wait for it to finish
run = client.actor("crawloop/creative-market-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 '{
  "searchQueries": [
    "wedding invitation"
  ]
}' |
apify call crawloop/creative-market-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawloop/creative-market-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/pbajcY2SCoSAIls29/builds/eB5y7Lar8cTX3zSmA/openapi.json
