# Atlassian Marketplace · Unique Vendor Emails (`corent1robert/atlassian-marketplace-vendor-contacts`) Actor

Export unique Atlassian Marketplace vendors with public email, phone, HQ and website. One publisher per row, not per app. Public directory — no Atlassian login.

- **URL**: https://apify.com/corent1robert/atlassian-marketplace-vendor-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 marketplace vendors

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

## Atlassian Marketplace · Unique Vendor Emails

Export **unique Atlassian Marketplace publishers** for partnership and outreach. Public vendor email, phone, HQ and website — **one company per row**, not one row per app.

**No login. No API key. No Atlassian account.**

### Who is this for?

| You are… | Typical goal | Suggested setup |
|----------|--------------|-----------------|
| Atlassian / ISV partnerships | Co-sell or acquire Marketplace vendors | Host product **Jira**, Find public emails **On** |
| Outbound / SDR | Inbox + HQ for a first email | Dataset view **Outreach**, filter `contactStatus` = `email` |
| Agency selling Atlassian services | Independent vendors by product | **Confluence** or **Jira Service Management** |
| Competitive intel / M\&A | Portfolio size, partner tier, installs | View **Qualify**, raise Max vendors |
| RevOps / Clay | Domain + public inbox | Enrichment **Off** if you already crawl sites |

**What you get by default** — vendor name, Marketplace profile email and phone when the publisher listed them, HQ address, website, partner tier, categories, app count and a sample listing URL.

**When to enable Find public emails** — leave **On** unless you already enrich domains elsewhere. The Actor uses the Marketplace inbox first and only opens the company site when inbox or phone is missing.

### Ready-made examples (published tasks)

Saved tasks land in the **Examples** tab after the Actor is public. Until then they live as private Console tasks.

| Example | Best for |
|---------|----------|
| Jira Marketplace vendors with emails | Flagship outreach list |
| Confluence app publishers | Second host product |
| Refresh one vendor from a Marketplace URL | Alternate input |
| Paid Cloud vendors for partnership | Commercial filter |

### Quick start

1. Open the Actor **Input** tab.
2. Leave **Mode** on Search and **Host product** on Jira.
3. Keep **Find public emails** On.
4. Click **Start**.
5. Download JSON / CSV from the Dataset tab. Use the **Outreach** view for CRM columns.

### What it extracts

| Category | Fields |
|----------|--------|
| Identity | `publisherName`, `vendorId`, `vendorUrl`, `website`, `websiteDomain` |
| Contact | `developerEmail`, `phone`, `emails`, `phones`, `contactStatus`, `emailSource` |
| HQ | `hqLocation`, `city`, `country` |
| Qualify | `partnerTier`, `categories`, `hostProducts`, `totalInstalls`, `appCount`, `isPaid` |
| Portfolio | `appNames`, `sampleAppName`, `listingUrl`, `addonKeys` |

Fill rates vary by vendor. Independent Marketplace profiles usually publish a support or sales inbox. Atlassian-owned apps are skipped by default.

### Input

| Parameter | Type | Default | Description |
|-----------|------|---------|-------------|
| `coverage` | String | `search` | `search` or `catalog` (paid full walk) |
| `hostProduct` | String | `jira` | Jira, Confluence, JSM, Bitbucket, … Search mode only |
| `query` | String | — | Keyword, `/apps/…` URL, `/vendors/…` URL, or addon key |
| `hosting` | String | any | `cloud`, `dataCenter`, `server` |
| `maxVendors` | Integer | `20` | Unique publishers. `0` = no extra cap |
| `skipAtlassianPublishers` | String | `yes` | Drop Atlassian-owned apps |
| `paidOnly` | String | `no` | Paid Marketplace apps only |
| `websiteEnrichment` | String | `yes` | Site crawl when inbox or phone is missing |

API-only: `proxyConfiguration` (cloud runs default to Apify datacenter proxy), `websiteEmailMaxPages` (1–8, default 5), `verboseLogs`.

#### Search — Jira vendors

```json
{
  "coverage": "search",
  "hostProduct": "jira",
  "maxVendors": 20,
  "websiteEnrichment": "yes"
}
```

#### Marketplace vendor URL

```json
{
  "coverage": "search",
  "query": "https://marketplace.atlassian.com/vendors/1210578/seibert-draw-io",
  "hostProduct": "",
  "maxVendors": 1
}
```

### Output example

```json
{
  "publisherName": "Tempo Software",
  "developerEmail": "sales@tempo.io",
  "phone": "+16175550100",
  "website": "https://www.tempo.io",
  "websiteDomain": "tempo.io",
  "contactStatus": "email_and_phone",
  "emailSource": "marketplace-vendor",
  "hqLocation": "Burlington, Massachusetts, United States of America",
  "country": "United States of America",
  "partnerTierLabel": "Platinum",
  "categoriesLabel": "Time tracking",
  "appCount": 2,
  "sampleAppName": "Timesheets by Tempo",
  "listingUrl": "https://marketplace.atlassian.com/apps/1212121/timesheets-by-tempo"
}
```

Download JSON, CSV, Excel or HTML from the Dataset tab.

### How to use

**Host product**

1. Set Mode to Search.
2. Pick **Jira** or **Confluence**.
3. Optionally set Paid apps only.
4. Click Start.

**URL**

1. Copy an app or vendor URL from [marketplace.atlassian.com](https://marketplace.atlassian.com).
2. Paste it into Keyword or Marketplace URL.
3. Set Host product to **Any** if you only want that publisher.
4. Click Start.

### How it works

1. Read public Marketplace app cards (host product, keyword or URL).
2. Deduplicate by vendor id (Tempo’s apps become one row).
3. Load the vendor profile for email, phone, HQ and website.
4. If inbox or phone is missing and Find public emails is On, open the company site.
5. Write unique vendors as they become complete.

### How much does it cost to scrape Atlassian Marketplace vendors?

Pay-per-event on unique **vendors**, not apps. HTTP-only — no browser.

| Scenario | Approx. cost (Free tier) |
|----------|--------------------------|
| 20 vendors, first test | Actor start + 20 × $0.002 ≈ **$0.04** |
| 1,000 unique vendors | ≈ **$2** + start |
| Site crawl when inbox/phone missing | + $1.50 / 1,000 sites |

| | Free | Bronze | Silver | Gold |
|--|------|--------|--------|------|
| Unique vendor | $2.00 / 1k | $1.80 | $1.60 | $1.40 |
| Website crawl | $1.50 / 1k | $1.40 | $1.30 | $1.20 |

Compute stays low (512 MB HTTP). No residential proxy required for Marketplace profiles.

### Is it legal to scrape Atlassian Marketplace?

This Actor only reads data Atlassian publishes on the Marketplace (vendor profiles and app cards). Emails and phones are those the publisher listed. As with any file that contains personal or business contact data, make sure your use complies with GDPR and similar rules. See [Apify on the legality of web scraping](https://blog.apify.com/is-web-scraping-legal/).

### FAQ

**Do I get one row per app?** No. Two Tempo apps → one Tempo row.

**Where do emails come from?** The public vendor profile (`email` / support email). Not guessed from the website unless Find public emails is On and the profile inbox or phone is missing.

**Can I include Atlassian-owned apps?** Set Skip Atlassian-owned listings to No.

**Does Full catalog work on the free Apify plan?** No. Use Search with a host product.

### Local development

```bash
npm install
cp input.json storage/key_value_stores/default/INPUT.json
apify run --purge
```

`apify run` validates `storage/key_value_stores/default/INPUT.json` against the input schema. Use `--input-file=./input.json` to force the repo-root preset. Local `storage/` is not uploaded to Apify Console.

```bash
npm test
```

### Also available

**[Salesforce AppExchange · Partner Emails](https://apify.com/corent1robert/salesforce-appexchange-vendor-contacts)** — unique ISVs, listing emails, HQ.\
**[Slack Marketplace · Developer Emails](https://apify.com/corent1robert/slack-app-directory-developer-contacts)** — unique Slack app publishers.\
**[Zapier App Directory · Developer Contacts](https://apify.com/corent1robert/zapier-app-directory-developer-contacts)** — unique Zapier publishers.

### Support

Questions, custom Marketplace slices, or CRM mapping: <corentin@outreacher.fr> or the Issues tab on the Actor page.

Ready? Host product **Jira**, Find public emails **On**, click **Start**.

# Actor input Schema

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

**Search (default):** use Step 2 (keyword, Marketplace URL and/or host product).

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

## `hostProduct` (type: `string`):

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

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

Examples: `timesheet` · paste an app page (`/apps/…`) or vendor page (`/vendors/…`) · or an app key (`com.vendor.app`).

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

## `hosting` (type: `string`):

Optional. Keep Cloud, Data Center or Server apps only.

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

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

## `skipAtlassianPublishers` (type: `string`):

**Yes (default):** keep independent vendors only. **No:** include Atlassian-published apps.

## `paidOnly` (type: `string`):

**No (default):** free and paid apps. **Yes:** keep paid Marketplace apps only (stronger commercial signal).

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

**On (recommended):** use the vendor inbox and phone when the publisher listed them. If either is missing, open the company website for a public email / phone.

**Off:** Marketplace fields only — cheaper if you already enrich domains in Clay.

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

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

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

Add debug lines to the run log.

## Actor input object example

```json
{
  "coverage": "search",
  "hostProduct": "jira",
  "hosting": "",
  "maxVendors": 20,
  "skipAtlassianPublishers": "yes",
  "paidOnly": "no",
  "websiteEnrichment": "yes",
  "websiteEmailMaxPages": 5,
  "verboseLogs": false
}
```

# Actor output Schema

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

Email, phone, website, HQ, partner tier

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

Inbox and website for a first partnership email

## `qualify` (type: `string`):

Partner tier, installs, host products, paid signal

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

All vendor rows

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

Vendors 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/atlassian-marketplace-vendor-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/atlassian-marketplace-vendor-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/atlassian-marketplace-vendor-contacts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,corent1robert/atlassian-marketplace-vendor-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/8poQR2bWnu4X5h4qi/builds/Jz3A3Xa3glD1hAikC/openapi.json
