Pinterest Ads Scraper avatar

Pinterest Ads Scraper

Pricing

from $1.64 / 1,000 results

Go to Apify Store
Pinterest Ads Scraper

Pinterest Ads Scraper

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.

Pricing

from $1.64 / 1,000 results

Rating

0.0

(0)

Developer

Fast Data API

Fast Data API

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 days ago

Last modified

Categories

Share

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


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:

`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.

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

Step by step

  1. Create a free Apify account.
  2. Open 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 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

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

ParameterRequiredTypeDescriptionExample value
start_dateYesstringFirst 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_dateYesstringLast day of the window, YYYY-MM-DD. A range given the wrong way round is swapped. Default 2026-09-30.2026-09-30
countryYesstringOne 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
genderNostringKeep only ads whose audience includes this gender: ALL (no filter), FEMALE, MALE or UNSPECIFIED. Default ALL.FEMALE
resultsLimitNointegerNumber of different ads to collect, 1–10,000. Default 100.200
proxyConfigurationNoobjectOptional. 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

{
"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

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:

[
{
"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

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:

$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.


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