Pinterest Ads Scraper — Performance Analytics avatar

Pinterest Ads Scraper — Performance Analytics

Pricing

from $2.99 / 1,000 results

Go to Apify Store
Pinterest Ads Scraper — Performance Analytics

Pinterest Ads Scraper — Performance Analytics

Pinterest Ads Scraper extracts Pinterest advertising data, including promoted pins, ad details, advertiser information, engagement metrics, links, and creative data. Automate competitor research, ad monitoring, market analysis, and Pinterest campaign intelligence.

Pricing

from $2.99 / 1,000 results

Rating

0.0

(0)

Developer

SimpleAPI

SimpleAPI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Pinterest Ads Scraper — Targeting, Reach and Advertiser Data

This Pinterest ads scraper pulls ads straight from Pinterest's public Ads Transparency Library and returns them as structured, table-ready rows — advertiser name, ad creative, flight dates, flattened targeting (age, gender, interests, country, region), disclosed reach range, and derived metrics like reach midpoint, targeting breadth score and engagement rate. It's built for media buyers, ad agencies and competitive-intelligence teams who need to benchmark Pinterest ad targeting and ad reach across advertisers and markets without parsing a nested JSON blob by hand. Point it at a market and a date window, and every ad lands in your dataset with the analytics already computed.

What is Pinterest Ads Scraper — Performance Analytics?

Pinterest Ads Scraper — Performance Analytics is an Apify Actor that queries Pinterest's public Ads Transparency Library (ads.pinterest.com/ads-repository) for a given market and date range, fetches the full detail record for every ad found, and flattens it into named columns plus a set of derived analytics fields. No Pinterest account, login, or API key is required — the Ads Library is publicly accessible, and the Actor only needs an Apify account to run.

Key features:

  • 🌍 Market + date discovery — finds ads by target market (30 supported countries) and a flight-date window, not by advertiser name or keyword.
  • 📌 Advertiser and creative fields — advertiser name(s), pin title, image URL, video URL (when the ad is a video), and a deep link back to the ad in the Ads Library.
  • 🎯 Flattened targeting data — age buckets, genders, interests, targeted countries and regions, plus a computed 0–5 targeting breadth score.
  • 📈 Reach and duration metrics — a numeric reach midpoint derived from Pinterest's disclosed reach range, and ad flight duration in days.
  • 💬 Optional engagement rate — saves, shares and comments pulled from the ad's public pin page, with a computed engagement rate.
  • 📊 Every row is pushed to the dataset in real time and can be exported as JSON, CSV, Excel, or accessed via API — standard Apify dataset export formats.

What data can I extract with Pinterest Ads Scraper — Performance Analytics?

Every ad record combines identifying, creative, targeting, reach and engagement data in one row:

FieldExample valueUse case
pin_id"1234567890123456789"Unique identifier for the ad/pin
advertiserName"Acme Outdoor Gear"Primary advertiser display name
advertiserNames["Acme Outdoor Gear"]Full list of advertiser names disclosed for the ad
pinTitle"Summer Hiking Boots Sale"Ad creative headline
pinImageUrl"https://i.pinimg.com/..."Ad creative image
pinVideoUrl"https://v.pinimg.com/..."Ad creative video (video ads only, else null)
countryQueried"Germany"Market this ad was collected for
adFlightStartDate"2024-05-01"Ad's own disclosed flight start date
adFlightEndDate"2024-05-15"Ad's own disclosed flight end date
adDurationDays14Computed flight duration in days
targetingAgeBuckets["25-34", "35-44"]Disclosed age targeting
targetingGenders["female"]Disclosed gender targeting
targetingInterests["Outdoor Recreation"]Disclosed interest targeting
targetingCountries["DE"]Disclosed country targeting
targetingRegions["Bavaria"]Disclosed region/state targeting
targetingBreadthScore3Count of non-empty targeting dimensions (0–5)
targetingKeywordsUsedfalseWhether keyword targeting was used
targetingNegativeKeywordsUsedfalseWhether negative-keyword targeting was used
reachByCountry{"DE": "10000 - 50000"}Pinterest's own disclosed reach range, per country
reachEU"50000 - 100000"Pinterest's own disclosed EU-wide reach range
reachMidpoint30000Numeric midpoint of the disclosed reach range
engagementSaves142Public save count on the ad's pin page
engagementShareCount18Public share count on the ad's pin page
engagementCommentCount6Public comment count on the ad's pin page
engagementRate0.005533(saves + shares + comments) ÷ reachMidpoint
adUrl"https://ads.pinterest.com/ads-repository/1234567890123456789/"Deep link to the ad in the Ads Library
scrapedAt"2026-08-04T10:15:00Z"ISO timestamp of collection
ad_details{ ... }The full raw ad object exactly as returned by Pinterest, kept in full

Reach, duration and engagement metrics

reachMidpoint, adDurationDays, engagementSaves/engagementShareCount/engagementCommentCount and engagementRate are the decision-driving fields — the numbers a media buyer actually benchmarks against. Pinterest never discloses an exact impression count, only a range (e.g. "10000 - 50000"); reachMidpoint is the honest arithmetic midpoint of that range, never a fabricated precise figure. engagementRate is null whenever either the engagement counts or the reach midpoint is unavailable — it is never backfilled with a guess.

Targeting and geo fields

targetingAgeBuckets, targetingGenders, targetingInterests, targetingCountries and targetingRegions are the fields analysts filter and segment on — for example, grouping every ad in a niche by which age brackets are targeted, or checking whether a competitor is running region-specific creative. targetingBreadthScore gives a single 0–5 number for "how narrowly is this advertiser targeting," useful for sorting a whole dataset at a glance without reading five array columns per row.

Why not build this yourself?

Pinterest's Ads Transparency Library is a public web page, not a documented API — there's no official endpoint you can call with a market and a date range and get structured JSON back. Building this yourself means reverse-engineering an internal resource endpoint, handling its bookmark-based cursor pagination, retrying on transient failures without hammering the endpoint, and then writing your own logic to flatten targeting fields and parse disclosed reach ranges into something you can actually chart. This Actor already does all of that: it paginates through the bulk ad-discovery endpoint until it hits your requested count or runs out of results, retries failed detail requests once as a batch, and computes the targeting/reach/engagement analytics locally from data it already has — so you get a clean dataset instead of a scraping project.

Build it yourself if you only need a handful of ads once and are comfortable maintaining scraper code against an undocumented endpoint. Use this Actor if you need repeatable, structured pulls across markets and date windows without maintaining that code.

How to use data extracted from Pinterest Ads Library?

Media buyers and competitive-intelligence teams

Set targetMarket to the country you're auditing and a dateFrom/dateTo window, run the Actor, and filter the resulting dataset on advertiserName to see every ad a given competitor ran in that market — their creative (pinTitle, pinImageUrl, pinVideoUrl), their targeting breadth, and their disclosed reach range — without opening the Ads Library UI one ad at a time.

Agencies auditing on behalf of clients

Run the same market/date query on a schedule (an Apify schedule works well here) and diff successive datasets by pin_id to spot new ads, changed flight dates, or shifts in targetingBreadthScore for the accounts you monitor for clients, then hand the client a table instead of Ads Library screenshots.

Market research and intelligence

Pull a broad date window for a market and group rows by targetingInterests or targetingAgeBuckets to see which audience segments are being targeted most heavily in a category, or compare reachMidpoint distributions across advertisers to gauge relative campaign scale.

AI agents and automated pipelines

Because the Actor is a standard Apify Actor callable over HTTP, an agent framework can trigger a run with a market and date range as parameters and read back structured JSON — useful for an agent tool that answers "what is competitor X advertising on Pinterest in market Y right now" without a human touching the Ads Library.

🔼 Input sample

None of the fields are required by the schema — the Actor falls back to prefilled defaults (targetMarket: France, a ~2-year-old 14-day date window) if you run it with an empty input. In practice you should always set targetMarket, dateFrom and dateTo yourself.

ParameterRequiredTypeDescriptionExample value
targetMarketNoString (enum, select)The Pinterest Ads Library market to analyze. 30 supported countries — see the full list below. Legacy alias: country."Germany"
dateFromNoString (date)Start of the ad flight window. Absolute YYYY-MM-DD or relative 30d/6m/2y ("that far back from now"). Legacy alias: start_date."777d"
dateToNoString (date)End of the ad flight window, same format as dateFrom. Legacy alias: end_date."763d"
maxAdsToAnalyzeNoInteger (1–10,000)Maximum number of ads to fetch and score. Runtime default is 100 if omitted. Legacy alias: resultsLimit.250
includeTargetingBreakdownNoBoolean, default trueFlatten targeting fields and compute targetingBreadthScore. Zero extra requests.true
includePerformanceMetricsNoBoolean, default trueCompute reachMidpoint and adDurationDays. Zero extra requests.true
includeEngagementRateNoBoolean, default trueFetch each ad's public pin page for saves/shares/comments and compute engagementRate. Adds one extra request per ad.true
start_dateNoString (date, absolute only)Legacy/compatibility field. Used only when dateFrom is not supplied."2024-01-01"
end_dateNoString (date, absolute only)Legacy/compatibility field. Used only when dateTo is not supplied."2024-01-15"
countryNoString (enum, select)Legacy/compatibility field, 32 options (includes United States/United Kingdom — see warning below). Used only when targetMarket is not supplied."Germany"
resultsLimitNoInteger (1–10,000)Legacy/compatibility field. Used only when maxAdsToAnalyze is not supplied.250
proxyConfigurationNoObject (proxy editor)Apify Proxy configuration. Disabled (useApifyProxy: false) by default — most runs don't need it.{ "useApifyProxy": false }

The full targetMarket/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 (targetMarket), plus United Kingdom and United States on the legacy country field only.

{
"targetMarket": "Germany",
"dateFrom": "2024-01-01",
"dateTo": "2024-02-01",
"maxAdsToAnalyze": 500,
"includeTargetingBreakdown": true,
"includePerformanceMetrics": true,
"includeEngagementRate": true
}

⚠️ Common pitfall: "United States" and "United Kingdom" appear as legacy country enum options but are not valid markets on Pinterest's Ads Library surface — a run targeting either will consistently return 0 ads. Use one of the 30 markets on targetMarket instead. Separately, Pinterest's public Ads Library lags real time significantly, so a dateFrom/dateTo window in the last few months frequently returns 0 ads too — the schema's default window is set roughly two years back specifically because it has confirmed ad coverage.

🔽 Output sample

Results are typed, normalized JSON, one row per ad, available for export as JSON, CSV, Excel/XLSX, or via the Apify API/apify_client. One full record looks like this:

{
"pin_id": "1234567890123456789",
"advertiserNames": ["Acme Outdoor Gear"],
"advertiserName": "Acme Outdoor Gear",
"pinTitle": "Summer Hiking Boots Sale",
"pinImageUrl": "https://i.pinimg.com/originals/example.jpg",
"pinVideoUrl": null,
"countryQueried": "Germany",
"adFlightStartDate": "2024-05-01",
"adFlightEndDate": "2024-05-15",
"reachByCountry": { "DE": "10000 - 50000" },
"reachEU": "50000 - 100000",
"adUrl": "https://ads.pinterest.com/ads-repository/1234567890123456789/",
"scrapedAt": "2026-08-04T10:15:00Z",
"targetingAgeBuckets": ["25-34", "35-44"],
"targetingGenders": ["female"],
"targetingInterests": ["Outdoor Recreation"],
"targetingCountries": ["DE"],
"targetingRegions": ["Bavaria"],
"targetingKeywordsUsed": false,
"targetingNegativeKeywordsUsed": false,
"targetingBreadthScore": 3,
"reachMidpoint": 30000,
"adDurationDays": 14,
"engagementSaves": 142,
"engagementShareCount": 18,
"engagementCommentCount": 6,
"engagementRate": 0.005533,
"ad_details": { "...": "full raw ad object, always kept in full" }
}

ad_details is the complete raw ad object Pinterest returns, kept in every row regardless of which analytics toggles are enabled — nothing from the source payload is discarded.

How do you filter and target specific ads?

Precision here comes from three input axes, not a free-text query — the Ads Library only supports discovery by market and date, not by advertiser name or keyword.

Market scope. targetMarket narrows every result to ads that ran in that country. This is the single biggest lever: switching markets returns an entirely different ad set, since Pinterest's Ads Library is market-scoped by design.

Date window. dateFrom/dateTo narrow by the ad's disclosed flight dates, accepting either an absolute date or a relative offset (30d, 6m, 2y). Because of the Library's real publication delay, a window covering only the last few weeks often returns nothing — widen or shift the window further back if a custom range comes back empty.

Volume and analytics cost. maxAdsToAnalyze caps how many ads are fetched and scored (1–10,000); the Actor paginates the bulk discovery endpoint with Pinterest's own bookmark cursor until it reaches that count or runs out of ads, whichever comes first. The three include* toggles control cost, not accuracy: includeTargetingBreakdown and includePerformanceMetrics are free (the data is already in the per-ad response), while includeEngagementRate adds one extra request per ad, so turning it off roughly halves the number of HTTP requests the Actor makes on a large run.

{ "targetMarket": "Brazil", "dateFrom": "2023-06-01", "dateTo": "2023-12-01", "maxAdsToAnalyze": 1000 }
{ "targetMarket": "Sweden", "dateFrom": "180d", "dateTo": "30d", "maxAdsToAnalyze": 2000, "includeEngagementRate": false }
{ "targetMarket": "Turkey", "dateFrom": "2y", "dateTo": "700d", "maxAdsToAnalyze": 50, "includeTargetingBreakdown": true, "includePerformanceMetrics": true, "includeEngagementRate": true }

▶️ Want to try other Pinterest scrapers?

ScraperWhat it extracts
Pinterest Boards Scraper (Pin Comments & Replies)Pins, boards and pin comment/reply threads
Pinterest Profile Scraper With Email & Website ContactsPinterest profile details plus discovered email/website contacts
TikTok Data Scraper — Video, Hashtag & Sound PerformanceVideo, hashtag and sound performance analytics on TikTok
Threads Search Post ScraperThreads posts matching a search query

How to extract Pinterest ads data programmatically

The Actor runs like any Apify Actor: start a run with a JSON input over the Apify API or apify-client, poll for completion, then read the dataset back as JSON.

Python example

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("<username>/pinterest-ads-scraper-performance-analytics").call(
run_input={
"targetMarket": "Germany",
"dateFrom": "2024-01-01",
"dateTo": "2024-02-01",
"maxAdsToAnalyze": 500,
}
)
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["advertiserName"], item["reachMidpoint"], item["engagementRate"])

Export to spreadsheets or CRM

Every dataset can be exported directly from the Apify Console as CSV or Excel and opened in a spreadsheet, or pulled via API for a CRM import. Map advertiserName to your account/company column, pinTitle/pinImageUrl/pinVideoUrl to a creative column, and reachMidpoint/engagementRate/targetingBreadthScore to whatever numeric columns your benchmarking sheet already tracks.

Yes — this Actor collects ad records from Pinterest's own public Ads Transparency Library, a page Pinterest operates specifically so anyone can look up what ads are running, without requiring a login. The records returned are business and marketing data — advertiser names, ad creative, targeting configuration and disclosed reach ranges — not personal data about private individuals, so GDPR and CCPA generally do not attach to this dataset. What does apply is Pinterest's own Terms of Service, which govern automated access and reuse of the site's content, and standard database-rights considerations if you plan to republish or resell the collected data at scale. Consult legal counsel for commercial applications involving bulk storage or resale of scraped data.

❓ FAQ

Does this scraper tell me if an ad is still running?

Not directly — it returns each ad's own disclosed adFlightStartDate and adFlightEndDate, which is Pinterest's stated flight window at the time of collection, but the Actor doesn't poll for a live "still active" status. Re-run the query for the same market and check whether the pin_id still appears with an unchanged adFlightEndDate if you need to confirm an ad is still live.

Can I get engagement and reach data along with the main ad records?

Yes. includePerformanceMetrics (default on) adds reachMidpoint and adDurationDays at no extra request cost, and includeEngagementRate (default on) adds one extra request per ad to fetch engagementSaves, engagementShareCount, engagementCommentCount and engagementRate from the ad's public pin page. Engagement coverage is partial — Pinterest doesn't expose these counts on every ad pin, so the fields come back null rather than a faked 0 when unavailable.

How accurate is the reach data?

Pinterest never publishes an exact impression or reach number in its public Ads Library — only a range (e.g. "10000 - 50000"). reachMidpoint is the honest arithmetic midpoint of that disclosed range, computed locally; it is not, and cannot be, a more precise figure than Pinterest itself discloses.

How many ads can I get per run?

Up to maxAdsToAnalyze (1–10,000, runtime default 100 if omitted), enforced as a hard cap in the code. The actual count can come back lower than the cap if the selected market and date window simply don't have that many ads — Pinterest's Ads Library only returns what it has indexed, and the Actor doesn't invent additional results to fill the requested number.

How does the targeting breadth score work?

targetingBreadthScore is a count from 0 to 5 of how many targeting dimensions (age, gender, interest, country, region) an advertiser set on that specific ad, computed from the same flattened targeting* fields in the output. A score of 0 means the ad had no disclosed targeting narrowing on any of those five dimensions; 5 means all of them were used.

Does Pinterest Ads Scraper — Performance Analytics work with Claude, ChatGPT, and AI agent frameworks?

There is no dedicated MCP server for this Actor. It is a standard Apify Actor reachable over HTTP via the Apify API or apify-client, so any agent framework that can call an HTTP endpoint and read back JSON — including custom tools built for Claude or ChatGPT — can trigger a run and consume the resulting dataset.

How is this different from browsing Pinterest's Ads Library manually?

The Ads Library web UI shows one ad at a time with its raw disclosed fields and no way to bulk-export or compute derived numbers. This Actor discovers ads by market and date window, fetches every ad's full detail record, and computes reachMidpoint, targetingBreadthScore, adDurationDays and engagementRate automatically, delivering a structured dataset instead of a page you'd otherwise have to click through and transcribe by hand.

Can I use this without a Pinterest developer account or API key?

Yes. Pinterest's Ads Transparency Library is publicly accessible with no login, so the Actor needs no Pinterest credentials at all — only an Apify account to run it and, optionally, an Apify Proxy configuration if you hit access issues.

Conclusion

Pinterest Ads Scraper — Performance Analytics turns Pinterest's public Ads Transparency Library into a structured dataset with the analytics — reach midpoint, targeting breadth score, ad duration and engagement rate — already computed, instead of a raw JSON blob you'd otherwise have to parse by hand. It's built for media buyers, agencies and competitive-intelligence teams who need repeatable pulls across markets and date windows rather than a one-off manual lookup. Set a market and a date range, and every ad lands in your dataset in real time as it's collected. Start a run from the Apify Console or the API to get your first dataset.