Pinterest Ads Library Scraper avatar

Pinterest Ads Library Scraper

Pricing

from $2.99 / 1,000 ads

Go to Apify Store
Pinterest Ads Library Scraper

Pinterest Ads Library Scraper

Scrape ad campaigns from the Pinterest Ads Library by keyword or advertiser ID and country, including advertiser names, ad titles, media URLs, status, and targeting country.

Pricing

from $2.99 / 1,000 ads

Rating

0.0

(0)

Developer

w3crawler

w3crawler

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Pinterest Ads Library Scraper

Collect structured, public advertisement-transparency records from Pinterest's official Ads Repository. The Actor uses the public repository page and its public resource endpoints; it does not log in, bypass access controls, solve CAPTCHAs, or accept Pinterest credentials.

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

What it returns

Normal rows use entityType: "pinterest_ad" and contain the public ad or Pin ID, canonical Pin URL, advertiser identity when available, creative text and media, destination URL and domain, campaign dates, audience targeting, reach ranges, transparency flags, the requested filters, and source position. Optional fields are omitted when Pinterest does not publish them. Rows are deduplicated by Pin ID.

If Pinterest returns no usable rows or access is blocked, the Actor emits one diagnostic row with exactly url, error, errorCode, and scrapedAt. The diagnostic is not ad data. The OUTPUT_SUMMARY key-value record contains run status, counts, filters, pagination, detail-request, and completion information.

Input

FieldTypeDefaultDescription
advertiserNamestringnoneOptional public advertiser-name filter, such as Nike.
countrystringFRSupported repository country code.
startDateYYYY-MM-DDfive days agoStart of the date window forwarded to Pinterest's Ads Repository API.
endDateYYYY-MM-DDrun dateEnd of the date window forwarded to Pinterest's Ads Repository API; the range may be at most 30 days.
verticalstringnoneOptional Ads Repository category/vertical, such as BEAUTY.
genderenumnoneFEMALE, MALE, or UNSPECIFIED.
ageBucketenumnonePinterest API value such as AGE_18_24.
maxItemsinteger10Maximum normal ad rows, from 1 to 50.
maxPagesinteger3Maximum bookmark pages, from 1 to 10.
includePinDetailsbooleantrueEnrich rows with public Pin media, attribution, and destination data when available.
maxDetailItemsinteger10Maximum Pin-detail requests, from 0 to 50.
requestDelayMsinteger250Delay before each page after the first, from 0 to 10000 ms.
maxConcurrencyinteger1Bounded crawler concurrency, from 1 to 2.
maxRequestRetriesinteger1Bounded navigation retries, from 0 to 3.
requestTimeoutSecsinteger60Navigation/handler timeout, from 10 to 180 seconds.
proxyConfigurationobjectdirectOptional Apify or custom proxy configuration. Credentials are not written to output.

The runtime also accepts legacy query as an alias for advertiserName and category as an alias for vertical; supplying both names in either pair is rejected. Pinterest's currently exposed country filters are AT, BE, BR, BG, HR, CY, CZ, DK, EE, FI, FR, DE, GR, HU, IE, IT, LV, LT, LU, MT, NL, NO, PL, PT, RO, SK, SI, ES, SE, and TR.

Example input

{
"advertiserName": "Nike",
"country": "FR",
"startDate": "2026-09-02",
"endDate": "2026-09-07",
"maxItems": 10,
"maxPages": 3,
"includePinDetails": true,
"proxyConfiguration": { "useApifyProxy": false }
}

Output example

Values depend on the public repository at run time. A normal row has this shape:

{
"entityType": "pinterest_ad",
"adId": "4602397446275423616",
"pinId": "4602397446275423616",
"pinUrl": "https://www.pinterest.com/pin/4602397446275423616/",
"advertiserName": "Example advertiser",
"adTitle": "Example campaign",
"destinationUrl": "https://example.com/offer",
"imageUrl": "https://i.pinimg.com/474x/example.jpg",
"mediaType": "image",
"countries": ["France"],
"contentCommercial": true,
"searchUrl": "https://ads.pinterest.com/ads-repository/?country=FR",
"pageNumber": 1,
"itemPosition": 1,
"scrapedAt": "2026-09-07T12:00:00.000Z"
}

Running locally

npm install
apify run --purge --input-file qa-inputs/pinterest-ads-library-scraper/local-primary.json
npm test
npm run validate

The scraper follows the Ads Repository's bookmark pagination up to maxPages and stops at maxItems. Direct access is the default; enable standard Apify Proxy only when needed for a permitted request. Website availability and published transparency fields can change, so consumers should tolerate absent optional properties and use the data lawfully under Pinterest's terms and applicable regulations.

Date-window semantics

The Actor forwards startDate and endDate unchanged to Pinterest's public Ads Repository API as start_date and end_date, and records the effective values in OUTPUT_SUMMARY.dateFilter and each normal row's requestedStartDate/requestedEndDate. Pinterest's response fields startDate and endDate describe the returned ad's published campaign flight; they are not post-filtered by this Actor and may extend outside the requested API window. The public response does not expose the backend matching dimension, so the Actor does not claim that those campaign dates are a strict subset of the request.