# Shopify DTC Brand Discovery + Tech Stack Filter (`george.the.developer/shopify-dtc-brand-discovery`) Actor

Find Shopify stores by niche, see what apps they run (Klaviyo, ReCharge, Postscript, Yotpo + 25 more), score the opportunity, get pitch angles based on missing app categories. Pay-per-result API for DTC growth agencies running outbound.

- **URL**: https://apify.com/george.the.developer/shopify-dtc-brand-discovery.md
- **Developed by:** [George Kioko](https://apify.com/george.the.developer) (community)
- **Categories:** E-commerce, Lead generation
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per event + usage

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Shopify DTC Brand Discovery — Tech Stack + Opportunity Score

Find Shopify stores by niche, see what apps they run (Klaviyo, ReCharge, Postscript, Yotpo, Gorgias and 25 more), score the opportunity, surface pitch angles based on which app categories are missing. Single-endpoint API on Apify Standby. Pay per result, no monthly seat license.

[![Shopify DTC Brand Discovery on Apify](https://img.shields.io/badge/Apify-Shopify%20DTC%20Discovery-1f8f4d)](https://apify.com/george.the.developer/shopify-dtc-brand-discovery)
[![Pricing](https://img.shields.io/badge/Pricing-%240.02%20discovery%20%2F%20%240.05%20enriched-blue)](#pricing)

### Why this exists

Trendtrack at $99-$299/mo. Store Leads at subscription. The closest Apify alternative has 47 monthly users and a "under maintenance" banner. DTC agencies don't need another database subscription. They need a query that returns 200 brands with the missing app slot already identified, ready for a Klaviyo or Postscript outbound list.

### How It Works

````

```
                ┌─────────────────────────────────────────────┐
                │      Shopify DTC Brand Discovery API        │
                └──────────────────┬──────────────────────────┘
                                   │
                ┌──────────────────▼──────────────────────────┐
                │  Step 1: DISCOVERY                          │
                │  site:myshopify.com search + /products.json │
                │  validation. Returns store URL + niche      │
                │  + product count. Charge: $0.02/store       │
                └──────────────────┬──────────────────────────┘
                                   │
                ┌──────────────────▼──────────────────────────┐
                │  Step 2: TECH STACK DETECTION (30 apps)     │
                │  Email: Klaviyo, Omnisend, Drip, Mailchimp  │
                │  SMS: Postscript, Attentive, SMSBump        │
                │  Reviews: Judge.me, Yotpo, Loox, Stamped    │
                │  Subscriptions: ReCharge, Bold, Skio        │
                │  Helpdesk: Gorgias, Zendesk, Tidio          │
                │  Page builder, Upsell, Loyalty, Analytics   │
                └──────────────────┬──────────────────────────┘
                                   │
                ┌──────────────────▼──────────────────────────┐
                │  Step 3: CONTACT + SOCIALS                  │
                │  Email + phone from /contact and footer     │
                │  6 social platforms via regex on HTML       │
                └──────────────────┬──────────────────────────┘
                                   │
                ┌──────────────────▼──────────────────────────┐
                │  Step 4: OPPORTUNITY SCORE 0-100            │
                │  Higher = more open app slots = warmer lead │
                │  Plus pitch angles ready for outbound       │
                │  Charge: $0.05 per fully-enriched record    │
                └──────────────────┬──────────────────────────┘
                                   │
                ┌──────────────────▼──────────────────────────┐
                │  Output: structured JSON                    │
                └─────────────────────────────────────────────┘
```

````

### Endpoints

| Method | Path | Purpose | Charge |
|--------|------|---------|--------|
| `GET` | `/` | Service info | none |
| `GET` | `/health` | Health probe | none |
| `GET` | `/discover?keyword=skincare&limit=25` | Discover stores by niche | $0.02 / store |
| `GET` | `/enrich?store_url=https://allbirds.com` | Full enrichment for one store | $0.05 / store |
| `POST` | `/enrich/bulk` | Up to 50 stores in one call | $0.05 / store |

### Quick start

```bash
TOKEN="<your-apify-token>"
BASE="https://george-the-developer--shopify-dtc-brand-discovery.apify.actor"

## Discover 10 skincare brands
curl "$BASE/discover?keyword=skincare&limit=10" -H "Authorization: Bearer $TOKEN"

## Enrich one specific store
curl "$BASE/enrich?store_url=https://allbirds.com" -H "Authorization: Bearer $TOKEN"
````

### Sample response (enriched)

```json
{
  "store_url": "https://allbirds.com",
  "brand_name": "Allbirds",
  "country": "US",
  "shopify": { "product_count": "250+", "currency": "USD", "locales": ["en-US"] },
  "tech_stack": {
    "email": ["Klaviyo"],
    "sms": [],
    "reviews": ["Yotpo"],
    "subscriptions": [],
    "helpdesk": ["Gorgias"],
    "payments": ["Shop Pay", "Shopify Payments"]
  },
  "missing_categories": ["sms", "subscriptions", "loyalty", "page_builder"],
  "contact": { "email": "help@allbirds.com", "phone": "1-628-300-1003" },
  "socials": {
    "instagram": "https://instagram.com/allbirds",
    "tiktok": "https://tiktok.com/@weareallbirds"
  },
  "opportunity_score": 78,
  "pitch_angles": [
    "No SMS app installed - abandoned-cart recovery is leaking",
    "No subscriptions app - recurring revenue untapped",
    "No loyalty program - repeat-purchase rate likely below 25 percent"
  ]
}
```

### Pricing

| Event | Price | What it covers |
|-------|-------|----------------|
| `discovery-completed` | $0.02 | One Shopify store found and validated against `/products.json` |
| `brand-enriched` | $0.05 | Full tech stack, contact, socials, opportunity score, pitch angles |

Apify free tier covers around $5/mo of usage out of the gate. No subscription, no minimum, no seat license.

### Use cases

1. **Klaviyo agencies** — find Shopify stores doing $1M+ that do not run Klaviyo. Pre-qualified Klaviyo retainer outbound.
2. **Postscript / Attentive resellers** — find brands with no SMS app installed.
3. **Shopify app developers** — find stores that lack your category. Outbound for product-led growth.
4. **DTC consultants** — score 500 stores in your niche, work the top 50 by opportunity score.
5. **Agency vertical scouts** — qualify brands by tech stack signals before adding them to the pipeline.

### Tech stack detector (v1)

30 most common DTC apps across 10 categories. v2 expands to 80+ patterns including more loyalty, returns, post-purchase, and reviews tools. Coverage is best on standard Shopify themes — Plus tenants on headless setups have lower coverage.

### Honest tradeoffs

- Cold-start latency on first call after idle (10-30s while Apify wakes the Standby actor)
- Tech stack detection misses headless and Shopify Plus tenants where apps load via custom domains
- Opportunity score is a heuristic (more apps installed = more saturated = lower score). Tune to your buyer profile
- `/discover` uses search-engine results to find candidate stores; results vary by region

### Docs and examples

Full curl, Node, and Python examples at [github.com/the-ai-entrepreneur-ai-hub/shopify-dtc-brand-discovery-docs](https://github.com/the-ai-entrepreneur-ai-hub/shopify-dtc-brand-discovery-docs).

### More from this developer

Other lead-gen actors built for the same value-driven, pay-per-result model:

- **[ATS Hire-Trigger Intent Scraper](https://apify.com/george.the.developer/ats-hire-trigger-intent-scraper)** — Greenhouse + Lever + Ashby + SmartRecruiters jobs in one API. Tech-keyword extraction, hiring-surge flags, first-in-function detection. $0.005 / $0.015 per job. For SDR teams running buying-intent outreach.
- **[Funded Startup Tracker](https://apify.com/george.the.developer/funded-startup-tracker)** — TechCrunch + SEC EDGAR funding events with parsed amount, round, investors, founders, hiring signals. $0.04 / $0.10 per record. Pay-per-result alternative to Crunchbase Pro seat licenses.
- **[Email Validator API](https://apify.com/george.the.developer/email-validator-api)** — SMTP probe, MX record check, disposable detection. $0.002 per email. Pairs with this actor for verifying contacts you discover.
- **[Domain WHOIS Lookup](https://apify.com/george.the.developer/domain-whois-lookup)** — Age, expiry, registrar, DNS. $0.005 per domain. Pairs for owner-info enrichment on stores you find.

Full portfolio: [apify.com/george.the.developer](https://apify.com/george.the.developer).

### License

MIT.

# Actor input Schema

## `searchQuery` (type: `string`):

Niche or keyword to discover stores for (e.g. 'skincare', 'pet supplements', 'mens grooming')

## `country` (type: `string`):

Optional ISO country code filter (US, UK, CA, AU, DE etc.)

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

Maximum number of stores to return (1-200)

## `enrichmentLevel` (type: `string`):

'basic' returns just discovery, 'full' adds tech stack, contact, opportunity score

## `storeUrl` (type: `string`):

Optional: enrich one specific Shopify store (skips discovery)

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

Optional: array of Shopify store URLs to enrich in bulk (max 50)

## Actor input object example

```json
{
  "searchQuery": "skincare",
  "country": "US",
  "maxResults": 25,
  "enrichmentLevel": "full"
}
```

# 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 = {};

// Run the Actor and wait for it to finish
const run = await client.actor("george.the.developer/shopify-dtc-brand-discovery").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 = {}

# Run the Actor and wait for it to finish
run = client.actor("george.the.developer/shopify-dtc-brand-discovery").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call george.the.developer/shopify-dtc-brand-discovery --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=george.the.developer/shopify-dtc-brand-discovery",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Shopify DTC Brand Discovery + Tech Stack Filter",
        "description": "Find Shopify stores by niche, see what apps they run (Klaviyo, ReCharge, Postscript, Yotpo + 25 more), score the opportunity, get pitch angles based on missing app categories. Pay-per-result API for DTC growth agencies running outbound.",
        "version": "1.0",
        "x-build-id": "2CkKRYMBDBxEjCxIn"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/george.the.developer~shopify-dtc-brand-discovery/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-george.the.developer-shopify-dtc-brand-discovery",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/george.the.developer~shopify-dtc-brand-discovery/runs": {
            "post": {
                "operationId": "runs-sync-george.the.developer-shopify-dtc-brand-discovery",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/george.the.developer~shopify-dtc-brand-discovery/run-sync": {
            "post": {
                "operationId": "run-sync-george.the.developer-shopify-dtc-brand-discovery",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "searchQuery": {
                        "title": "Niche Keyword",
                        "type": "string",
                        "description": "Niche or keyword to discover stores for (e.g. 'skincare', 'pet supplements', 'mens grooming')",
                        "default": "skincare"
                    },
                    "country": {
                        "title": "Country Code",
                        "type": "string",
                        "description": "Optional ISO country code filter (US, UK, CA, AU, DE etc.)",
                        "default": "US"
                    },
                    "maxResults": {
                        "title": "Max Results",
                        "minimum": 1,
                        "maximum": 200,
                        "type": "integer",
                        "description": "Maximum number of stores to return (1-200)",
                        "default": 25
                    },
                    "enrichmentLevel": {
                        "title": "Enrichment Level",
                        "enum": [
                            "basic",
                            "full"
                        ],
                        "type": "string",
                        "description": "'basic' returns just discovery, 'full' adds tech stack, contact, opportunity score",
                        "default": "full"
                    },
                    "storeUrl": {
                        "title": "Single Store URL",
                        "type": "string",
                        "description": "Optional: enrich one specific Shopify store (skips discovery)"
                    },
                    "storeUrls": {
                        "title": "Bulk Store URLs",
                        "maxItems": 50,
                        "type": "array",
                        "description": "Optional: array of Shopify store URLs to enrich in bulk (max 50)",
                        "items": {
                            "type": "string"
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
