# Shopify Stores Running Meta Ads - Agency Lead Finder (`leopoldsaint/shopify-active-ads-lead-finder`) Actor

Find Shopify brands running Meta ads right now: verified store, live ad evidence, contact email, missing-app gaps, and a transparent fit score.

- **URL**: https://apify.com/leopoldsaint/shopify-active-ads-lead-finder.md
- **Developed by:** [Leopold saint](https://apify.com/leopoldsaint) (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

from $84.00 / 1,000 qualified leads

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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 Stores Running Meta Ads - Agency Lead Finder

Find Shopify brands that are spending money on Meta ads **right now** - and get them as verified, contactable leads with proof attached.

Enter the niche you sell services into, such as `pet supplements`, `organic skincare`, or `home fragrance`. The Actor sweeps the Meta Ad Library for active advertisers in that niche, verifies which of them run on Shopify, deep-analyzes only the verified stores, and delivers qualified leads with contact email, live-ad evidence links, missing-app gaps, and a transparent 0-100 fit score.

A brand paying for traffic today has budget and urgency today. That is the moment to pitch them email flows, CRO, subscriptions, reviews, or loyalty - before their agency does.

### Why use this instead of a store directory?

Store databases tell you a pixel was installed at some point. This Actor shows you **who is actively buying traffic this week**, with links to the live ads as proof:

- **Live ad evidence, not stale pixels.** Every lead links to its ads in the Meta Ad Library, including a one-click "all active ads by this page" link you can open during outreach.
- **Verified Shopify, verified for free.** Non-Shopify advertisers (marketplaces, retailers, app stores) are filtered out with free storefront checks before any paid analysis happens.
- **You only pay for delivered leads.** Advertisers that turn out to be unreachable, unverifiable, or a bad fit are never charged for.
- **Never pay for the same lead twice.** The Actor remembers every store it has delivered to you (in a private key-value store in your account) and skips them on re-runs - so a weekly schedule keeps producing only fresh leads. You can also paste your own exclusion list (existing clients, CRM contacts).
- **Service-fit filtering.** Tell it what you sell (email/SMS, CRO, subscriptions, reviews, loyalty) and it returns only stores that are missing that part of their stack - with the already-installed tools listed so you never pitch Klaviyo to a Klaviyo store.
- **Transparent scoring.** Every lead carries a deterministic score breakdown (ad traction, contactability, gap fit, store maturity, dropshipper-risk penalty). No black box.

### How to use it

1. Enter your **niche keyword** (the market your service targets).
2. Optionally pick your **service focus** so results are filtered to stores missing that app category.
3. Click **Start**. A typical default run finishes in a few minutes.
4. Open the **Qualified leads** table, or export JSON/CSV/Excel from the dataset for your CRM or outreach tool.

### Input

| Field                    | Default   | What it does                                                                            |
| ------------------------ | --------- | --------------------------------------------------------------------------------------- |
| `niche`                  | -         | Meta Ad Library search phrase, e.g. `pet supplements`                                   |
| `extraKeywords`          | `[]`      | Up to 4 extra search phrases to widen the sweep                                         |
| `serviceFocus`           | `general` | Filter to stores missing your service (email/SMS, CRO, subscriptions, reviews, loyalty) |
| `maxLeads`               | `10`      | Stop after this many qualified leads - you only pay for what is delivered               |
| `requireEmail`           | `false`   | Only deliver leads that include a contact email                                         |
| `rememberDeliveredLeads` | `true`    | Skip (and never re-charge) stores delivered in previous runs                            |
| `excludeDomains`         | `[]`      | Your own skip-list: existing clients, CRM contacts, competitors                         |
| `country`                | `US`      | Ad Library country code                                                                 |
| `maxAds`                 | `50`      | Active ads to scan before deduplicating advertisers                                     |
| `maxStoreAnalyses`       | `12`      | Verified Shopify stores to deep-analyze                                                 |
| `minFitScore`            | `0`       | Deliver only leads at or above this 0-100 score                                         |

### Output

Each qualified lead is one dataset row. Simplified example:

```json
{
    "domain": "wuffes.com",
    "storeUrl": "https://wuffes.com",
    "brandName": "Wuffes",
    "fitScore": 78,
    "fitGrade": "B",
    "scoreBreakdown": { "adTraction": 27, "contactability": 20, "gapFit": 14, "storeMaturity": 17, "riskPenalty": 0 },
    "email": "hello@wuffes.com",
    "activeAdsSeen": 5,
    "adFirstSeen": "2026-05-14",
    "adLastSeen": "2026-07-29",
    "adPlatforms": ["FACEBOOK", "INSTAGRAM"],
    "sampleAdHeadline": "Vet-Formulated Hip & Joint Chews",
    "adLibraryUrls": ["https://www.facebook.com/ads/library/?id=1996093830997140"],
    "adLibraryPageUrl": "https://www.facebook.com/ads/library/?active_status=active&view_all_page_id=234739369891224&country=US",
    "shopifyVerified": true,
    "shopifyEvidence": "products-json",
    "likelyShopifyPlus": false,
    "monthlyRevenueUsdEstimate": 85000,
    "customerSegment": "mid-market",
    "dropshipperRisk": "low",
    "serviceFocus": "email_sms",
    "gapMatched": true,
    "missingStack": ["Email & SMS marketing", "Loyalty program", "Subscriptions"],
    "detectedTools": [],
    "pitchAngles": ["No subscriptions - pitch recurring revenue for consumables."]
}
```

You can download the dataset in JSON, CSV, Excel, or HTML formats, or pull it through the API.

#### Main data fields

| Field                                                                          | Meaning                                                                         |
| ------------------------------------------------------------------------------ | ------------------------------------------------------------------------------- |
| `fitScore`, `fitGrade`, `scoreBreakdown`                                       | Deterministic 0-100 agency-fit score with every component exposed               |
| `email`, `phone`, `socials`                                                    | Best discovered contact routes (emails are sanitized and de-junked)             |
| `activeAdsSeen`, `adFirstSeen`, `adLastSeen`                                   | Ad traction observed in the scan window                                         |
| `adLibraryPageUrl`, `adLibraryUrls`                                            | Live proof links to the brand's ads in the Meta Ad Library                      |
| `shopifyEvidence`                                                              | How the store was verified (`products-json`, `shopify-headers`, `html-markers`) |
| `missingStack`, `detectedTools`, `gapMatched`                                  | What the store lacks vs. already has for your service focus                     |
| `monthlyRevenueUsdEstimate`, `customerSegment`, `dropshipperRisk`, `isScaling` | Qualification signals from the store deep-analysis                              |
| `pitchAngles`                                                                  | Ready-to-use opening angles based on detected gaps                              |

### How much does a run cost?

Pricing is pay-per-event: **you are charged only for each qualified lead actually delivered**, plus a negligible run-start fee. Leads filtered out by verification, missing email, or gap mismatch cost you nothing from this Actor.

The two upstream Actors bill their usage separately at their own rates: the Meta Ad Library scan (about `$0.04` for the default 50-ad sweep) and the store deep-analysis (about `$0.02` per verified store, at most `maxStoreAnalyses`). The Actor pins hard budget ceilings on both nested calls, and it never analyzes stores it could not deliver within your run budget. A typical default run delivering ~9 leads costs about `$0.20` of upstream usage in total.

### Tips for better lead lists

- **Niche down the keyword.** `pet supplements` beats `pets`; the Ad Library keyword search is literal, so use the phrase a brand would put in its own ad copy.
- **Use `serviceFocus`.** A 10-lead list of stores that all lack your exact service converts far better than a general list.
- **Raise `maxAds` for thin niches.** If a narrow niche yields few advertisers, scan 100-150 ads to surface more unique brands.
- **Turn on `requireEmail`** when you feed the output straight into a cold-email tool.
- **Re-run weekly.** Active advertisers rotate constantly; fresh campaigns (recent `adLastSeen`) are your warmest openers - "I saw the ad you launched this week" is a real line you can use. With `rememberDeliveredLeads` on (the default), every re-run returns only stores you have never seen before.

### Limitations and fair use

- The Meta Ad Library keyword search matches ad text, not product taxonomy, so an occasional off-niche advertiser can appear; the Shopify verification and scoring layers push these to the bottom.
- Ad counts reflect the scanned sample, not the brand's entire campaign portfolio.
- Revenue figures are estimates derived from public storefront signals and should be treated as directional.
- The Actor reads only publicly available data (public ad archive, public storefront pages). Use the contact data responsibly and comply with applicable outreach and privacy laws (CAN-SPAM, GDPR, etc.) in your jurisdiction.

### Support

Found an issue or want an extra signal (TikTok ads, Google ads, more app categories)? Open an issue on the Actor's **Issues** tab - feedback directly shapes the roadmap.

# Actor input Schema

## `niche` (type: `string`):

The market you sell services into, e.g. `pet supplements`, `organic skincare`, `home fragrance`. The Meta Ad Library is searched for brands running active ads that match this phrase.

## `extraKeywords` (type: `array`):

Up to 4 additional Ad Library search phrases to widen the sweep, e.g. synonyms or adjacent product terms.

## `serviceFocus` (type: `string`):

Filter leads to stores missing the app category you sell. `Any service` returns every qualified lead with all detected gaps listed.

## `maxLeads` (type: `integer`):

Stop after this many qualified leads. You are only charged for leads that are actually delivered.

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

When enabled, stores without a discoverable contact email are skipped and never charged for.

## `rememberDeliveredLeads` (type: `boolean`):

Remembers every delivered store in a private key-value store in your account, so weekly re-runs only return (and charge for) leads you have not received before.

## `excludeDomains` (type: `array`):

Stores to skip, e.g. existing clients or leads already in your CRM. Accepts bare domains or full URLs.

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

Two-letter country code for the Meta Ad Library search, e.g. US, GB, CA, AU, DE.

## `maxAds` (type: `integer`):

How many active ads to pull from the Meta Ad Library before deduplicating advertisers. More ads = more candidate brands and slightly higher upstream cost.

## `maxStoreAnalyses` (type: `integer`):

How many verified Shopify stores to send to the deep analyzer (contacts, tech stack, revenue signals). Only verified Shopify stores are analyzed - non-Shopify advertisers are filtered out for free first.

## `minFitScore` (type: `integer`):

Only deliver leads at or above this transparent 0-100 agency-fit score. Use 0 to inspect everything.

## `demoMode` (type: `boolean`):

Development-only mode that uses bundled sample evidence and never calls paid upstream Actors.

## Actor input object example

```json
{
  "niche": "pet supplements",
  "serviceFocus": "general",
  "maxLeads": 10,
  "requireEmail": false,
  "rememberDeliveredLeads": true,
  "country": "US",
  "maxAds": 50,
  "maxStoreAnalyses": 12,
  "minFitScore": 0,
  "demoMode": false
}
```

# Actor output Schema

## `leads` (type: `string`):

No description

## `summary` (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 = {
    "niche": "pet supplements"
};

// Run the Actor and wait for it to finish
const run = await client.actor("leopoldsaint/shopify-active-ads-lead-finder").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 = { "niche": "pet supplements" }

# Run the Actor and wait for it to finish
run = client.actor("leopoldsaint/shopify-active-ads-lead-finder").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 '{
  "niche": "pet supplements"
}' |
apify call leopoldsaint/shopify-active-ads-lead-finder --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=leopoldsaint/shopify-active-ads-lead-finder",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/GyEUd2tTzehstnM6w/builds/s7WEnhTweuzODP1EW/openapi.json
