# Shopify App Store Scraper: Developer Emails & Support Contacts (`datagleaner/shopify-app-developer-contacts`) Actor

Shopify App Store apps with their developer's support email, website and address, plus rating and reviews. $0.002 per app with an email. Search by keyword or category, or give app or developer URLs; apps without an email are free. No login.

- **URL**: https://apify.com/datagleaner/shopify-app-developer-contacts.md
- **Developed by:** [Data Gleaner](https://apify.com/datagleaner) (community)
- **Categories:** Lead generation, E-commerce, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$2.00 / 1,000 app with developer emails

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

## Shopify App Developer Contacts: Support Email, Website

Get the **developer behind any Shopify App Store app**, with the **support email, website, postal address and partner page**, plus the app's rating, review count, pricing, categories and launch date. It answers requests such as "list Shopify review apps and their developer contact emails", "Shopify app developer email", "Shopify App Store contacts", "app developer support email" and "who makes this Shopify app". Search by keyword, read a whole category, list everything one developer publishes, or paste app URLs. **You pay $0.002 only for an app where a developer or support email was found; an app without one is returned free.** No login, no API key, no browser.

Built for AI agents and lead-generation pipelines as well as people: one row per app, contact fields first, and the price tied to the answer you wanted.

### What it returns

Every Shopify App Store listing carries a support section that the developer fills in. This Actor reads that section from the app page's own developer block, never from a scan of the whole page, so emails quoted in reviews or shown on "similar apps" cards never leak into a row.

| Group | Fields |
|---|---|
| Developer contact | `supportEmail`, `developerName`, `developerPartnerUrl`, `developerWebsite`, `developerAddress`, `developerCountry`, `privacyPolicyUrl`, `emails[]`, `emailSource` |
| App | `appName`, `appUrl`, `handle`, `tagline`, `rating`, `reviewCount`, `pricingSummary`, `hasFreePlan`, `pricingPlans[]`, `categories[]`, `languages[]`, `launchedAt`, `builtForShopify`, `worksWith[]`, `description`, `iconUrl` |
| From the developer's site (optional) | `supportPhone`, `socials{}` (LinkedIn, X, Facebook, Instagram, YouTube, GitHub and more), more `emails[]` |
| Developer pages | `developerAppCount` for apps found through a developer URL |

With `crawlDeveloperWebsite` on, it also visits up to **3 pages of each developer's own website** (home page, then its contact or about page) to add a phone number, social profiles and further emails such as sales@ or partners@. Only addresses on the developer's own domain, a domain named after the developer, or webmail are kept. A developer with 20 apps has its site read once per run.

### Use cases

- **SaaS partnership and BD teams**: list every app in a category (reviews, upsell, subscriptions, shipping) with the developer's email and partner page, and reach out about integrations.
- **App acquirers and brokers**: find apps by rating, review count, launch date and developer size (`developerAppCount`), and contact the owner directly.
- **Agencies**: find integration partners and the apps your clients already use, with a direct support contact.
- **Sellers of developer tools and services** (testing, analytics, payments, localization): build a target list of Shopify app developers with their country and website.
- **An AI agent** asked "which Shopify apps do X, and who do I email?" that needs clean rows and pays only for hits.

### Input

| Field | Meaning |
|---|---|
| `searchQueries` | Shopify App Store searches, e.g. `product reviews`, `upsell`. Up to `maxApps` apps each, in the store's own order. |
| `appUrls` | App pages such as `https://apps.shopify.com/judgeme`, or a bare handle `judgeme`. |
| `categoryUrls` | Category pages such as `https://apps.shopify.com/categories/marketing-and-conversion-social-trust-product-reviews`. The category's full list is read, up to `maxApps`. Feature filters in the URL are kept. |
| `developerUrls` | Developer pages such as `https://apps.shopify.com/partners/judge-me`: every app that developer publishes, with its app count. |
| `maxApps` | Apps taken from each search, category or developer (default 50). App URLs are always read. |
| `crawlDeveloperWebsite` | Also read the developer's website for a phone, socials and more emails (default false). |
| `onlyWithEmail` | Output only apps with an email (default false). Apps without one are free either way. |
| `requestDelaySecs` | Pause between App Store requests (default 1.5 seconds, with jitter; about 40 apps a minute). The store answers fast clients with "too many requests", and the Actor slows down further on its own when that happens. |
| `requestTimeoutSecs`, `proxyConfiguration` | Network options. No proxy by default. |

Leave everything empty to run a sample of 5 apps for "product reviews" (about 15 seconds).

```json
{
  "searchQueries": ["product reviews", "upsell"],
  "maxApps": 50,
  "onlyWithEmail": true
}
```

```json
{
  "categoryUrls": ["https://apps.shopify.com/categories/marketing-and-conversion-social-trust-product-reviews"],
  "developerUrls": ["https://apps.shopify.com/partners/klaviyo"],
  "appUrls": ["https://apps.shopify.com/judgeme", "loox"],
  "crawlDeveloperWebsite": true
}
```

### Output

One row per app. Fields the listing does not publish are `null`, never invented.

```json
{
  "appName": "LAI Product Reviews App",
  "appUrl": "https://apps.shopify.com/lai-reviews",
  "handle": "lai-reviews",
  "tagline": "Convert more with product reviews, photos, testimonials",
  "rating": 4.9,
  "reviewCount": 562,
  "pricingSummary": "Free",
  "hasFreePlan": true,
  "pricingPlans": [],
  "categories": ["Product reviews", "Social proof"],
  "languages": ["English", "Portuguese (Brazil)", "French", "Chinese (Simplified)", "Swedish", "Spanish", "Turkish"],
  "launchedAt": "2020-05-04",
  "builtForShopify": true,
  "worksWith": ["Shopify Flow", "Shopify Admin", "Klaviyo: Email Marketing & SMS", "PageFly Landing Page Builder"],
  "developerName": "Vegahub Technology Inc",
  "developerPartnerUrl": "https://apps.shopify.com/partners/vegahub-technology-inc",
  "developerWebsite": "https://laireviews.io",
  "developerAppCount": null,
  "supportEmail": "help@laireviews.io",
  "supportPhone": null,
  "developerAddress": "Oakville, ON, CA",
  "developerCountry": "CA",
  "emails": [
    {"email": "help@laireviews.io", "source": "appListing", "foundOn": "https://apps.shopify.com/lai-reviews"}
  ],
  "socials": {},
  "privacyPolicyUrl": "https://laireviews.io/privacy-policy",
  "emailSource": "appListing",
  "hasEmail": true,
  "description": "LAI Product Reviews helps you collect photo and video reviews quickly. ...",
  "iconUrl": "https://cdn.shopify.com/app-store/listing_images/c2fde25432c44d6aeefb31ba06bbb974/icon/CMry4dSL_YIDEAE=.png",
  "pagesFollowed": 0,
  "status": "ok",
  "error": null,
  "input": "search:product reviews",
  "scrapedAt": "2026-10-09T15:31:31+00:00"
}
```

- `supportEmail` is the address the developer published for merchants on the listing. `emails[]` lists it first, then any found on the developer's site, each with `source` (`appListing`, `website` or `privacyPolicy`) and the page it was `foundOn`.
- `developerAddress` is the address on the listing, often a full street address and sometimes only a city; `developerCountry` is its ISO country code.
- `pricingSummary` is the listing's own pricing line; `pricingPlans[]` gives each plan's name, price as shown and summary when the listing has a plan table.
- `launchedAt` is the date the app launched on the App Store (YYYY-MM-DD).
- An app or input that cannot be read gets a row with `status: "error"` and an `error` message, and is not charged.

The dataset has two views: **App developer contacts** (one row per app) and **All emails** (one row per email, with where it was found).

### Pricing

Pay per answer, one event:

- **`app-with-email`: $0.002** for each app where a developer or support email was found.
- An app with **no email is free**. It is still returned with its website, address and app data.
- A row that failed (`status: "error"`) is free.

**Worked example.** Search "upsell" for 30 apps: on our test run all 30 listed a support email, so the run cost 30 x $0.002 = **$0.06**. 1,000 apps across a few categories cost about **$2**, less any apps without an email.

**Compared with other tools.** Shopify App Store scrapers on the Apify Store charge about $0.002 to $0.005 per app whether or not it carries a contact, and none is built around the developer contact. Here every billed row has an email, and a miss costs nothing. Set a maximum total charge on the run and the Actor stops cleanly when it is reached.

### What to expect

Measured on test runs on 2026-10-09:

- Search "upsell", 30 apps: **30 of 30 had a support email (100%)**, plus developer name, partner page, address and launch date on all 30, and a website on 27 or 28 (two runs). 32 requests, under a minute, no rate limiting at the default pace.
- A category, a developer page and app URLs together, 7 apps with `crawlDeveloperWebsite` on: 7 of 7 had an email; the website step added social profiles for 6 and extra emails (sales@, partners@, gdpr@) for 3.

Shopify asks every developer for a support email, so nearly every listed app has one. Phone numbers are not shown on Shopify listings any more; `supportPhone` is filled only when the developer's own website shows one, which few app companies do.

### Limits

- Pace: about 40 apps a minute at the default 1.5-second spacing. The App Store rate-limits faster clients; lowering `requestDelaySecs` below 1 brings "too many requests" answers, which the Actor waits out.
- Search returns 24 apps per page in Shopify's own ranking; deep pages of a broad search drift away from the keyword.
- `developerAppCount` is filled for apps found through a developer URL, the only time the developer page is read.
- Reviews themselves are not collected; `rating` and `reviewCount` are.
- Only public App Store pages and the developer's own public website are read. Social platforms are listed, never scraped.

### Use it from n8n, Make, Zapier or an AI agent

Actor ID: `datagleaner/shopify-app-developer-contacts`

Minimal input:

```
{"searchQueries": ["product reviews"]}
```

Each tool below runs this Actor with your own Apify API token.

- **n8n:** add the **Apify** node (`@apify/n8n-nodes-apify`). On n8n Cloud you install it from the community node registry. Choose **Run an Actor and get dataset**, set Actor to `datagleaner/shopify-app-developer-contacts` and paste the input above.
- **Make:** use the Apify app's **Run an Actor** module, then **Get Dataset Items** to read the results. **Watch Actor Runs** can trigger a scenario when a run finishes.
- **Zapier:** use the Apify action **Run Actor**, then the search **Fetch dataset items**. The trigger **Finished Actor run** starts a Zap when a run ends.
- **AI agents (MCP):** connect to `https://mcp.apify.com?tools=datagleaner/shopify-app-developer-contacts`. Without a token, an agent can still find Actors with the `search-actors` tool, but running this one needs your Apify account. In Claude Code:

  ```
    claude mcp add --transport http apify "https://mcp.apify.com?tools=datagleaner/shopify-app-developer-contacts"
  ```

  Then run `/mcp` to sign in to Apify in your browser. Then ask in plain language, for example: "List the top 50 Shopify product review apps with their developer's support email, website and country."
- **LangChain (Python):**

```python
## pip install langchain-apify, then set APIFY_TOKEN in your environment
import json
from langchain_apify import ApifyActorsTool
tool = ApifyActorsTool("datagleaner/shopify-app-developer-contacts")
result = tool.invoke({"run_input": json.loads('{"searchQueries": ["product reviews"]}')})
```

Claude Desktop and other clients that take an `mcpServers` config can run the Apify MCP server locally:

```json
{
  "mcpServers": {
    "actors-mcp-server": {
      "command": "npx",
      "args": ["-y", "@apify/actors-mcp-server"],
      "env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }
    }
  }
}
```

### FAQ

**How do I find a Shopify app developer's email?** Paste the app's URL into `appUrls` (or search a keyword) and read `supportEmail`. Shopify asks every developer to publish one for merchant support.

**Is the support email the right contact for partnerships?** It reaches the developer's team directly. Turn on `crawlDeveloperWebsite` to also collect addresses such as sales@ or partners@ from the developer's own site.

**Can I get every app in a category?** Yes: put the category URL in `categoryUrls` and raise `maxApps`. Each category page lists 24 apps; the Actor pages through until `maxApps` is reached.

**Why is the phone empty?** Shopify no longer shows a phone on app listings. With `crawlDeveloperWebsite` on, a phone published on the developer's site is added.

**Do I need a Shopify account or partner login?** No. Only public App Store pages are read.

**Is this the same as a Shopify store contacts tool?** No. This finds the companies that build Shopify apps. To find merchants (the shops themselves), use a Shopify store contacts Actor instead.

### Responsible use

This Actor reads public Shopify App Store listings and the developer's own public pages only. Email addresses, phone numbers and addresses, especially those of individual developers, can be personal data. You are responsible for lawful use, including consent and opt-out rules for outreach (GDPR, CAN-SPAM and local law), and for respecting Shopify's terms. Support addresses exist so merchants can get help; keep outreach relevant and infrequent.

# Actor input Schema

## `searchQueries` (type: `array`):

Find apps through the Shopify App Store's own search, for example `product reviews`, `upsell` or `subscriptions`. Each query is searched separately and gives up to Max apps. Leave every source empty to run a 5-app sample.

## `appUrls` (type: `array`):

Shopify App Store app pages, one per line, such as `https://apps.shopify.com/judgeme`. A bare handle (`judgeme`) also works.

## `categoryUrls` (type: `array`):

Shopify App Store category pages, such as `https://apps.shopify.com/categories/marketing-and-conversion-social-trust-product-reviews`. The full list of the category is read in the store's order, up to Max apps per category. Feature filters in the URL are kept.

## `developerUrls` (type: `array`):

Developer pages, such as `https://apps.shopify.com/partners/judge-me`. Returns every app that developer lists (up to Max apps), with the developer's app count.

## `maxApps` (type: `integer`):

How many apps to take from each search query, category or developer page. App URLs given directly are always read.

## `crawlDeveloperWebsite` (type: `boolean`):

Visit up to 3 pages of each developer's own website (home page, then its contact or about page) to add a phone number, the developer's social profiles (LinkedIn, X, Facebook, Instagram, YouTube and more) and further emails. When the listing has no support email, the privacy policy is read too. Only addresses on the developer's own domain or webmail are kept. Each developer's site is read once per run. Slower; off by default.

## `onlyWithEmail` (type: `boolean`):

Output only apps where a developer or support email was found. Apps without an email are free either way.

## `requestDelaySecs` (type: `number`):

The Shopify App Store rate-limits fast clients, so requests to it are spaced by this many seconds (with jitter). A rate-limit answer widens the gap automatically. About 40 apps a minute at the default.

## `requestTimeoutSecs` (type: `integer`):

How long to wait for each page before retrying.

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

Optional. Optional. Defaults to no proxy, and switches to an Apify Proxy session on its own when the App Store keeps rate-limiting. Choose a proxy here to use it from the start.

## Actor input object example

```json
{
  "searchQueries": [
    "product reviews"
  ],
  "maxApps": 10,
  "crawlDeveloperWebsite": false,
  "onlyWithEmail": false,
  "requestDelaySecs": 1.5,
  "requestTimeoutSecs": 30
}
```

# Actor output Schema

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

No description

# 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 = {
    "searchQueries": [
        "product reviews"
    ],
    "maxApps": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("datagleaner/shopify-app-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 = {
    "searchQueries": ["product reviews"],
    "maxApps": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("datagleaner/shopify-app-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 '{
  "searchQueries": [
    "product reviews"
  ],
  "maxApps": 10
}' |
apify call datagleaner/shopify-app-developer-contacts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datagleaner/shopify-app-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/0CRhAxc0RoBnoIhiZ/builds/cC5dE4RDcb2Hvsiwa/openapi.json
