# Cross-Platform Ad Search (`mrdoe/cross-platform-ad-search`) Actor

Searches one brand across Meta, Google/YouTube and LinkedIn ad libraries in a single run and returns the results in one unified dataset.

- **URL**: https://apify.com/mrdoe/cross-platform-ad-search.md
- **Developed by:** [MrDoe](https://apify.com/mrdoe) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 ad returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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

![Cross-Platform Ad Search — search one brand across Facebook, Google/YouTube and LinkedIn ad libraries in a single run](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/cross-platform-ad-search--hero.png)

### What does Cross-Platform Ad Search do?

Cross-Platform Ad Search looks up one brand's current advertising on Facebook/Instagram,
Google/YouTube and LinkedIn in a single run, and returns every result in one combined,
clearly-tagged dataset. Instead of running three separate ad-library tools and stitching the
results together yourself, you get one search and one table. No login, no account needed on
any of the three platforms.

### Why use Cross-Platform Ad Search?

- **One search, three networks** - stop running Meta, Google and LinkedIn ad lookups
  separately and merging the results by hand.
- **Clearly tagged by platform** - every row carries a `sourcePlatform` field, so you can
  filter, group or compare across networks instantly.
- **No login needed** - works fully logged out on every platform it searches.
- **Pick your own mix** - search all three platforms, or just the ones relevant to this brand.
- **Full detail preserved** - each row also carries the complete original record from its
  source platform, so nothing is lost in the merge.

### What makes this different

Competitor research usually means opening three different tools, running the same search
three times, and copy-pasting results into one spreadsheet yourself. This Actor does that
merge for you - one input, one run, one dataset - so you can see a brand's cross-platform
advertising footprint at a glance instead of assembling it manually.

### Who uses Cross-Platform Ad Search?

- **Marketing and competitive-intelligence teams** - get a brand's full paid-advertising
  footprint across the major ad networks in one pass.
- **Agencies pitching new clients** - quickly show a prospect what they (or their
  competitors) are currently running everywhere, without a multi-tool workflow.
- **Market researchers and consultants** - build a cross-platform advertising snapshot for a
  report without manually reconciling three different data formats.
- **Brand and PR teams** - monitor a brand's own advertising consistency and messaging across
  every major network at once.

### How it works

![How Cross-Platform Ad Search turns one input into results from three platforms](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/cross-platform-ad-search--how-it-works.png)

1. **Your input** - a brand name and/or website domain, and which platforms to search.
2. **The Actor collects it** - it searches Facebook/Instagram, Google/YouTube and LinkedIn's
   own ad libraries for that brand, works fully logged out, and tags every result by platform.
3. **Your output** - one unified dataset with every ad found, ready for a spreadsheet,
   dashboard or report.

### What data can you extract?

| Field | Description |
|---|---|
| `sourcePlatform` | Which platform this ad came from: `facebook`, `google` or `linkedin` |
| `advertiserName` | The advertiser's name as shown on that platform |
| `country` | The country filter applied for this ad, when one was given (platforms default differently when none is given) |
| `headline` | The ad's headline, when that platform provides one |
| `bodyText` | The ad's text/copy, when that platform provides it |
| `imageUrl` / `videoUrl` / `previewUrl` | Creative preview links, by type |
| `ctaText` | The call-to-action text, when available |
| `format` | The ad's format/type as that platform describes it |
| `startDate` | When the ad started running, when that platform discloses it |
| `detailUrl` | Direct link to view this ad on its own platform |
| `raw` | The complete original record from the underlying platform search, for full detail |

### How to use Cross-Platform Ad Search

1. Open the Actor and go to the **Input** tab.
2. Enter a **Brand name** and/or **Website domain** (see the screenshot below).
3. Choose which **Platforms to search** - all three are selected by default.
4. Optionally set **Max results per platform**.
5. Click **Start**.
6. Open the **Dataset** tab, or pull results via the API, once the run finishes.

![Cross-Platform Ad Search input form with brand name, domain and platform selection](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/cross-platform-ad-search--input.png)

### Input Parameters

| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| `brandName` | String | No\* | `"Nike"` | Used to search Facebook/Instagram and LinkedIn |
| `domain` | String | No\* | `"nike.com"` | Used to search Google/YouTube |
| `pageUrl` | String | No | - | A specific Facebook page, used instead of `brandName` for that platform only |
| `companyId` | String | No | - | A specific LinkedIn company ID, used instead of `brandName` for that platform only |
| `country` | String | No | - | Limit every platform to one country (2-letter code), e.g. `"US"`, `"GB"` |
| `platforms` | Array | No | all three | Which platforms to search: `facebook`, `google`, `linkedin` |
| `maxItemsPerPlatform` | Integer | No | `10` | Maximum number of ads to return from each platform |

\*Provide `brandName` for Facebook/LinkedIn and/or `domain` for Google - a platform you select
without enough matching input is simply skipped.

### Output Data

Each ad produces one dataset record. Example:

```json
{
    "sourcePlatform": "facebook",
    "advertiserName": "Nike",
    "country": "ALL",
    "headline": "Nike ACG Polartec® 'Wolf Tree' Women's Mid-Rise Trousers",
    "bodyText": "Bring sports more fully into your day with the Nike App.",
    "imageUrl": "https://scontent.fbcdn.net/...",
    "videoUrl": null,
    "previewUrl": null,
    "ctaText": "Install Now",
    "format": "DPA",
    "startDate": "2025-04-07T07:00:00.000Z",
    "detailUrl": "https://www.facebook.com/ads/library/?id=1702938977100376",
    "scrapedAt": "2026-10-21T06:34:48.755Z",
    "raw": { "...": "the complete original Facebook record" }
}
```

![Sample dataset table from Cross-Platform Ad Search](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/cross-platform-ad-search--output.png)
![Every output field labelled on one example record](https://api.apify.com/v2/key-value-stores/kE36venAoVchGsE6b/records/cross-platform-ad-search--fields.png)

### Usage Examples

- **Full competitor snapshot** - leave all three platforms selected to see a competitor's
  complete current cross-platform advertising footprint in one run.
- **B2C-focused check** - search only `facebook` and `google` for a consumer brand.
- **B2B-focused check** - search only `linkedin` and `google` for a B2B or recruiting brand.
- **Precise targeting** - combine `brandName` with `pageUrl` and/or `companyId` when you
  already know the exact advertiser account on one or more platforms.
- **Market-specific check** - set `country` to see only ads targeted at or shown in one
  market, across all three platforms at once.

### Tips for Best Results

- Provide both `brandName` and `domain` when you have them - between the two, this covers
  all three platforms' search requirements.
- A platform is silently skipped if you select it without the input it needs (e.g. Google
  without a `domain`) - check the run log if a platform's results are missing.
- Use `pageUrl`/`companyId` to disambiguate when a brand name is shared by multiple
  advertiser accounts on a given platform.

### Known Limitations

- Each platform discloses different information, so not every field is populated for every
  row - a platform's own Actor README documents exactly what it does and doesn't expose.
- This Actor runs three other published Actors in the background; depending on how they're
  priced, their own small per-ad charges apply in addition to this Actor's own charges.
- Reflects a snapshot at the time of the run; each platform's current ads change over time.

### Integrations

Connect Cross-Platform Ad Search to the rest of your stack via the [Apify API](https://docs.apify.com/api/v2),
[webhooks](https://docs.apify.com/platform/integrations/webhooks), scheduled runs, or directly
to Google Sheets, Make, and Zapier through Apify's built-in integrations.

### Export Formats

Download results as **JSON, CSV, Excel, or XML** from the Dataset tab, or fetch them
programmatically via the Apify API.

### Frequently Asked Questions

#### Do I need an account on Facebook, Google or LinkedIn?

No. Every platform is searched fully logged out.

#### What happens if I only fill in `brandName` and not `domain`?

Facebook and LinkedIn will still be searched normally; Google/YouTube will be skipped, since
it needs a website domain to search by.

#### Why are some fields empty for certain platforms?

Each platform's own ad library discloses different information - for example, Google's
transparency tool gives a creative preview but not separate headline/body text fields, while
Facebook and LinkedIn do. The `raw` field always has that platform's complete original record.

#### Can I schedule this to run automatically?

Yes, use Apify's built-in [Scheduler](https://docs.apify.com/platform/schedules) to re-check a
brand on any interval you choose.

### Support

Found an issue or have a request? Open it on the Actor's **Issues** tab in the Apify Console.

### Legal / Responsible Use

You're responsible for using this Actor in compliance with applicable laws and each target
platform's terms of service. This Actor retrieves publicly viewable ad information only; it
does not collect personal data.

# Actor input Schema

## `brandName` (type: `string`):

A brand or advertiser name, used to search Facebook/Instagram and LinkedIn. Recommended for most searches.

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

The advertiser's website domain, used to search Google/YouTube (required for that platform).

## `pageUrl` (type: `string`):

A specific Facebook page URL or username, used instead of Brand name for the Facebook search only - more precise when you know the exact page.

## `companyId` (type: `string`):

A specific LinkedIn company ID, used instead of Brand name for the LinkedIn search only - more precise when a brand name is shared by several companies.

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

Limit results to one country (2-letter code, e.g. "US", "GB"), applied to every platform searched. Leave empty for each platform's own default (usually every country, or the US).

## `platforms` (type: `array`):

Which ad libraries to search. Facebook and LinkedIn use Brand name (or their specific override above); Google/YouTube needs Website domain.

## `maxItemsPerPlatform` (type: `integer`):

Maximum number of ads to return from each platform searched.

## Actor input object example

```json
{
  "brandName": "Nike",
  "domain": "nike.com",
  "platforms": [
    "facebook",
    "google",
    "linkedin"
  ],
  "maxItemsPerPlatform": 10
}
```

# Actor output Schema

## `results` (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 = {
    "brandName": "Nike",
    "domain": "nike.com",
    "platforms": [
        "facebook",
        "google",
        "linkedin"
    ],
    "maxItemsPerPlatform": 10
};

// Run the Actor and wait for it to finish
const run = await client.actor("mrdoe/cross-platform-ad-search").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 = {
    "brandName": "Nike",
    "domain": "nike.com",
    "platforms": [
        "facebook",
        "google",
        "linkedin",
    ],
    "maxItemsPerPlatform": 10,
}

# Run the Actor and wait for it to finish
run = client.actor("mrdoe/cross-platform-ad-search").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 '{
  "brandName": "Nike",
  "domain": "nike.com",
  "platforms": [
    "facebook",
    "google",
    "linkedin"
  ],
  "maxItemsPerPlatform": 10
}' |
apify call mrdoe/cross-platform-ad-search --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,mrdoe/cross-platform-ad-search"
        }
    }
}
```

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/FyxmqBPeunNGzqPC1/builds/QUkalvSw18HnWfnUM/openapi.json
