Pinterest Ads Scraper & Multi-Country Ad Coverage
Pricing
from $4.99 / 1,000 results
Pinterest Ads Scraper & Multi-Country Ad Coverage
๐ Pinterest Ads Scraper pulls ads at scale โ creatives, titles, descriptions, advertiser, landing URLs, dates & metrics โ straight from Pinterest. ๐ Ideal for competitor research, trend tracking & creative benchmarking. โ๏ธ Export CSV/JSON, schedule runs, API-ready. ๐
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
API Empire
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Pinterest Ads Scraper โ Extract Creative, Targeting & Reach Data
Pinterest Ads Scraper & Multi-Country Ad Coverage pulls ad creative, advertiser, targeting, and reach data directly from Pinterest's public Ads Library โ across one market or up to 30 markets in a single run. Every ad comes back as a flat, typed JSON row: image or video URL, advertiser name, age/gender/interest targeting, Pinterest's disclosed reach range, and the exact country it was collected from โ no HTML, no CSS selectors, no manual parsing required. Pick a date window and one or more markets, and start comparing how brands advertise on Pinterest across borders.
๐ What is Pinterest Ads Scraper & Multi-Country Ad Coverage?
This is a Pinterest Ads Library scraper: it queries Pinterest's public Ads Transparency endpoint for a date range, resolves every discovered ad's full creative and targeting record, and โ this variant's own feature โ repeats that same query across every country you select, tagging each returned ad with the exact market it came from. No Pinterest account or login is required; the Actor talks directly to Pinterest's public ad-library endpoints with a standard browser user agent.
- ๐ผ๏ธ Scrape ad creative โ image/video URLs, titles, and video/shopping format flags
- ๐ Scrape across up to 30 supported markets in one run, each row tagged with its source country
- ๐ฏ Scrape targeting data โ age, gender, interest, and geographic targeting Pinterest discloses
- ๐ Scrape reach data โ Pinterest's disclosed reach range plus a derived numeric midpoint
- ๐ค Export results as JSON or CSV directly from the Apify dataset
๐ What data does Pinterest Ads Scraper & Multi-Country Ad Coverage collect?
Every run returns one flattened row per ad, covering four categories of data pulled straight out of Pinterest's Ads Library response:
| Data Type | Key Fields | JSON Field Names |
|---|---|---|
| Ad creative | image/video URL, ad title, video/shopping flags | ad_image_url, ad_video_url, ad_title, is_video_ad, is_shopping_ad |
| Advertiser & market data | advertiser name(s), source market | advertiser_name, advertiser_names, result_country, result_country_name |
| Targeting data | age/gender/interest, geography, keyword use | age_buckets, genders, interests, targeting_countries, regions, keywords_used, negative_keywords_used |
| Reach & flight data | disclosed reach range, ad's own active dates | user_count_by_country, user_count_eu, user_count_eu_midpoint, ad_flight_start_date, ad_flight_end_date |
Need more Pinterest data?
If you also need Pinterest content beyond ads, API-Empire publishes Pinterest Boards Scraper By Keyword Search for board discovery and Pinterest Profile Scraper & Board List for profile and board data โ both cover the organic side of Pinterest that this ads-focused Actor doesn't touch.
Why not build this yourself?
Pinterest does not publish an official public API for its Ads Library / Ads Transparency data โ the Pinterest API (v5) covers managing your own ad campaigns, not looking up other advertisers' public ads (checked on developers.pinterest.com, 2026-08-04). Building this yourself means reverse-engineering Pinterest's internal ad-library endpoints, handling pagination bookmarks, retrying on transient failures, and re-verifying which countries the endpoint actually accepts whenever Pinterest changes it โ the market list for this Actor was itself corrected from a live API validation error. That is ongoing maintenance work with no upstream documentation to rely on, which is the burden this Actor absorbs instead of you.
Why do developers and teams scrape Pinterest ads?
For marketers and brand teams
Track a competitor's Pinterest ad activity in the exact markets you compete in โ creative format (video vs. static), whether an ad is flagged as a shopping ad, and which age/gender/interest segments it's targeting. Running the same date window across countries: ["FR", "DE", "BR"] in one job surfaces whether a brand runs the same creative everywhere or localizes by market, without re-running a single-country tool three times.
For researchers and analysts
Ads Library data is Pinterest's own disclosed transparency data, not scraped from private accounts โ every field returned (age_buckets, interests, user_count_eu) is information Pinterest itself chose to publish. That makes it usable for academic or market research into political/commercial ad targeting patterns across the 30 supported markets, with result_country letting you group findings by jurisdiction.
For AI engineers and agent builders
Feed ad_title, ad_image_url, and the targeting fields into a RAG index or agent tool to answer questions like "which advertisers in Germany ran video ads targeting 25โ34-year-olds last quarter." Because every field is a stable, typed JSON key rather than HTML, it drops straight into an embedding pipeline or an LLM prompt with no scraping/parsing step in the agent loop.
For developers building data products
Build a scheduled cross-market ad-monitoring dashboard on top of this Actor's dataset output โ the per-row result_country and scraped_at fields make it straightforward to diff snapshots over time and alert on new advertisers entering a market.
How to scrape Pinterest ads (step by step)
- Open the Actor's page on the Apify Store and click Try for free (or Run) to open the input form in the Apify Console.
- Provide the required
start_dateandend_date(YYYY-MM-DD) โ these apply to every market you select. - Set one or more markets in the
countrieslist (or the legacycountryfield for a single market), and optionally lowerresultsLimitper country. - Start the run. Rows are pushed to the dataset in real time as each ad is resolved โ you don't have to wait for the whole run to finish to see results.
- Download results as JSON or CSV from the Dataset tab, or pull them programmatically via the Apify API/client.
What to do when Pinterest changes its structure
This Actor is maintained against Pinterest's live Ads Library endpoint, and its output schema is designed to stay stable โ field names and types don't change on your end even if the underlying request logic needs updating. No specific turnaround time is promised for fixes.
โฌ๏ธ Input
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
start_date | Yes | string | First day of the period (YYYY-MM-DD), applied to every selected country. Pinterest's Ads Library has a real reporting delay โ very recent windows frequently return 0 ads even for large advertisers. | "2024-06-01" |
end_date | Yes | string | Last day of the period (YYYY-MM-DD), applied to every selected country. | "2024-06-30" |
resultsLimit | No | integer | Maximum number of ads to fetch per country (1โ10,000, default 100). With 3 countries selected and this set to 100, up to 300 ads total can be collected. | 100 |
countries | No | array | Pick one or more markets to scan (2-letter codes). Overrides the legacy country field when non-empty. Enum: 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, TR. | ["FR", "DE", "BR"] |
country | No | string | Legacy single-country field kept for backward compatibility with the original single-country actor. Ignored whenever countries is non-empty. Accepts a country name or 2-letter code. Default "". | "France" |
proxyConfiguration | No | object | Apify Proxy configuration. Enable if you experience access issues โ most users can leave this disabled. | {"useApifyProxy": false} |
At least one of countries or country must resolve to a supported market, or the run exits with an error before making any request.
Example input
{"start_date": "2024-06-01","end_date": "2024-06-30","countries": ["FR", "DE", "BR"],"resultsLimit": 100,"proxyConfiguration": { "useApifyProxy": false }}
Common pitfall: resultsLimit applies per country, not to the total run โ selecting 5 countries with resultsLimit: 100 can return up to 500 rows, not 100. And a very recent end_date frequently returns 0 ads because of Pinterest's own reporting delay; the input's default dates ship as a window with confirmed live data.
โฌ๏ธ Output
Results are typed, normalized JSON โ one row per ad, pushed to the dataset in real time as each ad is resolved. Export as JSON, CSV, Excel, or any other format the Apify dataset export supports.
Scraped ad
{"pin_id": "987654321098765432","result_country": "FR","result_country_name": "France","advertiser_name": "Acme Home Goods","advertiser_names": ["Acme Home Goods"],"ad_title": "Cozy Fall Decor Ideas","ad_details_text": null,"ad_image_url": "https://i.pinimg.com/originals/aa/bb/cc/example.jpg","ad_video_url": null,"is_video_ad": false,"is_shopping_ad": null,"age_buckets": ["25-34", "35-44"],"genders": ["female"],"interests": ["home decor", "interior design"],"targeting_countries": ["FR"],"regions": null,"user_count_by_country": { "FR": "10000 - 50000" },"user_count_eu": "10000 - 50000","user_count_eu_midpoint": 30000,"keywords_used": true,"negative_keywords_used": false,"ad_flight_start_date": "2024-06-03","ad_flight_end_date": "2024-06-28","ad_url": "https://ads.pinterest.com/ads-repository/987654321098765432/","scraped_at": "2026-08-04T10:15:32.123456+00:00","ad_details": { "...": "full raw ad record from Pinterest's response, kept alongside the flattened fields above" }}
is_shopping_ad ships null โ not a fabricated false โ whenever Pinterest's response for that ad doesn't include shopping metadata, which is the common case on this data surface. ad_details is the full raw record Pinterest returned, kept in every row alongside the flattened, named columns above.
How does Pinterest Ads Scraper & Multi-Country Ad Coverage compare to other Pinterest ad scrapers?
| Feature | This Actor | Generic single-country Pinterest ad scraper |
|---|---|---|
| Multi-market coverage in one run | โ up to 30 markets, each row tagged with its source country | โ typically one country per run |
| Output shape | โ flattened, named columns plus the raw record kept for reference | Often a single opaque nested JSON blob |
| Missing-field handling | โ
ships null instead of fabricating a value (e.g. is_shopping_ad) | Varies by maintainer |
| Creative-format flags | โ
is_video_ad / is_shopping_ad on every row | Not always exposed |
| Real-time dataset writes | โ rows appear as each ad is resolved | Varies by maintainer |
If you're building an AI agent or RAG pipeline, the output-shape row is the decision-maker โ parsing a single raw JSON blob inside an agent loop is a reliability failure mode, not a feature.
How many results can you scrape with Pinterest Ads Scraper & Multi-Country Ad Coverage?
resultsLimit caps collection at 1โ10,000 ads per selected country (schema default 100); there is no additional hard cap in the Actor's own code beyond that schema maximum. Discovery pages through Pinterest's ad-library bookmark cursor in batches of 24 until either the limit is reached or Pinterest stops returning a bookmark (meaning that market has no more ads for the date window). Selecting more countries multiplies the total: 5 countries at the default 100 can return up to 500 rows in one run. The real ceiling on any given run is usually how many ads Pinterest's own Ads Library actually has for that market and date range, not the Actor's limit.
Integrate Pinterest Ads Scraper & Multi-Country Ad Coverage and automate your workflow
Pinterest Ads Scraper & Multi-Country Ad Coverage works with any language or tool that can send an HTTP request, through the Apify API.
REST API integration
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run_input = {"start_date": "2024-06-01","end_date": "2024-06-30","countries": ["FR", "DE", "BR"],"resultsLimit": 100,}run = client.actor("<YOUR_USERNAME>/pinterest-ads-scraper-and-multi-country-ad-coverage").call(run_input=run_input)for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["result_country"], item["advertiser_name"], item["ad_title"])
Works in Python, Node.js, Go, Ruby, cURL.
MCP for AI agents
This Actor is callable through Apify's own MCP server (checked at docs.apify.com/platform/integrations/mcp, 2026-08-04): run npx @apify/actors-mcp-server locally with an APIFY_TOKEN, or connect an MCP-compatible client (Claude, Cursor, and others) directly to the hosted endpoint at https://mcp.apify.com, then call this Actor by its store ID like any other tool.
Automation platforms (n8n, Make, LangChain)
Apify's official n8n community node (@apify/n8n-nodes-apify) exposes Run Actor / Get Dataset Items operations you can point at this Actor's ID inside an n8n workflow. Make.com's native Apify module lets you trigger a run and read the resulting dataset without hand-building HTTP requests. For Python agent pipelines, the langchain-apify package's ApifyWrapper.call_actor runs this Actor and hands back a dataset loader you can feed straight into a LangChain chain or agent (all checked on docs.apify.com, 2026-08-04).
Is it legal to scrape Pinterest ads?
Yes โ this Actor only collects data Pinterest itself already discloses publicly through its Ads Library, the same records anyone can browse on ads.pinterest.com without logging in. The data returned here โ advertiser names, ad creative, and Pinterest's own aggregated targeting/reach ranges โ is business and marketing data, not personal data about identifiable private individuals, so this falls under Pinterest's Terms of Service and ordinary database/content-use considerations rather than GDPR or CCPA, which govern personal data. Consult legal counsel for commercial use cases involving bulk data collection.
Frequently asked questions
Does Pinterest Ads Scraper & Multi-Country Ad Coverage work without a Pinterest account?
Yes. No Pinterest login or account is required โ the Actor queries Pinterest's public Ads Library endpoint directly with a standard browser user agent.
How often is the scraped data updated?
Every run performs a live fetch against Pinterest's current Ads Library response for the date window and countries you specify โ it is not served from a cache. Note that Pinterest's own Ads Library has a reporting delay, so very recent date windows can genuinely return 0 ads even for active advertisers.
What happens if a country returns no ads for my date range?
The run logs a warning and moves on to the next selected country rather than failing the whole run. Try an earlier date window (the input's own defaults ship with a window confirmed to have live data) or a different market.
Can I scrape ads outside the supported markets, like the US or UK?
No. Only the 30 markets Pinterest's own Ads Library API actually supports are listed in the countries enum. The US and UK are intentionally excluded โ Pinterest's endpoint rejects both with a validation error, confirmed live against the real API.
Do I need a proxy to run this Actor?
No โ proxyConfiguration is optional and most users can leave it disabled. Enable Apify Proxy only if you experience access issues; if the proxy fails to initialize, the run logs a warning and continues without it.
Does Pinterest Ads Scraper & Multi-Country Ad Coverage work for AI agent workflows and LLM pipelines?
Yes. It's callable as an HTTP endpoint via the Apify API from any agent framework, or through Apify's MCP server for MCP-compatible clients. Every response is typed JSON with stable field names โ no HTML or selectors to parse before passing results to an LLM.
How does it handle Pinterest's anti-bot defenses?
The Actor sends browser-matching request headers, retries transient failures up to 3 times with increasing delay, and short-circuits immediately (no wasted retries) when Pinterest returns a deterministic rejection such as an unsupported country. Requests run with limited concurrency (5 concurrent requests) and in small batches with a short pause between batches, rather than firing every request at once. Apify Proxy is available but optional.
How does it compare to other Pinterest ad scrapers?
It's built to return every ad as flattened, named columns rather than one raw nested blob, to run the same query across up to 30 markets in a single job instead of one country per run, and to ship null rather than a fabricated value for fields Pinterest's response doesn't actually contain (like is_shopping_ad) โ see the comparison table above for specifics.
Does it return data in a format LLMs can use directly?
Yes. Every field is a typed, normalized JSON key with a stable name โ no HTML, no selectors, no parsing step. Pass rows directly into an LLM context window, index them into a vector store, or route them through an agent tool.
Can I use it without managing proxies?
Yes. The Actor runs directly against Pinterest's public endpoint by default; proxy configuration is available but not required for most runs.
What happens if Pinterest changes its ad-library structure or blocks the scraper?
The Actor is maintained against Pinterest's live endpoint, and the output schema is designed to stay stable on your end โ field names and types don't change even when the underlying request logic needs an update. No specific turnaround time is promised.
๐ฌ Your feedback
Found a bug, or a field Pinterest's Ads Library exposes that this Actor doesn't capture yet? Open an issue or message support through the Actor's page on the Apify Store โ reports like this directly shape what gets fixed and added next.