DEV Community

Colton
Colton

Posted on

How to research a ThemeForest or CodeCanyon niche with sales data (before you build)

Before you spend three months building a WordPress theme or plugin for Envato Market, you can see how the existing items in that niche sell. ThemeForest and CodeCanyon show a sales count on every item page, so the competition is fully public. It's just tedious to collect by hand.

Here's what that research looks like for one niche, booking, and how to run it for yours.

The "booking" niche, 26 October 2026

I took the 60 best-selling results for "booking" on each site:

ThemeForest CodeCanyon AudioJungle (for contrast)
Results for "booking" 4,721 2,484 3,877
Sales of the #1 item 52,700 56,400 2,100
Median sales, top 60 4,800 2,900 63
Median price $69 $49 $16
Top 6 items' share of top-60 sales 38% 46% —
Top 60 updated in 2026 47 of 60 38 of 60 —

What that tells a would-be author:

  • The niche is real but top-heavy. On CodeCanyon, the top 6 booking plugins hold almost half of the top 60's sales. The leader, Bookly PRO, has 56,400 sales at $199.
  • Incumbents are maintained. 47 of the 60 top ThemeForest booking themes were updated this year. You'd be competing with active products, not abandoned ones.
  • Price isn't the leader's weapon. The best seller on CodeCanyon costs $199, four times the $49 median. Buyers in this niche pay for completeness.
  • One author can own a niche. On CodeCanyon, one author, Nota-info, has 115,400 sales across the top 60 booking results.

Caveats: these are the top 60 by sales, not a random sample, so they describe the winners. Envato rounds sales above 1,000 (e.g. 52.7K). Lifetime sales include years-old purchases.

Run it for your niche

I built an Apify Actor for this, ThemeForest & CodeCanyon Scraper. Give it sites and keywords; it returns every item with sales, price, rating, author and last update, plus one market summary per keyword and site.

from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("DevColton/envato-market-scraper").call(run_input={
    "sites": ["themeforest", "codecanyon"],
    "queries": ["booking", "restaurant", "lms"],
    "sort": "sales",
    "maxItemsPerSearch": 60,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    if row["type"] == "keyword-summary":
        print(row["site"], row["query"], row["totalResults"], "results, median sales", row["salesMedian"])
Enter fullscreen mode Exit fullscreen mode

An item looks like this:

{
  "type": "item",
  "site": "codecanyon",
  "title": "Bookly PRO – Appointment Booking and Scheduling Software System",
  "author": "Nota-info",
  "categoryPath": "wordpress/calendars",
  "price": 199.0,
  "sales": 56400,
  "rating": 4.53,
  "reviews": 1200,
  "lastUpdated": "2026-03-24",
  "attributes": {"Software Version": "WordPress 6.9.x", "Compatible With": "Elementor, WooCommerce 9.x.x, WPML"},
  "url": "https://codecanyon.net/item/bookly-booking-plugin-responsive-appointment-booking-and-scheduling/7226091"
}
Enter fullscreen mode Exit fullscreen mode

The summary row per keyword gives total results, total, median and top sales, median price, the top authors by sales and the 10 best sellers, which is enough for a first niche shortlist.

A simple niche score

For each keyword, compare demand (median sales of the top 60) with competition (number of results and how concentrated sales are). A niche with a high median but many results and one dominant item is hard to enter; a moderate median with few results and no clear leader is where a new item has a chance.

Cost and other sites

$1 per 1,000 items, plus $0.003 per keyword summary. It also covers AudioJungle and 3DOcean. ThemeForest is behind a strict firewall, so the Actor uses residential proxies automatically; that's included.

I built this Actor. If you research niches differently and want another field, open an issue on its page.

Top comments (0)