Pinterest Ads Scraper
Pricing
from $4.99 / 1,000 results
Pinterest Ads Scraper
๐ Pinterest Ads Scraper (pinterest-ads-scraper) extracts ad creatives, titles, pins, destination URLs, advertiser, impressions & dates from Pinterest โ fast. ๐ Export to CSV/JSON, monitor competitors, spot trends, and optimize campaigns. Ideal for marketers, agencies & eโcommerce. โ๏ธ API-ready.
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
Scraper Engine
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Pinterest Ads Scraper โ Advertiser Names, Creatives & Targeting
Pinterest Ads Scraper collects real, currently-running ads from Pinterest's public Ads Transparency Library for any supported market and date window, and returns advertiser name, ad creative (image or video), flight dates, and full demographic and interest targeting as structured JSON โ no HTML parsing, no login required. Every ad is pushed to the dataset the moment it's found. Set a country and date range below and pull a market's live Pinterest ad activity in minutes.
๐ What is Pinterest Ads Scraper?
Pinterest Ads Scraper is an Apify Actor that queries Pinterest's own public Ads Transparency Library and returns every ad it finds โ creative, advertiser name, flight dates, and targeting โ as clean, named JSON fields instead of Pinterest's raw nested API response. No Pinterest account, login, or cookie is required: the Ads Transparency Library is a logged-out, publicly browsable resource, and this Actor reads only what it already shows. It's built for competitive-intelligence teams, media buyers, ad agencies, and market researchers who need Pinterest ad data without hand-parsing Pinterest's internal endpoints.
๐ What Pinterest ad data is publicly available to scrape?
Pinterest's Ads Transparency Library shows every currently active ad in a supported market to any visitor, logged in or not โ the gate here isn't login, it's what Pinterest chooses to disclose at all.
| Data category | Publicly available (no login) | Never disclosed by Pinterest |
|---|---|---|
| Ad creative (image / video) | โ | |
| Advertiser / brand name | โ resolved from the ad's own detail page | |
| Ad flight start / end dates | โ | |
| Age & gender targeting | โ | |
| Interest & regional targeting | โ when the advertiser set it | |
| Reach, as a disclosed range | โ | |
| Exact ad spend | โ ๏ธ no figure exists anywhere in the public library | |
| Exact impression counts | โ ๏ธ Pinterest shows a reach range only, never a number |
Pinterest Ads Scraper only returns publicly visible data โ what any visitor to the Ads Library sees. Nothing behind a login wall.
๐๏ธ What data can I extract with Pinterest Ads Scraper?
Every ad is returned as one flat JSON row spanning ad identity/creative, full targeting detail, and disclosed reach.
| Field | Description |
|---|---|
pin_id | Pinterest's internal ad/pin identifier. |
advertiserName | The resolved advertiser/brand name running the ad (first entry of advertiserNames). |
advertiserNames | All advertiser/brand names attached to the ad. |
pinTitle | The ad's headline/caption text. |
pinImageUrl | Ad creative image URL. |
pinVideoUrl | Ad creative video URL โ present only on video ads. |
countryQueried | The market this ad was collected for (your country input, echoed back). |
adFlightStartDate | The ad's own flight start date, from Pinterest โ distinct from your search window. |
adFlightEndDate | The ad's own flight end date, from Pinterest. |
adUrl | Deep link to this ad in Pinterest's own Ads Library. |
scrapedAt | ISO-8601 UTC timestamp of when this row was collected. |
targetingAgeBuckets | Age ranges the advertiser targeted. |
targetingGenders | Genders the advertiser targeted. |
targetingInterests | Interest categories the advertiser targeted โ genuinely optional on Pinterest's side, often empty. |
targetingCountries | Countries the advertiser targeted. |
targetingRegions | Regions/states the advertiser targeted โ genuinely optional, often empty. |
targetingKeywordsUsed | Boolean โ whether the advertiser used keyword targeting. |
targetingNegativeKeywordsUsed | Boolean โ whether the advertiser used negative-keyword targeting. |
reachByCountry | Pinterest's own disclosed reach range for the queried country (e.g. "0 - 10000") โ never an exact number. |
reachEU | Pinterest's own disclosed EU-wide reach range. |
ad_details | The full raw ad object as returned by Pinterest's per-ad endpoint, kept for anyone integrating against the original nested shape. |
๐ Ad and advertiser identity
pin_id, advertiserName, advertiserNames, pinTitle, pinImageUrl, pinVideoUrl, countryQueried, adFlightStartDate, adFlightEndDate, adUrl, scrapedAt
๐ฏ Targeting and reach
targetingAgeBuckets, targetingGenders, targetingInterests, targetingCountries, targetingRegions, targetingKeywordsUsed, targetingNegativeKeywordsUsed, reachByCountry, reachEU, plus the full raw ad_details object for anything not yet flattened into a named column.
๐ค Add-on: Need additional Pinterest data?
Pair this with Pinterest Boards Scraper to pull every pin on the advertiser's own boards, or Pinterest Profile Scraper to enrich advertiserName with follower counts, bio, and verification status for the same account.
๐งญ Why not build this yourself?
Pinterest doesn't publish a public API for the Ads Transparency Library. The closest official surface, the Pinterest Ads API, is scoped to managing your own ad accounts, campaigns, and reporting โ it requires an approved developer app and OAuth access to a specific ad account, and it has no endpoint for browsing other advertisers' currently running ads (checked 2026-08-04).
Building this yourself means reverse-engineering ads.pinterest.com's internal resource API, replicating its bookmark-cursor pagination, discovering that the bulk search endpoint never returns the advertiser name (a second per-ad request is required for that), maintaining a validated country-code map by hand (Pinterest's own enum silently rejects several markets), and re-testing all of it every time Pinterest ships a front-end change. Pinterest Ads Scraper already does this and returns the result as stable, named JSON columns.
โถ๏ธ How to use Pinterest Ads Scraper
Runs happen entirely on Apify โ no signup flow beyond an Apify account, no API key exchange required to start from the Console.
- Open Pinterest Ads Scraper on its Apify Store listing and click Try for free (or Start, if you already have it saved).
- Provide the three required inputs:
start_date,end_date, andcountry. - Optionally set
resultsLimit(default100, max10,000) and enableproxyConfigurationif you hit access issues. - Click Start.
- Watch the Log for live progress, then open the Dataset tab and export as JSON, CSV, or Excel.
Scaling to bulk ad extraction
The input schema takes one country and one date window per run โ there's no array field for multiple markets in a single call. To cover several markets or time windows, loop runs: call the Actor once per country/date-range combination, either manually from the Console or via the Apify API/apify_client in a script, and merge the resulting datasets afterward.
๐ฏ What can you do with Pinterest ad data?
- ๐ข Competitive intelligence teams track which brands (
advertiserName) are actively running ads in a market and pullpinTitleandpinImageUrlto catalog their creative. - ๐ Media buyers and analysts use
targetingAgeBucketsandtargetingGendersto benchmark which audience segments competitors are targeting before setting their own campaign parameters. - ๐จ Creative and brand teams collect
pinImageUrl/pinVideoUrlperadvertiserNameto build a creative-benchmarking swipe file for a category or region. - ๐ฌ Market researchers combine
reachByCountry/reachEUwithadFlightStartDate/adFlightEndDateto gauge campaign scale and duration trends across a country or time window. - ๐ค AI engineers feed the normalized JSON rows โ
advertiserName,pinTitle,targetingInterestsโ into a RAG pipeline or LLM agent to answer natural-language questions about competitor ad activity without writing a parser.
๐ก๏ธ How does Pinterest Ads Scraper handle rate limits and blocking?
Requests run through aiohttp with a bounded connection pool (limit=20, limit_per_host=5) and a concurrency semaphore capped at 5 simultaneous requests, so the Actor never hammers Pinterest's endpoint with unlimited parallel calls. Each request retries up to 3 times with a growing delay (1.5s ร attempt) on network errors or timeouts. Per-ad detail fetches run in batches of 10 with a short pause between batches, and any ad that still failed after the first pass gets one final retry sweep. An optional Apify Proxy configuration is available if you hit access issues, but it's off by default โ most runs don't need it. The Actor does not solve CAPTCHAs or render a browser; it calls Pinterest's own internal Ads Library API directly. If Pinterest itself rejects a request outright (for example, an unsupported country), the run fails immediately with Pinterest's real error message instead of silently returning "0 ads."
โฌ๏ธ Input
| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
start_date | Yes | string | First day of the ad flight window to search (YYYY-MM-DD). Pinterest's public Ads Library has a real publication delay, so very recent windows often return 0 ads โ default targets a window with confirmed real ad coverage. Default: "2024-06-01". | "2024-06-01" |
end_date | Yes | string | Last day of the ad flight window to search (YYYY-MM-DD). Default: "2024-06-30". | "2024-06-30" |
country | Yes | string (enum, 30 values) | The Pinterest Ads Library market to search โ ads shown in this country are collected. Only markets the Ads Library backend actually accepts are listed. Default: "France". | "Germany" |
resultsLimit | No | integer | Maximum number of ads to fetch. Minimum 1, maximum 10000. Default: 100. | 250 |
proxyConfiguration | No | object | Apify Proxy configuration. Enable if you experience access issues โ most users can leave this disabled. | { "useApifyProxy": false } |
The full country enum: 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.
โ ๏ธ United States and United Kingdom are not on this list on purpose. Pinterest's Ads Library backend itself rejects those two markets with an HTTP 400 error โ they were removed after live verification against the API rather than left in to fail silently.
Example input
{"start_date": "2024-06-01","end_date": "2024-06-30","country": "Germany","resultsLimit": 250,"proxyConfiguration": { "useApifyProxy": false }}
โฌ๏ธ Output
Every ad is pushed to the dataset as one typed, flat JSON row the moment it's collected โ the same 21 fields on every run, regardless of how Pinterest's own UI is laid out that week. Export as JSON, CSV, Excel, or any format the Apify dataset UI offers.
Example output
{"pin_id": "987654321098765432","advertiserName": "Nordic Home Co.","advertiserNames": ["Nordic Home Co."],"pinTitle": "Cozy autumn living room ideas","pinImageUrl": "https://i.pinimg.com/originals/ab/cd/ef/example-creative.jpg","pinVideoUrl": null,"countryQueried": "Germany","adFlightStartDate": "2024-06-03","adFlightEndDate": "2024-06-24","targetingAgeBuckets": ["25-34", "35-44"],"targetingGenders": ["female"],"targetingInterests": ["Home decor", "Interior design"],"targetingCountries": ["DE"],"targetingRegions": [],"targetingKeywordsUsed": true,"targetingNegativeKeywordsUsed": false,"reachByCountry": "10000 - 50000","reachEU": "50000 - 100000","adUrl": "https://ads.pinterest.com/ads-repository/987654321098765432/","scrapedAt": "2026-08-04T09:12:47Z","ad_details": {"pin_data": {"title": "Cozy autumn living room ideas","image_link": "https://i.pinimg.com/originals/ab/cd/ef/example-creative.jpg","video_link": null},"advertiser_names": ["Nordic Home Co."],"start_date": "2024-06-03","end_date": "2024-06-24","age_buckets": ["25-34", "35-44"],"genders": ["female"],"interests": ["Home decor", "Interior design"],"countries": ["DE"],"regions": [],"keywords_used": true,"negative_keywords_used": false,"user_count_by_country": "10000 - 50000","user_count_eu": "50000 - 100000"}}
โ๏ธ How does it work?
Pinterest Ads Scraper calls the same internal resource API (ads.pinterest.com/resource/ApiResource/get/) that powers the Ads Library web page itself, optionally routed through Apify Proxy. It first pages through the bulk search endpoint using Pinterest's own bookmark cursor until it has collected up to resultsLimit ad IDs for the chosen country and date window, then fetches each ad's individual record โ the only place Pinterest returns the resolved advertiser name and full targeting detail. No browser rendering and no login are involved; only data Pinterest already serves to a logged-out visitor is returned. Because every field is mapped to a fixed, named output column rather than passed through as raw HTML or an unpredictable nested object, the output schema stays stable even when Pinterest changes its own Ads Library interface.
๐ Integrations
Pinterest Ads Scraper runs on Apify, so it works with anything that can call the Apify API or the Apify SDKs โ no separate signup or credential system of its own.
Calling Pinterest Ads Scraper programmatically
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run_input = {"start_date": "2024-06-01","end_date": "2024-06-30","country": "Germany","resultsLimit": 250,}run = client.actor("your-username/pinterest-ads-scraper").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["advertiserName"], item["pinTitle"])
Works in Go, Ruby, Node.js, cURL โ any language that can make an HTTP request to the Apify API.
No-code tools (n8n, Make)
In n8n, use the native Apify node (or an HTTP Request node) pointed at this Actor's run endpoint to trigger a scrape and pass results downstream in a workflow. In Make, the Apify app lets you run this Actor as a scenario step and map the returned dataset items straight into a Google Sheet, CRM, or database module.
โ๏ธ Is it legal to scrape Pinterest ads?
Scraping publicly available data is generally lawful, and Pinterest Ads Scraper returns only data Pinterest's Ads Transparency Library already discloses to any logged-out visitor โ advertiser names, ad creative, flight dates, and the targeting an advertiser chose to set. This is business and advertising data, not personal data about identifiable individuals, so GDPR's personal-data framework does not attach to the fields this Actor returns. What does apply is Pinterest's own Terms of Service and any database or intellectual-property rights Pinterest or an advertiser holds in the underlying content โ review Pinterest's ToS for your specific use case, particularly around large-scale storage or redistribution of collected ad creative. Consult legal counsel if your use case involves bulk storage or commercial redistribution of scraped data.
โ Frequently asked questions
What Pinterest ad fields does Pinterest Ads Scraper return?
The top fields are advertiserName, pinImageUrl/pinVideoUrl, targetingAgeBuckets/targetingGenders, reachByCountry, and adFlightStartDate/adFlightEndDate. See What data can I extract for the full 21-field list.
Does Pinterest Ads Scraper require a Pinterest account or login?
No. Pinterest's Ads Transparency Library is publicly accessible without authentication, and this Actor never sends a login cookie or session token.
How many ads can I extract in one run?
Up to your resultsLimit input, which accepts any value from 1 to 10,000. The actual number returned also depends on how many ads Pinterest's Ads Library actually has for that country and date window โ a quiet market/date combination can return fewer ads than requested.
What happens if a country or date range returns zero ads?
Most commonly it's a genuinely quiet market/date combination, or a date window that's too recent โ Pinterest's Ads Library has a real publication delay, so very recent windows often show 0 ads even for active markets. If the country value itself is rejected by Pinterest's backend (this can't happen through the schema's enum, but would with a raw API call), the run fails outright with Pinterest's own error message rather than returning a misleading empty result.
Can I scrape multiple Pinterest markets at once?
Not within a single run โ the input schema takes one country and one date window per run. Loop multiple runs (one per market) via the Apify Console, a schedule, or the Apify API to cover several countries.
Does Pinterest Ads Scraper work with Claude, ChatGPT, and other AI agent tools?
It's not exposed through an MCP server. It is callable as a standard HTTP endpoint through the Apify API by any agent framework that can make an HTTP request โ pass the JSON input, poll or wait for the run, then read the dataset.
How does Pinterest Ads Scraper compare to other Pinterest ad scrapers?
As observed on their Apify Store listings on 2026-08-04, Lexis Solutions' Pinterest Ads Scraper adds category/gender/age as input-side filters and caps the date range to under 30 days; Codebyte's Pinterest Ads Repository covers 29 markets with an advertiser-name text filter and a 1,000-result default limit. Pinterest Ads Scraper covers 30 markets, accepts a 1โ10,000 result range per run, returns every targeting dimension (age, gender, interest, country, region) as flattened output columns you filter after the fact rather than restrict at input, and surfaces a genuine Pinterest API rejection as a real run failure instead of an empty result.
Does Pinterest Ads Scraper return data in a format LLMs can use directly?
Yes. Every row is typed, normalized JSON with consistent field names across runs โ no HTML, no CSS selectors. Pass it directly to an LLM, index it into a vector store, or feed it to an agent tool as-is.
What happens when Pinterest changes its layout or anti-bot system?
The Actor is maintained against Pinterest's internal Ads Library API, and the output schema is designed to stay stable across Pinterest UI changes since every field is mapped to a fixed column rather than scraped positionally. No specific fix turnaround time is promised.
Can I use Pinterest Ads Scraper without managing proxies or browser infrastructure?
Yes. The Actor calls Pinterest's API directly with aiohttp โ there's no headless browser to configure. Apify Proxy is available as an optional toggle for access issues, but it's not required to run.
Which Pinterest ad fields work best for AI training data and RAG indexing?
For RAG, index the text-bearing fields: pinTitle, advertiserName, and targetingInterests. For structured training data, targetingAgeBuckets, targetingGenders, reachByCountry, and adFlightStartDate/adFlightEndDate return as consistent typed values (arrays, booleans, and range strings) across every record.
๐ Related scrapers
| Scraper | What it extracts |
|---|---|
| Pinterest Boards Scraper | Every pin on a Pinterest board, profile, or pin URL โ images/video, alt text, saves, board and pinner metadata |
| Pinterest Profile Scraper | Public Pinterest profile data โ followers, following, pin/board counts, bio, verification flags |
| TikTok Data Scraper | Public TikTok profiles, videos, followers, comments, hashtags, and sound data |
| Facebook Group Posts And Details Scraper | Facebook group posts, comments, and engagement analytics |
๐ฌ Your feedback
Found a bug or missing a field? Let us know through the Actor's Issues tab on Apify Console, or via Apify's support channel โ reports like these are how the country list and field mapping above got fixed in the first place.