POD Trend Scraper — Redbubble & TeePublic avatar

POD Trend Scraper — Redbubble & TeePublic

Pricing

from $3.00 / 1,000 results

Go to Apify Store
POD Trend Scraper — Redbubble & TeePublic

POD Trend Scraper — Redbubble & TeePublic

Scrape public, robots.txt-allowed Redbubble and TeePublic listing pages for print-on-demand niche research: ranked titles, shops, prices, product types, tags and image URLs.

Pricing

from $3.00 / 1,000 results

Rating

0.0

(0)

Developer

Furkan Yalçıntaş

Furkan Yalçıntaş

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Categories

Share

POD Trend Scraper — Redbubble niche research

Find out which designs, tags and product types rank on Redbubble, one of the largest print-on-demand (POD) marketplaces. Give the Actor a list of niches or keywords and get one clean, ranked table of Redbubble products with titles, shops, prices, product types and full tag lists.

TeePublic support is experimental and off by default. TeePublic's anti-bot protection blocks many cloud / datacenter IP addresses (HTTP 403), so a TeePublic run can return 0 items. Turn it on with "sources": "both" or "teepublic" only if you can live with that (a proxy may help).

Robots-compliant: only public listing pages are read (Redbubble /shop/<term>, experimental TeePublic /t-shirts/<term>), with no search query or sort parameters. Each URL is checked against the site's live robots.txt before it is requested; a disallowed URL is skipped and reported.

Built for POD sellers, niche researchers and designers who want to answer questions like:

  • Which "retro gaming" designs rank at the top right now, and on which products?
  • Which tags do top-ranked "cat" designs use?
  • What price points do sticker and t-shirt listings sit at?

What it extracts

One dataset row per product listing, in the marketplace's own rank order:

FieldDescription
sourceredbubble or teepublic
querythe search term that produced the row
rank1-based position in the results for that term and marketplace (after de-duplication)
titlelisting title as shown on the marketplace
artistpublic shop / artist handle
price, currencycurrent price as a number + ISO currency code
originalPricepre-discount price when a sale is running (Redbubble), otherwise null
urlabsolute product URL
imageUrlproduct preview image
productTypee.g. Classic T-Shirt, Sticker, Essential T-Shirt
tagsdesign tags (Redbubble: full list; TeePublic: main tag + tags shown on the search tile)
rating, reviewCountalways null for now — neither marketplace shows ratings on search pages
sourceIdmarketplace item / design id
sortBy, page, scrapedAtorder used (relevant), result page number and UTC timestamp

A RUN_SUMMARY record in the key-value store lists items per marketplace and per search term, how many pages were fetched, blocked requests and any warnings.

Input

FieldDefaultNotes
queries— (required)list of search terms, max 50
sourcesredbubbleredbubble, both or teepublic (TeePublic = experimental, see above)
sortByrelevantonly relevant (the marketplace's default order); other values are ignored with a warning
productTypeallall, t-shirt, sticker, hoodie, mug, phone-case, tank-top, kids-t-shirt, poster, tote-bag
maxItemsPerQuery100unique products per term per marketplace (1-1000)
maxPages5hard cap on result pages per term and marketplace (1-20)
proxyConfigurationApify residentialmarketplaces block datacenter IPs; proxy traffic is included in the price

Example:

{
"queries": ["cat", "retro gaming"],
"productType": "all",
"maxItemsPerQuery": 100,
"maxPages": 5
}

How the options map to each marketplace:

  • Sort — both sites' robots.txt disallow sort parameters, so results come in the marketplace's default (relevance) order. trending / top-selling / newest are accepted but ignored with a warning.
  • Search term — turned into the listing path: retro gaming becomes Redbubble /shop/retro+gaming and TeePublic /t-shirts/retro-gaming (TeePublic's tag pages).
  • Product type — TeePublic has no "all departments" search, so all uses its t-shirt listing. TeePublic has no poster or tote-bag listing; for those types only Redbubble is scraped. On Redbubble kids-t-shirt lists kids clothing (there is no kids-tee listing path).
  • Redbubble returns about 90 products per page, TeePublic 36.

Output example

Real rows from runs on 2026-10-07 (tags shortened; the TeePublic row comes from the experimental source):

[
{
"source": "redbubble",
"query": "cat",
"rank": 2,
"title": "Everything’s good cat",
"url": "https://www.redbubble.com/i/sticker/Everything-s-good-cat-by-blah707/43977882/7sgk",
"price": 2.03,
"currency": "USD",
"originalPrice": 2.7,
"artist": "blah707",
"imageUrl": "https://ih1.redbubble.net/image.1030459700.7882/st,small,507x507-pad,600x600,f8f8f8.u1.jpg",
"productType": "Sticker",
"tags": [
"cat",
"crying",
"funny",
"white",
"black",
"meme"
],
"rating": null,
"reviewCount": null,
"sourceId": "43977882_sticky-runners_EJUG5",
"sortBy": "relevant",
"page": 1,
"scrapedAt": "2026-10-07T19:52:50Z"
},
{
"source": "teepublic",
"query": "cat",
"rank": 1,
"title": "Cat T-Shirt",
"url": "https://www.teepublic.com/t-shirt/46060798-cat",
"price": 24.0,
"currency": "USD",
"originalPrice": null,
"artist": "theladyernestember",
"imageUrl": "https://images.teepublic.com/derived/production/designs/46060798_2/1685673247/i_m:bi_production_blanks_h778z1f0n6g0xugjpxxm_1462829020,c_19_0_432x,s_313,q_90.jpg",
"productType": "Classic T-Shirt",
"tags": [
"cat",
"adorable",
"animal",
"aww",
"awww",
"cartoon"
],
"rating": null,
"reviewCount": null,
"sourceId": "46060798",
"sortBy": "relevant",
"page": 1,
"scrapedAt": "2026-10-07T19:54:01Z"
}
]

The dataset has two views: Products (image, rank, title, shop, price, product type, tags, URL) and Tags (title + tags only, handy for keyword research). Export as JSON, CSV, Excel or via the API.

Pricing

Pay per event: $0.003 per product saved to the dataset (product-scraped, i.e. $3 per 1,000 products) plus Apify's standard Actor start event ($0.00005 per run). A typical run of 2 keywords x 100 products costs about $0.60. See the Pricing tab for the current prices. Set a maximum cost per run in the run options and the Actor stops cleanly when it is reached.

Limits and good to know

  • Only public listing pages are read, and only URLs that robots.txt allows. No login, no account pages, no checkout, no search query or sort parameters.
  • No personal data is collected: no e-mails, phone numbers or customer reviews — only catalogue data and the public shop handle that is part of each listing.
  • Requests are sequential with a 1-2 second pause between pages and exponential backoff on HTTP 403/429. After two blocked pages in a row a marketplace is skipped for the rest of the run and a warning is shown in the run status. If that happens, enable a proxy in proxyConfiguration.
  • TeePublic is experimental: its anti-bot protection blocks many networks, including most cloud IPs. If TeePublic returns 0 items, the run summary shows the blocked requests; you are only charged for products actually saved.
  • TeePublic search tiles show a shortened tag list, so some TeePublic tags can be cut off mid-word.
  • If a marketplace changes its page layout and nothing can be parsed, the run status says 0 items parsed — selector may be outdated. Please open an issue so the parser can be updated.
  • Prices are the ones shown to the scraper's location (normally USD).

This Actor only accesses publicly available pages, at a modest request rate, and does not collect personal data. You are responsible for using the data in line with the marketplaces' terms and applicable law (for example copyright and trademark rules when creating designs). Do not copy other artists' designs.

Not affiliated with, endorsed by or sponsored by Redbubble or TeePublic. Redbubble and TeePublic are trademarks of their respective owners.

Run locally and deploy

pip install -r requirements.txt
python -m unittest discover -s tests -t . # offline tests (HTML fixtures)
APIFY_LIVE=1 python -m unittest tests.test_live # optional live check
./local_run.sh '{"queries": ["cat"], "maxItemsPerQuery": 20}' # apify run + copies results to cikti/
apify login # once; paste your API token from Console > Settings > API & Integrations
apify push # builds the Docker image on the Apify platform

.actor/pay_per_event.json is not read by the Apify platform. It only feeds the local pay-per-event simulation in local_run.sh (ACTOR_TEST_PAY_PER_EVENT). The real event prices are entered in Apify Console (Publication > Monetization > Pay per event) and must match the event names used in src/main.py.