Pinterest Ads Scraper (Advertiser & Brand Search)
Pricing
from $3.99 / 1,000 results
Pinterest Ads Scraper (Advertiser & Brand Search)
๐ Pinterest Ads Scraper (pinterest-ads-scraper) extracts promoted Pins at scale โ ad creatives, copy, CTAs, advertiser, and landing URLs โ to CSV/JSON. ๐ Perfect for competitive analysis, trend tracking, and creative research. ๐ Built for marketers, PPC, and e-commerce teams.
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
Scrapio
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Pinterest Ads Scraper โ Brand Ads, Targeting Data & Destination URLs
Pinterest Ads Scraper (Advertiser & Brand Search) pulls ads straight out of Pinterest's public Ads Transparency Library โ scoped to one advertiser or brand instead of a blind country sweep โ and returns typed JSON: ad creative, full audience-targeting data, reach ranges, and each ad's real outbound destination URL. Unlike scraping frameworks that return raw HTML, this Actor returns structured rows ready for a spreadsheet, a database, or an LLM context window without any parsing. This guide covers every input and output field, the real limits Pinterest's own backend imposes, and how marketing, lead-gen, and research teams deploy it in production.
๐งญ What Does Pinterest Ads Scraper Do?
It queries Pinterest's Ads Transparency Library โ the same public archive Pinterest publishes for EU ad-transparency compliance โ and, when given a brand name, filters results down to that one advertiser's ads instead of returning an entire market's ad inventory. No Pinterest account or login is required; the Actor talks directly to Pinterest's own public endpoints. Each ad comes back flattened into named fields: advertiser identity, ad creative (image or video), audience targeting (age, gender, interests, geography), reach ranges, and โ optionally โ the ad's real outbound landing-page URL and available engagement counts.
Key capabilities:
- Filters Pinterest's Ads Library by advertiser/brand name, not just country and date
- Falls back to a plain country + date sweep of all advertisers when no brand is given
- Flattens nested ad targeting into filterable columns instead of one opaque JSON blob
- Extracts each ad's real outbound destination URL and advertiser website domain
- Pulls available save, comment, share, and reaction counts per ad
- Streams rows to the dataset as they're collected, so a stopped run keeps its partial results
- Surfaces Pinterest's own validation error verbatim when a request is rejected, instead of returning a silent empty result
โก Features & Capabilities
Three things set this Actor apart: a real advertiser-scoped search, flattened targeting data, and destination-URL lead enrichment.
Core features
- Advertiser/brand-name filter โ
advertiserNameis a real, live-verified server-side parameter on Pinterest's Ads Library backend, not a client-side post-filter. Leave it empty to sweep a country/date range for every advertiser. - Flattened ad fields โ
advertiserName,adTitle,adImageUrl,adVideoUrl,isVideoAd,targetingAgeBuckets,targetingGenders,targetingInterests,targetingCountries,targetingRegions,reachByCountry,reachEU,keywordsUsed,negativeKeywordsUsed,adFlightStartDate,adFlightEndDate,adDurationDays. - Destination-URL and lead enrichment โ an optional extra fetch per ad returns
destinationUrl,advertiserWebsiteDomain,adSaves,adCommentCount,adShareCount, andadReactionCount, turning an ad list into a list of the companies and landing pages advertising on Pinterest. - Raw payload preserved โ the untouched
ad_detailsobject from Pinterest's own response ships alongside the flattened fields, so nothing is lost if you need a field this Actor hasn't named yet. - Live saving โ every ad is pushed to the dataset the moment it's collected, not batched at the end of the run.
Pinterest Ads Scraper within the Scrapio data stack
Pinterest Ads Scraper (Advertiser & Brand Search) covers ads, their targeting, and destination-URL leads. For Pinterest board and pinner-profile data, use Pinterest-Boards-Scraper (pinterest-boards-scraper-and-pinner-profiles). For a Pinterest seller's shop products and pricing, use Pinterest-Profile-Scraper (pinterest-profile-scraper-shop-products-and-prices) โ both in the Scrapio catalog alongside this Actor.
๐ผ Why do developers and data teams scrape Pinterest ads?
The audiences below are the ones that genuinely need Pinterest ad-library data โ not every data team needs it, but these five recur.
๐ข Marketing agencies and performance marketers
An agency managing several accounts enters each client's or each client's competitor's brand name, sets the country and date window, and gets back every live ad with its targetingAgeBuckets, targetingInterests, and keywordsUsed โ enough to reconstruct a competitor's targeting strategy without ever seeing their ad account. destinationUrl shows exactly which landing page each creative drives to, and adFlightStartDate/adFlightEndDate show how long a given creative ran, which flags whether it's still being tested or already scaled.
๐ AI training data and RAG indexing
adTitle, targetingInterests, and keywordsUsed are the highest-information text and category fields for a RAG index of advertising strategy by brand. For training data, targetingAgeBuckets, targetingGenders, targetingCountries, and reachByCountry return as consistent typed arrays and range strings across every row, so a model can learn targeting patterns without per-record cleanup. A second use case is entity resolution: advertiserWebsiteDomain lets a pipeline map a Pinterest advertiser name to a real company domain for enrichment.
๐ฑ Competitive and market intelligence
Track a named competitor's Pinterest presence over time by re-running the same advertiserName and country on a schedule, and diff on adTitle and adFlightEndDate to catch when a campaign launches or is pulled. reachEU and reachByCountry give a range-based signal for whether a competitor is scaling a market.
๐ฌ Research and academic use
Ad-transparency researchers studying targeting practices or DSA-style disclosure compliance can pull a market's or a brand's ad set as a structured dataset. This Actor returns only what Pinterest already publishes in its public Ads Transparency Library โ no private account data, no logged-in-only content.
๐ฅ Product and SaaS development
Ad-intelligence and lead-generation products can build a "who's advertising on Pinterest" directory or company-enrichment API on top of advertiserName and advertiserWebsiteDomain, refreshed on a schedule rather than hand-maintained.
๐ Input Parameters
All parameters, read directly from .actor/actor.json, in schema order:
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
advertiserName | No | string | Search Pinterest's Ads Library for ads from ONE specific advertiser (e.g. "SHEIN", "TEMU", "Amazon"). A real server-side filter โ leave it empty to fall back to a plain country + date sweep (all advertisers). | "SHEIN" |
start_date | Yes | string | First day of the period (YYYY-MM-DD). Pinterest's Ads Library has a real publication delay โ dates from the last ~12 months frequently return zero ads even for large brands. | "2024-06-01" |
end_date | Yes | string | Last day of the period (YYYY-MM-DD). Same publication-lag caveat as Start Date. | "2024-06-30" |
country | Yes | string | The market to search within โ ads shown in this country are collected. One of 30 supported markets (full list below). Default: "France". | "Germany" |
resultsLimit | No | integer | Maximum number of ads to fetch. Minimum 1, maximum 10000. Default 100. | 50 |
enrichDestinationUrl | No | boolean | When true, fetches each ad's Pinterest pin page to extract its real outbound destination URL, advertiser website domain, and available save/comment/share/reaction counts. Default true. | true |
proxyConfiguration | No | object | Apify Proxy configuration. Enable if you experience access issues โ most users can leave this disabled. | {"useApifyProxy": false} |
JSON input example:
{"advertiserName": "SHEIN","start_date": "2024-06-01","end_date": "2024-06-30","country": "Germany","resultsLimit": 50,"enrichDestinationUrl": true}
Supported input formats
- Advertiser-scoped search โ set
advertiserNameto a brand string. This is a free-text field matched server-side against Pinterest's own advertiser records, not a fixed list โ try the brand's display name as it appears on Pinterest. - Blind market sweep โ omit
advertiserNameentirely (or leave it an empty string) to collect every advertiser running ads in the chosen country and date window, up toresultsLimit. - Lightweight run โ set
enrichDestinationUrltofalseto skip the per-ad destination-URL fetch and only collect the base ad and targeting fields, which reduces the number of requests the run makes.
๐ฆ Output Format
Every run writes typed, normalized JSON rows to the Apify dataset โ one row per ad, with a stable field set across runs. The default dataset view surfaces 27 of the row's fields; the row itself carries one more (ad_details, the untouched raw payload), all documented below.
Output for ads
{"pin_id": "123456789012345678","advertiserName": "SHEIN","advertiserNames": ["SHEIN"],"adTitle": "Summer Sale - Up To 70% Off","adImageUrl": "https://i.pinimg.com/originals/ab/cd/ef/example.jpg","adVideoUrl": null,"isVideoAd": false,"targetingAgeBuckets": ["25-34", "35-44"],"targetingGenders": ["female"],"targetingInterests": null,"targetingCountries": ["Germany"],"targetingRegions": null,"reachByCountry": { "Germany": "0 - 10000" },"reachEU": "0 - 10000","keywordsUsed": true,"negativeKeywordsUsed": false,"adFlightStartDate": "2024-06-05","adFlightEndDate": "2024-06-19","adDurationDays": 14,"adUrl": "https://ads.pinterest.com/ads-repository/123456789012345678/","scrapedAt": "2026-08-04T09:12:00+00:00","destinationUrl": "https://www.shein.com/campaign/summer-sale.html?utm_source=pinterest","advertiserWebsiteDomain": "shein.com","adSaves": 830,"adCommentCount": 0,"adShareCount": 0,"adReactionCount": 1,"ad_details": { "pin_data": { "title": "Summer Sale - Up To 70% Off" }, "advertiser_names": ["SHEIN"], "age_buckets": ["25-34", "35-44"], "start_date": "2024-06-05", "end_date": "2024-06-19" }}
ad_details is Pinterest's own unflattened response for the ad โ every other top-level field above is derived from it. It's kept in the row as a fallback: if Pinterest changes its internal response shape before the flattening logic is updated, the raw data is still there.
Output for targeting data
{"targetingAgeBuckets": ["25-34", "35-44"],"targetingGenders": ["female"],"targetingInterests": null,"targetingCountries": ["Germany"],"targetingRegions": null,"reachByCountry": { "Germany": "0 - 10000" },"reachEU": "0 - 10000","keywordsUsed": true,"negativeKeywordsUsed": false}
targetingInterests and targetingRegions are real fields but come back null on most ads โ Pinterest's advertisers mostly target by keyword rather than by its interest taxonomy or sub-country region, and this Actor never fills a missing value with a guess. Reach fields are always ranges; Pinterest does not publish an exact impression or reach number.
Output for destination URL and lead data
{"destinationUrl": "https://www.shein.com/campaign/summer-sale.html?utm_source=pinterest","advertiserWebsiteDomain": "shein.com","adSaves": 830,"adCommentCount": 0,"adShareCount": 0,"adReactionCount": 1}
These six fields only populate when enrichDestinationUrl is true. They come from a second fetch of the ad's public pin page, so coverage varies per ad โ some ads genuinely don't expose a landing link or engagement counters on that page, in which case the fields return null rather than an estimate.
Schema stability and export options
Field names are set by this Actor's own flattening logic, not read straight off Pinterest's front end, so they stay stable even when Pinterest changes its ad-library UI โ the raw ad_details field is the fallback if Pinterest changes its underlying API response shape. Export the dataset from the Apify Console or API in any of Apify's standard formats: JSON, JSONL, CSV, Excel (XLSX), XML, or RSS.
๐ก Pinterest Ads Scraper Strategy Guide
๐ฏ Strategy 1: Real-time lead enrichment pipeline
Feed the Actor a list of brand names from a prospecting list โ one run per advertiserName, country, and date window. Append the returned destinationUrl and advertiserWebsiteDomain back onto each prospect record in your CRM as the company's live outbound Pinterest traffic destination, and use adTitle and targetingInterests to note what offer or audience they're currently running.
๐ฏ Strategy 2: Scheduled competitor monitoring
Set up an Apify Schedule to re-run the same advertiserName and country weekly. Diff each run's adTitle, adFlightStartDate, and adFlightEndDate against the previous run's dataset โ a new pin_id means a new creative launched; an ad whose adFlightEndDate has passed but no longer appears means it was pulled. Alert on either delta rather than reviewing the full ad set each time.
๐ฏ Strategy 3: Bulk dataset build
Maintain a list of advertiser names (or run a blind sweep with a high resultsLimit, up to the schema's 10000 maximum) and run the Actor once per input, aggregating each dataset export into a CSV or a database table for a market-wide Pinterest advertising dataset. Internally, ad detail and enrichment fetches are processed in batches with automatic retries on transient network errors โ a run that hits a transient failure on one ad doesn't drop the whole batch.
Strategy comparison at a glance
| Strategy | Best for | Run pattern | Output format |
|---|---|---|---|
| Real-time lead enrichment | Sales/CRM teams working a prospect list | One run per brand, on demand | Dataset export appended to CRM records |
| Scheduled competitor monitoring | Marketing teams tracking named competitors | Recurring run via Apify Schedule | Dataset diffed run-over-run |
| Bulk dataset build | Research or market-wide ad datasets | Many runs across advertisers/markets | Aggregated CSV or database table |
๐ด Related Pinterest Scrapers & Tools
| Scraper | What it extracts |
|---|---|
| Pinterest-Boards-Scraper (pinterest-boards-scraper-and-pinner-profiles) | Pinterest boards and the pinner profiles behind them |
| Pinterest-Profile-Scraper (pinterest-profile-scraper-shop-products-and-prices) | A Pinterest seller's shop products and prices |
| Airbnb-Rooms-URLs-Scraper (airbnb-rooms-urls-scraper-host-email-and-phone-finder) | Host contact details for lead-gen workflows adjacent to this Actor's destination-URL lead extraction |
All three are Scrapio Actors. Use the boards and profile scrapers when the workflow needs Pinterest content or shop data rather than ad-library data; use the Airbnb host-contact scraper as a comparable pattern for turning platform data into a lead list on a different platform.
๐ How to integrate Pinterest Ads Scraper with your stack
Pinterest Ads Scraper (Advertiser & Brand Search) works with any language or tool that can make an HTTP request โ it runs through the standard Apify API and apify-client SDKs, so integration follows the same pattern as any other Apify Actor.
Python
from apify_client import ApifyClientimport csvclient = ApifyClient("<YOUR_APIFY_TOKEN>")actor_id = "<YOUR_USERNAME>/pinterest-ads-scraper-advertiser-and-brand-search"brands = ["SHEIN", "TEMU", "Amazon"]rows = []for brand in brands:run = client.actor(actor_id).call(run_input={"advertiserName": brand,"start_date": "2024-06-01","end_date": "2024-06-30","country": "Germany","resultsLimit": 50,"enrichDestinationUrl": True,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():rows.append(item)with open("pinterest_ads.csv", "w", newline="", encoding="utf-8") as f:writer = csv.DictWriter(f, fieldnames=list(rows[0].keys()))writer.writeheader()writer.writerows(rows)
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });const actorId = '<YOUR_USERNAME>/pinterest-ads-scraper-advertiser-and-brand-search';const brands = ['SHEIN', 'TEMU', 'Amazon'];const rows = [];for (const brand of brands) {const run = await client.actor(actorId).call({advertiserName: brand,start_date: '2024-06-01',end_date: '2024-06-30',country: 'Germany',resultsLimit: 50,enrichDestinationUrl: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();rows.push(...items);}console.log(`Collected ${rows.length} ads`);
Async and scheduled pipelines
For large jobs, start the run with client.actor(actor_id).start(run_input=...) instead of .call() and poll client.run(run_id).get() for status until it reaches SUCCEEDED, rather than blocking on the call. For recurring monitoring, use an Apify Schedule on the Actor with a fixed input to fire runs automatically on a cron-style interval, and read the resulting datasets from your own pipeline afterward.
๐ฏ Who Needs Pinterest Ads Scraper? (Use Cases & Industries)
๐ข Marketing agencies and performance marketers
An agency onboarding a new client searches the client's top three competitors by advertiserName, and gets back each competitor's live adTitle, targetingAgeBuckets, and keywordsUsed to brief the first campaign against โ without needing access to any of the three competitors' actual ad accounts.
๐ AI/ML and RAG teams
Index adTitle, keywordsUsed, and targetingInterests per advertiser into a RAG store to answer "what is Brand X currently running on Pinterest and to whom" queries with grounded, sourced data instead of an LLM's own guess.
๐ฑ Growth and lead-generation teams
With enrichDestinationUrl on, a growth team scrapes every advertiser running ads in a target country and builds a prospect list straight from advertiserWebsiteDomain โ companies actively spending on Pinterest ads are a warmer lead than a cold list.
๐ฌ Researchers
Academic or market researchers studying Pinterest ad-targeting practices pull a country's or a brand's full ad set as structured data for analysis, using only what Pinterest already discloses publicly in its Ads Transparency Library.
๐ฅ Ad-intelligence product builders
Teams building a "who's advertising where" directory or a Pinterest-ad-monitoring SaaS use advertiserName and advertiserWebsiteDomain as the join key between Pinterest's ad data and a company database, refreshed on a schedule.
Is it legal to scrape Pinterest's Ads Library?
Yes โ scraping publicly accessible data is generally lawful in most jurisdictions, and Pinterest's Ads Transparency Library is itself a public disclosure tool, not gated content. In the well-known US case hiQ Labs v. LinkedIn (9th Cir. 2019), the court held that scraping publicly accessible web data does not violate the Computer Fraud and Abuse Act. That precedent concerns public-data access generally; it does not mean every use of the data is risk-free.
Separately, scraping in a way that conflicts with a platform's Terms of Service can expose the scraper to civil claims (breach of contract or account termination) from that platform โ this is a civil-law risk, not a criminal one, and is independent of the data's public/private status.
This Actor returns advertiser names, ad creative, aggregate audience-targeting categories, and destination URLs โ business and campaign data, not personal data about identifiable individuals. GDPR and similar personal-data frameworks generally do not attach to this kind of business/ad-campaign record, so this README does not apply that framing here.
Pinterest Ads Scraper (Advertiser & Brand Search) returns only publicly accessible data. What you do with that data is your responsibility โ consult legal counsel for commercial applications involving personal data.
โ Frequently asked questions
Does Pinterest Ads Scraper work without a Pinterest account?
Yes. The Actor calls Pinterest's own public Ads Library endpoints and pin pages directly with browser-like request headers โ no Pinterest login, cookies, or API key are required to run it.
How does Pinterest Ads Scraper handle Pinterest's anti-scraping measures?
It sends browser-like headers on every request, retries transient network or server errors up to three times with a short backoff, and supports an optional Apify Proxy configuration if you hit access issues. Genuine rejections from Pinterest's own API (e.g. an invalid country) are surfaced as the real error message rather than retried indefinitely.
Can I run Pinterest Ads Scraper at scale without getting blocked?
There's no published uptime or block-rate guarantee. What is documented: requests run with a capped concurrency, in batches, with automatic retries on transient failures, and failed ad fetches get one additional retry pass at the end of the run before being omitted โ so a handful of failures don't stop the whole run.
How fresh is the data Pinterest Ads Scraper returns?
Every run fetches live from Pinterest at request time โ nothing is cached between runs. The data's actual freshness ceiling is Pinterest's own: its Ads Library has a real publication lag, and very recent date windows (including much of the last ~12 months) can return zero ads even for large, active brands.
Which Pinterest ad fields work best for AI training and RAG indexing?
For RAG, index adTitle and keywordsUsed โ the highest-information text and strategy fields per ad. For training data, targetingAgeBuckets, targetingGenders, targetingCountries, and reachByCountry return as consistent typed arrays and range strings across every row, needing no normalization before being passed into a model or an LLM context window.
Why does my search return zero ads, and why aren't the US and UK selectable as a country?
Usually one of two reasons: the advertiser isn't running Pinterest ads in that country/date window, or the date window is too recent for Pinterest's Ads Library to have published it yet. Separately, the US and UK are not on the country list at all โ Pinterest's own Ads Library backend rejects those two country codes, so they're deliberately excluded rather than offered and silently failing.
Is the advertiser/brand-name filter an official Pinterest feature?
It's a real server-side parameter on Pinterest's own Ads Library backend, confirmed by testing โ but Pinterest does not document it publicly as a supported filter. This Actor exposes it as a first-class input; it is not a client-side filter applied after the fact.
Does resultsLimit guarantee that many ads back?
No โ resultsLimit (1 to 10,000) is a ceiling, not a guarantee. The actual count returned depends on how many ads exist for that advertiser/country/date combination on Pinterest's side, and any ad that still fails to load after its retry pass is omitted rather than padded with an empty row.
Does Pinterest Ads Scraper work with Claude, ChatGPT, and other AI agent tools?
Yes, as an HTTP endpoint callable by any agent framework through the Apify API โ every response is typed JSON, so an agent can consume it directly without parsing HTML first.
โน๏ธ Disclaimer
Pinterest Ads Scraper (Advertiser & Brand Search) extracts only publicly available data from Pinterest's Ads Transparency Library. This tool is intended for lawful use cases only. Users are responsible for complying with Pinterest's terms of service and applicable data protection laws in their jurisdiction.