# Shopify Partner & Agency Contacts: Emails, Phones (`datagleaner/shopify-partner-contacts`) Actor

Find Shopify agencies and experts with their public email, phone and website, filtered by country and service. $0.005 per partner with a contact. Reads the official Shopify Partner Directory: services, languages, rating, reviews, price range, partner tier and socials. No login, no CAPTCHA.

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

## Pricing

$5.00 / 1,000 partner with contacts

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 Partner & Agency Contacts: Emails, Phones

**Find Shopify agencies and experts with their public email, phone and website, filtered by country and service.** It answers "find Shopify agencies in Germany with contact emails", "Shopify partners directory export", "Shopify agency contacts", "find Shopify experts for theme customization in the UK" and "ecommerce agency emails" with one row per agency: email, phone, website, LinkedIn, services, languages, rating, review count, price range and partner tier.

**$0.005 per partner with a public email or phone. A partner with neither is free.** No login, no API key, no CAPTCHA, no browser.

The data comes from the official [Shopify Partner Directory](https://www.shopify.com/partners/directory), where agencies and freelancers list themselves to get hired by Shopify merchants, and publish their own contact email and phone for that purpose.

### What it does

1. Searches the directory with the same filters its website offers: **country, service, language, industry and partner tier** (Select, Plus, Premier, Platinum), and pages through the results.
2. Opens each partner's profile and reads its structured data: the **contact email and phone the partner published**, website, city and country, services, industries, languages, starting price, merchant rating and review count, featured client stores, partner tier and social profiles.
3. Optionally (`crawlWebsite`) visits up to 5 pages of the partner's own website (home, contact, about, imprint) and adds the emails, phones and social profiles found there.

Measured on a run of 20 German partners (2026-10-09): **20 of 20 had a public email and 14 of 20 a phone**, in 38 seconds and 22 requests.

### Use cases

- **SaaS and Shopify app vendors** building a partner or reseller program: a list of agencies by country and specialty, with the person to email.
- **White-label and outsourcing shops** looking for agencies to sell development, design or marketing capacity to.
- **Recruiters** sourcing Shopify developers and agencies by language and location.
- **Acquirers and investors** screening agencies by tier, review count and price point.
- **AI agents and lead pipelines** that need "Shopify agencies in X that do Y, with emails" as clean rows.

### Input

| Field | Meaning |
|---|---|
| `countries` | Two-letter codes (`us`, `de`, `gb`, `au`, `in`) or English names. Several are combined (any of them). Prefilled with `us`. |
| `services` | Directory service names or slugs, such as `Theme customization`, `Store migration`, `Custom apps and integrations`, `Headless commerce`, `SEO`, `Email marketing`. A category (`Marketing and sales`) or a word (`migration`) selects every matching service. |
| `languages` | Codes (`en`, `de`, `fr`, `pt_br`) or names (`German`). |
| `industries` | For example `Clothing and fashion`, `Health and beauty`, `Food and drink`, `Business to business (B2B)`. |
| `partnerTiers` | `select`, `plus`, `premier`, `platinum`. |
| `minRating` | Keep partners rated at least this (for example `4.8`). Unrated partners are left out when set. |
| `maxPartners` | How many partners the search returns (default 50). |
| `partnerUrls` | Specific profiles: `https://www.shopify.com/partners/directory/partner/it-geeks` or the slug `it-geeks`. When set, only these are fetched and the search fields are ignored. |
| `crawlWebsite` | Also read the partner's own website for more emails, phones and socials (default false). |
| `requestDelaySecs` | Pause between directory requests (default 1 second). |
| `proxyConfiguration` | Optional; no proxy by default. |

With every search field and `partnerUrls` empty, the Actor runs a built-in example of 5 US partners and says so in its status message.

```json
{
  "countries": ["de"],
  "services": ["Theme customization", "Store migration"],
  "minRating": 4.8,
  "maxPartners": 20
}
```

An unknown country, service, language, industry or tier stops the run at once with a message listing the accepted values, so a typo never bills a search you did not mean.

### Output

One row per partner. Fields that the profile does not show are empty, never invented.

```json
{
  "partnerName": "4TFM E-Commerce Agentur GmbH",
  "slug": "4tfm-e-commerce-agentur",
  "directoryUrl": "https://www.shopify.com/partners/directory/partner/4tfm-e-commerce-agentur",
  "website": "https://www.ecommerce-agentur.net/",
  "email": "info@4tfm.de",
  "emails": ["info@4tfm.de"],
  "phone": "+493040363890",
  "phones": ["+493040363890"],
  "phoneRaw": "+49 (0) 30 - 40 36 38 90",
  "emailSource": "directory",
  "hasContact": true,
  "country": "Germany",
  "countryCode": "DE",
  "city": "Berlin",
  "secondaryCountries": ["Germany", "Switzerland", "Austria", "Canada", "United Kingdom"],
  "languages": ["English", "German"],
  "services": ["Custom apps and integrations", "Troubleshooting", "Store settings configuration", "Conversion rate optimization", "POS setup and migration", "Store build or redesign", "Store migration", "Theme customization", "Site performance and speed", "Website and marketing content"],
  "featuredServices": ["Troubleshooting", "Store settings configuration", "POS setup and migration", "Store migration", "Theme customization"],
  "industries": ["Clothing and fashion", "Food and drink", "Health and beauty", "Jewelry and accessories"],
  "startingPrice": 120.0,
  "maxPrice": null,
  "priceRange": "$120+",
  "priceCurrency": "USD",
  "contactForPricing": true,
  "rating": 4.99,
  "reviewCount": 79,
  "communicationRating": 4.99,
  "qualityOfWorkRating": 4.99,
  "partnerTier": "Plus",
  "badges": ["Plus Partner"],
  "partnerTrack": "service",
  "partnerSince": "2018-04-19T22:48:08+00:00",
  "featuredWorkCount": 5,
  "featuredWorks": [{"title": "Migration zu Shopify - stollenbaeckerei-krause.de", "url": "https://stollenbaeckerei-krause.de/"}],
  "appStoreUrl": null,
  "description": "4TFM - Ihre Shopify Agentur aus Berlin ... Migration zu Shopify ...",
  "logoUrl": "https://partners.shopify.com/rails/active_storage/...",
  "socials": {"linkedin": null, "x": null, "instagram": null, "facebook": "https://www.facebook.com/4tfm.de", "youtube": null, "tiktok": null, "pinterest": null},
  "linkedinUrl": null,
  "xUrl": null,
  "instagramUrl": null,
  "facebookUrl": "https://www.facebook.com/4tfm.de",
  "youtubeUrl": null,
  "websitePagesCrawled": 0,
  "status": "ok",
  "error": null,
  "input": "https://www.shopify.com/partners/directory/services?locationCodes=loc-de",
  "scrapedAt": "2026-10-09T15:33:32+00:00"
}
```

- `emails` lists the directory contact email first, then any address the partner wrote in its bio or service descriptions, then (with `crawlWebsite`) addresses on the partner's own domain or a webmail address. `emailSource` says where the first one came from: `directory` or `website`.
- `phones` are E.164 numbers, read with the partner's country; `phoneRaw` is the number as typed.
- `linkedinUrl`, `xUrl`, `instagramUrl`, `facebookUrl` and `youtubeUrl` repeat `socials` as flat columns for spreadsheets and CRMs.
- Prices are the directory's own, in USD. `startingPrice` is the lowest "starting at" price across the partner's services.
- A profile that cannot be read (removed partner, bad URL) gets a row with `status: "error"` and an `error` message, and is free.

The dataset has two views: **Partner contacts** (name, email, phone, website, location, rating, tier, price) and **Profiles** (services, languages, pricing, reviews).

### Pricing

Pay per result, one event:

- **`partner-with-contact`: $0.005** for each partner with at least one public email or phone.
- A partner with **neither is free**, and so is a row with `status: "error"`. Partners left out by `minRating` are not returned and cost nothing.
- `crawlWebsite` costs nothing extra.

**Worked example.** "Shopify agencies in Germany": the directory lists 221. A run with `countries: ["de"]` and `maxPartners: 250` returns all 221; at the measured contact rate of nearly 100%, that is about 221 x $0.005 = **$1.11**. A 20-partner test costs at most $0.10.

Compared with agency-directory scrapers for Clutch and similar sites, which charge about $0.006 per company with leads and fail more often because those sites block automated requests, this one reads an open directory and charges only for partners you can contact.

Set a maximum total charge on the run and the Actor stops cleanly when it is reached.

### Limits

- Only partners listed in the Shopify Partner Directory are covered (about 5,400 worldwide on 2026-10-09). Shopify agencies that are not listed there are not found.
- The directory shows one contact email and one phone per partner; some partners leave the phone empty (about 30% in the German sample).
- The directory's location filter covers 75 countries; others are refused with a message.
- Ratings and review counts are the directory's merchant reviews, not Google or Clutch reviews.
- Directory pages are fetched one at a time with a 1-second pause, so a 200-partner run takes about 6 minutes.

### Use with Python

```python
## pip install apify-client
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("datagleaner/shopify-partner-contacts").call(run_input={
    "countries": ["de"],
    "services": ["Theme customization"],
    "maxPartners": 20,  # at most 20 x $0.005 = $0.10
})
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item["partnerName"], item["email"], item["phone"], item["website"])
```

### Use with JavaScript / Node.js

```js
// npm install apify-client
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('datagleaner/shopify-partner-contacts').call({
    countries: ['gb'],
    partnerTiers: ['plus', 'premier'],
    maxPartners: 30,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
for (const item of items) {
    console.log(item.partnerName, item.email, item.city, item.rating);
}
```

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

Actor ID: `datagleaner/shopify-partner-contacts`

Minimal input:

```
{"countries": ["us"]}
```

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-partner-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-partner-contacts`. In Claude Code:

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

  Then run `/mcp` to sign in to Apify in your browser. Other clients can sign in with OAuth or send the header `Authorization: Bearer YOUR_APIFY_TOKEN`. Clients that run local MCP servers can use Apify's package (`@apify/actors-mcp-server`, run with `npx -y` and `APIFY_TOKEN` set) instead. Then ask the agent in plain words, for example:

  > Find Shopify partner agencies in the US with their email, phone and website, as a table.

- **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-partner-contacts")
result = tool.invoke({"run_input": json.loads('{"countries": ["us"]}')})
```

### FAQ

**How do I find Shopify agencies with contact emails?** Set `countries` (and optionally `services`), run, and export the "Partner contacts" view. Every row carries the email the agency published in the Shopify Partner Directory.

**Can I export the Shopify Partners Directory?** Yes, by country, service, language, industry or tier. Set `maxPartners` high enough for the number of matches the run log reports.

**How do I find Shopify Plus or Premier agencies?** Set `partnerTiers` to `plus`, `premier` or `platinum`.

**Where do the emails come from?** From the partner's own directory profile, where it lists a contact email for merchants who want to hire it. With `crawlWebsite`, also from the partner's own website.

**Do I need a Shopify account or login?** No. The directory is public.

**Can I look up specific partners?** Yes: put their profile URLs or slugs in `partnerUrls`.

### Responsible use

This Actor reads public pages only: the contact details that partners published in the Shopify Partner Directory so merchants can hire them, and, if you ask, the partner's own public website. Email addresses and phone numbers can be personal data, especially for freelancers. 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. Data Gleaner is not affiliated with Shopify.

# Actor input Schema

## `countries` (type: `array`):

Find partners based in these countries: two-letter codes such as `us`, `de`, `gb`, `au`, `in`, or English names such as `Germany`. Several countries are combined (any of them). The directory covers 75 countries. Leave every search field and Partner URLs empty to run a 5-partner US example.

## `services` (type: `array`):

Keep partners that offer any of these services, by the directory's own names or slugs: `Store build or redesign` (customize-design), `Theme customization` (customize-theme), `Store migration` (migrate-from-another-platform), `Custom apps and integrations` (custom-apps-integrations), `Headless commerce`, `Checkout upgrade`, `POS setup and migration`, `SEO`, `Email marketing`, `Social media marketing`, `Conversion rate optimization`, `Search engine advertising`, `Analytics and tracking`, `Wholesale/B2B`, `International expansion`, `Product photography`, `Logo and visual branding`, `Product descriptions` and more. A category (`Store setup and management`, `Development and troubleshooting`, `Marketing and sales`, `Expert guidance`, `Visual content and branding`, `Content writing`) or a single word such as `marketing` or `migration` selects every matching service.

## `languages` (type: `array`):

Keep partners that work in any of these languages: codes such as `en`, `de`, `fr`, `es`, `ja`, `pt_br`, `zh_cn`, or names such as `German`.

## `industries` (type: `array`):

Keep partners that serve any of these industries: `Clothing and fashion`, `Health and beauty`, `Food and drink`, `Home and garden`, `Jewelry and accessories`, `Electronics`, `Business to business (B2B)`, `Sports and recreation`, `Pet care`, `Toys and games`, `Automotive`, `Art and photography`, `Consumer packaged goods`, `Lifestyle`, `Services`.

## `partnerTiers` (type: `array`):

Keep partners in any of these Shopify Partner Program tiers: `select`, `plus`, `premier`, `platinum`. Platinum and Premier partners serve the largest merchants.

## `minRating` (type: `number`):

Keep partners whose average merchant rating is at least this (for example 4.8). Partners with no rating are left out when this is set. Filtered partners are free.

## `maxPartners` (type: `integer`):

How many partners to return from the directory search. Partner URLs are always all fetched.

## `partnerUrls` (type: `array`):

Specific partners to fetch: directory profile URLs such as `https://www.shopify.com/partners/directory/partner/it-geeks`, or just the slug `it-geeks`. When this is set, only these partners are fetched and the search fields above are ignored.

## `crawlWebsite` (type: `boolean`):

Visit up to 5 pages of each partner's website (home, contact, about, imprint) and add the emails, phones and social profiles found there. Only addresses on the site's own domain or a webmail address are kept. Slower; the price per partner is the same.

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

Pause between requests to shopify.com, with a little random jitter. 1 second keeps the run polite; 20 partners take about half a minute.

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

Optional. Defaults to no proxy: the directory is public and open. Add a proxy only if a very large run starts getting errors.

## Actor input object example

```json
{
  "countries": [
    "us"
  ],
  "maxPartners": 50,
  "crawlWebsite": false,
  "requestDelaySecs": 1
}
```

# 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 = {
    "countries": [
        "us"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("datagleaner/shopify-partner-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 = { "countries": ["us"] }

# Run the Actor and wait for it to finish
run = client.actor("datagleaner/shopify-partner-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 '{
  "countries": [
    "us"
  ]
}' |
apify call datagleaner/shopify-partner-contacts --silent --output-dataset

```

## MCP server setup

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