# Zapier Apps · Publisher Emails by Category (`corent1robert/zapier-app-directory-developer-contacts`) Actor

Export unique Zapier publishers with public emails from their websites. One vendor per row: inbox, phone, site, categories. Zapier does not list emails — we read the company site when they publish them. No login. No API key.

- **URL**: https://apify.com/corent1robert/zapier-app-directory-developer-contacts.md
- **Developed by:** [Corentin Robert](https://apify.com/corent1robert) (community)
- **Categories:** Lead generation, Integrations, Developer tools
- **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 zapier publishers

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

## Zapier Apps · Publisher Emails by Category

Export **unique Zapier App Directory publishers** with a **public email and phone from their company website** — **one vendor per row**, not one row per Zapier app.

**No login. No Zapier API key. No Zapier partner account.**

### What does Zapier Publisher Emails do?

This Actor builds an **outreach / partnership file** from the public [Zapier App Directory](https://zapier.com/apps). You are not here to dump 10,000 app cards. You want the SaaS companies that already paid to be on Zapier: **who to email**, **which site they run**, **whether they are Premium**.

Zapier **does not list publisher emails** on the directory. Each row is that file when the company publishes it on **their own site**:

- **Public inbox** (`mailto:` or email in the page) from the homepage and contact / legal pages
- **Phone** when they publish a `tel:` link
- **Website, domain, Zapier profile, categories, Premium flag, app portfolio** in this run

Empty `developerEmail` means the company did not publish an inbox (form / chat only) or the site refused the visit — not a guessed `john@company.com`. Two Zapier apps under the same website stay **one lead**.

### Who is this for?

| You are… | Typical goal | Suggested setup |
|---|---|---|
| Outbound / SDR on SaaS | A first-email list, not 10k app rows | Keep **Find public emails** On, category **Sales & CRM**, cap 50–200, **Outreach** view |
| Partnership / alliances at a SaaS | Co-sell with apps already on Zapier | Same; filter `contactStatus` = `email` |
| Integration / Zap agency | Publishers who already invest in Zapier | **Premium apps only** + emails On |
| Marketplace researcher | Coverage of a Zapier niche | Full catalog (paid); emails Off if you only need domains |

**What you get by default:** unique publisher, **public email when the company site lists one**, phone when listed, website, categories, Premium, sample Zapier profile. Zapier-built utilities (Filter, Formatter, Webhooks) are skipped unless you turn that filter off.

**Typical fill (public Sales & CRM slice, 20 publishers, Aug 2026):** **11 / 20** rows had a public inbox (e.g. `communication@sellsy.com`, `support@roofr.com`, `info@dealfront.com`, `privacy@apollo.io`); **6 / 20** had a phone. About a quarter of sites are form-only (`no_contact`). A few large or dead hosts refuse the visit (`crawl_failed`).

### Saved tasks (Console)

Four Actor tasks are created on your account (Examples tab needs a **public** Actor):

| Example | Console |
|---|---|
| Find Zapier CRM app publishers with emails | [task](https://console.apify.com/actors/tasks/nXfygMSB9ePjuM3NR) |
| Export Zapier marketing app vendors for CRM | [task](https://console.apify.com/actors/tasks/z5nQX5ZkECrMJsZLU) |
| Refresh Zapier publisher contacts from an app URL | [task](https://console.apify.com/actors/tasks/82M9MHphlCYpG3z7U) |
| Zapier Premium app publishers for cold outreach | [task](https://console.apify.com/actors/tasks/Pq5Hn7rmdzfHa0eZg) |

When the Actor is Store-public, run `node published-tasks/bootstrap-tasks.mjs --publish` to land them on the Examples tab.

1. Open this Actor in Apify Console.
2. **Step 1 — Mode:** leave **Search** (a niche) or switch to **Full catalog** (every unique publisher, paid). Catalog ignores keyword and category.
3. **Step 2 — Search** (Search mode only): leave category **Sales & CRM**, or paste `https://zapier.com/apps/hubspot/integrations`. Optionally type a keyword.
4. Keep **Find public emails** **On** (recommended). Leave **Max vendors** at 20 for a first run, then raise it.
5. Click **Start**. Download JSON / CSV / Excel. Use **Partners — Outreach** for the inbox; **Overview** for email + site + category.

In Search mode, query **or** category is required. Full catalog is a paid-scale job (thousands of unique publishers). See the **Input** tab for the visible options (proxy is hidden).

### What data can this Zapier App Directory scraper extract?

| Field | Why it matters for ICP |
|---|---|
| `developerEmail`, `emails`, `emailSource` | Public inbox from the publisher website (`publisher-website` when filled) |
| `phone`, `phones` | Public `tel:` when they publish one |
| `contactStatus` | Filter the export: `email` / `email_and_phone` vs `no_contact` vs `crawl_failed` |
| `publisherName`, `website`, `websiteDomain` | Company + clean host for CRM match |
| `categories`, `isPremium`, `zapUsageCount` | Niche + Zapier Premium signal |
| `appCount`, `appSlugs`, `appNames`, `sampleAppName`, `zapierProfileUrl` | Portfolio in this run + sample listing |
| `websiteFetchUrl`, `scrapedAt` | Which page produced the inbox + run time |

Not extracted (and not invented): Zapier account emails, guessed `firstname@domain` patterns, private partner-dashboard contacts, Zap run history inside a customer workspace.

Two apps that share the same company website stay **one lead**.

### How much does it cost to scrape Zapier publishers?

This Actor uses **pay-per-event** pricing. **Actor start is $0.00005** (Apify default — first 5 seconds of compute included). You pay per **unique publisher written to the dataset**. When **Find public emails** is On, you also pay one **website crawl** per publisher whose site is fetched. You are not charged per Zapier app card. Paid Apify plans get a lower price per event.

**Free plan:** a run is meant for a **20-vendor try**. Keyword / category: paid plans can raise Max vendors up to **2,000**. **Full catalog** (paid) goes up to **5,000** unique publishers (the public directory is ~10,000 apps; several apps can share one site).

| | Free | Bronze | Silver | Gold | Platinum | Diamond |
|---|---|---|---|---|---|---|
| Per unique publisher | $0.002 | $0.0018 | $0.0016 | $0.0014 | $0.0012 | $0.001 |
| Per website crawl (emails On) | $0.0015 | $0.0014 | $0.0013 | $0.0012 | $0.0011 | $0.001 |
| 20 vendors, emails **Off** | **$0.04** | $0.04 | $0.03 | $0.03 | $0.02 | $0.02 |
| 20 vendors, emails **On** (Try) | **$0.07** | $0.06 | $0.06 | $0.05 | $0.05 | $0.04 |
| 1,000 vendors, emails Off | **$2.00** | $1.80 | $1.60 | $1.40 | $1.20 | $1.00 |
| 1,000 vendors, emails On | **$3.50** | $3.20 | $2.90 | $2.60 | $2.30 | $2.00 |

Totals include the $0.00005 start. Zapier “app directory” scrapers on Apify, when they exist, dump **listings**. Here two apps from the same publisher are **one charge**, and the inbox comes from the **company site** because Zapier never published it.

Set **Max vendors** and, on Apify, a **max total charge** so a run cannot exceed your budget. A row with an empty email still counts — the publisher was scraped; they did not publish an inbox.

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

### Is it legal to scrape the Zapier App Directory?

This Actor only accesses data that Zapier makes **publicly available** on [zapier.com/apps](https://zapier.com/apps) (name, website, categories, Premium) and, when **Find public emails** is On, data the **publisher chose to show** on their own public website. 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.

### Input

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

Visible Console fields:

| Field | Default | Notes |
|---|---|---|
| `coverage` | Search | **Search** = keyword/URL and/or category. **Full catalog** = paid walk of the directory. Catalog ignores query and category. |
| `query` | empty | Search mode. Keyword or `https://zapier.com/apps/{slug}/integrations`. Ignored in Full catalog. |
| `category` | Sales & CRM | Search mode, optional if you typed a query. Ignored in Full catalog. |
| `maxVendors` | 20 | Unique publishers (0 = no extra cap besides your plan). Free try: 20 |
| `find public emails` (`websiteEnrichment`) | **On** | **On** (recommended) reads inbox/phone from the company site. **Off** = website + categories only |
| `skipZapierBuilt` | Yes | Drops Zapier-built utilities |
| `premiumOnly` | No | Keep Zapier Premium integrations only |

Proxy and verbose logs are hidden. Direct HTTP usually works.

**Search — Sales & CRM with emails (default Try):**

```json
{
  "coverage": "search",
  "query": "",
  "category": "sales-crm",
  "maxVendors": 20,
  "websiteEnrichment": "yes",
  "skipZapierBuilt": "yes",
  "premiumOnly": "no"
}
```

**One app URL:**

```json
{
  "coverage": "search",
  "query": "https://zapier.com/apps/hubspot/integrations",
  "category": "",
  "maxVendors": 20,
  "websiteEnrichment": "yes"
}
```

**Full catalog (paid, domains only):**

```json
{
  "coverage": "catalog",
  "maxVendors": 500,
  "websiteEnrichment": "no",
  "skipZapierBuilt": "yes"
}
```

### Output

You can download the dataset in JSON, HTML, CSV, or Excel.

```json
{
  "publisherName": "Sellsy",
  "website": "https://www.sellsy.com",
  "websiteDomain": "sellsy.com",
  "developerEmail": "communication@sellsy.com",
  "phone": null,
  "emails": ["communication@sellsy.com"],
  "phones": [],
  "emailSource": "publisher-website",
  "websiteFetchUrl": "https://www.sellsy.com",
  "contactStatus": "email",
  "categories": ["Sales & CRM"],
  "isPremium": false,
  "isZapierBuilt": false,
  "appCount": 1,
  "appSlugs": ["sellsy"],
  "appNames": ["Sellsy"],
  "sampleAppName": "Sellsy",
  "zapierProfileUrl": "https://zapier.com/apps/sellsy/integrations",
  "scrapedAt": "2026-08-20T09:00:00.000Z"
}
```

Console views: **Partners — Overview** (email first), **Partners — Outreach** (inbox + site for a first mail).

`contactStatus`: `email` · `phone` · `email_and_phone` · `no_contact` (site loaded, nothing public) · `crawl_failed` (site refused) · `website_only` (Find public emails Off).

### Tips

- **Find public emails On** is the product. Off is a cheaper domain list if you already enrich in Clay.
- A Zapier **category is not the full catalog**. For every unique publisher, set **Mode** to **Full catalog**.
- Filter CSV on `contactStatus` = `email` or `email_and_phone` before you import a sequencer.
- `appCount` is how many of that vendor’s Zapier apps appeared **in this run** — not a guaranteed full Zapier portfolio.
- Empty email + `no_contact` is expected on large product sites (Crunchbase-style). Keep the website.

### Also available

**[HubSpot Marketplace App Partners](https://apify.com/corent1robert/hubspot-marketplace-app-partners)** — unique HubSpot app vendors with named outreach contacts.\
**[Slack Marketplace · Unique Developer Emails](https://apify.com/corent1robert/slack-app-directory-developer-contacts)** — unique Slack app publishers with public listing emails.\
**[WordPress.org Plugin Author Contacts](https://apify.com/corent1robert/wordpress-plugin-author-contacts)** — unique plugin authors with public emails.

### How to run via API

```bash
curl "https://api.apify.com/v2/acts/corent1robert~zapier-app-directory-developer-contacts/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"coverage":"search","category":"sales-crm","maxVendors":20,"websiteEnrichment":"yes"}'
```

### Local development

```bash
cd zapier-app-directory-developer-contacts
npm install
npm test
apify run --purge --input-file=./input.json
```

Default Try input is Search **Sales & CRM**, 20 vendors, **Find public emails On**. That writes `storage/datasets/default/`. Do not use `npm start` for a simulated Actor run.

Emails Off (directory only):

```bash
apify run --purge --input-file=./input.json
```

Edit `websiteEnrichment` to `"no"` in that file, or use a copy. Engine tests (slug / domain / email harvest):

```bash
npm test
```

### Performance

HTTP only, 512 MB default, 4h timeout. A **20-vendor Sales & CRM run with emails On** typically finishes in **under a minute**. Full catalog (~10,000 apps → unique publishers) is a longer paid job — budget time and **website crawl** events if emails stay On.

### FAQ, disclaimers, and support

#### Is there a Zapier publisher email API?

No public one for this job. Zapier’s Partner API is for products, not a directory of publisher inboxes. This Actor is a **Zapier app publisher email alternative**: directory for the company, company website for the inbox.

#### How do I find Zapier app publisher emails?

Leave **Find public emails** On. Pick a **category** (Sales & CRM, Marketing) or paste an app URL. Download the **Outreach** view and keep rows where `developerEmail` is filled.

#### Why is the email empty?

Zapier never listed it. Either the company only has a form (`no_contact`), the site refused the visit (`crawl_failed`), or you turned Find public emails Off (`website_only`). Check `contactStatus`.

#### Do you invent emails from the company name?

No. Only addresses published on the vendor site.

#### How is this different from a Zapier apps scraper?

Listing scrapers dump **one row per app** (descriptions, categories). This Actor dumps a **partnership file**: unique vendors with a public inbox when they publish one. Same publisher, one row.

#### Can I scrape the whole Zapier directory?

**Paid plans:** set **Mode** to **Full catalog** and raise **Max vendors**. ~10,000 public apps collapse to unique websites. With emails On, expect crawl events on top of publisher events.

**Free plan:** keep a 20-vendor try.

#### Do I pay per Zapier app?

No. Two apps from the same website = **one** publisher = **one** `partner-row`. Emails On adds **one** `website-crawl` when the site is fetched.

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

Yes if the publisher was written to the dataset. Pricing is **per vendor scraped**, not per filled inbox. Filter `contactStatus` after the run.

#### Is a proxy required?

No. Enable Apify Proxy only if you get blocked.

#### Do I need a Zapier API key?

No. Public directory + public publisher websites only.

Our Actors are ethical and do not extract private user data. They only extract what Zapier shows on the public App Directory and what the publisher chose to publish on their own website. 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: Zapier App Directory scraper, Zapier app publisher email, Zapier integration partner leads, Zapier SaaS contacts, Zapier app developer emails.*

# Actor input Schema

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

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

**Full catalog (paid):** walks the public directory into unique publishers. Leave Step 2 empty — it is ignored. Free Apify plans cannot use Full catalog.

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

Examples: `hubspot` · `https://zapier.com/apps/hubspot/integrations`

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

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

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

## `maxVendors` (type: `integer`):

**Global** cap of unique publisher rows (one company, many Zapier apps). Default **20**. Keyword/category: up to **2,000**. Full catalog (paid): up to **5,000**. **0** = no extra cap besides your paid plan.

## `skipZapierBuilt` (type: `string`):

**Yes (default):** keep independent publishers only. **No:** include Zapier-built utilities (Filter, Formatter, Webhooks).

## `premiumOnly` (type: `string`):

**No (default):** all listed apps. **Yes:** keep Zapier Premium integrations only (stronger partnership signal).

## `websiteEnrichment` (type: `string`):

**On (recommended):** open each publisher website and export the public inbox and phone when they are on the site. First run on Sales & CRM typically fills an email on about half the rows.

**Off:** website + categories only — cheaper if you already enrich domains in Clay.

## `websiteEmailMaxPages` (type: `integer`):

Homepage plus same-origin contact/legal pages when Site enrichment is On.

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

Optional. Direct HTTP is enough for the public directory.

## `verboseLogs` (type: `boolean`):

Add debug lines to the run log.

## Actor input object example

```json
{
  "coverage": "search",
  "category": "sales-crm",
  "maxVendors": 20,
  "skipZapierBuilt": "yes",
  "premiumOnly": "no",
  "websiteEnrichment": "yes",
  "websiteEmailMaxPages": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  },
  "verboseLogs": false
}
```

# Actor output Schema

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

Email, phone, website, categories

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

Inbox and website for a first partnership email

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

All publisher rows

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

Publishers scraped and 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": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("corent1robert/zapier-app-directory-developer-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": "" }

# Run the Actor and wait for it to finish
run = client.actor("corent1robert/zapier-app-directory-developer-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": ""
}' |
apify call corent1robert/zapier-app-directory-developer-contacts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,corent1robert/zapier-app-directory-developer-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/xA7zir7jHfYP0e4h4/builds/8qyRkXKpfFmogsYnT/openapi.json
