# TeePublic Scraper (`parseforge/teepublic-scraper`) Actor

Scrapes TeePublic product listings from any page, category, or search. Returns each design as a flat row with title, artist, price, tags, and image URLs.

- **URL**: https://apify.com/parseforge/teepublic-scraper.md
- **Developed by:** [ParseForge](https://apify.com/parseforge) (community)
- **Categories:** Automation, E-commerce, Developer tools
- **Stats:** 37 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 1.00 out of 5 stars

## Pricing

from $8.20 / 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/actors/running/actors-in-store.md#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)

### TeePublic Scraper

**Scrape TeePublic designs from any product page, category, or search, up to a million per run.** Every design comes with its title, artist, price, tags, and image URLs. No API key required. Export to CSV, JSON, Excel, or XML.

TeePublic's marketplace has millions of print-on-demand designs, but browsing manually or checking artist catalogs one by one is slow. This Actor reads the public product feeds directly, filtered by product type, category, keyword, or artist name, and returns each matching design in a consistent flat schema.

| Who uses it | What they scrape TeePublic for |
|---|---|
| Print-on-demand sellers | Monitor trending designs and tags in their niche to inform their own product creation. |
| Market researchers | Track which themes, artists, and product types are gaining traction week over week. |
| E-commerce analysts | Build a catalog of pricing, tag usage, and design popularity for competitive benchmarking. |
| Artist managers | Audit an artist's full catalog across all product types to verify listings and pricing. |

### What it does

This Actor collects TeePublic product listings by direct URL, category filter, or search query, and returns each design as a flat row.

- 🎯 **Direct URL input:** paste any TeePublic product, category, or search results page to scrape exactly that set.
- 🏷️ **Category and product filters:** pick a product type like hoodies or stickers and a category slug like anime or christmas to build the feed.
- 🔍 **Keyword and artist search:** search by general terms or by a specific artist name to narrow results before scraping.
- 📊 **Sort order control:** pull results sorted by relevance, popularity, or newest to match your research question.

Results export to CSV, JSON, Excel, or XML, or straight from the API.

### What you can do with TeePublic data

**📈 Track trending design themes.**

A print-on-demand seller scrapes the 'popular' sort of the anime t-shirts category weekly to see which tags and visual styles are rising.

**🎨 Audit an artist's catalog.**

An artist manager enters an artist name and scrapes all product types to verify every listing is live, priced correctly, and has the right tags.

**💰 Monitor competitor pricing.**

An e-commerce analyst scrapes a set of design keywords across hoodies, stickers, and mugs to compare how competitors price the same theme on different products.

**🏷️ Build a tag strategy.**

A new seller scrapes the top 500 designs in their niche and extracts all tags to understand which keyword combinations correlate with high popularity.

### Why choose this scraper

|  | What you get |
|---|---|
| **No API registration** | Reads the public TeePublic feeds with zero authentication or rate-limit headaches. |
| **Fixed output schema** | Every design lands as a flat row with title, artist, price, tags, and image URLs, ready for analysis. |
| **Multi-format export** | Download your dataset as CSV, JSON, Excel, or XML for direct use in spreadsheets or databases. |

### How it compares

This Actor and the alternative TeePublic Scraper both collect product listings from TeePublic.com. The table below compares the capabilities each listing describes.

| Feature | ParseForge | TeePublic Scraper 👕 |
|---|---|---|
| Direct URL input | Yes | Not listed |
| Category and product type filters | Yes | Not listed |
| Artist name search | Yes | Not listed |
| Keyword search | Yes | Not listed |
| Sort by popularity or newest | Yes | Not listed |
| Safe search toggle | Yes | Not listed |

### Configure the run

Drive the Actor from a direct URL or by combining product type, category, keyword, and artist search. Filters run as each design is read so only matches reach your dataset. The Input tab lists every parameter.

A first run with the defaults:

```json
{
  "maxItems": 10,
  "startUrl": "https://www.teepublic.com/crewneck-sweatshirt/mythical-animals"
}
```

A larger pull:

```json
{
  "maxItems": 200,
  "startUrl": "https://www.teepublic.com/crewneck-sweatshirt/mythical-animals"
}
```

### Pricing

Pay-per-result: **$0.135 per result** collected. You pay only for the results written to your dataset.

| Results collected | Approximate cost |
|---|---|
| 100 results | $13.50 |
| 1,000 results | $135.00 |
| 10,000 results | $1350.00 |

New Apify accounts start with $5 in free credit.

### Free users

Free-plan runs return up to 10 results as a preview. [Upgrade your Apify plan](https://console.apify.com/sign-up?fpr=vmoqkp) to collect up to 1,000,000 results per run.

### Run it

1. [Create a free Apify account with $5 in credit](https://console.apify.com/sign-up?fpr=vmoqkp).
2. Open the [TeePublic Scraper](https://apify.com/parseforge/teepublic-scraper?fpr=vmoqkp).
3. Set your inputs and any filters, then click **Start**.
4. Export the results as CSV, Excel, JSON, or XML from the **Dataset** tab.

Run it programmatically through the [Apify API](https://docs.apify.com/api/v2) (`run-sync-get-dataset-items`) or the [ApifyClient](https://docs.apify.com/api/client/js) for JavaScript and Python.

### Use with AI agents (MCP)

Give an AI agent live access to TeePublic through the Model Context Protocol. Add the Actor to Claude, Cursor, or any MCP client:

```bash
claude mcp add --transport http apify "https://mcp.apify.com/?tools=parseforge/teepublic-scraper"
```

Then prompt it in plain language to run the scraper and read back the results.

### Troubleshooting

**Why am I getting no results?**

Check that your category slug is spelled correctly and matches a real TeePublic category. Also confirm you are not using both a direct URL and category filters in the same run.

**The Actor scraped fewer designs than my max items setting.**

The feed may have fewer designs than your limit. Try broadening your search by removing the keyword or artist filter, or by selecting a larger category.

**My artist search returns designs from other artists.**

Artist search uses TeePublic's internal artist filter. If the artist name is a common word, some unrelated designs may appear. Try a more specific artist handle.

**The safe search filter is not blocking explicit content.**

Safe search is a client-side filter applied during the scrape. If some explicit designs still appear, TeePublic's tagging may not flag them. Try adding a negative keyword in your search.

**I pasted a URL but the Actor used the category filters instead.**

Direct URL and category filters are mutually exclusive. Clear the product type and category fields, and leave keyword and artist search empty, then paste only the start URL.

### FAQ

| Question | Answer |
|---|---|
| Can I scrape a specific artist's entire catalog? | Yes. Use the artist name input to search by designer handle. The Actor will collect all matching designs across the product types and categories you select. |
| What is the difference between keyword search and artist search? | Keyword search looks for terms in the design title and tags. Artist search filters by the designer name. You cannot use both in the same run; pick the one that matches your goal. |
| How do I scrape a specific product type like stickers or mugs? | Select the product type from the dropdown. The Actor builds the correct URL path for that product. Choose 'All Products' to scrape across the entire merchandise range. |
| Can I scrape a direct URL instead of using filters? | Yes. Paste any TeePublic URL into the start URL field. The Actor will scrape that exact page. Direct URLs and category filters are mutually exclusive. |
| Does this Actor handle NSFW or explicit content? | The safe search toggle lets you include or exclude explicit designs. Set it to 'On' to filter mature content client-side during the scrape. |
| What data fields do I get per design? | Each row includes the design title, artist name, price, tags, image URLs, product type, and the source URL. The exact field list is shown in the sample output on the Actor page. |
| Is there a limit on how many designs I can scrape? | You set the maximum number of designs per run, up to one million. The Actor stops when it hits that count or exhausts the feed. |
| Can I sort results by newest or most popular? | Yes. Use the sort dropdown to choose relevance, popular, or newest. The Actor adds the correct query parameter to the URL. |
| Do I need a TeePublic account or API key? | No. The Actor reads the public website feeds. No login, no API registration, and no OAuth tokens are required. |
| What export formats are supported? | You can download your dataset as CSV, JSON, Excel, or XML from the Apify run console. |

### Related actors

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

🆘 **Need help?** Email parseforge@protonmail.com with your run ID, your input, and what you expected.

⚠️ **Disclaimer.** This Actor is unofficial and is not affiliated with, endorsed by, or sponsored by TeePublic, Inc. It collects only publicly available data. You are responsible for using the collected data in compliance with the source's terms of service and applicable data-protection laws, including GDPR, CCPA, and PIPL. Do not use it to collect personal data unlawfully.

# Actor input Schema

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

Maximum number of designs to collect per run.

## `startUrl` (type: `string`):

Direct URL to scrape from TeePublic. Use this OR category filters below, not both. Example: https://www.teepublic.com/t-shirts/christmas

## `productType` (type: `string`):

Select the type of product to scrape. Defaults to t-shirts if not specified. If 'All Products' is selected, URLs will use /{category}-merchandise format.

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

Enter a category slug. URL format: /{productType}/{category} (e.g., /t-shirts/christmas, /t-shirts/anime) or /{category}-merchandise if productType is 'All Products' (e.g., /christmas-merchandise). Examples: christmas, music, anime, sci-fi, wu-tang

## `query` (type: `string`):

Search for products by general terms (titles, tags). Adds ?query= parameter to URL. Cannot be used with 'Artist Search'. Example: christmas, funny

## `artistSearch` (type: `string`):

Search for products by artist/designer name. Adds ?artist\_search=true\&query= parameter to URL. Cannot be used with 'Search Query (General)'. Example: lulabyan, legendaryphoenix

## `sortBy` (type: `string`):

Sort order for results. Adds ?sort= parameter to URL. Defaults to relevance if not specified (no parameter added).

## `safeSearch` (type: `string`):

Filter explicit content. This is a client-side filter and doesn't affect URL parameters. Must be handled in the scraper code.

## Actor input object example

```json
{
  "maxItems": 10,
  "startUrl": "https://www.teepublic.com/crewneck-sweatshirt/mythical-animals"
}
```

# Actor output Schema

## `overview` (type: `string`):

Overview table view with key product fields displayed in a table format

## `fullData` (type: `string`):

Complete dataset with all scraped product information including all fields

# 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": 10,
    "startUrl": "https://www.teepublic.com/crewneck-sweatshirt/mythical-animals"
};

// Run the Actor and wait for it to finish
const run = await client.actor("parseforge/teepublic-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 = {
    "maxItems": 10,
    "startUrl": "https://www.teepublic.com/crewneck-sweatshirt/mythical-animals",
}

# Run the Actor and wait for it to finish
run = client.actor("parseforge/teepublic-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 '{
  "maxItems": 10,
  "startUrl": "https://www.teepublic.com/crewneck-sweatshirt/mythical-animals"
}' |
apify call parseforge/teepublic-scraper --silent --output-dataset

```

## MCP server setup

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