# Ad Repository Scraper (`aboo.script/adsrepository-scraper`) Actor

⚡ Fast Ad Repository scraper for 12 ad platforms: Facebook, Instagram, X, Google, YouTube, Bing, Amazon, TikTok, Reddit, Pinterest, LinkedIn and display. No login, no API key. Search by keyword or URL: ad text, images, videos, landing pages, advertisers, engagement, countries.

- **URL**: https://apify.com/aboo.script/adsrepository-scraper.md
- **Developed by:** [Aboo Script](https://apify.com/aboo.script) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.10 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Ad Repository Scraper

![Ad Repository Scraper](https://i.ibb.co/wZp8kg5y/adsrepository-banner.png)

**Ad Repository Scraper** extracts ads from [Ad Repository](https://www.adsrepository.com/) into clean, structured data you can download as JSON, CSV, Excel, or HTML. Paste any Ad Repository URL or type a few keywords, and get the ad text, images, videos, landing page, advertiser, engagement, and the countries where each ad was seen. One scraper covers Facebook, Instagram, X (Twitter), Google Search, Display, YouTube, Bing, Amazon, TikTok, Reddit, Pinterest, and LinkedIn ads. No account or login required.

### Introduction

[Ad Repository](https://www.adsrepository.com/) is a free, searchable archive of ads collected from 12 advertising platforms, with hundreds of thousands of new ads and tens of thousands of advertisers every week. Marketers, agencies, and researchers use it to see which ads brands run, where they run them, and how people react to them.

This actor collects the same public information you see in your browser and turns it into a ready-to-use dataset. You can run it once, schedule it to run daily, or connect it to your own tools.

### What data can you extract from Ad Repository?

- 📣 Platform, ad ID, title, ad text, link title, and link description
- 🏢 Advertiser name, username, ID, profile URL, logo, verified badge, and a link to all their ads
- 🖼️ Media type, image, video, carousel cards, and the original post URL
- 🔗 Landing page, display URL, domain, and call to action
- 🔍 Search keyword, ad position, ad format, price, seller, Amazon ASIN, and product rating for search and shopping ads
- 🌐 Display network and publisher site for display ads
- ❤️ Engagement: total, likes, comments, shares, views, and Facebook reactions
- 📅 Published date, first seen and last seen dates, and how many times the ad was seen
- 📍 Country, region, and city where the ad was first seen, plus every country where it was seen

### Use Cases

- 📈 **Market research**: see which messages, offers, and formats brands use across many ad platforms at once.
- 🕵️ **Competitor monitoring**: follow the ads a competitor runs on search, social, video, and shopping platforms.
- 🎨 **Creative inspiration**: collect high-engagement images, videos, and copy for your next campaign.
- 🤝 **Lead generation**: build lists of active advertisers in a country, niche, or domain.
- 🤖 **AI and automation**: feed clean, structured ad data into spreadsheets, dashboards, or AI workflows.

### How to scrape Ad Repository step by step

1. Paste one or more Ad Repository URLs into **Start URLs**, or type keywords into **Search queries**.
2. Optionally pick a platform, media type, country, or other filters for your search queries.
3. Set **Max results** to how many ads you want per URL or per query.
4. Click **Start** and wait for the run to finish.
5. Download your data in JSON, CSV, Excel, or HTML from the **Output** tab.

### Input

- **Start URLs**: Ad Repository URLs to scrape. Supported pages: the ad list (with any filters, such as platform, country, media type, or sort order), advertiser pages, platform pages, and single ad pages. Filters in the URL are kept in the results.
- **Search queries**: keywords, advertiser names, or domains to search for, one per line. Each query is scraped separately.
- **Platform**: only ads from one platform, for example Facebook or TikTok.
- **Media type**: text only, image, video, or carousel ads.
- **Country**: only ads seen in one country.
- **Domain**: only ads that lead to a given domain, for example amazon.com.
- **Display network**: only display ads from Google Display, Taboola, or Outbrain.
- **Search ad format**: only search ads or only shopping ads.
- **Sort by**: newest first, recently active, or most engagement.
- **Include dynamic product ads**: also return dynamic catalog ads, which are hidden by default.
- **Max results**: how many ads to collect for each start URL or search query. Set 0 for no limit.

The filters apply to search queries. Start URLs keep the filters in their own URL. You can use start URLs, search queries, or both in the same run.

### Input Examples

Scrape the latest Facebook ads:

```json
{
  "startUrls": [{ "url": "https://www.adsrepository.com/ads?platform=facebook-ads" }],
  "maxResults": 5
}
```

Search by keyword:

```json
{
  "searchQueries": ["nike"],
  "sort": "newest",
  "includeDynamic": false,
  "maxResults": 5
}
```

Scrape the ads of one advertiser:

```json
{
  "startUrls": [{ "url": "https://www.adsrepository.com/advertisers/google-search/temu.com" }],
  "maxResults": 100
}
```

### Output

Each ad is saved as one item in the dataset. Here is an example of a single item:

```json
{
  "url": "https://www.adsrepository.com/ads/7499d55e-aa85-4dd0-97b0-e787c3eb6711",
  "id": "7499d55e-aa85-4dd0-97b0-e787c3eb6711",
  "platform": "Facebook",
  "externalAdId": "1535344515292893",
  "advertiserName": "McDonald’s El Salvador",
  "advertiserUsername": null,
  "advertiserId": "100064520778737",
  "advertiserProfileUrl": "https://www.facebook.com/McdonaldsElSalvador",
  "advertiserLogoUrl": "https://scontent.fsal2-2.fna.fbcdn.net/v/t39.30808-1/853145505_1529160862577925_7129473622822280832_n.jpg?...",
  "advertiserVerified": null,
  "advertiserAdsUrl": "https://www.adsrepository.com/advertisers/facebook/100064520778737",
  "title": "Exclusivo Restaurantes",
  "description": "Los lunes, ya sabes qué pedir. 😉🍔\n\nDisfruta tu McCombo  de Cuarto de Libra® con Queso a $5 y acompáñalo con refill de soda GRATIS. 🥤",
  "linkTitle": "Exclusivo Restaurantes",
  "linkDescription": null,
  "callToAction": "Ver más",
  "landingUrl": "https://l.facebook.com/l.php?u=AUBiaGM2wOZzZ5SA3b_XrKkdoFVUp...",
  "displayUrl": null,
  "domain": "l.facebook.com",
  "mediaType": "video",
  "imageUrl": "https://adsrepository-media.s3.ap-south-1.amazonaws.com/facebook-ads/1535344515292893-client.jpeg",
  "videoUrl": "https://video.fsal2-1.fna.fbcdn.net/o1/v/t2/f2/m412/AQPAMdBHUZDjdumvHHfs27oCIvK8IXCllIiWm9FF9nxp3eukEBDw2NGoLGIydZL209Yb8-myBplphRlMqyoxVkyjuggaw5nuMj3pVOIzew.mp4?...",
  "postUrl": "https://www.facebook.com/100064520778737/videos/1069258599492470",
  "carouselCards": [],
  "searchKeyword": null,
  "adFormat": null,
  "position": null,
  "price": null,
  "seller": null,
  "productAsin": null,
  "productRating": null,
  "network": null,
  "publisherSite": null,
  "placement": null,
  "isDynamic": false,
  "engagementTotal": 4586,
  "likes": 13,
  "comments": 0,
  "shares": 1,
  "views": 4572,
  "reactions": {
    "wow": 0,
    "haha": 0,
    "like": 13,
    "love": 0,
    "anger": 0,
    "sorry": 0,
    "support": 0
  },
  "publishedAt": "2026-10-22T17:17:42.000Z",
  "firstSeenAt": "2026-10-28T17:15:43.939Z",
  "lastSeenAt": "2026-10-28T17:15:43.939Z",
  "timesSeen": 1,
  "firstSeenCountryCode": "SV",
  "firstSeenRegion": null,
  "firstSeenCity": null,
  "seenCountries": [
    {
      "countryCode": "SV",
      "country": "El Salvador",
      "count": 1
    }
  ]
}
```

You can download the dataset in JSON, CSV, Excel, XML, or HTML, or access it through the Apify API.

### Notes

- Ad Repository is a third-party archive: it only contains ads that its community collected, so it does not list every ad an advertiser runs.
- The available fields depend on the platform. For example, search keyword and position exist only for search and shopping ads, and reactions only for Facebook ads. Fields that do not apply are returned as `null`.
- Some Facebook landing pages are a Facebook redirect link when the real address is not shown on the ad.
- Ad text is returned in the original language of the ad.
- Ad Repository has no date filter. Use **Sort by** and **Max results** to get the most recent ads.
- Unsupported URLs (blog, pricing, or insights pages) are skipped.

### Why use the Ad Repository Scraper?

- ✅ **No login needed**: works with public data only, so there is no account to manage.
- 🌍 **12 platforms in one run**: Facebook, Instagram, X, Google Search, Display, YouTube, Bing, Amazon, TikTok, Reddit, Pinterest, and LinkedIn.
- 🎯 **Keeps your filters**: paste any Ad Repository URL from your browser and get exactly what you see there.
- 🧹 **Clean data**: one consistent format for every platform, real numbers, and standard dates.
- 💸 **Pay for what you need**: set a result limit per URL or query and keep every run small and cheap.
- 🔄 **Ready for automation**: schedule runs, export to Google Sheets, or connect to Make, Zapier, and n8n.

### FAQ

#### How many results can I scrape?

You can set any number in **Max results**, or 0 for no limit. The actor keeps going until it reaches your limit or runs out of ads.

#### Do I need an Ad Repository account?

No. The actor only collects publicly available data. You do not need to log in or provide any account details.

#### Can I scrape data on a schedule?

Yes. Use Apify Schedules to run the actor every hour, day, or week, and get fresh ads automatically.

#### Why are some fields empty?

Each platform shows different information, and some ads do not show every detail. When a field is not available, it is returned as `null`.

#### Can I request a new feature or filter?

Yes. Right now the actor supports start URLs, search queries, and the filters of the Ad Repository website. If you need something else, get in touch and it can be added.

#### Can I get a custom or private version?

Yes. The actor can be customized for your workflow, delivered as a private version, or a new scraper can be built for a different website. Use the contact details below.

### Need to scrape other ad libraries?

- [Facebook Ads Library Scraper](https://apify.com/aboo.script/facebook-ads-scraper): ads from the official Meta Ad Library.
- [Google Ads Transparency Scraper](https://apify.com/aboo.script/adstransparency-google-scraper): Google search, display, and YouTube ads by advertiser.
- [TikTok Ad Library Scraper](https://apify.com/aboo.script/library-tiktok-scraper): ads from the TikTok Ad Library.
- [X Ads Repository Scraper](https://apify.com/aboo.script/ads-x-scraper): EU ads from X (Twitter) with targeting and reach.
- [Snapchat Ads Gallery Scraper](https://apify.com/aboo.script/adsgallery-snap-scraper): ads from the Snapchat Ads Gallery.

***

**Need help or want a custom solution?**

- 📧 Email: aboo.script@gmail.com
- 🧩 More scrapers: [Apify profile](https://apify.com/aboo.script)

### Image Credit

Image credit: [Ad Repository](https://www.adsrepository.com/)

# Actor input Schema

## `startUrls` (type: `array`):

Ad Repository URLs: the ad list with any filters (https://www.adsrepository.com/ads?platform=facebook-ads\&country=US), an advertiser page (https://www.adsrepository.com/advertisers/google-search/temu.com), a platform page (https://www.adsrepository.com/platforms/tiktok) or a single ad (https://www.adsrepository.com/ads/<id>). Filters in the URL are kept.

## `searchQueries` (type: `array`):

Keywords, advertiser names or domains to search for, for example nike. The filters below apply to search queries only.

## `platform` (type: `string`):

Only ads from this platform. Leave empty for all platforms.

## `mediaType` (type: `string`):

Only ads with this kind of creative.

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

Only ads seen in this country.

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

Only ads that lead to this domain, for example amazon.com.

## `network` (type: `string`):

Only display ads from this ad network.

## `adFormat` (type: `string`):

Only search engine ads of this format.

## `sort` (type: `string`):

Order of the results.

## `includeDynamic` (type: `boolean`):

Also return dynamic (catalog) ads, which are hidden by default.

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

Maximum number of ads per start URL or search query. Set 0 for no limit.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.adsrepository.com/ads?platform=facebook-ads"
    }
  ],
  "searchQueries": [
    "nike"
  ],
  "sort": "newest",
  "includeDynamic": false,
  "maxResults": 5
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        {
            "url": "https://www.adsrepository.com/ads?platform=facebook-ads"
        }
    ],
    "searchQueries": [
        "nike"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("aboo.script/adsrepository-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "startUrls": [{ "url": "https://www.adsrepository.com/ads?platform=facebook-ads" }],
    "searchQueries": ["nike"],
}

# Run the Actor and wait for it to finish
run = client.actor("aboo.script/adsrepository-scraper").call(run_input=run_input)

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

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

```

## CLI example

```bash
echo '{
  "startUrls": [
    {
      "url": "https://www.adsrepository.com/ads?platform=facebook-ads"
    }
  ],
  "searchQueries": [
    "nike"
  ]
}' |
apify call aboo.script/adsrepository-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aboo.script/adsrepository-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/LBStf5wVVBPvjV3Mu/builds/os6BsSa5tUk4cJeSP/openapi.json
