# ThemeForest Search Listings Scraper — WordPress Theme Data API (`umararshad2/themeforest-search-listings-scraper`) Actor

Scrape ThemeForest public search & category listing cards into JSON: title, price, author, sales, rating, category, images. Unofficial Envato marketplace research scraper. PPE $1.20/1k.

- **URL**: https://apify.com/umararshad2/themeforest-search-listings-scraper.md
- **Developed by:** [Umar Arshad](https://apify.com/umararshad2) (community)
- **Categories:** E-commerce, Lead generation, Automation
- **Stats:** 2 total users, 1 monthly users, 93.8% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.20 / 1,000 listing scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## ThemeForest Search Listings Scraper — WordPress Theme Data API

Scrapes **[ThemeForest](https://themeforest.net)** (Envato Market) public search and category listing cards into clean JSON on Apify — titles, prices, authors, sales, ratings, categories, and preview images for marketplace research.

**Store:** https://apify.com/umararshad2/themeforest-search-listings-scraper

> **Unofficial community Actor — not affiliated with Envato Pty Ltd. or ThemeForest.** Collects only publicly visible search/listing card fields. No login, no seller dashboards, no private Envato APIs. Use responsibly with polite rate limits.

### Try it in under 5 minutes

**Who for:** WordPress agencies, theme resellers, competitive intelligence tools, and marketers who need ThemeForest search→listing rows as structured JSON/CSV.

1. **Try free** — Apify includes **[$5/month free credit](https://apify.com/pricing)** for new and free-plan users. Enough to pull a first niche batch. PPE is **$1.20 / 1,000 listings**.
2. Paste a search query (e.g. `wordpress agency`) or a public category URL like `https://themeforest.net/category/wordpress`.
3. Export CSV/JSON from the run dataset.

### Why this Actor

ThemeForest is the global Envato marketplace for WordPress themes and site templates. Apify Store has near-zero dedicated ThemeForest listing scrapers (Elements/CodeCanyon Actors exist; ThemeForest search cards do not). This Actor focuses on **reliable public listing-card rows** at **$1.20 / 1k**.

Built with **Crawlee CheerioCrawler** on public HTML. Defaults to **Apify UNBLOCKER** (ThemeForest is Cloudflare-protected; datacenter IPs usually get a challenge page). Bounded concurrency (2) and ~24 req/min.

### What it scrapes

Public search / category pages only:

1. **Search queries** — builds `https://themeforest.net/search/{term}?term=...` with optional `sort` and `page`.
2. **Start URLs** — public `/search/...` or `/category/...` URLs you paste.
3. **Card fields** — `listingId`, `title`, `itemUrl`, `price`, `priceCurrency`, `originalPrice`, `author`, `authorUrl`, `sales`, `rating`, `reviewCount`, `category`, `tags`, `thumbnail`, `previewUrl`, `isOnSale`, plus provenance (`searchQuery`, `sourceUrl`, `scrapedAt`).

**Out of MVP:** full item description HTML, review text crawl, author portfolio-wide catalogs, license purchase flows.

**Never requested:** login, checkout, cart configure endpoints as primary crawl targets, or private seller APIs.

### Pricing (PPE)

**$1.20 / 1,000 listings** via custom event `listing-scraped` ($0.0012 each), plus a small `apify-actor-start` ($0.00005). No platform-usage pass-through. The synthetic event `apify-default-dataset-item` is **not** enabled, so a listing is not billed twice.

**Proxy note:** Unblocker / Residential bandwidth is billed by Apify separately from PPE. Prefer `UNBLOCKER`; `RESIDENTIAL` is also supported with `apifyProxyCountry: "US"` (or `GB`).

Memory: **512–2048 MB** (default 1024).

### Example input

```json
{
  "searchQueries": ["wordpress agency"],
  "sort": "sales",
  "maxItems": 100,
  "maxPages": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": ["UNBLOCKER"]
  }
}
```

Or pass explicit URLs:

```json
{
  "startUrls": [
    "https://themeforest.net/category/wordpress",
    "https://themeforest.net/search/shopify%20fashion?term=shopify%20fashion&sort=date"
  ],
  "maxItems": 50,
  "maxPages": 2
}
```

### Example output

```json
{
  "listingId": "20264492",
  "title": "WoodMart - Multipurpose WooCommerce Theme",
  "itemUrl": "https://themeforest.net/item/woodmart-woocommerce-theme/20264492",
  "url": "https://themeforest.net/item/woodmart-woocommerce-theme/20264492",
  "author": "xtemos",
  "authorUrl": "https://themeforest.net/user/xtemos",
  "price": 69,
  "priceCurrency": "USD",
  "originalPrice": null,
  "sales": 119400,
  "salesLabel": "119.4K Sales",
  "rating": 4.78,
  "reviewCount": 26600,
  "category": "Business",
  "categoryUrl": "https://themeforest.net/category/wordpress/corporate/business",
  "tags": ["wordpress", "ecommerce", "woocommerce"],
  "thumbnail": "https://market-resized.envatousercontent.com/…",
  "previewUrl": "https://preview.themeforest.net/item/…/full_screen_preview/20264492",
  "isOnSale": false,
  "searchQuery": "wordpress agency",
  "sourceUrl": "https://themeforest.net/search/wordpress%20agency",
  "scrapedAt": "2026-10-03T04:30:00.000Z",
  "source": "themeforest"
}
```

### Anti-bot / troubleshooting

ThemeForest protects public pages with **Cloudflare**. If a run returns 0 items:

1. Ensure `proxyConfiguration.useApifyProxy: true` with `apifyProxyGroups: ["UNBLOCKER"]`.
2. Retry with `["RESIDENTIAL"]` and `apifyProxyCountry: "US"`.
3. Lower `maxPages` — concurrency is already capped; avoid hammering.
4. Confirm your query/category returns results in a normal browser.

### Related Actors (same account)

- [Etsy Search Listings Scraper](https://apify.com/umararshad2/etsy-search-listings-scraper)
- [SoftwareSuggest Scraper](https://apify.com/umararshad2/softwaresuggest-scraper)
- [The Manifest Agency Scraper](https://apify.com/umararshad2/manifest-agency-scraper)
- [GoodFirms Scraper](https://apify.com/umararshad2/goodfirms-scraper)
- [SelectedFirms Scraper](https://apify.com/umararshad2/selectedfirms-scraper)
- [Adzuna Jobs Scraper](https://apify.com/umararshad2/adzuna-jobs-scraper)

### SEO / discovery keywords

ThemeForest scraper, ThemeForest search scraper, ThemeForest listings scraper, WordPress theme data API, Envato ThemeForest scraper, ThemeForest price monitor, ThemeForest sales data, WordPress theme marketplace scraper, Apify ThemeForest Actor, PPE listing-scraped, Cheerio Crawlee ThemeForest.

### License / disclaimer

ISC. Unofficial third-party tool. Not endorsed by or affiliated with Envato Pty Ltd. or ThemeForest. You are responsible for complying with applicable laws and Envato’s terms for your use case. Use responsibly.

# Actor input Schema

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

One or more ThemeForest search keywords (e.g. wordpress agency, shopify fashion). Each query is crawled independently with pagination. Provide searchQueries and/or startUrls.

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

Optional public ThemeForest search or category URLs (https://themeforest.net/search/... or /category/...). When set, crawled in addition to searchQueries. Do not pass login, cart, checkout, or private seller URLs.

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

Hard cap on listing rows written to the dataset (after dedupe by listingId). Default 100, maximum 5000.

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

Max paginated ThemeForest pages per query/start URL (?page=1,2,…). Default 5. Keep modest — the Actor is rate-limited (maxConcurrency 2, ≤24 req/min).

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

Public ThemeForest sort query param. Mapped to sort=: relevancy (omit/best match), sales, date (newest), rating, price_asc / price, price_desc, trending.

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

Optional ThemeForest category path used when building search URLs, e.g. wordpress or wordpress/corporate. Ignored for explicit startUrls that already include a category.

## `useMockData` (type: `boolean`):

Force fixture mode (no live ThemeForest calls). For local CI only.

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

Apify Proxy settings. ThemeForest is Cloudflare-protected; datacenter IPs usually get a challenge page. Default UNBLOCKER. RESIDENTIAL also supported. Proxy bandwidth is billed by Apify on top of PPE.

## Actor input object example

```json
{
  "searchQueries": [
    "wordpress agency"
  ],
  "maxItems": 20,
  "maxPages": 1,
  "sort": "relevancy",
  "useMockData": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "UNBLOCKER"
    ]
  }
}
```

# Actor output Schema

## `listings` (type: `string`):

Dataset of ThemeForest listing rows (listingId, title, price, author, sales, rating, category, image, URL).

# 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": [
        "wordpress agency"
    ],
    "maxItems": 20,
    "maxPages": 1
};

// Run the Actor and wait for it to finish
const run = await client.actor("umararshad2/themeforest-search-listings-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": ["wordpress agency"],
    "maxItems": 20,
    "maxPages": 1,
}

# Run the Actor and wait for it to finish
run = client.actor("umararshad2/themeforest-search-listings-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": [
    "wordpress agency"
  ],
  "maxItems": 20,
  "maxPages": 1
}' |
apify call umararshad2/themeforest-search-listings-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,umararshad2/themeforest-search-listings-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/Eep1uOyovSGxOxlX5/builds/KVBHLg6YnG8b2Poa4/openapi.json
