Pinterest Ad Library Scraper — Ad Search & Export avatar

Pinterest Ad Library Scraper — Ad Search & Export

Pricing

Pay per event

Go to Apify Store
Pinterest Ad Library Scraper — Ad Search & Export

Pinterest Ad Library Scraper — Ad Search & Export

Export ad records from Pinterest's public Ads Repository — pin id, title, image, date range, countries, genders, age buckets, and EU reach. Filter by country, date window, advertiser name, gender, and ad vertical. Covers EU27, Brazil, and Turkey. Deduplicated rows, no login required.

Pricing

Pay per event

Rating

0.0

(0)

Developer

DevilScrapes

DevilScrapes

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

13 hours ago

Last modified

Share


Quick answer: The Pinterest Ad Library Scraper searches Pinterest's public Ads Repository by country and date range and returns every matching ad as structured, deduplicated data — pin id, title, creative image, delivery date window, targeted countries/genders/age buckets, and EU reach count. No Pinterest developer account or API key is required. Pricing is pay-per-result — $3.20 per 1 000 ads landed, no subscription, no card required to try it. Coverage is EU27, Brazil, and Turkey — this is not a global or US ad library.

🎯 What this scrapes

Pinterest's Ads Repository is its public transparency registry for ads running across the EU, Brazil, and Turkey. This Actor searches it by country and date window — optionally narrowed by advertiser name, gender, or ad vertical — and walks Pinterest's own pagination cursor to pull every matching ad.

Per ad you get:

FieldTypeNotes
pin_idstringPinterest's stable id for this pin — our dedup key
titlestringPin title
image_linkstringCreative image URL
start_date / end_datestringAd delivery window, YYYY-MM-DD
countriesarrayCountries this ad ran in, as Pinterest's own full names (e.g. "Germany", not "DE")
gendersarrayGender targeting buckets reported
age_bucketsarrayAge targeting buckets reported
user_count_eustringReported EU reach as a bucketed range, e.g. "0 - 10000"
query_countrystringThe country your search used
advertiser_namestringEcho of your filter, when set
scraped_atstringISO-8601 UTC timestamp

🔥 What we handle for you

  • 🛡️ We rotate browser fingerprints (curl-cffi impersonation — Chrome and Firefox) on every page, even though this endpoint's limiter is request-based, not fingerprint-based — a cheap hedge against Pinterest tightening that later.
  • 🧱 We back off when Pinterest rate-limits. Its Ads Repository allows roughly 20 pages before a sliding-window 429 — we pause 45 seconds and resume from the exact same pagination cursor, never losing your place or failing the run.
  • 🧊 We deduplicate every row. Pinterest repeats close to a third of records across pages; we track unique pin ids incrementally so your dataset count is always the true number of unique ads, never pages × page size.
  • 🔁 We retry with exponential backoff on server errors and network hiccups, honoring Retry-After — up to 5 attempts per page.
  • 💰 You pay only for results that land. No data → no charge (only the small actor-start warm-up fee).

💡 Use cases

  • Competitor ad monitoring — track what a competitor brand is currently running on Pinterest in your target EU/BR/TR market.
  • Ad creative research — pull dozens to hundreds of live pin titles and images for a market/date window to inform your own creative testing.
  • Brand protection — search your own brand name via advertiser_name to spot unauthorized advertisers.
  • Market research — gauge Pinterest ad activity for a vertical across the EU, Brazil, and Turkey.
  • Agency reporting — export a client's (or a competitor's) live Pinterest ad set straight to a spreadsheet.
  • AI / RAG ingestion — feed titles and creative image URLs into a vector store for creative-trend analysis.

⚙️ How to use it

  1. Click "Try for free" at the top of the page.
  2. Set a start date (YYYY-MM-DD) — required. This is the beginning of the delivery window you want to search.
  3. Set a country — required, ISO-3166 alpha-2 (e.g. DE, FR, BR). The Ads Repository only covers EU27, Brazil, and Turkey.
  4. (Optional) Narrow the search with an end date, advertiser name, gender, or ad vertical.
  5. Run. Each unique ad is one row in the dataset; export to JSON, CSV, or Excel from the Storage tab.

The first run on a new account uses $5 of free Apify credit — that's roughly 1 500 ads at our pricing.

📥 Input

The schema lives in .actor/input_schema.json. The fields:

FieldTypeRequiredDefaultNotes
start_datestringyesYYYY-MM-DD, repository window start
countrystringyesISO-3166 alpha-2 (e.g. DE); uppercased automatically
end_datestringnonullYYYY-MM-DD, repository window end
advertiser_namestringnonullFree-text advertiser filter, no autocomplete
genderstringnonullOptional passthrough filter
ad_verticalstringnonullOptional passthrough filter
maxResultsintegerno500Cap on unique deduplicated rows
maxPagesintegerno20Soft ceiling on pagination round-trips (never a hard-fail)
proxyConfigurationproxy confignono proxyThis endpoint returns 200 with zero proxy by default

start_date and country are both required — the Actor fails fast if either is missing, before any network call or charge.

Proxy defaults to none, on purpose. Pinterest's Ads Repository answers with a plain 200 with zero proxy involved, so we don't force a residential tier you'd pay for and not need. If you opt into Apify Proxy anyway, we pin the exit country to your country input — a floating exit could otherwise return a plausible-looking result set for the wrong market.

Example input

{
"start_date": "2026-08-01",
"country": "DE",
"maxResults": 100,
"maxPages": 5,
"proxyConfiguration": { "useApifyProxy": false }
}

📤 Output

Every row is one unique ad. Example:

{
"pin_id": "1074427839201234567",
"title": "Summer sale — 30% off sneakers",
"image_link": "https://i.pinimg.com/originals/ab/cd/ef/example.jpg",
"start_date": "2026-08-01",
"end_date": "2026-08-31",
"countries": ["Germany", "France", "Brazil"],
"genders": ["FEMALE", "MALE"],
"age_buckets": ["25-34", "35-44"],
"user_count_eu": "100000 - 500000",
"query_country": "DE",
"advertiser_name": null,
"scraped_at": "2026-09-13T10:15:00+00:00"
}

Export options once the run finishes:

  • JSON — full payload
  • CSV / Excel — for analyst spreadsheets
  • JSONL — line-delimited, easy to stream into a warehouse
  • API — fetch programmatically via GET /v2/datasets/{id}/items; webhook on ACTOR.RUN.SUCCEEDED for live pipelines

💰 Pricing

Pay-per-event. You pay for what you get, nothing for what you ask for:

EventPriceWhen charged
actor-start$0.20Base fee, once per run (warm-up, input validation)
ad-result$0.003Per unique pin_id written to the dataset

Examples:

PullCost
100 ads$0.50
1 000 ads$3.20
10 000 ads$30.20

🚧 Limitations

  • Coverage is EU27, Brazil, and Turkey — not global or US. Pinterest's own Ads Repository doesn't publish for other markets, so we don't fabricate results for them. If you need US Pinterest ad data, this Actor isn't the right tool.
  • ~33% of raw records repeat across pages. We absorb this with incremental dedup, so your dataset's row count is always the true unique count — but it means the source itself isn't clean, and a maxPages sized too small can undercount if the overlap lands unevenly.
  • The rate-limit window means a large maxPages run can take longer than maxPages × 5s. If Pinterest rate-limits mid-run, we pause 45 seconds and resume — the run still finishes, just not on the fastest possible clock.
  • No advertiser-name autocomplete. advertiser_name is a free-text filter with no validation against Pinterest's own advertiser list — the lookup endpoint that would provide that requires Pinterest authentication we don't have and don't attempt to bypass.
  • No public per-ad URL. Unlike some other ad libraries, Pinterest's Ads Repository doesn't expose a deep link back to a public page for each ad, so we don't invent one.

❓ FAQ

Is this legal?

Yes. Pinterest's Ads Repository is a public transparency registry Pinterest operates for EU DSA and related regulatory requirements. We search only what the public endpoint exposes, at a paced rate, with no login wall or paywall involved.

Do I need a Pinterest developer account or API key?

No. This Actor works entirely against the public Ads Repository endpoint — no app registration, no OAuth, no access token.

Why does my result count sometimes look lower than expected?

Two reasons: your maxPages/maxResults caps, and the ~33% cross-page duplicate rate the endpoint itself produces, which we dedupe out rather than count twice.

Can I search a specific advertiser?

Yes — set advertiser_name to a free-text value. There's no autocomplete against Pinterest's own advertiser list (that lookup requires Pinterest authentication), so match it as closely as you can to how the brand appears on Pinterest.

How do I schedule this to run automatically?

Apify Console → Schedules → attach this Actor → set your cron. Weekly is plenty; ad libraries don't turn over fast enough to need more.

What integrations does this Actor support?

  • Schedule — Apify Console → Schedules for recurring monitoring.
  • Webhooks — register ACTOR.RUN.SUCCEEDED to fire a downstream pipeline.
  • APIPOST /v2/acts/DevilScrapes~pinterest-ad-library-scraper/run-sync-get-dataset-items for a single synchronous pull.
  • Make / Zapier — every Apify Actor surfaces as a node out of the box.

💬 Your feedback

Spotted a bug, missing field, or want a new feature? Open an issue on the Apify Store listing — we read every one.

Built by Devil Scrapes — Apify Actors with attitude. PPE, transparent pricing, no junk fields.