# Dropshipping Store Scraper - Shopify Niche Research (`vonsensey/shopify-dropshipping-stores-niche-research-scraper`) Actor

Size up a dropshipping niche by profiling the Shopify stores already selling in it: catalogue depth, price band, product types and vendors, plus whether each store is still shipping new products. Filter by keyword, country and catalogue size to scope a market before entering it.

- **URL**: https://apify.com/vonsensey/shopify-dropshipping-stores-niche-research-scraper.md
- **Developed by:** [Blackcube](https://apify.com/vonsensey) (community)
- **Categories:** E-commerce, Lead generation, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.75 / 1,000 stores

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?

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

## Dropshipping Store Scraper - Shopify Niche Research

<table style="border-collapse:collapse;width:100%;margin:0 0 4px">
<tr><td colspan="3" style="padding:9px 12px;background:#0B6E75;border:1px solid #0B6E75"><span style="color:#FFFFFF;font-weight:700;font-size:13px;letter-spacing:.3px">Shopify Store Intelligence Suite</span><span style="color:#CFF0F2;font-size:12px"> &nbsp;&bull;&nbsp; 9 Actors, one codebase, one store billed once</span></td></tr>
<tr><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/shopify-store-leads-scraper" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Shopify Store Leads Scraper</a><br><span style="color:#6B7280;font-size:11px">Emails, Apps &amp; Store Size</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/myshopify-store-domain-list-scraper" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">myshopify Domain List Scraper</a><br><span style="color:#6B7280;font-size:11px">Store Handles &amp; URLs</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/shopify-theme-detector-scraper" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Shopify Theme Detector</a><br><span style="color:#6B7280;font-size:11px">Find Stores by Theme in Bulk</span></td></tr>
<tr><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/shopify-competitor-analysis-scraper" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Shopify Competitor Analysis</a><br><span style="color:#6B7280;font-size:11px">Size, Stack &amp; Prices</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/shopify-ecommerce-store-finder" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Shopify Store Finder</a><br><span style="color:#6B7280;font-size:11px">Discover Ecommerce Stores</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/new-shopify-stores-scraper-recently-launched" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">New Shopify Stores Scraper</a><br><span style="color:#6B7280;font-size:11px">Recently Launched Brands</span></td></tr>
<tr><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/ecommerce-leads-scraper-shopify-stores-by-country" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Ecommerce Leads by Country</a><br><span style="color:#6B7280;font-size:11px">Shopify Stores Scraper</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#ECFDF5;vertical-align:top;width:33%"><span style="color:#0B6E75;font-weight:700;font-size:13px">Dropshipping Store Scraper</span><br><span style="color:#0B6E75;font-size:11px;font-weight:600">&#10148; You are here</span></td><td style="padding:9px 12px;border:1px solid #E5E7EB;background:#FFFFFF;vertical-align:top;width:33%"><a href="https://apify.com/vonsensey/shopify-email-scraper-store-contact-finder" style="color:#111827;font-weight:700;font-size:13px;text-decoration:none">Shopify Email Scraper</a><br><span style="color:#6B7280;font-size:11px">Store Owner Contact Finder</span></td></tr>
</table>

**More from this account:** [YouTube Transcript Suite](https://apify.com/vonsensey/youtube-transcript-scraper) · [Website Contact & Email Suite](https://apify.com/vonsensey/website-contact-email-extractor) · [Career Site & ATS Jobs Suite](https://apify.com/vonsensey/career-page-job-postings-scraper-api) · [Google News Suite](https://apify.com/vonsensey/google-news-scraper-api) · [Keyword Research Suite](https://apify.com/vonsensey/google-keyword-ideas-scraper) · [eBay Data Suite](https://apify.com/vonsensey/ebay-scraper-api) · [Amazon Reviews Suite](https://apify.com/vonsensey/amazon-reviews-scraper-api) · [Reddit](https://apify.com/vonsensey/reddit-scraper-posts-comments-api) · [Meta Ad Library](https://apify.com/vonsensey/facebook-ads-library-scraper-meta-ad-api) · [Vinted](https://apify.com/vonsensey/vinted-scraper-api) · [Trustpilot Review Intelligence Suite](https://apify.com/vonsensey/trustpilot-reviews-scraper) · [App Store & Google Play Reviews Suite](https://apify.com/vonsensey/app-store-google-play-reviews-scraper) · [Etsy Research Suite](https://apify.com/vonsensey/etsy-scraper) · [YouTube Comments Intelligence Suite](https://apify.com/vonsensey/youtube-comments-scraper) · [Telegram Channel Intelligence Suite](https://apify.com/vonsensey/telegram-channel-scraper-api) · [Business Reviews Suite](https://apify.com/vonsensey/business-reviews-aggregator-scraper-api) · [Google Trends Suite](https://apify.com/vonsensey/google-trends-scraper) · [Amazon Product Data Suite](https://apify.com/vonsensey/amazon-product-scraper-api) · [Nordic Marketplaces Suite](https://apify.com/vonsensey/dba-dk-scraper-api) · [Google Sheets Suite](https://apify.com/vonsensey/google-sheets-scraper-api) · [TikTok Suite](https://apify.com/vonsensey/tiktok-scraper-api) · [Snapchat Suite](https://apify.com/vonsensey/snapchat-scraper-api) · [LinkedIn Public Data Suite](https://apify.com/vonsensey/linkedin-scraper-api) · [Instagram Suite](https://apify.com/vonsensey/instagram-posts-scraper-api) · [Contact Validation Suite](https://apify.com/vonsensey/email-verifier-validator-api) · [Google Maps Suite](https://apify.com/vonsensey/google-maps-reviews-scraper-api) · [X / Twitter](https://apify.com/vonsensey/tweet-scraper)

Size up a dropshipping niche by profiling the Shopify stores already selling in it: catalogue depth, price band, product types and vendors, plus whether each store is still shipping new products. Filter by keyword, country and catalogue size to scope a market before entering it.

**You pay once per store delivered.** Stores that fail your filters are free. Non-Shopify domains,
dead domains, frozen stores and bot-walled sites are free. There is no run-start fee, and a run
that finds nothing costs nothing.

***

### Why this one

Returns one row per **store**, not per product - the level a niche decision is actually made at. Price band, product types, vendor mix and catalogue depth tell you what a niche looks like from the inside, and the activity date tells you how many of its stores are still genuinely trading.

***

### How to research a dropshipping niche

Set `keywords` to the niche and let it profile the stores already selling there. You get price
band, product types, vendor mix and catalogue depth per store, plus how recently each one shipped
a product — which tells you how much of the niche is real and how much is abandoned.

***

### What comes back

Every run returns one row per store:

| Field | What it tells you |
|---|---|
| `storeId`, `myshopifyDomain`, `domain`, `storeUrl` | The store's permanent ID and both of its addresses |
| `name`, `description` | What the store calls itself |
| `productCount`, `collectionCount`, `sizeBand` | How big the catalogue is, before you contact anyone |
| `country`, `province`, `city`, `currency`, `shipsToCountries` | The market the store declares for itself |
| `isActive`, `daysSinceLastProduct`, `newestProductAt` | Whether the store is still trading, or died three years ago |
| `priceMin`, `priceMax`, `priceAverage`, `vendors[]`, `productTypes[]` | Price band and catalogue mix |
| `themeName`, `themeStoreId`, `apps[]` | The theme it runs and the apps it has installed |

This listing runs lean by default. Switch on **Include contact details** and **Include launch-era estimate** to add the rest — same engine, same per-store price.

Nothing is invented to fill a column. A field the store does not publish returns `null`, because a
guessed value is worse than no value.

#### Measured coverage

Real numbers from a 25-store run, not estimates:

| Field | Present on |
|---|---|
| Theme | **100%** |
| Active in the last year | **60%** |
| Installed apps detected | **44%** |

***

### Default settings

Clicking **Start** with the defaults runs exactly this:

```json
{
  "discoverStores": true,
  "maxStores": 50,
  "maxStoresScanned": 400,
  "includeCatalog": true,
  "includeContacts": false
}
```

Change any of it. The full filter set — `countries`, `minProducts`, `maxProducts`,
`activeWithinDays`, `launchedWithinDays`, `keywords`, `excludeKeywords` — is available on every
run, and anything a filter rejects is free.

***

### What you are charged for

One charge per **store record delivered**. Nothing else.

Always free: stores that fail your filters, domains that are not Shopify stores, dead and parked
domains, frozen and deleted stores, sites behind a bot wall, every `error` and `diagnostics` row,
the second sighting of a store already charged in the run, and a run that returns nothing. There is
no run-start fee.

`maxStores` caps what you pay for, `maxCostUsd` stops the run before a hard ceiling, and
`maxStoresScanned` bounds how far a narrow filter searches.

***

### Setup

**Apify Proxy is required** — it is selected by default. Datacenter proxy is enough; residential is
not needed. Runs without a proxy return almost nothing.

***

### Related tools

Same engine, pointed at a different job:

- [myshopify Domain List Scraper - Store Handles & URLs](https://apify.com/vonsensey/myshopify-store-domain-list-scraper)
- [Shopify Theme Detector - Find Stores by Theme in Bulk](https://apify.com/vonsensey/shopify-theme-detector-scraper)
- [Shopify Competitor Analysis - Size, Stack & Prices](https://apify.com/vonsensey/shopify-competitor-analysis-scraper)
- [Shopify Store Finder - Discover Ecommerce Stores](https://apify.com/vonsensey/shopify-ecommerce-store-finder)
- [New Shopify Stores Scraper - Recently Launched Brands](https://apify.com/vonsensey/new-shopify-stores-scraper-recently-launched)
- [Shopify Store Leads Scraper](https://apify.com/vonsensey/shopify-store-leads-scraper) — the full version, every mode in one

***

### Unofficial

This is an **unofficial** tool. It is **not affiliated with, endorsed by, or sponsored by Shopify
Inc.** "Shopify" is a trademark of Shopify Inc. and is used here only to describe what the tool
works with. It reads only what a store publishes publicly on its own storefront — nothing private,
nothing behind a login.

### Use it from n8n, MCP, the API or a schedule

Built to be called by a workflow, not only from the Store form. The Actor is `vonsensey/shopify-dropshipping-stores-niche-research-scraper`; every snippet below sends `{}`, which runs the defaults shown on the form — replace it with your own input.

#### n8n

Install the **Apify** community node (`@apify/n8n-nodes-apify` under *Settings → Community Nodes*, or search "Apify" on n8n Cloud). Add **Apify → Run Actor** with Actor `vonsensey/shopify-dropshipping-stores-niche-research-scraper` and your input JSON, then **Apify → Get Dataset Items** on the run's `defaultDatasetId` and pipe the rows anywhere. For scheduled runs, the **On new Apify Event** trigger fires when a run of this Actor finishes.

#### MCP (Claude, Cursor, VS Code, any MCP client)

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=vonsensey/shopify-dropshipping-stores-niche-research-scraper",
      "headers": {
        "Authorization": "Bearer <YOUR_APIFY_TOKEN>"
      }
    }
  }
}
```

Your agent then calls `vonsensey/shopify-dropshipping-stores-niche-research-scraper` as a tool with the same input the form takes and reads the dataset back.

#### REST API (one call, rows in the response)

```bash
curl -X POST "https://api.apify.com/v2/acts/vonsensey~shopify-dropshipping-stores-niche-research-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" -d '{}'
```

#### Python

```python
from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("vonsensey/shopify-dropshipping-stores-niche-research-scraper").call(run_input={})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row)
```

#### JavaScript

```js
import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('vonsensey/shopify-dropshipping-stores-niche-research-scraper').call({});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

#### Make, Zapier, LangChain, CrewAI

The Apify app in **Make** and **Zapier** has a *Run an Actor* module: pick `vonsensey/shopify-dropshipping-stores-niche-research-scraper`. In **LangChain** and **CrewAI** the Apify tool wrappers take the same Actor id. A daily **schedule** needs nothing but the Console: *Schedules → Create → this Actor → cron*, and the dataset fills on its own.

> **Run it without configuring anything** — [Size up a dropshipping niche on Shopify](https://apify.com/vonsensey/shopify-dropshipping-stores-niche-research-scraper/examples/size-up-a-dropshipping-niche), a ready-made example you can start as-is or copy.

### Use cases

- **Build a qualified lead list.** Every store arrives with its contact email, country, catalogue size and price band, so the list is already filtered before you write a line.
- **Sell to a tech stack.** Find the stores running a given theme or app category — or the ones missing it entirely, which is the better pitch.
- **Size a niche before entering it.** Catalogue depth, price band, vendors and whether a store still ships new products tell you if a market is alive.
- **Catch new stores early.** Recently launched brands are still choosing the tools they will pay for.

### Run it on a schedule

A one-off pull answers a question; a schedule answers it every day without you. Open **Schedules** in the Apify Console, point a cron at this Actor, and the dataset keeps filling on its own — no server, no cron box, no babysitting. Everything here is built to be re-run: you are billed per store delivered, and the FAQ below says exactly what a scheduled run that finds nothing new costs.

### FAQ

#### Where do the stores come from?

Live storefronts, read at the moment you run it — either the URLs you supply or discovery across the public web. Nothing here is a resold static list.

#### Is the email the store owner's?

It is the contact address the store publishes. Where a store exposes several, the most owner-facing one is preferred and the rest are kept.

#### Do I pay for stores that fail my filters?

No. A store that does not match your country, size or keyword filter is a free row, so you can filter aggressively without paying for it.

#### Can I check which apps and theme a store runs?

Yes — theme family, Theme Store ID where it has one, and the installed app categories, on the same row as the contact details.

#### Does this work on stores with a custom domain?

Yes, and it recognises them as the same store as their `.myshopify.com` address, so you are never billed twice for one shop.

#### Can I target a specific niche?

Use `keywords`, which matches the store name, description, domain, vendors and product types. Discovery itself is broad, so a narrow keyword needs a higher `maxStoresScanned` — and everything rejected along the way is free.

#### Why is `oldestPublishedProductAt` sometimes null?

Very large catalogues cannot be paged to the end, so the launch date genuinely cannot be established. It returns `null` rather than a wrong date.

#### Why is `email` null on some stores?

Because that store publishes no contact address. Inventing `info@` would give you a bounce and a damaged sending reputation. Addresses are also only accepted from the store's **own domain** — a support address belonging to some third-party tool the store happens to use is not your lead.

#### Will I get the same stores if I run it again?

No. Each discovery run samples a different slice, so a weekly top-up brings new leads rather than re-charging you for ones you already have. Pin `discoverySeed` if you want a run to repeat exactly.

#### Is the data personal information?

The contact details are business contact routes a merchant publishes on its own storefront and policy pages for exactly this purpose. Handle them under your own lawful basis and honour any opt-out you receive.

#### How long does a run take, and why does nothing appear for the first minute?

Discovery starts with the Common Crawl URL index, which takes roughly a minute before the first store appears (measured 81 s). After that a store takes about 2.3 s at the default concurrency of 10, so 200 scans is 8–10 minutes and the default 60-minute timeout covers about 1,500 scans. The log says what is happening from the first second. If a run approaches its timeout it stops early on its own: you keep every store found, the diagnostics row shows `stopReason: outOfTime` and `candidatesNotScanned`, a free notice row explains it, and nothing unscanned is charged — raise the run timeout or lower `maxStoresScanned` to get the rest.

***

Something wrong, or a field you need that is missing? Open an issue on the **Issues** tab — it is read and it gets fixed. If this saved you time, a rating on the Store page helps the next person find it.

# Actor input Schema

## `storeUrls` (type: `array`):

Shopify stores to qualify, one per line. Accepts a bare domain (example.com), a full URL, or a myshopify handle (brand.myshopify.com). Leave empty to let discovery find stores instead.

## `discoverStores` (type: `boolean`):

Also find Shopify stores automatically, instead of only qualifying the ones you supply. Discovery is broad rather than keyword-targeted, so narrow it with the filters below. Stores that fail your filters are never charged.

## `maxStores` (type: `integer`):

How many qualified store records to return. This is what you pay for — one charge per delivered store.

## `maxStoresScanned` (type: `integer`):

Ceiling on how many candidates are checked while looking for matches. Raise it when a narrow filter (a small country, a rare keyword) rejects most candidates. Checking is free; only delivered stores are charged.

## `discoverySeed` (type: `integer`):

Pin this to get the same discovered stores every run — useful for reproducible tests. Leave empty and each run samples a different slice, so repeat runs bring back new stores instead of the ones you already paid for.

## `ccIndex` (type: `string`):

Pin discovery to one specific web-crawl index, e.g. CC-MAIN-2026-30. Leave empty to draw from the most recent indexes automatically, which is what you want unless you are reproducing an old run.

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

Only deliver stores based in these countries. Two-letter ISO codes, e.g. US, GB, AU, CA, DE.

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

Only deliver stores with at least this many published products. Filters out empty and abandoned stores.

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

Only deliver stores with at most this many published products. Useful for targeting small independent brands rather than large retailers.

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

Only deliver stores that published a product in the last N days. The strongest signal that a store is still trading. Needs the catalogue, so it requires 'Include catalogue' to stay on.

## `launchedWithinDays` (type: `integer`):

Only deliver stores that look recently launched, judged by the oldest product they ever published. Turns on the launch-era lookup automatically (one extra request per store). Stores whose catalogue is too large to page to the end are excluded rather than guessed at.

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

Only deliver stores whose name, description, domain, vendors or product types contain at least one of these words.

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

Never deliver stores matching any of these words.

## `includeCatalog` (type: `boolean`):

Adds the last-product date (is this store still active?), price range, vendors and product types. Costs one extra request per store.

## `includeContacts` (type: `boolean`):

Adds the store's public contact email, phone and social profiles, taken from the storefront and its published policy pages.

## `includeTechStack` (type: `boolean`):

Adds the Shopify theme and the apps detected on the storefront — useful for targeting stores that already run (or lack) a given tool.

## `includeLaunchDate` (type: `boolean`):

Adds the oldest published product date as a rough store-age signal. Off by default because it costs one extra request per store.

## `maxCostUsd` (type: `number`):

Hard ceiling on what this run may cost, in USD. The run stops cleanly once delivering another store would exceed it. Accepts fractions, e.g. 0.25. Leave empty for no ceiling.

## `maxConcurrency` (type: `integer`):

Parallel stores in flight. Higher is faster; the default is tuned to stay well inside Shopify's rate limits.

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

Required. Shopify rate-limits by IP, so a run without rotating proxies returns almost nothing. Datacenter proxies are enough — residential is not needed. Optional — proxy is handled for you and its cost is included in the price. Only set this if you have a specific reason.

## Actor input object example

```json
{
  "storeUrls": [],
  "discoverStores": true,
  "maxStores": 50,
  "maxStoresScanned": 400,
  "countries": [],
  "keywords": [],
  "excludeKeywords": [],
  "includeCatalog": true,
  "includeContacts": false,
  "includeTechStack": true,
  "includeLaunchDate": false,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `stores` (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 = {
    "storeUrls": [],
    "discoverStores": true,
    "maxStores": 50,
    "maxStoresScanned": 400,
    "countries": [],
    "keywords": [],
    "excludeKeywords": [],
    "includeCatalog": true,
    "includeContacts": false,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("vonsensey/shopify-dropshipping-stores-niche-research-scraper").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 = {
    "storeUrls": [],
    "discoverStores": True,
    "maxStores": 50,
    "maxStoresScanned": 400,
    "countries": [],
    "keywords": [],
    "excludeKeywords": [],
    "includeCatalog": True,
    "includeContacts": False,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("vonsensey/shopify-dropshipping-stores-niche-research-scraper").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 '{
  "storeUrls": [],
  "discoverStores": true,
  "maxStores": 50,
  "maxStoresScanned": 400,
  "countries": [],
  "keywords": [],
  "excludeKeywords": [],
  "includeCatalog": true,
  "includeContacts": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call vonsensey/shopify-dropshipping-stores-niche-research-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vonsensey/shopify-dropshipping-stores-niche-research-scraper"
        }
    }
}
```

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/NGwhx6m2UwmCzVOIJ/builds/TdwgfJrUtHSyoBhV2/openapi.json
