# Shopify Store Leads Scraper — Owner Emails & Store Contacts (`intelscrape/shopify-owner-email`) Actor

Shopify store leads scraper: find Shopify store owner emails, phones and social links plus store intel (product count, theme, apps, pixels) from niche packs or your own domain list. Filter by keyword, catalog size and activity. Pay per lead.

- **URL**: https://apify.com/intelscrape/shopify-owner-email.md
- **Developed by:** [IntelScrape](https://apify.com/intelscrape) (community)
- **Categories:** Lead generation, E-commerce, Marketing
- **Features:** Limited permissions
- **Stats:** 39 total users, 6 monthly users, 84.4% runs succeeded, 1 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

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 Email Scraper — Shopify Store Leads & Owner Emails

![Actor Banner](https://api.apify.com/v2/key-value-stores/PyvJzfQg02FD3RYhd/records/shopify-owner-email-banner.png)

**Shopify email scraper for store owner emails and Shopify store leads.** Paste Shopify store domains, or pick a niche pack (beauty, fitness, fashion, jewelry, watches), and get the owner and store contact emails, phones and social links each store shows publicly, plus store contacts and store intel (product count, theme, apps). Pay per delivered lead. No Shopify API key.

*Also searched as: Shopify email scraper, Shopify store leads, Shopify store owner email, Shopify store contacts, Shopify emails.*

> 🇨🇳 **中文简介 (Chinese — China & Singapore):**
> Shopify 店主邮箱 / 店铺线索抓取：按品类包或域名列表，从 Shopify 店面公开页提取店主邮箱与社交链接，可只交付有邮箱的线索。按交付线索计费，无需 Shopify API Key——适合代理、SaaS 与品牌外联。需要人脉补全时接 Skip Trace PRO；现在就在 Apify 运行，把店主线索推进 CRM。

> 🇸🇬 **Ringkasan Melayu (Singapore):**
> Cari e-mel pemilik kedai Shopify dengan **niche pack** (beauty, fitness, fashion, jewelry, watches) atau senarai domain anda. Pilihan `requireEmail` supaya hanya lead dengan e-mel dibayar. Tiada Shopify API key. Sesuai pasukan e-dagang di Singapura — sambung ke Skip Trace MCP / Contact Info Scraper.

#### 🤖 NEW: Connect This To Your AI!

Want Shopify owner emails inside Claude, Cursor, or ChatGPT? Use the **[Skip Trace MCP Server](https://apify.com/intelscrape/skip--trace)** — pull niche-pack store leads via MCP, then deepen site contacts with **[Website Contact Scraper](https://apify.com/intelscrape/contact-info-scraper)** or people-enrich via **[Skip Trace PRO](https://apify.com/intelscrape/skip-trace-pro)**. Review intel: **[Amazon Product Review Scraper](https://apify.com/intelscrape/amazon-product-review-scraper)** / **[Trustpilot Reviews](https://apify.com/intelscrape/trustpilot-reviews-scraper)**.

#### 🏆 Featured Bots by IntelScrape

1. **[Shopify Store Leads Scraper](https://apify.com/intelscrape/shopify-owner-email)** — Niche Packs & Owner Emails
2. **[Website Contact Scraper](https://apify.com/intelscrape/contact-info-scraper)** — Website emails & tech stack
3. **[Skip Trace PRO](https://apify.com/intelscrape/skip-trace-pro)** — Name, Address, Phone & Email People Lookup
4. **[Amazon Product Review Scraper](https://apify.com/intelscrape/amazon-product-review-scraper)** — Deep E-commerce & Review Extraction
5. **[Trustpilot Reviews Scraper](https://apify.com/intelscrape/trustpilot-reviews-scraper)** — Ratings, Titles, Replies & TrustScore
6. **[TruePeopleSearch Scraper](https://apify.com/intelscrape/truepeoplesearch-scraper)** — Phone & Email Matches
7. **[Google Maps No-Website Leads](https://apify.com/intelscrape/website-Leads)** — Local Businesses Without a Website
8. **[Skip Trace MCP Server](https://apify.com/intelscrape/skip--trace)** — Use Skip Trace inside Claude, Cursor, ChatGPT

> **Nice — next step:** Deep multi-page contacts via **[Website Contact Scraper](https://apify.com/intelscrape/contact-info-scraper)**. Local Maps: **[Google Maps Email Extractor](https://apify.com/intelscrape/google-maps-email-extractor)**. People enrich → **[Skip Trace PRO](https://apify.com/intelscrape/skip-trace-pro)**. Review intel: **[Amazon Reviews](https://apify.com/intelscrape/amazon-product-review-scraper)** / **[Trustpilot](https://apify.com/intelscrape/trustpilot-reviews-scraper)**.

***

⚡ **Use this Actor in n8n — no code**

1. Add the official **Apify** node in n8n.
2. Connect your Apify API token.
3. Run Actor ID: `IntelScrape/shopify-owner-email`.

***

![price](https://img.shields.io/badge/price-$5.00_/_1K-e83e8c) ![billing](https://img.shields.io/badge/billing-pay_per_result-2ea44f) ![API_key](https://img.shields.io/badge/API_key-not_required-blue) ![coverage](https://img.shields.io/badge/coverage-Shopify_storefronts-8a2be2) ![niche](https://img.shields.io/badge/niche_packs-beauty_·_fitness_·_fashion-blue)

**Live-crawl Shopify / DTC storefronts you supply** (or seed with a niche pack) for public owner emails & socials.\
**Pay per delivered lead with contact. No Shopify API key.**

> **Honest coverage & billing (read this):** Base charge **dataset items ($0.005)** + actor start (**$0.00001**). With `includeStoreIntel` (default on), each enriched lead also bills **`store-intel` ($0.002)**. **Niche Pack paid path:** when `nichePack` ≠ none, each delivered lead also bills **`niche-pack-lead` (~$0.008)**. When an owner email is present on the row, optional additive **`owner-email` (~$0.01)**. Additive events are Store-scheduled effective **2026-09-19** (Apify 2-week PPE notice); until then base dataset + start still apply. Only **publicly exposed** storefront contacts can be found — many stores hide email (forms only). Empty domains are **not** pushed (not charged). This is a **live crawl of URLs you provide** — not a static 1M-row merchant database. Not a Shopify Partner/Admin API export.

> **Niche Pack paid path:** Pick **beauty / fitness / fashion / jewelry / watches** to seed vertical leads. You pay base dataset + **`niche-pack-lead`** per delivered pack lead; rows with a public owner email also bill **`owner-email`**. Set `requireEmail: true` when you only want email-bearing rows.

> **Discover stores first:** Need niche Shopify URLs before owner emails? Use **[Niche Website Finder](https://apify.com/intelscrape/niche-website-finder)** then paste into `startUrls` here.

> **Deeper contacts:** Pair with **[Contact Info Scraper](https://apify.com/intelscrape/contact-info-scraper)** for multi-page website emails; **[Google Maps Email Extractor](https://apify.com/intelscrape/google-maps-email-extractor)** / **[Google Maps No-Website Leads](https://apify.com/intelscrape/website-Leads)** for local Maps leads; push people names/addresses into **[Skip Trace PRO](https://apify.com/intelscrape/skip-trace-pro)** / **[TruePeopleSearch Scraper](https://apify.com/intelscrape/truepeoplesearch-scraper)** for phones; validate with **[Email Finder & Verifier](https://apify.com/intelscrape/email-finder-verified)**; orchestrate via **[Skip Trace MCP Server](https://apify.com/intelscrape/skip--trace)**.

***

> 🧭 Built for **e-commerce agencies, app sellers, UGC sellers, and DTC outreach teams.** Popular with teams in the **US, China, and Singapore**.

> ⭐ **Store rating is driven by daily power users.** Please [leave a review](https://apify.com/intelscrape/shopify-owner-email).

> ⚖️ **Lawful business use only.** Public storefront data only. Comply with anti-spam and platform rules.

> 📌 *Examples in this README are **fictional** unless stated otherwise. Niche-pack seed URLs are public DTC examples for quick starts.*

***

### 🕵️‍♂️ Why Choose Us vs. "Cheaper" Competitors?

| Feature | This Actor | Static merchant DB scrapers |
| :--- | :--- | :--- |
| **Data mode** | **Live crawl of YOUR domains** + optional niche seeds | Frozen DB dumps (stale emails) |
| **Niche packs** | Beauty / fitness / fashion / jewelry / watches | Broad dump, weak vertical UX |
| **Billing honesty** | Pay only when contact found | Opaque rows / free-tier traps |
| **AI / n8n** | MCP + links to Contact Info / Skip Trace | Often none |

#### Only new stores on repeat or scheduled runs (`onlyNew`)

Set `onlyNew: true` and every store already delivered in an earlier run is skipped before crawling, so a daily or weekly schedule only fetches and bills **new** leads. Delivered domains are remembered in a named key-value store (`seenStoreName`, default `shopify-owner-email-seen`, record `seenDomains`) in your account. Default is off. Same per-lead price, no extra event. Use a different `seenStoreName` per client or list; delete the store to reset. Stores that returned no email are not marked seen, so they are retried next time.

```json
{ "nichePack": "beauty", "onlyNew": true, "maxResults": 25 }
```

### Niche Pack paid path

| Event | When charged | Price |
| :--- | :--- | ---: |
| `apify-actor-start` | Run starts | **$0.00001** |
| `apify-default-dataset-item` | Each delivered lead row | **$0.005** |
| `store-intel` | `includeStoreIntel` delivered catalog/theme/apps fields | **$0.002** (effective 2026-09-20) |
| `niche-pack-lead` | `nichePack` ≠ none **and** lead pushed | **~$0.008** (effective 2026-09-19) |
| `owner-email` | Owner/store email present on delivered row | **~$0.01** (effective 2026-09-19) |

Use a niche pack for vertical outreach lists; bring your own `startUrls` when you already have targets (no niche-pack-lead unless a pack is selected).

### Niche vertical packs

Pick `nichePack` **or** pass your own `startUrls` (or both — your URLs merge with the pack):

| Pack | Who buys these leads |
| :--- | :--- |
| **beauty** | Cosmetics / skincare agencies, app sellers |
| **fitness** | Activewear / supplement outreach |
| **fashion** | Apparel DTC, UGC creators |
| **jewelry** | Accessories brands & 3PLs |
| **watches** | Watch DTC & affiliate teams |

Set **`requireEmail: true`** to only bill rows that include at least one email (social-only rows skipped).

### Qualify filters

Optional post-crawl filters — applied **before** push/charge. Each delivered row stamps `filtersApplied`.

| Input | Effect |
| :--- | :--- |
| `activeWithinDays` | Keep if `newestProductAt` is within N days (needs store intel / products.json) |
| `minProducts` / `maxProducts` | Band on `productCount` |
| `keywords[]` | Must match ≥1 in domain / title / emails / socials / theme / vendors / product types |
| `excludeKeywords[]` | Drop if any match |

Demo tip: beauty pack + `includeStoreIntel: true` + `minProducts: 1` + `activeWithinDays: 365` + `maxResults: 3`.

### Quick start — beauty pack

```json
{
  "nichePack": "beauty",
  "requireEmail": true,
  "maxPagesPerStore": 25
}
```

### Quick start — your domain list

```json
{
  "startUrls": [{"url": "https://example-store.myshopify.com"}],
  "requireEmail": true,
  "maxPagesPerStore": 50
}
```

### What you get

- Public emails when embedded on contact/about/legal pages
- Phones from `tel:` / contact pages when published
- Instagram / TikTok / Facebook / X / LinkedIn / YouTube / Pinterest when linked
- **Store intel** (toggle `includeStoreIntel`, default on): productCount, price band, currency/country, theme, tech apps & pixels, myshopifyDomain, sizeBand, newestProductAt
- Optional **tldFilter** for geo (.com.au, .co.uk, …)
- Domain provenance + RUN_REPORT of empty/failed domains (free)

### Pricing (PPE)

| Event | Price |
| :--- | ---: |
| Actor start | **$0.00001** |
| Result (dataset item with contact) | **$0.005** |
| Niche pack lead (`niche-pack-lead`) | **~$0.008** — when `nichePack` ≠ none and lead pushed (Store-scheduled) |
| Owner email (`owner-email`) | **~$0.01** — when owner/store email present on delivered row (Store-scheduled) |

### 💡 Use cases

- **Shopify app and agency outreach:** build lists of active stores in a niche with owner emails and the apps they already use.
- **Wholesale and supplier sales:** find DTC brands in beauty, fitness, fashion, jewelry or watches.
- **Influencer and UGC sellers:** pitch stores that are actively adding products.
- **Market research:** size a niche by product count, price band, theme and country.

### ⏰ Schedule this Actor — weekly batch of stores that are still adding products

Run it once with your own settings, save that run as a **task**, then let Apify Schedules repeat it. About two minutes, no code.

1. In Apify Console open **Schedules** → **Create new**.
2. Click **Add** → pick your saved task (or this Actor), set the cron expression and time zone below, and click **Enable** (new schedules start disabled).
3. Optional: open the task's integrations and add a **webhook** on `ACTOR.RUN.SUCCEEDED` so every finished run is pushed to your CRM, Zapier, Make or n8n. Payload template: `{"runId": {{resource.id}}, "datasetId": {{resource.defaultDatasetId}}, "status": {{resource.status}}}`. Your tool then reads `https://api.apify.com/v2/datasets/<datasetId>/items?format=csv`, or use the Apify integrations for Google Sheets, Make and Zapier.

| Cadence | Cron expression |
| :--- | :--- |
| Every day, 8 AM | `0 8 * * *` |
| Weekdays, 8 AM | `0 8 * * 1-5` |
| Every Monday, 8 AM | `0 8 * * 1` |
| 1st of the month, 8 AM | `0 8 1 * *` |

**Starter task input for this Actor** (edit the values, then paste into the task):

```json
{
  "nichePack": "beauty",
  "activeWithinDays": 14,
  "requireEmail": true,
  "maxResults": 50
}
```

- `activeWithinDays` keeps only stores whose newest product is recent, so your weekly list favors live, selling stores.
- `maxResults` caps the leads delivered per run, which caps what a scheduled run can cost.
- There is no only-new mode yet: a repeat run can return stores you already received, so de-duplicate on the `domain` column in your Sheet or CRM.

**Prefer the API?** `POST https://api.apify.com/v2/schedules` with a body like the one below (send your token in the `Authorization: Bearer` header):

```json
{
  "name": "shopify-owner-email-weekly",
  "userId": "YOUR_USER_ID",
  "actions": [
    {
      "type": "RUN_ACTOR_TASK",
      "actorTaskId": "YOUR_TASK_ID"
    }
  ],
  "cronExpression": "0 8 * * 1",
  "timezone": "America/New_York",
  "isEnabled": true
}
```

Docs: [Apify Schedules](https://docs.apify.com/platform/schedules) · [Webhook actions](https://docs.apify.com/platform/integrations/webhooks/actions)

### ❓ FAQ

**How do I find Shopify store owner emails?**
Pick a **Niche vertical pack** or paste your own store URLs, keep **Require email** on, and run. The Actor checks contact, about and legal pages for published emails and phones and returns one row per store.

**Can I scrape my own list of Shopify stores?**
Yes. Add domains in **Start URLs**. They merge with any niche pack you select.

**Can I filter stores by size or activity?**
Yes. Use **Min / Max product count**, **Active within days**, include and exclude keywords, and a domain suffix filter such as `.co.uk` or `.com.au`.

**Does every store return an email?**
No. Only emails a store publishes on its own site can be found. With **Require email** on, social-only rows are skipped and not billed.

**How is it billed?**
Pay per event per delivered lead, with optional paid layers listed on the Pricing tab. See the **Pricing** tab on this page for the current per-event prices. You are only charged for the events listed there, and you can cap spend with the run's maximum charge setting.

**How do I export the leads?**
Download CSV, Excel or JSON from the Output tab, or send them to your CRM with the Apify API, webhooks, Zapier or Make.

### Sample output (real run)

Three real rows from Apify run `DAdejZ4hIuTKNaOXm` (build 0.0.18, 2026-10-16 1:36 PM ET; input: `nichePack: beauty`, `maxResults: 5`, `requireEmail: true`, `includeStoreIntel: true`). Fields trimmed for readability. Rows list every public address the store page shows, so one may be a third-party address (see `article27@verasafe.com`).

```json
[
  {
    "domain": "rarebeauty.com",
    "shopName": "Rare Beauty",
    "nichePack": "beauty",
    "emails": [
      "hello@rarebeauty.com",
      "contactus@rarebeauty.com",
      "article27@verasafe.com"
    ],
    "instagram": "https://www.instagram.com/rarebeauty",
    "tiktok": null,
    "productCount": 151,
    "priceMin": 0,
    "priceMax": 278,
    "currency": "USD",
    "country": "US",
    "theme": "RareBeauty/SDG: Production 2",
    "techApps": [
      "klaviyo",
      "gorgias",
      "yotpo",
      "shoppay",
      "ga4",
      "gtm"
    ],
    "sizeBand": "medium"
  },
  {
    "domain": "kyliecosmetics.com",
    "shopName": "Kylie Cosmetics",
    "nichePack": "beauty",
    "emails": [
      "customerservice@kyliecosmetics.com"
    ],
    "instagram": "https://www.instagram.com/kyliecosmetics",
    "tiktok": "https://www.tiktok.com/@kyliecosmetics",
    "productCount": 244,
    "priceMin": 0,
    "priceMax": 300,
    "currency": "USD",
    "country": "US",
    "theme": "SYNC | WINTER KISSED REVEAL | DO NOT DELETE",
    "techApps": [
      "klaviyo",
      "yotpo",
      "shoppay",
      "ga4",
      "gtm"
    ],
    "sizeBand": "medium"
  },
  {
    "domain": "glossier.com",
    "shopName": "Glossier",
    "nichePack": "beauty",
    "emails": [
      "gteam@glossier.com",
      "brand@glossier.com",
      "press@glossier.com",
      "legal@glossier.com",
      "privacy@glossier.com"
    ],
    "instagram": "https://www.instagram.com/glossier",
    "tiktok": "https://www.tiktok.com/@glossier",
    "productCount": 112,
    "priceMin": 0,
    "priceMax": 200,
    "currency": "USD",
    "country": "US",
    "theme": "10/15 Surprise Sale 3.53.1",
    "techApps": [
      "klaviyo",
      "gorgias",
      "yotpo",
      "shoppay",
      "ga4",
      "gtm"
    ],
    "sizeBand": "medium"
  }
]
```

### FAQ: Shopify email scraper, store leads and store owner emails

**How do I scrape Shopify store emails?** Add Shopify store URLs to `startUrls` (or set a `nichePack`) and run the Actor. It reads each store's public contact, about and legal pages and returns the emails, phones and social links found.

**Can I get Shopify store leads by niche?** Yes. Pick a niche pack (beauty, fitness, fashion, jewelry, watches) to get a vertical list of Shopify store leads. Use `keywords`, `minProducts`/`maxProducts` and `activeWithinDays` to narrow it down.

**Can I find the store owner email for a Shopify store I already have?** Yes. Put the domain in `startUrls` with `requireEmail: true` and only rows with an email are delivered.

**Does it find Shopify store contacts for every store?** No. It only returns contact details a store shows publicly. Some stores hide email behind a contact form, and those return social links only.

**Do I need a Shopify API key?** No. It works from public storefront pages only.

**How is it priced?** Pay per delivered lead; see the Pricing (PPE) table above for the current events and prices.

### Legal

Public B2B prospecting only. Respect CAN-SPAM/PDPA and Shopify ToS for outreach. Not affiliated with Shopify.

# Actor input Schema

## `nichePack` (type: `string`):

💡 TIP: Seed a vertical without hunting URLs — beauty, fitness, fashion, jewelry, or watches. Pack seeds merge with startUrls (deduped by domain).

## `startUrls` (type: `array`):

Store URLs to crawl. Optional if nichePack is set.

## `requireEmail` (type: `boolean`):

When true, only rows with ≥1 email are pushed/billed.

## `maxResults` (type: `integer`):

Stop after this many delivered leads. Use 1–3 for cheap demos.

## `onlyNew` (type: `boolean`):

Default off. When on, domains already delivered as a lead in an earlier run (remembered in the named key-value store below) are skipped, so scheduled or repeated runs only crawl and bill NEW stores. Same per-lead price, no extra event.

## `seenStoreName` (type: `string`):

Named key-value store that remembers delivered domains when onlyNew is on. Use a different name per list or client. Default shopify-owner-email-seen.

## `includeStoreIntel` (type: `boolean`):

Adds productCount, price band, currency/country when public, theme, tech apps/pixels, myshopifyDomain, newestProductAt, sizeBand. Extra request(s) per store. When enrichment lands, bills additive PPE event store-intel ($0.002) in addition to the lead row.

## `activeWithinDays` (type: `integer`):

Keep only stores whose newestProductAt (from products.json) is within the last N days. Requires store intel. Leave empty to disable.

## `minProducts` (type: `integer`):

Keep only stores with productCount ≥ this value (catalog size). Leave empty to disable.

## `maxProducts` (type: `integer`):

Keep only stores with productCount ≤ this value. Leave empty to disable.

## `keywords` (type: `array`):

Keep row only if ≥1 keyword matches the text blob (domain, shop name, emails, socials, theme, vendors, product types, apps). Case-insensitive.

## `excludeKeywords` (type: `array`):

Drop row if any keyword matches the same text blob. Case-insensitive.

## `tldFilter` (type: `string`):

Optional geo/TLD gate (e.g. .com.au, .co.uk, .ca). Leave empty for all.

## `maxPagesPerStore` (type: `integer`):

Max pages crawled per domain (contact/about/legal-style pages).

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

Residential helps on blocked storefronts.

## Actor input object example

```json
{
  "nichePack": "beauty",
  "startUrls": [],
  "requireEmail": true,
  "maxResults": 5,
  "onlyNew": false,
  "seenStoreName": "shopify-owner-email-seen",
  "includeStoreIntel": true,
  "keywords": [],
  "excludeKeywords": [],
  "tldFilter": "",
  "maxPagesPerStore": 15,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `domain` (type: `string`):

Store Domain

## `emails` (type: `string`):

Extracted Emails

## `phones` (type: `string`):

Public tel: numbers

## `instagram` (type: `string`):

Instagram URL

## `tiktok` (type: `string`):

TikTok URL

## `facebook` (type: `string`):

Facebook URL

## `twitter` (type: `string`):

Twitter URL

## `productCount` (type: `string`):

Catalog size

## `theme` (type: `string`):

Shopify theme

## `techApps` (type: `string`):

Detected apps & pixels

## `sizeBand` (type: `string`):

micro/small/medium/large

# 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 = {
    "nichePack": "beauty",
    "maxResults": 5,
    "maxPagesPerStore": 15,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("intelscrape/shopify-owner-email").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 = {
    "nichePack": "beauty",
    "maxResults": 5,
    "maxPagesPerStore": 15,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("intelscrape/shopify-owner-email").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 '{
  "nichePack": "beauty",
  "maxResults": 5,
  "maxPagesPerStore": 15,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call intelscrape/shopify-owner-email --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,intelscrape/shopify-owner-email"
        }
    }
}
```

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/xvCLEoDQ1KPviw2qN/builds/vicQjzvkcn9RrHpHS/openapi.json
