# WordPress.org · Unique Plugin Author Emails | $2 / 1k (`corent1robert/wordpress-plugin-author-contacts`) Actor

Export unique WordPress.org plugin authors for hosting, security and WP-tool outreach. Public email, website, GitHub, installs and plugin portfolio — one author per row, not per plugin. Keyword, tag, plugin URL, or popular catalog. No login. No API key.

- **URL**: https://apify.com/corent1robert/wordpress-plugin-author-contacts.md
- **Developed by:** [Corentin Robert](https://apify.com/corent1robert) (community)
- **Categories:** Lead generation, Developer tools, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.40 / 1,000 unique plugin authors

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/platform/actors/running/actors-in-store#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

### What does WordPress.org Plugin Author Contacts do?

This Actor builds an **outreach file** from the public [WordPress.org plugin directory](https://wordpress.org/plugins). **One row per unique author** — not one row per plugin.

You are not here to dump 60,000 plugin listings. You want the people who already ship plugins: **who to email**, **which site they run**, **whether they scale** (active installs / plugin count / years on the directory).

Each row is that file, when the author publishes it:

- **Public inbox** from the plugin description, WordPress.org profile, plugin homepage or a same-origin contact page
- **Website and GitHub**
- **Active installs, plugin count, tags, years on the directory**
- **Sample plugin** (highest-install listing in this run)

Empty fields mean the author did not publish that data — not a failed scrape. Two plugins under the same WordPress.org username stay **one lead**.

**No login. No WordPress.org API key. No wp-admin access.**

### Who is this for?

| You are… | Typical goal | Suggested setup |
|---|---|---|
| Hosting / performance SaaS | Plugin authors who already have traffic to pitch hosting, CDN or cache | Search `smtp` or tag **Performance**, **Require public email = Yes** |
| Security / malware vendor | Authors of security, backup and login plugins | Tag **Security** (or keyword `security`) then sort by `totalActiveInstalls` |
| WP agency / plugin marketplace | Independent vendors to partner or resell with | Tag **WooCommerce** / **SEO**, skip Automattic |
| Outbound / SDR | CRM-ready inbox + website | **Authors — Outreach** view, CSV |
| Market research | Who scales on WordPress.org | Paid **Full catalog**, raise Max authors |

**What you get by default:** unique author, public email when published, website, GitHub when listed, install totals, plugin portfolio in this run — **only fields already public**. Automattic / WordPress.org-authored plugins are skipped unless you turn that filter off.

**Typical fill (public SMTP slice, Aug 2026):** about **4 in 10** popular SMTP plugins yielded a public inbox after the plugin site / contact page (e.g. `support@gosmtp.net`, `hi@yaycommerce.com`). Mega-plugins (Elementor, Yoast, Jetpack) often publish a company site and no mailbox — turn **Require public email** to **No** if you still want those rows.

### How to scrape WordPress.org plugin authors

1. Open this Actor in Apify Console.
2. **Step 1 — Mode:** leave **Search** (a niche) or switch to **Full catalog** (unique authors from popular plugins, paid). Catalog ignores keyword and tag.
3. **Step 2 — Search** (Search mode only): keep `smtp`, or paste `https://wordpress.org/plugins/contact-form-7/`. Optionally pick a tag.
4. Leave **Max authors** at 20 for a first run, then raise it. Full catalog: raise toward 5,000.
5. Click **Start**. Download JSON / CSV / Excel. Use **Authors — Outreach** for the inbox; **Overview** for who scales.

In Search mode, query **or** tag is required. Full catalog is paid Apify plans only. Search uses WordPress.org’s public plugin index then merges authors — it is **not** a full census of a tag. For a wide unique-author file, use Full catalog.

See the **Input** tab for the visible options (proxy is optional and hidden).

### Ready-made examples (published tasks)

| Example | What you get |
|---|---|
| [Find WordPress security plugin authors with emails](https://apify.com/corent1robert/wordpress-plugin-author-contacts/examples/security-plugin-authors-emails) | Unique security-plugin authors, public inbox, CRM-ready |
| [Export WooCommerce plugin authors for CRM](https://apify.com/corent1robert/wordpress-plugin-author-contacts/examples/woocommerce-plugin-authors) | WooCommerce tag, one author per row |
| [Refresh WordPress author contacts from a plugin URL](https://apify.com/corent1robert/wordpress-plugin-author-contacts/examples/plugin-url-contact-form-7-refresh) | Paste a plugin URL, get the author file |
| [WordPress SMTP plugin authors for hosting outreach](https://apify.com/corent1robert/wordpress-plugin-author-contacts/examples/smtp-plugin-authors-outreach) | SMTP niche, outreach view |

### What data can this WordPress plugin author scraper extract?

| Field | Why it matters for ICP |
|---|---|
| `authorEmail`, `emails`, `emailSource` | Public inbox to email (domain-matching preferred over generic `support@`) |
| `authorWebsite`, `authorDomain`, `githubUrl`, `authorProfileUrl` | Company site + GitHub + WordPress.org profile |
| `totalActiveInstalls`, `pluginCount`, `yearsOnDirectory` | Who already scales |
| `tags`, `pluginSlugs`, `samplePluginName`, `samplePluginIcon`, `listingUrl` | Portfolio in this run + sample listing and logo |
| `sourceQuery`, `scrapedAt` | Run metadata |

Not extracted (and not invented): private WordPress.org account emails, guessed inboxes that were never published, wp-admin users, theme authors (plugins directory only).

### How much does it cost to scrape WordPress.org plugin authors?

This Actor uses **pay-per-event** pricing. **Actor start is $0.00005** (Apify default — first 5 seconds of compute included). You only pay per **unique author written to the dataset**. You are not charged per plugin. Paid Apify plans get a lower price per author.

**Free plan:** a run stops at **20 authors** — enough to test. Keyword / tag: paid plans can raise Max authors up to **2,000**. **Full catalog** (paid only) goes up to **5,000** unique authors.

| | Free | Bronze | Silver | Gold | Platinum | Diamond |
|---|---|---|---|---|---|---|
| Per unique author | $0.002 | $0.0018 | $0.0016 | $0.0014 | $0.0012 | $0.001 |
| 20 authors (Try) | **$0.04** | $0.04 | $0.03 | $0.03 | $0.02 | $0.02 |
| 1,000 authors | **$2.00** | $1.80 | $1.60 | $1.40 | $1.20 | $1.00 |
| 5,000 authors | **$10.00** | $9.00 | $8.00 | $7.00 | $6.00 | $5.00 |

Totals include the $0.00005 start. WordPress plugin scrapers on Apify charge **per plugin** (~$3–$50 / 1k listings, duplicates included). Here two plugins from the same author are **one charge**, with a public inbox when they published one. **$2 / 1k unique authors** vs **$3 / 1k plugin rows** on the current directory leader — same budget, unique vendors, better inbox.

Set **Max authors** and, on Apify, a **max total charge** so a run cannot exceed your budget. A row with an empty email still counts if **Require public email** is **No** — the author did not publish that field; they were still scraped.

Default memory is **512 MB** (HTTP only, no browser).

### Is it legal to scrape WordPress.org?

This Actor only accesses data that WordPress.org makes **publicly available** on [wordpress.org/plugins](https://wordpress.org/plugins) and public author sites (plugin homepage, contact page, profile). As with any data containing personal information, ensure your use complies with GDPR and relevant regulations. Do not scrape personal data unless you have a legitimate reason to do so.

### Is scraping WordPress.org free?

The WordPress.org plugin API is public and needs no API key. You still pay Apify for the run (pay-per-event above). There is no WordPress.org fee.

### Input

See the **Input** tab for full configuration options.

Visible Console fields:

| Field | Default | Notes |
|---|---|---|
| `coverage` | Search | **Search** = keyword/URL and/or tag. **Full catalog** = paid, popular plugins. Catalog ignores query and tag. |
| `query` | `smtp` | Search mode. Keyword or `https://wordpress.org/plugins/{slug}`. Also accepts author, tag and browse URLs. Ignored in Full catalog. |
| `tag` | None | Search mode, optional. Ignored in Full catalog. |
| `maxAuthors` | 20 | Unique authors (1–2000 Search, 1–5000 catalog). Free plan: 20 / run |
| `requireEmail` | `yes` | **Yes** (default) skips authors with no public email. **No** keeps them |
| `skipAutomattic` | `yes` | **Yes** (default) drops Automattic / WordPress.org-authored plugins |
| `minInstalls` | 0 | Skip authors whose merged active-install sum is below this floor |

Proxy, delay, and retries are hidden. Direct HTTP usually works. API-only keys: `proxyConfiguration`, `minDelayMs` (default 200), `maxRequestRetries` (default 5), `browse` (`popular` / `new` / `updated` / `featured`, catalog default `popular`), `verboseLogs` (default false — directory status codes and per-plugin skip reasons).

Example:

```json
{
  "coverage": "search",
  "query": "smtp",
  "tag": "",
  "maxAuthors": 20,
  "requireEmail": "yes",
  "skipAutomattic": "yes",
  "minInstalls": 0
}
```

### Output

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

```json
{
  "authorName": "Softaculous",
  "authorUsername": "softaculous",
  "authorProfileUrl": "https://profiles.wordpress.org/softaculous/",
  "authorWebsite": "https://gosmtp.net",
  "authorDomain": "gosmtp.net",
  "authorEmail": "support@gosmtp.net",
  "emails": ["support@gosmtp.net", "sales@gosmtp.net"],
  "emailSource": "contact-page",
  "githubUrl": null,
  "pluginCount": 1,
  "pluginSlugs": ["gosmtp"],
  "totalActiveInstalls": 500000,
  "tags": ["SMTP", "email"],
  "yearsOnDirectory": 6.6,
  "samplePluginName": "GoSMTP",
  "samplePluginIcon": "https://ps.w.org/gosmtp/assets/icon-256x256.png",
  "samplePluginUrl": "https://wordpress.org/plugins/gosmtp/",
  "listingUrl": "https://wordpress.org/plugins/gosmtp/",
  "sourceQuery": "smtp",
  "scrapedAt": "2026-08-17T08:00:00.000Z"
}
```

Console views: **Authors — Overview** (who scales), **Authors — Outreach** (inbox + site), **Authors — Portfolio** (tags + tenure).

### Tips

- A WordPress.org **tag is not the full catalog**. Search pages the public plugin index then merges authors. For a wide unique-author file, set **Mode** to **Full catalog**.
- Rows are ranked by **merged active installs** in the run, so a 20-author SMTP run surfaces the vendors who already scale — not a random page-1 tourist list.
- Empty `authorEmail` means no public inbox on the directory, profile or plugin site.
- `pluginCount` is how many of that author’s plugins appeared **in this run’s pool** — not a guaranteed full WordPress.org portfolio.
- Placeholder addresses (`example@mail.com`) are dropped.

### Local development

```bash
cd wordpress-plugin-author-contacts
npm install
apify run
```

Default Try input is Search `smtp`, 20 authors. That writes `storage/datasets/default/` **and** `./output.csv` (Excel-ready).

**Full catalog (unique authors from popular plugins):**

```bash
npm run start:catalog
```

That uses root `input.json` (`coverage: catalog`, `maxAuthors: 5000`, email filter off). `apify run` otherwise validates `storage/key_value_stores/default/INPUT.json` — pass `--input-file=./input.json` so the catalog file wins. Do not use `npm start` for a simulated Actor run.

Engine tests (query detect + live directory):

```bash
npm test
```

### Related Actors

These Actors cover the same job or the next step in the workflow. Apify’s automatic recommendations stay inside one category — this list is the rest of the toolkit.

| Actor | Use it when |
|---|---|
| [HubSpot Marketplace App Partners](https://apify.com/corent1robert/hubspot-marketplace-app-partners) | Same unique-publisher model on the HubSpot Marketplace |
| [Shopify App Store Developer Contacts · Emails & Address](https://apify.com/corent1robert/shopify-app-developer-contacts) | Unique Shopify App Store publishers |
| [Google Play Developer Contacts · Emails & Legal Address](https://apify.com/corent1robert/google-play-developer-contacts) | Google Play publisher emails — unique developers, not per app |
| [Chrome Web Store Developer Contacts](https://apify.com/corent1robert/chrome-web-store-developer-contacts) | Chrome Web Store publisher emails |
| [Google Workspace Marketplace Vendors](https://apify.com/corent1robert/google-workspace-marketplace-vendors) | Google Workspace Marketplace unique vendors |
| [SW Website Rankings Scraper](https://apify.com/corent1robert/similarweb-scraper) | Rank the website / domain after you have the URL |

### FAQ, disclaimers, and support

#### Is there a WordPress.org plugin author email API?

No official public one for this job. This Actor is a **WordPress plugin author email API alternative**: it reads the public plugin directory and public author sites WordPress.org already shows.

#### How do I find WordPress plugin author emails?

Run a **keyword** (`smtp`, `security`) or a **tag** (WooCommerce, SEO, Security). Leave **Require public email** on **Yes**. Download the **Outreach** view.

#### How is this different from a WordPress plugin scraper?

Catalog scrapers dump **one row per plugin** (version, screenshots, reviews). This Actor dumps an **outreach file**: unique authors with a public inbox, website, installs and portfolio. Same publisher, one row.

#### Can I scrape the whole WordPress.org plugin directory?

**Paid plans:** set **Mode** to **Full catalog** and **Max authors** to 5,000. That walks **popular** plugins into unique authors (not 60k plugin rows).

**Free plan:** no. Full catalog is rejected; keyword / tag runs stop at 20 authors.

#### Does this scrape private emails?

No. It only reads fields the author published on WordPress.org, their plugin homepage or a public contact page. It does not guess inboxes from GitHub commit history.

#### Why do two plugins become one row?

Rows are unique by WordPress.org **username**. Several plugins from the same publisher share one contact file.

#### Why did I get fewer rows than Max authors?

The directory ran out of publicly listed plugins in that query/tag, or **Require public email** is **Yes** and some authors have no inbox. On the **Free plan**, each run is also capped at **20 authors**. Check `OUTPUT` and `RUN_LOG`.

#### Why is an email empty?

Empty fields mean the author did not show them on the directory or plugin site — not a failed scrape.

#### Do I pay an Actor-start fee?

Almost nothing: **$0.00005** per run (Apify default, first 5 seconds of compute included). The bill is the authors written to the dataset.

#### Do I pay per plugin?

No. Two plugins from the same author = **one** username = **one** charge. Pricing is per unique author, not per listing.

#### Do I pay for rows with an empty email?

Only if **Require public email** is **No**. Pricing is **per author scraped**, not per filled field.

#### Is a proxy required?

No. Enable Apify Proxy only if you get blocked.

Our Actors are ethical and do not extract private user data. They only extract what the author has chosen to publish on WordPress.org or a public plugin site (public email, website, GitHub). We therefore believe that our Actors, when used for ethical purposes by Apify users, are safe. However, you should be aware that your results could contain personal data. Personal data is protected by the GDPR in the European Union and by other regulations around the world. You should not scrape personal data unless you have a legitimate reason to do so. If you are unsure, consult your lawyers.

Use the **Issues** tab for bugs and feature requests. Use the **API** tab to run the Actor programmatically. Custom needs: corentin@outreacher.fr

*Keywords: WordPress.org scraper, WordPress plugin author email, WordPress plugin developer leads, WordPress.org plugin directory contacts, WordPress plugin author API.*

# Actor input Schema

## `coverage` (type: `string`):

**Search (default):** use Step 2 (keyword, plugin URL and/or tag).

**Full catalog (paid):** walks popular WordPress.org plugins into unique authors. Leave Step 2 empty — it is ignored. Set Max authors to how many authors you will pay for. Free Apify plans cannot use Full catalog.

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

Examples: `smtp` · `security` · `https://wordpress.org/plugins/contact-form-7/`

Leave empty if you only pick a tag. **Ignored** when Mode is Full catalog.

## `tag` (type: `string`):

Optional, Search mode only. Leave **None** if you already typed a query. **Ignored** when Mode is Full catalog.

## `maxAuthors` (type: `integer`):

**Global** cap of unique author rows (one person/company, many plugins). Default **20** keeps first runs cheap. Keyword mode: up to **2,000**. Full catalog (paid): up to **5,000**.

## `requireEmail` (type: `string`):

**Yes (default):** skip authors with no public inbox on the directory or their plugin site. **No:** also keep authors with only a website.

## `skipAutomattic` (type: `string`):

**Yes (default):** keep independent plugin authors only (Jetpack / WordPress.org-authored plugins are dropped). **No:** include Automattic.

## `minInstalls` (type: `integer`):

Skip authors whose plugins in this run total fewer active installs than this. **0** = no floor.

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

Optional. Direct HTTP is enough for the public directory. Enable Apify Proxy only if you get blocked.

## `minDelayMs` (type: `integer`):

Minimum pause between every HTTP request.

## `maxRequestRetries` (type: `integer`):

Retries on block / 5xx, rotating the proxy session when a proxy is configured.

## Actor input object example

```json
{
  "coverage": "search",
  "query": "smtp",
  "tag": "",
  "maxAuthors": 20,
  "requireEmail": "yes",
  "skipAutomattic": "yes",
  "minInstalls": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "minDelayMs": 200,
  "maxRequestRetries": 5
}
```

# Actor output Schema

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

Who scales: outreach email, installs, plugin count

## `outreach` (type: `string`):

Inbox, website and GitHub for a first email

## `portfolio` (type: `string`):

Plugin count, tags, tenure and sample listing

## `dataset` (type: `string`):

All author rows

## `output` (type: `string`):

Authors scraped, plugins fetched, filters

## `runLog` (type: `string`):

Live progress

# 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 = {
    "query": "smtp"
};

// Run the Actor and wait for it to finish
const run = await client.actor("corent1robert/wordpress-plugin-author-contacts").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 = { "query": "smtp" }

# Run the Actor and wait for it to finish
run = client.actor("corent1robert/wordpress-plugin-author-contacts").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 '{
  "query": "smtp"
}' |
apify call corent1robert/wordpress-plugin-author-contacts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,corent1robert/wordpress-plugin-author-contacts"
        }
    }
}

```

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/cyTdjbrGzssiY3auo/builds/PrsGuQsyoZtZPdjpO/openapi.json
