# AliExpress Ad Repository Scraper (`aboo.script/aliexpress-ads-scraper`) Actor

⚡ Fast AliExpress Ad Repository scraper. No login, no API key. Search EU ads by title, advertiser, item ID or product URL in 27 countries with category, status, date, exposure, age and scene filters. Get advertiser, company, product, dates, exposure by country and campaign targeting.

- **URL**: https://apify.com/aboo.script/aliexpress-ads-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

## AliExpress Ad Repository Scraper

![AliExpress Ad Repository Scraper](https://i.ibb.co/jZ4P5ckF/aliexpress-ads-banner.png)

**AliExpress Ad Repository Scraper** extracts ads from the [AliExpress Advertising Transparency Repository](https://www.aliexpress.com/p/transparencycenter/adRepository.html) into clean, structured data you can download as JSON, CSV, Excel, or HTML. Type a keyword or advertiser name, or paste an AliExpress product URL, and get the ad title, advertiser, store, company, product, category, first and last shown dates, exposure by country, and targeting details for every ad. No account or login required.

### Introduction

The [AliExpress Advertising Transparency Repository](https://www.aliexpress.com/p/transparencycenter/adRepository.html) is the public ad library of AliExpress for the European Union. Under the EU Digital Services Act, AliExpress lists every product ad shown in EU countries during the past year, together with the advertiser, the company behind it, how often the ad was seen, and who it targeted.

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 the AliExpress Ad Repository?

- 🏷️ Ad title, item ID, product URL, and product image
- 🏪 Advertiser (store name), store ID, and store URL
- 🏢 Company name, company ID, and business information page
- 🗂️ Category, subcategory, and leaf category
- 📅 First shown and last shown dates
- 👀 Total exposure and exposure per EU country
- 🎯 Campaigns with purchase capacity targeting and exposure by country, age, gender, and scene (keyword search or recommendation)
- 🚩 Flags for hidden ads, adult content, closed stores, and removed products

### Use Cases

- 📈 **Market research**: see which products and categories are pushed with ads in each EU country.
- 🕵️ **Competitor monitoring**: follow which products a competing store advertises, for how long, and to whom.
- 🤝 **Lead generation**: build lists of active advertisers and the companies behind them.
- 🛡️ **Compliance and research**: study ad targeting, exposure, and removed products for DSA reports and academic work.
- 🤖 **AI and automation**: feed clean, structured data into spreadsheets, dashboards, or AI workflows.

### How to scrape the AliExpress Ad Repository step by step

1. Type keywords into **Search queries** and choose what they match in **Search by**, or paste AliExpress product URLs into **Start URLs**.
2. Pick the **Country** and, if you want, filters such as **Category**, **Status of the ad**, dates, exposure, age groups, purchase capacity, or scene.
3. Set **Maximum number of results** to how many ads you want per URL or per query.
4. Click **Start**, then download your data in JSON, CSV, Excel, or HTML from the **Output** tab.

### Input

- **Start URLs**: AliExpress product URLs (`aliexpress.com/item/<ID>.html`, any AliExpress country domain) or Ad Repository URLs with an item ID (`adRepository.html?q=<item ID>`). You get the ads of that product in the selected country.
- **Search queries**: words to search for, one per line. Each query is scraped separately.
- **Search by**: what the search queries match: Advertisement title (default), Advertiser (store name), Item ID, or Penalty ID (PUID).
- **Country**: the EU country where the ads were shown. The repository searches one country at a time. It applies to start URLs and search queries.
- **Category**: only ads of one product category.
- **Status of the ad**: all, only active, or only inactive ads.
- **Shown from** and **Shown until**: only ads shown within this date range.
- **Minimum exposure** and **Maximum exposure**: only ads seen at least or at most this many times.
- **Age groups**: only ads targeted at these age groups.
- **Purchase capacity**: only ads targeted at shoppers with this purchase capacity.
- **Scene**: all ads, only ads shown in keyword search, or only ads shown as recommendations.
- **Include targeting details**: add the campaigns of each ad with exposure by country, age, gender, and scene (on by default).
- **Maximum number of results**: how many ads to collect for each start URL or search query. Set 0 for no limit.

You can use start URLs, search queries, or both in the same run. Category, status, dates, exposure, age, purchase capacity, and scene filters apply to search queries.

### Input Examples

Get the ads of a product:

```json
{
  "startUrls": [{ "url": "https://www.aliexpress.com/item/1005009621040624.html" }],
  "maxResults": 5
}
```

Search ads by title in Germany:

```json
{
  "searchQueries": ["phone case"],
  "searchBy": "adTitle",
  "country": "DE",
  "includeTargeting": true,
  "maxResults": 5
}
```

All ads of an advertiser in France that are still active:

```json
{
  "searchQueries": ["APEXEL"],
  "searchBy": "advertiser",
  "country": "FR",
  "status": "active",
  "maxResults": 5
}
```

### Output

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

```json
{
  "url": "https://www.aliexpress.com/p/transparencycenter/adRepository.html?q=1005009621040624",
  "itemId": "1005009621040624",
  "adTitle": "APEXEL New Updated Binocular Smartphone Adapter Binocular Mount 360° Rotation Bracket Clamp Quick-Mount Strap for Mobile Phone",
  "productUrl": "https://www.aliexpress.com/item/1005009621040624.html",
  "imageUrl": "https://ae01.alicdn.com/kf/S822ca6c399c54b94acb4603564e0afc7l.jpg",
  "advertiserName": "APEXEL Global Official Store",
  "storeId": "101652",
  "storeUrl": "https://www.aliexpress.com/store/101652",
  "companyId": "50035434",
  "companyName": "深圳市爱派赛科技有限公司",
  "businessInfoUrl": "https://shoprenderview.aliexpress.com/credential/showcredential.htm?storeNum=101652",
  "category": "Consumer Electronics",
  "subcategory": "Camera & Photo",
  "leafCategory": "Lenses & Accessories",
  "firstShown": "2026-04-25T00:00:00Z",
  "lastShown": "2026-10-26T00:00:00Z",
  "totalExposure": 229,
  "exposureByCountry": [
    { "countryCode": "DE", "country": "Germany", "exposure": 229 }
  ],
  "placements": [
    {
      "campaignId": "5001231201342",
      "firstShown": "2026-08-17T00:00:00Z",
      "lastShown": "2026-10-21T00:00:00Z",
      "purchaseCapacity": ["Above $20"],
      "exposureBreakdown": [
        {
          "countryCode": "BE",
          "country": "Belgium",
          "age": "unknown",
          "gender": "Unknown",
          "scene": "Only recommendation",
          "exposure": 2
        }
      ]
    }
  ],
  "isHidden": false,
  "isAdultContent": false,
  "isStoreClosed": false,
  "isProductRemoved": false,
  "searchCountry": "DE",
  "dataUpdatedAt": "2026-10-28T02:11:22.000Z"
}
```

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

### Notes

- The repository only covers ads shown in EU countries during the past year, and it searches one country per run. Run the actor again with another **Country** to cover more markets.
- Every search needs a keyword, advertiser name, item ID, or penalty ID. Browsing a whole category without a search word is not supported by the repository.
- `exposureByCountry` shows the exposure in the selected country, while the campaign breakdown covers every EU country where the ad was shown.
- Some ads are hidden by AliExpress. They are returned with `isHidden: true` and their title, advertiser, and IDs set to `null`, but category, dates, and exposure are kept.
- Company names are shown as registered, often in Chinese.
- Turning off **Include targeting details** makes runs faster when you only need the ad list; `placements` is then `null`.
- Only AliExpress product pages and Ad Repository URLs with an item ID are supported as start URLs; other URLs are skipped.

### Why use the AliExpress Ad Repository Scraper?

- ✅ **No login needed**: works with public data only, so there is no account to manage.
- 🎯 **All repository filters**: country, category, status, dates, exposure, age, purchase capacity, and scene.
- 🧹 **Clean data**: numbers are real numbers, dates use one standard format, and text is free of HTML.
- 💸 **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 **Maximum number of results**, or 0 for no limit. The actor keeps going until it reaches your limit or runs out of ads for your search.

#### Do I need an AliExpress 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 data automatically.

#### Why are some fields empty?

Some ads simply do not show every piece of information, for example a store ID or a scene. When a field is not available in the repository, it is returned as `null`.

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

Yes. If you need other filters or inputs, such as searching several countries in one run, get in touch and they 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 Meta's public ad library.
- [Google Ads Transparency Scraper](https://apify.com/aboo.script/adstransparency-google-scraper): ads and advertisers from the Google Ads Transparency Center.
- [TikTok Ad Library Scraper](https://apify.com/aboo.script/library-tiktok-scraper): ads shown on TikTok in Europe.
- [X Ads Repository Scraper](https://apify.com/aboo.script/ads-x-scraper): ads from the X (Twitter) ads repository.
- [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: [AliExpress Transparency Center](https://www.aliexpress.com/p/transparencycenter/adRepository.html)

# Actor input Schema

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

AliExpress product URLs (aliexpress.com/item/<ID>.html) or Ad Repository URLs with an item ID (adRepository.html?q=<item ID>). Returns the ads of that product in the selected country.

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

Words to search for. What they match is set by "Search by" (ad title by default). Each query is scraped separately.

## `searchBy` (type: `string`):

What the search queries match.

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

EU country where the ads were shown. The repository searches one country at a time; it also applies to start URLs.

## `category` (type: `string`):

Only ads of this product category. Applies to search queries.

## `status` (type: `string`):

Only active or only inactive ads. Applies to search queries.

## `shownFrom` (type: `string`):

Only ads shown on or after this date (YYYY-MM-DD). Applies to search queries.

## `shownTo` (type: `string`):

Only ads shown on or before this date (YYYY-MM-DD). Applies to search queries.

## `minExposure` (type: `integer`):

Only ads with at least this many exposures. Applies to search queries.

## `maxExposure` (type: `integer`):

Only ads with at most this many exposures. Applies to search queries.

## `ageGroups` (type: `array`):

Only ads targeted at these age groups. Applies to search queries.

## `purchaseCapacity` (type: `array`):

Only ads targeted at shoppers with this purchase capacity. Applies to search queries.

## `scene` (type: `string`):

Where the ads were shown. Applies to search queries.

## `includeTargeting` (type: `boolean`):

Add the campaigns of each ad with their purchase capacity and exposure by country, age, gender and scene. Takes a few extra requests per ad.

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

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

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.aliexpress.com/item/1005009621040624.html"
    }
  ],
  "searchQueries": [
    "phone case"
  ],
  "searchBy": "adTitle",
  "country": "DE",
  "status": "all",
  "scene": "all",
  "includeTargeting": true,
  "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.aliexpress.com/item/1005009621040624.html"
        }
    ],
    "searchQueries": [
        "phone case"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("aboo.script/aliexpress-ads-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.aliexpress.com/item/1005009621040624.html" }],
    "searchQueries": ["phone case"],
}

# Run the Actor and wait for it to finish
run = client.actor("aboo.script/aliexpress-ads-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.aliexpress.com/item/1005009621040624.html"
    }
  ],
  "searchQueries": [
    "phone case"
  ]
}' |
apify call aboo.script/aliexpress-ads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,aboo.script/aliexpress-ads-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/P6CPb4lt1KfkzLsdf/builds/OmJtf6Y1RIi04VSNm/openapi.json
