# WordPress Theme Directory Email Scraper (`leads-scraper/wordpress-theme-directory-email-scraper`) Actor

WordPress Theme Directory Email Scraper SD - WordPress Theme Directory Email Scraper is a lead generation tool that extracts leads with public contact emails and profile URLs from WordPress Theme Directory by keyword, location and email domain - WordPress Theme Directory email extractor.

- **URL**: https://apify.com/leads-scraper/wordpress-theme-directory-email-scraper.md
- **Developed by:** [Leads Scraper](https://apify.com/leads-scraper) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.49 / 1,000 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

### WordPress Theme Directory Email Scraper — author contacts from wordpress.org/themes

The **WordPress Theme Directory Email Scraper** collects publicly indexed contact emails for the designers, theme shops and studios who publish themes on `wordpress.org`.
You supply keywords and email domains; it returns emails, account names, theme listing URLs and the snippet each address was found in.

The theme directory is a design vendor marketplace.
Theme authors publish support and business addresses on their listings because users, agencies and hosting partners are expected to contact them.
The WordPress Theme Directory Email Scraper surfaces the ones Google has already indexed.

One honest note up front: theme listings expose a usable handle less consistently than plugin listings do.
In our own measured testing, roughly half of the rows the WordPress Theme Directory Email Scraper returned resolved into a full theme identity, while the rest arrived as an email with partial account details.
Plan for that — the emails are the deliverable, the profile identity is a bonus.

#### What the WordPress Theme Directory Email Scraper does — and does not do

It builds Google queries with the `site:wordpress.org` operator, reads the result pages, and extracts emails from titles and snippets.
Each unique address is deduplicated globally and pushed to an Apify dataset as soon as it is found.

The WordPress Theme Directory Email Scraper does **not** log into WordPress.org, use the theme API, or open the directory in a browser.
No JavaScript rendering, no authentication, no cookies — only publicly indexed search results.

#### Theme authors, not plugin authors

The WordPress Theme Directory Email Scraper treats `/themes/` as the listing path and `plugins` as a non-profile segment.
That means `username` and `profileUrl` resolve to theme listing URLs such as `https://wordpress.org/themes/{username}/`.

If you want plugin developers instead, the [WordPress Plugin Directory Email Scraper](https://apify.com/neuro-scraper/wordpress-plugin-directory-email-scraper) is the sibling Actor for that population.
Same engine, same wordpress.org domain, a different path prefix — and a genuinely different audience, because a theme shop and a plugin vendor are rarely the same business.

#### Who this WordPress theme author email tool is for

Hosting and page-builder companies run the WordPress Theme Directory Email Scraper to recruit theme partners for bundling or compatibility programmes.
Design marketplaces and template businesses use it to source theme authors for a catalogue.

Agencies shortlist theme shops for a client site build or a design refresh.
Analysts point the WordPress Theme Directory Email Scraper at a category for competitive and market research.

### Key features of the WordPress Theme Directory Email Scraper

Everything listed here is behaviour the WordPress Theme Directory Email Scraper genuinely implements.

| Feature | What it means in practice |
|---|---|
| `site:` scoping | Every query is locked to `wordpress.org`, keeping results inside the official directory |
| Theme path recognition | `/themes/` is treated as the listing path, so handles resolve to theme listing URLs |
| Query expansion | Each keyword × domain pair runs as a base query, a quoted query, an `intitle:` query, plus one variant per query modifier |
| Domain-filtered extraction | Only emails on the domains you list survive, so you control the shape of the output |
| Global deduplication | Each address appears once per run, no matter how many queries or pages surfaced it |
| Obfuscation handling | Reads `name [at] domain [dot] com`, `name (at) domain`, `name @ domain.com`, `domain .com`, zero-width characters and the full-width `＠` |
| Junk filter | Rejects placeholders such as `email@`, `yourname@`, `test@`, `xxx@` and single-character locals |
| Boundary-correct matching | `@gmail.com` will not match inside `@gmail.company` or `@gmail.com.br` |
| Soft-wrap repair | Discards a hit that is only the tail of another email in the same block |
| Structural parsing | Locates the `<h3>` title and the smallest surrounding block rather than trusting Google's CSS class names |
| Whole-page fallback | A Google markup change degrades the run to "emails without account details", not "no emails" |
| Block detection | CAPTCHA, "unusual traffic" and consent pages are detected and retried, not counted as empty |
| Retries with backoff | Up to 3 attempts per page, exponential backoff, a fresh proxy session per request |
| End-of-run requeue | Blocked or failed queries get one more pass before the run closes |
| Resumable state | Progress lives in the key-value store, keyed by an input hash, saved on `PERSIST_STATE`, `MIGRATING` and `ABORTING` |
| Async concurrency | An `asyncio` worker pool with a shared stop signal once `maxEmails` is reached |
| Run summary | Pages fetched, blocked pages, retries and emails per page are logged |

### How the WordPress Theme Directory Email Scraper works

Six steps, all visible in the run log.

1. The WordPress Theme Directory Email Scraper reads your input: keywords, location, email domains and limits.
2. It composes Google queries with the `site:` operator against `wordpress.org`, for example `site:wordpress.org wordpress theme developer "@gmail.com"`.
3. It fetches result pages through the Apify **GOOGLE_SERP** proxy using async `aiohttp`.
4. It parses each result block structurally, finding the `<h3>` title and the tightest block around it.
5. It extracts emails from that block text with a domain-filtered regex.
6. It deduplicates globally and pushes each lead to the dataset immediately.

Rows arrive as they are found, so you can start reviewing leads mid-run.
Resumable state means a migration or abort does not send the WordPress Theme Directory Email Scraper back to the beginning.

#### Why query expansion matters on a shared domain

Google returns roughly 300 results for any single query.
The theme directory has far more listings than that, and it shares `wordpress.org` with forums, docs and the plugin directory.

Query expansion is the workaround.
The WordPress Theme Directory Email Scraper rewrites each keyword into several phrasings and pairs it with each modifier, so many narrow, theme-flavoured queries reach further than one broad one.

### Input settings for the WordPress Theme Directory Email Scraper

Nine fields drive the run. Only `keywords` is required; everything else has a working default.

| Field | Type | Default | Meaning |
|---|---|---|---|
| `keywords` | array (required) | `["theme developer", "wordpress theme"]` | Search terms describing the authors you want (niche, job title, industry) |
| `location` | string | `""` | Optional location phrase added to every query |
| `customDomains` | array | `["@gmail.com","@yahoo.com"]` | Only emails on these domains are collected; the leading `@` is optional |
| `maxEmails` | integer 1–10000 | `20` | Stop once this many unique emails have been collected |
| `countryCode` | string | `""` | Two-letter country code for the search proxy (US, GB, DE...) |
| `expandQueries` | boolean | `true` | Search each keyword × domain pair in several phrasings |
| `queryModifiers` | array | `["email","contact","support","developer","publisher"]` | Extra words combined with each keyword when expansion is on |
| `maxPagesPerQuery` | integer 1–50 | `30` | Page cap per query |
| `maxConcurrency` | integer 1–20 | `5` | How many queries run in parallel |

#### Example input for a WordPress theme developer email run

```json
{
  "keywords": ["wordpress theme", "theme developer", "blog theme author"],
  "location": "",
  "customDomains": ["@gmail.com", "@outlook.com"],
  "maxEmails": 250,
  "countryCode": "US",
  "expandQueries": true,
  "queryModifiers": ["email", "contact", "support", "developer", "publisher"],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

Probe first with `maxEmails` around 20–50.
A short WordPress Theme Directory Email Scraper run tells you quickly whether a theme category is well indexed before you scale up.

### Output fields from the WordPress Theme Directory Email Scraper

Every dataset item the WordPress Theme Directory Email Scraper writes carries all fourteen fields below.
Keys are always present; some values are conditional — and on this platform, `username` and `profileUrl` are empty more often than on most.

| Field | Meaning |
|---|---|
| `network` | Platform name |
| `keyword` | The keyword that produced the lead |
| `query` | The exact Google query used |
| `title` | Raw result title |
| `accountName` | Account label Google prints |
| `fullName` | Display name parsed from a profile-style title; empty for non-profile results |
| `username` | URL-safe handle when the platform exposes one; otherwise `null` |
| `profileUrl` | Canonical theme listing URL when a handle is known; otherwise empty |
| `url` | Direct platform link when exposed, else the profile URL |
| `description` | Bio or snippet text, cleaned of labels and counters |
| `email` | Lower-cased email address |
| `emailDomain` | The matched domain (e.g. `@gmail.com`) |
| `possiblyTruncated` | `true` when Google's snippet ellipsis touched the email — verify before sending |
| `foundAt` | ISO 8601 UTC timestamp |

#### Example output row

```json
{
  "network": "WordPress Theme Directory",
  "keyword": "wordpress theme",
  "query": "site:wordpress.org wordpress theme contact \"@gmail.com\"",
  "title": "Marlow Journal - WordPress theme | WordPress.org",
  "accountName": "Ashvale Design",
  "fullName": "Ashvale Design",
  "username": "marlow-journal",
  "profileUrl": "https://wordpress.org/themes/marlow-journal/",
  "url": "https://wordpress.org/themes/marlow-journal/",
  "description": "A minimal editorial theme for writers and small publications. Support: ashvale.themes@gmail.com",
  "email": "ashvale.themes@gmail.com",
  "emailDomain": "@gmail.com",
  "possiblyTruncated": false,
  "foundAt": "2025-04-18T16:38:20Z"
}
```

Export what the WordPress Theme Directory Email Scraper collects as CSV, JSON, Excel or XML, or read it through the Apify API into your CRM.

### Use cases for the WordPress Theme Directory Email Scraper

The theme directory is a vendor marketplace, so these use cases sit in partnership and sourcing work rather than consumer prospecting.

| Use case | How the WordPress Theme Directory Email Scraper helps |
|---|---|
| Theme partner recruitment | Reach theme authors for a bundling, compatibility or marketplace programme |
| Hosting and page-builder partnerships | Build a theme vendor list for a one-click-install or starter-site programme |
| Design vendor sourcing | Shortlist theme shops for a client site build or a design refresh |
| Competitive research | See who publishes in a theme category and how they position their listings |
| Ecosystem sizing | Sample by keyword to gauge how crowded a WordPress theme niche really is |
| Acquisition and portfolio sourcing | Add a contact layer to a category map of the WordPress theme economy |
| Co-marketing outreach | Identify theme authors for joint showcases, guides or template bundles |
| CRM enrichment | Match scraped theme author contacts against accounts you already track |

#### Worked example: sourcing block theme authors

Set `keywords` to `["block theme", "full site editing theme", "wordpress theme developer"]`.
Leave `expandQueries` on so each keyword also runs with `email`, `contact`, `support`, `developer` and `publisher`.

Use free-mail domains in `customDomains` when you want independent designers and small studios.
Swap in a branded domain when you are after established theme shops with a company mailbox.

Run the WordPress Theme Directory Email Scraper once at `maxEmails: 30` to sanity-check the category, then again at your real target.
The second WordPress Theme Directory Email Scraper run reuses the same expansion plan, so the probe costs very little.

### Tips for getting more from the WordPress Theme Directory Email Scraper

Always include a theme word in your keywords.
Because the `site:` query covers all of `wordpress.org`, "theme", "block theme" or "template" is what keeps the WordPress Theme Directory Email Scraper pointed at theme listings rather than forums or plugins.

Design-language keywords work well here.
"portfolio theme", "magazine theme" and "ecommerce theme" give the WordPress Theme Directory Email Scraper far more to work with than a generic term like "wordpress".

Schedule the WordPress Theme Directory Email Scraper monthly with a stable input.
New themes get indexed continuously, so repeat runs keep a theme author contact list current.

Use `customDomains` as a segmentation lever, not just a filter.
Free-mail domains skew towards solo designers; branded domains skew towards established theme shops.

Set `countryCode` for a regional slice of the WordPress design community, and pair it with `location` for a tighter focus.
Do not raise `maxConcurrency` hoping for more leads — extra parallelism will not make the WordPress Theme Directory Email Scraper find emails that are not in the index.

Because theme authors often maintain a public code and design presence elsewhere, pair this Actor with the [GitHub Email Scraper](https://apify.com/leads-scraper/github-email-scraper), the [Figma Community Email Scraper](https://apify.com/neuro-scraper/figma-community-email-scraper) or the [CodePen Email Scraper](https://apify.com/neuro-scraper/codepen-email-scraper).
The same studio frequently shows up in more than one of them under a different public identity.

### Limitations of the WordPress Theme Directory Email Scraper

These are real, and the profile-identity one matters more here than on most platforms.

- **Profile identity resolves less often.** In our own measured testing, about half of the rows carried a resolved theme handle; the rest arrived with an email and partial account details. Treat `username` and `profileUrl` as nice-to-have on this platform.
- **Publicly indexed emails only.** If an author's address is not visible in Google's index, the WordPress Theme Directory Email Scraper cannot find it. Contact forms and images are invisible to it.
- **Google's ~300-result cap.** A single query tops out around 300 results, which is exactly why query expansion exists.
- **`possiblyTruncated`.** When Google's snippet ellipsis touched the email, this flag is `true` and the address may be incomplete. Verify before sending.
- **`username` and `profileUrl` are conditional.** They are only populated when Google's result exposes a handle. Many rows will carry `accountName` and `fullName` with an empty `username` and `profileUrl`. That is a Google limitation, not a bug.
- **wordpress.org is one big domain.** The `site:` query covers the whole domain, so theme-flavoured keywords are what keep results inside the theme directory.
- **Apify GOOGLE_SERP proxy required.** The WordPress Theme Directory Email Scraper cannot run without Apify proxy credentials.
- **Free-plan cap.** Free Apify plans are capped at 100 emails per run; paid plans are uncapped.
- **No guaranteed volume.** Results vary with keywords, domains and location, and no volume is guaranteed.

If full account identity is essential to your workflow, the sibling [WordPress Plugin Directory Email Scraper](https://apify.com/neuro-scraper/wordpress-plugin-directory-email-scraper) resolved identity more consistently in the same testing.
That is a difference in how Google indexes the two sections, not a difference in the code.

### Related Actors

The WordPress Theme Directory Email Scraper shares one engine with the rest of this Developer & Technology family; only the platform config differs.

| Actor | What it collects |
|---|---|
| [App Store Email Scraper](https://apify.com/leads-scraper/app-store-email-scraper) | Public contact emails from App Store |
| [Atlassian Marketplace Email Scraper](https://apify.com/leads-scraper/atlassian-marketplace-email-scraper) | Public contact emails from Atlassian Marketplace |
| [Bitbucket Email Scraper](https://apify.com/neuro-scraper/bitbucket-email-scraper) | Public contact emails from Bitbucket |
| [Chrome Web Store Email Scraper](https://apify.com/leads-scraper/chrome-web-store-email-scraper) | Public contact emails from Chrome Web Store |
| [CodePen Email Scraper](https://apify.com/neuro-scraper/codepen-email-scraper) | Public contact emails from CodePen |
| [Confluence Email Scraper](https://apify.com/neuro-scraper/confluence-email-scraper) | Public contact emails from Confluence |
| [Dev.to Email Scraper](https://apify.com/neuro-scraper/dev-to-email-scraper) | Public contact emails from DEV Community |
| [Docker Hub Email Scraper](https://apify.com/neuro-scraper/docker-hub-email-scraper) | Public contact emails from Docker Hub |
| [Figma Community Email Scraper](https://apify.com/neuro-scraper/figma-community-email-scraper) | Public contact emails from Figma Community |
| [Firefox Add-ons Email Scraper](https://apify.com/neuro-scraper/firefox-add-ons-email-scraper) | Public contact emails from Firefox Add-ons |
| [GitHub Email Scraper](https://apify.com/leads-scraper/github-email-scraper) | Public contact emails from GitHub |
| [GitLab Email Scraper](https://apify.com/neuro-scraper/gitlab-email-scraper) | Public contact emails from GitLab |
| [Google Play Email Scraper](https://apify.com/leads-scraper/google-play-email-scraper) | Public contact emails from Google Play |
| [Hashnode Email Scraper](https://apify.com/neuro-scraper/hashnode-email-scraper) | Public contact emails from Hashnode |
| [HubSpot Marketplace Email Scraper](https://apify.com/leads-scraper/hubspot-marketplace-email-scraper) | Public contact emails from HubSpot Marketplace |
| [Hugging Face Email Scraper](https://apify.com/leads-scraper/hugging-face-email-scraper) | Public contact emails from Hugging Face |
| [Jira Email Scraper](https://apify.com/neuro-scraper/jira-email-scraper) | Public contact emails from Jira |
| [Maven Central Email Scraper](https://apify.com/neuro-scraper/maven-central-email-scraper) | Public contact emails from Maven Central |
| [Microsoft AppSource Email Scraper](https://apify.com/neuro-scraper/microsoft-appsource-email-scraper) | Public contact emails from Microsoft AppSource |
| [Salesforce AppExchange Email Scraper](https://apify.com/leads-scraper/salesforce-appexchange-email-scraper) | Public contact emails from Salesforce AppExchange |
| [Shopify App Store Email Scraper](https://apify.com/leads-scraper/shopify-app-store-email-scraper) | Public contact emails from Shopify App Store |
| [Slack App Directory Email Scraper](https://apify.com/leads-scraper/slack-app-directory-email-scraper) | Public contact emails from Slack App Directory |
| [SourceForge Email Scraper](https://apify.com/leads-scraper/sourceforge-email-scraper) | Public contact emails from SourceForge |
| [Stack Overflow Email Scraper](https://apify.com/leads-scraper/stack-overflow-email-scraper) | Public contact emails from Stack Overflow |
| [Unity Asset Store Email Scraper](https://apify.com/leads-scraper/unity-asset-store-email-scraper) | Public contact emails from Unity Asset Store |
| [Unreal Engine Marketplace Email Scraper](https://apify.com/leads-scraper/unreal-engine-marketplace-email-scraper) | Public contact emails from Unreal Engine Marketplace |
| [WordPress Plugin Directory Email Scraper](https://apify.com/neuro-scraper/wordpress-plugin-directory-email-scraper) | Public contact emails from WordPress Plugin Directory |
| [Zapier App Directory Email Scraper](https://apify.com/leads-scraper/zapier-app-directory-email-scraper) | Public contact emails from Zapier App Directory |
| [App Store Email and Phone Number Scraper](https://apify.com/leads-scraper/app-store-email-and-phone-number-scraper) | Emails and phone numbers from App Store |
| [Atlassian Marketplace Email and Phone Number Scraper](https://apify.com/neuro-scraper/atlassian-marketplace-email-and-phone-number-scraper) | Emails and phone numbers from Atlassian Marketplace |
| [Bitbucket Email and Phone Number Scraper](https://apify.com/neuro-scraper/bitbucket-email-and-phone-number-scraper) | Emails and phone numbers from Bitbucket |
| [Chrome Web Store Email and Phone Number Scraper](https://apify.com/neuro-scraper/chrome-web-store-email-and-phone-number-scraper) | Emails and phone numbers from Chrome Web Store |
| [CodePen Email and Phone Number Scraper](https://apify.com/neuro-scraper/codepen-email-and-phone-number-scraper) | Emails and phone numbers from CodePen |
| [Confluence Email and Phone Number Scraper](https://apify.com/neuro-scraper/confluence-email-and-phone-number-scraper) | Emails and phone numbers from Confluence |
| [DEV Community Email and Phone Number Scraper](https://apify.com/neuro-scraper/dev-to-email-and-phone-number-scraper) | Emails and phone numbers from DEV Community |
| [Docker Hub Email and Phone Number Scraper](https://apify.com/neuro-scraper/docker-hub-email-and-phone-number-scraper) | Emails and phone numbers from Docker Hub |
| [Figma Community Email and Phone Number Scraper](https://apify.com/neuro-scraper/figma-community-email-and-phone-number-scraper) | Emails and phone numbers from Figma Community |
| [Firefox Add-ons Email and Phone Number Scraper](https://apify.com/neuro-scraper/firefox-add-ons-email-and-phone-number-scraper) | Emails and phone numbers from Firefox Add-ons |
| [GitHub Email and Phone Number Scraper](https://apify.com/leads-scraper/github-email-and-phone-number-scraper) | Emails and phone numbers from GitHub |
| [GitLab Email and Phone Number Scraper](https://apify.com/neuro-scraper/gitlab-email-and-phone-number-scraper) | Emails and phone numbers from GitLab |
| [Google Play Email and Phone Number Scraper](https://apify.com/leads-scraper/google-play-email-and-phone-number-scraper) | Emails and phone numbers from Google Play |
| [Hashnode Email and Phone Number Scraper](https://apify.com/neuro-scraper/hashnode-email-and-phone-number-scraper) | Emails and phone numbers from Hashnode |

### FAQ about the WordPress Theme Directory Email Scraper

#### What is the difference between this Actor and the WordPress Plugin Directory Email Scraper?

Both search `wordpress.org`, but with different path prefixes. This one treats `/themes/` as the listing path and `plugins` as a non-profile segment, so handles resolve to theme listings. The [WordPress Plugin Directory Email Scraper](https://apify.com/neuro-scraper/wordpress-plugin-directory-email-scraper) does the reverse. They are separate Actors because theme authors and plugin authors are different audiences with different default keywords.

#### How reliable is profile identity on this platform?

Less reliable than on the plugin side. In our own measured testing, about half of the rows the WordPress Theme Directory Email Scraper returned resolved into a full theme identity, and the rest returned an email with partial account details. The email itself is the dependable field.

#### Why does the WordPress Theme Directory Email Scraper leave `username` and `profileUrl` empty on some rows?

Those fields are only filled when Google's result exposes a usable handle. When Google prints only a display name you still get `accountName` and `fullName`, but no handle. This is a Google limitation, not a bug — and it happens more often on theme listings than on plugin listings.

#### Does the WordPress Theme Directory Email Scraper use the WordPress.org API?

No. It uses no WordPress API, does not log in, and does not open the directory website. Every field comes from publicly indexed Google search results.

#### Is this Actor affiliated with or endorsed by WordPress or Automattic?

No. It is an independent tool built on public Google results, and it is not officially supported by, affiliated with or endorsed by WordPress.org or Automattic.

#### Which domain does the WordPress Theme Directory Email Scraper search?

`wordpress.org`. Queries are scoped with Google's `site:` operator, and theme-flavoured keywords keep the results inside the theme directory.

#### What does `possiblyTruncated: true` mean?

Google's snippet ellipsis touched the email, so the address may be cut off. Treat those rows as leads to verify rather than addresses to mail.

#### How many emails can one WordPress Theme Directory Email Scraper run return?

Free Apify plans stop at 100 emails per run. Paid plans are uncapped and bounded by `maxEmails`, which accepts 1 to 10000.

#### Do I need a proxy?

Yes. The WordPress Theme Directory Email Scraper requires the Apify GOOGLE_SERP proxy and cannot run without Apify proxy credentials.

#### Why did I get fewer emails than `maxEmails`?

Google caps a single query at roughly 300 results, and only some listings publish an indexed email. Widening `keywords` and `customDomains` usually helps more than raising `maxPagesPerQuery`.

#### Can I find premium theme shops that do not list on wordpress.org?

Only if a wordpress.org page mentions them and Google has indexed an email there. Studios selling exclusively from their own site are outside the directory and outside this Actor's scope.

#### Is this data compliant to use?

The WordPress Theme Directory Email Scraper only collects addresses already public in Google's index. How you use them — GDPR, CAN-SPAM, local marketing rules — remains your responsibility.

### Leave a review

If the WordPress Theme Directory Email Scraper saved you time, please leave a star rating and a
short review on the Actor page.

Reviews are how other buyers judge whether a tool works, and they tell us which features to
build next.

If something did not work, email <neurodata.apify@gmail.com>
instead - bugs get fixed faster than they get complained about.

### Support

Questions, feature requests or a custom build? Email **neurodata.apify@gmail.com**.

# Actor input Schema

## `keywords` (type: `array`):

Search terms describing the WordPress Theme Directory accounts you want (niche, job title, industry).

## `location` (type: `string`):

Optional location phrase added to every query (e.g. "New York").

## `customDomains` (type: `array`):

Only emails ending with one of these domains are collected. With or without the leading @. Each domain is searched separately, so more domains means more results but a longer run - remove some for a faster, narrower search, or add your own (e.g. @company.com).

## `maxEmails` (type: `integer`):

Stop once this many unique emails have been collected.

## `countryCode` (type: `string`):

Two-letter country code for the search proxy (e.g. US, GB, DE). Empty for any.

## `expandQueries` (type: `boolean`):

Search each keyword x domain pair with several phrasings. Recommended - Google caps a single query at ~300 results.

## `queryModifiers` (type: `array`):

Extra words combined with each keyword when Expand queries is on. Tuned for WordPress Theme Directory.

## `maxPagesPerQuery` (type: `integer`):

Google rarely returns more than ~30 pages for one query.

## `maxConcurrency` (type: `integer`):

How many queries run in parallel.

## Actor input object example

```json
{
  "keywords": [
    "theme developer",
    "wordpress theme"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "maxEmails": 20,
  "countryCode": "",
  "expandQueries": true,
  "queryModifiers": [
    "email",
    "contact",
    "support",
    "developer",
    "publisher"
  ],
  "maxPagesPerQuery": 30,
  "maxConcurrency": 5
}
```

# Actor output Schema

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

Records produced by WordPress Theme Directory Email Scraper, stored in the run's default dataset.

# 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 = {
    "keywords": [
        "theme developer",
        "wordpress theme"
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com"
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "support",
        "developer",
        "publisher"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("leads-scraper/wordpress-theme-directory-email-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 = {
    "keywords": [
        "theme developer",
        "wordpress theme",
    ],
    "location": "",
    "customDomains": [
        "@gmail.com",
        "@yahoo.com",
    ],
    "countryCode": "",
    "queryModifiers": [
        "email",
        "contact",
        "support",
        "developer",
        "publisher",
    ],
}

# Run the Actor and wait for it to finish
run = client.actor("leads-scraper/wordpress-theme-directory-email-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 '{
  "keywords": [
    "theme developer",
    "wordpress theme"
  ],
  "location": "",
  "customDomains": [
    "@gmail.com",
    "@yahoo.com"
  ],
  "countryCode": "",
  "queryModifiers": [
    "email",
    "contact",
    "support",
    "developer",
    "publisher"
  ]
}' |
apify call leads-scraper/wordpress-theme-directory-email-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,leads-scraper/wordpress-theme-directory-email-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/ljqTiAx8gri1jk8W9/builds/VheYMMGFVSa33W7IG/openapi.json
