# Pinterest Ads Scraper (`fastdataapi/pinterest-ads-scraper`) Actor

Pinterest Ads Scraper — Extract Pinterest ad data, including ad creatives, pin titles, descriptions, advertiser details, destination URLs, images, and campaign information. Useful for competitor research, ad creative analysis, marketing insights, and campaign inspiration.

- **URL**: https://apify.com/fastdataapi/pinterest-ads-scraper.md
- **Developed by:** [Fast Data API](https://apify.com/fastdataapi) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.64 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

### Pinterest Ads Scraper — Advertisers, Creatives, Targeting and Reach

Pinterest Ads Scraper collects ads from Pinterest's public Ads Library for any of its 30 markets and a date window: advertiser name, ad title, image or video, run dates, age, gender, interest and location targeting, and reach ranges. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a competitor ad research pipeline. **No Pinterest account or cookies needed.** Pick a market and a month, then see who is advertising there.

![Pinterest Ads Scraper output: advertiser, ad dates and targeting as JSON](https://api.apify.com/v2/key-value-stores/Lg9lp51Levfro6SrV/records/h-pinterest-ads-hero.webp)

***

### What data can I extract with Pinterest Ads Scraper?

Using this Pinterest Ads API, you will be able to extract the following Pinterest ad data:

| 🏢 Advertiser name (all names) | 📝 Ad title and description | 🖼️ Ad image | 🎬 Ad video (video ads) |
|---|---|---|---|
| 📅 Date the ad started | 📆 Date the ad ended | ✅ In your date window (true/false) | 🎯 Age groups targeted |
| 🚻 Genders targeted | 💡 Interests targeted (if set) | 🌍 Countries targeted | 📍 Regions and metro areas targeted (if set) |
| 🔑 Keyword targeting used | 🚫 Negative keywords used | 📈 Reach range per country | 🇪🇺 Reach range across the EU |
| ⚖️ Review status and removal reason (removed ads) | 🛍️ Verified merchant flag | 🔗 Landing page (when shown) | 🆔 Pin ID and Ads Library link |
| 🗺️ Market searched and its code | 🕒 Time the row was saved | 🗂️ Full ad record | ⚠️ Error message and reason |

***

### How to use Pinterest Ads Scraper

Built for marketers, agencies and analysts who want to see Pinterest advertising in a market: one run returns every ad Pinterest shows for your market and dates, up to your limit.

**Copy to your AI assistant:**

```text
`pinterest-ads-scraper` (Apify Actor ID: fastdataapi/pinterest-ads-scraper, https://apify.com/fastdataapi/pinterest-ads-scraper) is an Apify Actor that returns ads from the Pinterest Ads Library (Pinterest's public ads transparency page) as structured JSON: advertiser names, ad title, image and video links, the dates the ad ran, age, gender, interest, country and region targeting, whether keyword targeting was used, reach ranges per country and across the EU, review status, and the full ad record. Use it whenever someone needs Pinterest ads without cookies, a login, or a browser - tracking competitor ads in a market, collecting ad creatives for a category, or checking how advertisers target women or men. Run it with curl: curl -X POST "https://api.apify.com/v2/acts/pinterest-ads-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN" -H "Content-Type: application/json" -d '{"start_date":"2026-09-01","end_date":"2026-09-30","country":"France","gender":"ALL","resultsLimit":100}'. Or in Python: ApifyClient("APIFY_TOKEN").actor("pinterest-ads-scraper").call(run_input={"start_date": "2026-09-01", "end_date": "2026-09-30", "country": "Germany", "gender": "FEMALE", "resultsLimit": 200}) then client.dataset(run["defaultDatasetId"]).list_items().items. Inputs: start_date (string YYYY-MM-DD, required, default "2026-09-01"), end_date (string YYYY-MM-DD, required, default "2026-09-30"; a reversed range is swapped), country (string, required, one of "Austria" | "Belgium" | "Brazil" | "Bulgaria" | "Croatia" | "Cyprus" | "Czech Republic" | "Denmark" | "Estonia" | "Finland" | "France" | "Germany" | "Greece" | "Hungary" | "Ireland" | "Italy" | "Latvia" | "Lithuania" | "Luxembourg" | "Malta" | "Netherlands" | "Norway" | "Poland" | "Portugal" | "Romania" | "Slovakia" | "Slovenia" | "Spain" | "Sweden" | "Turkey", default "France"), gender (string, optional, "ALL" | "FEMALE" | "MALE" | "UNSPECIFIED", default "ALL"), resultsLimit (integer 1-10000, optional, number of different ads, default 100), proxyConfiguration (object, optional). Rows with rowType "ad" are ads and are charged as the row_result event; a rowType "error" row (invalid input, no ads for these settings, Pinterest did not answer) carries error and errorReason and is free. Windows in the last 12 months match the dates exactly; older windows often also return ads that ran later, and inDateRange is false for those. Full input schema, every enum and default, and the complete output field list: GET https://api.apify.com/v2/acts/pinterest-ads-scraper/builds/default
```

#### Pinterest Ads Scraper MCP Server: use these Actors from ChatGPT, Claude or Cursor

Point your AI assistant at Apify and it can read the Pinterest Ads Library on its own: advertisers, creatives, run dates, targeting and reach for any of the 30 markets. No glue code, no scraping logic in your prompts.

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fastdataapi/pinterest-ads-scraper"
```

#### Step by step

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open [Pinterest Ads Scraper](https://apify.com/fastdataapi/pinterest-ads-scraper) in the Apify Store.
3. Pick the start date, end date and market, and optionally a targeted gender and the number of ads.
4. Click **Start** (or send your API request).
5. Download or stream your results in JSON, CSV or Excel.

#### How to scale Pinterest Ads Scraper to bulk

Set the maximum ads up to 10,000 in one run; repeated ads are skipped, so you get that many different ads when Pinterest has them. A recorded run saved 500 different ads for France in 131.5 seconds. Rows are saved as each ad is complete, so you can read the dataset while the run is going. For several markets or months, start one run per market and window from the API, or schedule them in Apify Console to work as a Pinterest ad spy tool that refreshes every week.

***

### ✨ Features

Pinterest Ads Scraper fetches clean, structured ads from the Pinterest Ads Library ⚡. It's ideal for Pinterest competitor ads research, creative swipe files, Pinterest ad targeting data analysis and Pinterest advertiser lookup by market — a Pinterest ad library scraper and EU ad repository scraper in one, reading the Pinterest ads transparency record for the EU, Norway, Brazil and Turkey. It extracts, per ad:

- **Advertiser** – every advertiser name Pinterest shows for the ad
- **Creative** – title, description, image and video link
- **Run dates** – the first and last day the ad ran, and whether that overlaps your window
- **Targeting** – age groups, genders, interests, countries, regions and metro areas
- **Keywords** – whether keyword and negative-keyword targeting were used
- **Reach** – Pinterest's reach range per country and across the EU
- **Moderation** – review status and removal reason for ads Pinterest took down

⚡ Repeated ads are skipped and the run keeps reading until it has the number of different ads you asked for; ads with no results or bad settings get a free error row that says why.

***

### Use cases 💡

- **Brand marketer** — see which competitors advertise in Germany this month and with which creatives.
- **Agency strategist** — compare age and gender targeting of rival brands before a campaign.
- **Creative team** — build a swipe file of ad images and videos per advertiser.
- **Market researcher** — track how many advertisers run ads in each EU market per month.
- **AI engineer** — feed ad titles, descriptions and targeting into a RAG index for ad research questions.

Building an AI agent? [Connect Pinterest Ads Scraper over MCP](#mcp-integration-for-ai-agents) and let it call the actor on its own.

***

### Why choose this actor?

1. **The number of ads you ask for.** Repeats are skipped while reading, so a recorded run asking for 500 ads saved 500 different ads in 131.5 seconds; a 100-ad run took 11.4 seconds with the first row after 1 second.
2. **Advertiser names on every ad.** Each ad's own page is read for its advertiser: 599 of 600 recorded ads came back with an advertiser name, and the one without it was an ad Pinterest had removed, which comes with its review status and removal reason.
3. **30 markets and a gender filter.** All 30 markets the Pinterest Ads Library covers, any date window, and a filter for ads targeting women, men or people who did not state a gender.

***

### ⬇️ Input

![Pinterest Ads Scraper input: start date, end date and country](https://api.apify.com/v2/key-value-stores/Lg9lp51Levfro6SrV/records/h-pinterest-ads-input.webp)

Pick a date window and one market; the start date, end date and country are required.

| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
| `start_date` | Yes | string | First day of the window, `YYYY-MM-DD`. Ads that ran on any day in the window are returned. Default `2026-09-01`. | `2026-09-01` |
| `end_date` | Yes | string | Last day of the window, `YYYY-MM-DD`. A range given the wrong way round is swapped. Default `2026-09-30`. | `2026-09-30` |
| `country` | Yes | string | One of the 30 markets: Austria, Belgium, Brazil, Bulgaria, Croatia, Cyprus, Czech Republic, Denmark, Estonia, Finland, France, Germany, Greece, Hungary, Ireland, Italy, Latvia, Lithuania, Luxembourg, Malta, Netherlands, Norway, Poland, Portugal, Romania, Slovakia, Slovenia, Spain, Sweden, Turkey. Default `France`. | `Germany` |
| `gender` | No | string | Keep only ads whose audience includes this gender: `ALL` (no filter), `FEMALE`, `MALE` or `UNSPECIFIED`. Default `ALL`. | `FEMALE` |
| `resultsLimit` | No | integer | Number of different ads to collect, 1–10,000. Default `100`. | `200` |
| `proxyConfiguration` | No | object | Optional. Without it the actor goes direct and uses Apify residential proxies for retries if Pinterest refuses a request. | `{"useApifyProxy": false}` |

Windows in the last 12 months match your dates exactly. Older windows often also return ads that ran later; the in-date-range column shows which ads overlap your dates. Some months have no ads in the library at all.

#### Free plan limits

Free plan: up to 20 ads per run and 200 per month; paid plans have no limit.

#### Example input

```json
{
  "start_date": "2026-09-01",
  "end_date": "2026-09-30",
  "country": "Germany",
  "gender": "FEMALE",
  "resultsLimit": 200,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

***

### ⬆️ Output

![Pinterest Ads Scraper output: one row per ad with targeting and reach](https://api.apify.com/v2/key-value-stores/Lg9lp51Levfro6SrV/records/h-pinterest-ads-output.webp)

Every ad is one typed, normalized JSON item with the same fields on every run; the full ad record keeps the same 30 keys in the same order, with empty values of the right type when Pinterest has nothing. Export the dataset as JSON (default), CSV or Excel; settings that give no ads get one free error row with the reason.

#### Example output

A recorded ad from France (the description is shortened), followed by the error row for a month with no ads:

```json
[
  {
    "pin_id": "486881409734942333",
    "advertiserName": "BUT Meubles et décoration",
    "advertiserNames": ["BUT Meubles et décoration"],
    "pinTitle": "Plante artificielle bico noire VERA Noir",
    "pinImageUrl": "https://i.pinimg.com/474x/b5/53/09/b553096c78e7d92bf5fc3717ac2f8880.jpg",
    "pinVideoUrl": null,
    "countryQueried": "France",
    "adFlightStartDate": "2025-10-07",
    "adFlightEndDate": "2026-10-07",
    "targetingAgeBuckets": ["18+"],
    "targetingGenders": ["UNSPECIFIED", "FEMALE", "MALE"],
    "targetingInterests": [],
    "targetingCountries": ["France"],
    "targetingRegions": ["Île-de-France, France"],
    "targetingKeywordsUsed": false,
    "targetingNegativeKeywordsUsed": false,
    "reachByCountry": {"France": "10000 - 20000"},
    "reachEU": "10000 - 20000",
    "adUrl": "https://ads.pinterest.com/ads-repository/486881409734942333/",
    "scrapedAt": "2026-10-12T13:12:45Z",
    "countryCode": "FR",
    "reviewStatus": null,
    "inDateRange": true,
    "ad_details": {
      "advertiser_names": ["BUT Meubles et décoration"],
      "statement_of_reasons": null,
      "review_status": null,
      "violation_source": null,
      "violation_decision_means": null,
      "start_date": "2025-10-07",
      "end_date": "2026-10-07",
      "age_buckets": ["18+"],
      "genders": ["UNSPECIFIED", "FEMALE", "MALE"],
      "postal_codes": [],
      "metros": [],
      "regions": ["Île-de-France, France"],
      "countries": ["France"],
      "content_commercial": true,
      "is_local_inventory": false,
      "has_excluded_locations": true,
      "interests": [],
      "pinner_list_types": [],
      "user_count_by_country": {"France": "10000 - 20000"},
      "user_count_eu": "10000 - 20000",
      "keywords_used": false,
      "negative_keywords_used": false,
      "image_link": "https://i.pinimg.com/474x/b5/53/09/b553096c78e7d92bf5fc3717ac2f8880.jpg",
      "pin_data": {
        "image_link": "https://i.pinimg.com/474x/b5/53/09/b553096c78e7d92bf5fc3717ac2f8880.jpg",
        "video_link": null,
        "details": "La plante artificielle bico noire VERA Noir, de la marque LINEA NATURA, est un choix élégant pour ceux qui cherchent à embellir leur intérieur…",
        "title": "Plante artificielle bico noire VERA Noir",
        "content_creator_name": null,
        "story_pin_page_blocks": []
      },
      "devices": [],
      "internet_service_providers": [],
      "destination_urls": [],
      "is_verified_merchant": false,
      "use_pinterest_ai": false,
      "archival_info": []
    },
    "rowType": "ad",
    "error": null,
    "errorReason": null
  },
  {
    "pin_id": null,
    "advertiserName": null,
    "advertiserNames": [],
    "pinTitle": null,
    "pinImageUrl": null,
    "pinVideoUrl": null,
    "countryQueried": "France",
    "adFlightStartDate": null,
    "adFlightEndDate": null,
    "targetingAgeBuckets": [],
    "targetingGenders": [],
    "targetingInterests": [],
    "targetingCountries": [],
    "targetingRegions": [],
    "targetingKeywordsUsed": null,
    "targetingNegativeKeywordsUsed": null,
    "reachByCountry": null,
    "reachEU": null,
    "adUrl": null,
    "scrapedAt": "2026-10-12T13:16:32Z",
    "countryCode": "FR",
    "reviewStatus": null,
    "inDateRange": null,
    "ad_details": null,
    "rowType": "error",
    "error": "The Pinterest Ads Library lists no ads for France between 2025-06-01 and 2025-06-30. Try another window or market. Nothing was charged.",
    "errorReason": "no_ads_found"
  }
]
```

Error reasons: `invalid_input` (a date or market the actor or Pinterest does not accept), `no_ads_found`, `blocked` (Pinterest did not answer after every retry) and `unexpected_error`. Error rows are not charged.

***

### How does it work?

The actor searches the Pinterest Ads Library, the public ads transparency page any visitor can open, for your market, dates and gender. It reads the results 100 ads at a time, skips ads it has already seen and keeps going until it has the number of ads you asked for or the library has no more. For each ad it also opens the ad's own page, which is where Pinterest shows the advertiser name. If Pinterest asks it to slow down, it pauses and goes on; requests Pinterest keeps refusing are retried with a fresh connection and, when needed, rotating residential proxies. It returns only publicly visible data, with no login, and the output fields stay the same from run to run, so your code and spreadsheets keep working when Pinterest changes its pages.

***

### How do you integrate Pinterest Ads Scraper into your stack?

It works with what you already use: the REST API from any language, MCP for AI agents, and no-code tools.

#### Using Pinterest Ads Scraper with the Apify API

```python
import requests

response = requests.post(
    "https://api.apify.com/v2/acts/pinterest-ads-scraper/run-sync-get-dataset-items",
    params={"token": "APIFY_TOKEN"},
    json={"start_date": "2026-09-01", "end_date": "2026-09-30", "country": "Germany", "resultsLimit": 100},
)
for ad in response.json():
    print(ad["advertiserName"], ad["pinTitle"], ad["reachEU"])
```

*Works in Go, Ruby, Node.js, cURL — any language that can make an HTTP request.*

#### MCP integration for AI agents

Add the Apify MCP server to your AI client with one command:

```bash
claude mcp add --transport http apify "https://mcp.apify.com?tools=fastdataapi/pinterest-ads-scraper"
```

This registers Pinterest Ads Scraper as a tool your agent can call directly: the agent finds it through the server's search, adds it and runs it, then reads the ads back as JSON. Ask for "furniture brands advertising in France last month" and it does the rest. It works in Claude Code, Cursor and Windsurf.

#### No-code tools (n8n, Make, LangChain)

**n8n:** add the Apify node and choose "Run an Actor", or use the HTTP Request node pointed at the run-sync endpoint with your token. Send new advertisers to a Google Sheet or a Slack channel in the next node.

**Make:** use the Apify app's "Run an Actor" module, then "Get Dataset Items" to pull the ads into the rest of your scenario.

**LangChain:** install `langchain-apify` and wrap the actor with `ApifyActorsTool("pinterest-ads-scraper")` so your agent can look up Pinterest ads by market and dates.

***

### Is it legal to scrape Pinterest data?

Collecting the Pinterest Ads Library is generally lawful: Pinterest publishes it so anyone can see which ads run in the EU and its other markets. This actor returns only publicly available data — what any visitor sees without logging in: advertiser names, ad creatives, run dates, targeting and reach ranges. It does not collect data about the people who saw the ads. Ad images and texts belong to their advertisers, so check copyright and Pinterest's terms before you republish them. Scraping public data is generally permissible under GDPR, but storing and using it must still comply with local data-protection law. Consult legal counsel if your use case involves bulk storage of personal data.

***

### Frequently asked questions

#### What fields does Pinterest Ads Scraper return?

It returns each ad's advertiser name, title and creative, the dates it ran, its age, gender, interest and location targeting, and its reach ranges. See [the data fields section](#what-data-can-i-extract-with-pinterest-ads-scraper) for the full list.

#### Does Pinterest Ads Scraper require a Pinterest account or login?

No. Only public Pinterest Ads Library data is extracted, and no credentials are needed.

#### How fast does Pinterest Ads Scraper run?

A recorded run saved 100 ads in 11.4 seconds, with the first row after 1 second, and 500 ads took 131.5 seconds. Every run reads live data, not a cache.

#### What happens if there are no ads or the settings are wrong?

The run saves one free error row with a message and reason, such as `no_ads_found` or `invalid_input`, and nothing is charged. In code, keep rows where the row type is "ad" and log the rest.

#### Can I scrape multiple Pinterest markets at once?

Yes, with one run per market: start them in parallel from the API or schedule them in Apify Console. Each run takes up to 10,000 different ads.

#### Does Pinterest Ads Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes — Pinterest Ads Scraper is available as an MCP tool. Register it in Claude Code, Cursor or Windsurf with `claude mcp add --transport http apify "https://mcp.apify.com?tools=fastdataapi/pinterest-ads-scraper"`. Any agent that can call an HTTP endpoint can use the REST API directly.

#### Does Pinterest Ads Scraper return data in a format LLMs can use directly?

Yes. Each ad is typed, normalized JSON with consistent field names, so there is no HTML parsing and no selectors. Pass it straight to an LLM, index it into a vector store, or feed it to an agent tool — no transformation step.

#### What happens when Pinterest changes its layout or updates its anti-bot system?

The actor is maintained, and when Pinterest changes, it is updated so your calls keep returning the same JSON fields with no changes on your end.

#### Can I use Pinterest Ads Scraper without managing proxies or browser infrastructure?

Yes. Pausing when Pinterest asks to slow down, retries and rotating residential proxies for refused requests run on the actor's side, and no browser is needed. You send one request and get structured JSON back, with no proxy accounts and no maintenance.

#### Which Pinterest ad fields work best for AI training data and RAG indexing?

For RAG, use the advertiser name, ad title and ad description. For training data and analytics, use the run dates, age and gender targeting, countries targeted, keyword flags and reach ranges. All fields are plain strings, booleans, lists and small objects, so no normalization is needed.

***

### Your feedback

Found a bug or missing a field? Let us know in the actor's Issues tab. Every report is read, and fixes ship as new versions of the actor.

# Actor input Schema

## `start_date` (type: `string`):

First day of the window (YYYY-MM-DD). Ads that ran on any day between the start and end date are returned. Windows within the last 12 months match exactly; older windows often also return ads that ran later – the inDateRange column shows which ads overlap your dates. A reversed range is swapped automatically.

## `end_date` (type: `string`):

Last day of the window (YYYY-MM-DD).

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

The market to search: ads shown to people in this country are returned. These are the 30 markets the Pinterest Ads Library covers (EU countries, Norway, Brazil and Turkey).

## `gender` (type: `string`):

Keep only ads whose audience includes this gender. All = no filter. Unspecified = ads shown to people who did not state a gender.

## `resultsLimit` (type: `integer`):

How many different ads to collect (1–10,000). Repeated ads are skipped and do not count. The run ends earlier when the Ads Library has no more ads for these settings. Free plan: up to 20 ads per run and 200 per month; paid plans have no limit.

## `proxyConfiguration` (type: `object`):

Optional. Pinterest usually works without a proxy. With no proxy selected, the first try goes direct and a residential proxy is added automatically if Pinterest refuses a request. Select Apify Proxy or your own proxies to use them from the first request.

## Actor input object example

```json
{
  "start_date": "2026-09-01",
  "end_date": "2026-09-30",
  "country": "France",
  "gender": "ALL",
  "resultsLimit": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All ad rows in the Actor's default dataset.

# 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 = {
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("fastdataapi/pinterest-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 = { "proxyConfiguration": { "useApifyProxy": False } }

# Run the Actor and wait for it to finish
run = client.actor("fastdataapi/pinterest-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 '{
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call fastdataapi/pinterest-ads-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,fastdataapi/pinterest-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/qGOi8etoAYkdhRTKN/builds/vDoclPDvd3jEM2ZFz/openapi.json
