# Meta Ad Spy (`sentry/meta-ad-spy`) Actor

Meta Ad Spy scrapes Facebook Ads Library to find winning products, dropshipping trends, and top Shopify ad angles. Discover long-running Meta ads, top CTAs, hooks, formats, and competitor creatives by keyword to validate products before you spend.

- **URL**: https://apify.com/sentry/meta-ad-spy.md
- **Developed by:** [Sentry](https://apify.com/sentry) (community)
- **Categories:** E-commerce, Social media, Lead generation
- **Stats:** 4 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$25.00/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#rental-actors

## 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

## Meta Ad Spy - Facebook Ad Spy Tool for Winning Products, Dropshipping Research, and Shopify Product Discovery

Meta Ad Spy is a high-intent **Facebook ad spy tool** for ecommerce sellers who want to find **winning products** and profitable ad angles fast.

If you are searching for a:
- Facebook ad spy
- Meta ad spy tool
- dropshipping winning products finder
- Shopify product research tool
- winning products Facebook ads tracker
- ecommerce competitor ad research tool

this actor is built for that exact use case.

### Why Meta Ad Spy Exists

Most ad research tools either:
- overwhelm users with raw ad data and no clear direction,
- focus on brand-level competitor tracking instead of product opportunities,
- or cost far more than most dropshippers and small ecommerce teams can justify.

Meta Ad Spy focuses on practical product discovery outcomes:
- identify product keywords with active ad demand,
- find long-running product ads that indicate market viability,
- spot new product trends before they saturate,
- extract ad-copy and CTA patterns you can adapt for your own tests.

### Core SEO Keywords This Actor Targets

Facebook ad spy, Meta ad spy, winning products Facebook, dropshipping winning products, Shopify ad spy, product research Facebook ads, ecommerce ad intelligence, best selling Facebook ads, viral product finder, ad spy tool for dropshipping, Meta ads product research, Facebook Ads Library product spy.

### What You Can Discover

For every product keyword, niche, or category you input, Meta Ad Spy helps you uncover:
- active product advertisers
- battle-tested ads still running
- product angles gaining traction
- common CTA and format patterns
- ad creative direction in the niche
- destination pages used by winning campaigns

### Built For Ecommerce Buyers

#### Dropshippers
Find product niches where advertisers are consistently spending and keep testing creatives.

#### Shopify store owners
Research competitor product positioning before launching a new collection.

#### Amazon FBA and DTC sellers
Use ad trend visibility to validate category demand before inventory commitment.

#### Ecommerce media buyers
Build test plans from ad patterns already proven in market.

### Product-Winner Signal Framework

Meta Ad Spy classifies opportunities using ad age trend bands:
- **Battle-tested (30+ days):** ads with sustained runtime and durable positioning
- **Gaining traction (14-30 days):** ads likely scaling or stabilizing
- **New test (<14 days):** early-stage tests and possible emerging products

This gives you a fast way to separate likely product winners from short-lived noise.

### Input Parameters

- `productKeywords` (required): product terms, niches, or category phrases
- `country` (default `US`): target market scope
- `maxAdsPerQuery` (default `200`): result depth per keyword
- `proxyConfiguration`: recommended settings for stable large runs

### Output Views

### 1) Product Winners (Summary)
One row per product keyword with market-level opportunity signals:
- total active ads
- battle-tested count
- gaining traction count
- new test count
- average ad age
- top format
- top CTA
- top sellers/advertisers
- top product angle snippets
- longest-running ad signal

### 2) Ads (Detailed)
Ad-level records you can sort and filter for decision-making:
- product keyword
- store/brand (advertiser)
- ad age
- trend label
- ad ID
- ad copy
- headline
- CTA
- format
- page name
- start date
- destination URL
- image URL
- video URL

### How Sellers Use Meta Ad Spy

#### Workflow A: Product validation before launch
1. Add 5-15 product keywords in your category.
2. Run and compare battle-tested counts by keyword.
3. Prioritize keywords with both ad volume and longer ad age.
4. Review top hooks and CTA patterns for test planning.

#### Workflow B: Weekly trend scouting
1. Run the same keyword set weekly.
2. Watch for shifts in top formats and CTA usage.
3. Track emerging angles in gaining-traction ads.
4. Refresh product and creative roadmap accordingly.

#### Workflow C: Creative teardown sprint
1. Filter by battle-tested ads.
2. Analyze offer structure, hook style, and CTA framing.
3. Build ad concepts inspired by proven market language.
4. Launch controlled variations in your own account.

### What Makes This Different From Generic Facebook Ad Scrapers

Generic tools often stop at collecting ad rows.

Meta Ad Spy is product-first and action-oriented:
- optimized around winning product discovery
- trend-tier labels for faster decision-making
- summary view tuned for ecommerce product scouting
- ad-level detail for deeper creative and landing-page review

### Common Questions (FAQ)

#### Is this a Facebook ad spy alternative for dropshipping?
Yes. It is designed specifically for product and niche research in ecommerce.

#### Can this help me find winning products?
Yes. It helps you prioritize product keywords by active ad volume and ad-duration trend signals.

#### Does it only work for dropshipping?
No. It is equally useful for DTC brands, Shopify stores, and Amazon sellers doing paid-social validation.

#### Do I need a Facebook login?
No. It uses public Meta/Facebook Ads Library data.

#### Can agencies use this for ecommerce clients?
Yes. Agencies use it for niche scans, creative research, and go-to-market validation.

### Search-Intent Phrases This README Is Built For

Facebook ad spy tool, Meta ad spy software, Shopify product spy, dropshipping product research, winning products tool, best Facebook ad products, Facebook ad competitor spy, ecommerce ad trend finder, Meta ads product intelligence, paid social product research.

### Data Source

- Meta/Facebook Ads Library (public transparency data)
- No login required
- Useful for product research, ad intelligence, and ecommerce market analysis

# Actor input Schema

## `productKeywords` (type: `array`):

Product keywords, niches, or categories to spy on in the Facebook Ads Library.
## `country` (type: `string`):

Country to search ads for (ISO 2-letter code).
## `maxAdsPerQuery` (type: `integer`):

Maximum number of ads to collect per product keyword.
## `proxyConfiguration` (type: `object`):

Residential proxies are recommended for stable Meta pagination.

## Actor input object example

```json
{
  "productKeywords": [
    "dog bed",
    "posture corrector",
    "running shoes"
  ],
  "country": "US",
  "maxAdsPerQuery": 200,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
````

# Actor output Schema

## `results` (type: `string`):

No description

## `winners` (type: `string`):

No description

## `ads` (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 = {
    "productKeywords": [
        "dog bed",
        "posture corrector",
        "running shoes"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sentry/meta-ad-spy").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 = { "productKeywords": [
        "dog bed",
        "posture corrector",
        "running shoes",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("sentry/meta-ad-spy").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 '{
  "productKeywords": [
    "dog bed",
    "posture corrector",
    "running shoes"
  ]
}' |
apify call sentry/meta-ad-spy --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=sentry/meta-ad-spy",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Meta Ad Spy",
        "description": "Meta Ad Spy scrapes Facebook Ads Library to find winning products, dropshipping trends, and top Shopify ad angles. Discover long-running Meta ads, top CTAs, hooks, formats, and competitor creatives by keyword to validate products before you spend.",
        "version": "0.1",
        "x-build-id": "oBoRqUHyMjNQf4Hwk"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/sentry~meta-ad-spy/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-sentry-meta-ad-spy",
                "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/sentry~meta-ad-spy/runs": {
            "post": {
                "operationId": "runs-sync-sentry-meta-ad-spy",
                "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/sentry~meta-ad-spy/run-sync": {
            "post": {
                "operationId": "run-sync-sentry-meta-ad-spy",
                "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",
                "required": [
                    "productKeywords"
                ],
                "properties": {
                    "productKeywords": {
                        "title": "Product Keywords",
                        "type": "array",
                        "description": "Product keywords, niches, or categories to spy on in the Facebook Ads Library.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "country": {
                        "title": "Country",
                        "type": "string",
                        "description": "Country to search ads for (ISO 2-letter code).",
                        "default": "US"
                    },
                    "maxAdsPerQuery": {
                        "title": "Max Ads Per Keyword",
                        "minimum": 10,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Maximum number of ads to collect per product keyword.",
                        "default": 200
                    },
                    "proxyConfiguration": {
                        "title": "Proxy Configuration",
                        "type": "object",
                        "description": "Residential proxies are recommended for stable Meta pagination.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
