Pinterest Boards Scraper By Keyword Search
Pricing
from $4.99 / 1,000 results
Pinterest Boards Scraper By Keyword Search
Pinterest Boards Scraper helps you extract structured data from public Pinterest boards. Retrieve board info, pins, descriptions, and engagement metrics efficiently. Designed for growth teams, researchers, and data-driven insights.
Pricing
from $4.99 / 1,000 results
Rating
0.0
(0)
Developer
API Empire
Maintained by CommunityActor stats
1
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Pinterest Board Scraper โ Extract Boards, Pins and Profiles as JSON
Pinterest Boards Scraper By Keyword Search turns a topic like cottagecore kitchen or amazon home finds into structured data on the boards, pins and profiles already curating it โ not just another pin grid. Every row is typed, normalized JSON: no HTML, no selectors, no parsing before you use it. Paste a board, profile or pin URL and it still scrapes first, exactly as a direct-URL scraper would. After reading this, you'll know exactly which input fields drive which output rows, and where Pinterest's own search surface stops sending data.
๐๏ธ What is Pinterest Boards Scraper By Keyword Search?
Pinterest Boards Scraper By Keyword Search is an Apify Actor that searches Pinterest's own search surface by keyword and returns the boards, profiles, pins or video pins that match โ no Pinterest account or login required, since every request runs against Pinterest's public, logged-out endpoints. It optionally walks each discovered board into the pins sitting inside it, and it always accepts a pasted board/profile/pin URL as a direct target, searched before any keyword.
- ๐ Scrape Pinterest boards by keyword โ name, pin count, sections, collaborators, owner
- ๐ค Scrape Pinterest profiles by keyword โ username, followers, pin and board counts
- ๐ Scrape the ordinary pin grid or video-pin-only results by keyword
- ๐งฉ Expand any discovered board into its own pins in the same run
- ๐ฆ Export as JSON, CSV, Excel, XML or RSS โ no proxy management, no HTML parsing
๐ What data does Pinterest Boards Scraper By Keyword Search collect?
One run can return three structurally different entity types, selected by searchType or produced automatically by board expansion:
| Data Type | Key Fields | JSON Field Names |
|---|---|---|
| Boards | name, pin count, sections, collaborators, owner audience | boardName, pinCount, sectionCount, collaboratorCount, owner.followerCount |
| Pins (incl. video pins) | title, image/video, aggregated saves, board, outbound link | title, imageUrl, videos, savesCount, boardName, link |
| Profiles | username, followers, pin/board counts, verification | username, followerCount, pinCount, boardCount, isVerifiedMerchant |
Need more Pinterest data?
If you specifically need Pinterest ad creatives and spend estimates rather than organic boards, API-Empire's Pinterest Ads Scraper & Multi-Country Ad Coverage covers that surface. If you already have a username and only want that one account's profile and board list without running a keyword search, Pinterest Profile Scraper & Board List is the narrower tool for that.
๐ How does Pinterest Boards Scraper By Keyword Search differ from the official Pinterest API?
Pinterest's own Pinterest API v5 manages the pins and boards on accounts you control; it does not expose a public, keyword-driven search over other users' public boards, profiles and pins the way this Actor does (checked on developers.pinterest.com, 2026-08-04).
| Feature | Pinterest API v5 | Pinterest Boards Scraper By Keyword Search |
|---|---|---|
| Access model | OAuth 2.0 app + Pinterest app review | Runs directly on Apify, no Pinterest developer account |
| Scope of accessible data | The developer's own connected account's boards/pins | Any public board, profile, pin or video pin discoverable by keyword or URL |
| Keyword search across other users' content | Not documented as a public endpoint | Native โ four search scopes (boards, profiles, pins, videos) |
| Required scopes | boards:read, pins:read, user_accounts:read and similar, per endpoint | None โ logged-out public endpoints |
| Board โ pin expansion in one call | Not applicable (account-scoped) | Built in via expandBoardsToPins |
| Setup time | Developer account, app creation, OAuth flow, review | Provide input and start the run |
Reach for the official API when you are managing pins and boards on an account you already own and need write access. Reach for this Actor when you need read-only, public data about boards, pins or profiles you do not control, discovered by topic.
๐ฏ Why do developers and teams scrape Pinterest?
๐ค For AI engineers and agent builders
Pinterest boards are pre-curated, human-labelled clusters of a topic โ a cheaper signal than scraping the raw pin firehose. An agent can call this Actor with a keyword, get back boardName, pinCount, boardDescription and the pins inside each board via expandBoardsToPins, and index that directly into a vector store for a trend-discovery or product-research tool, with no HTML to strip first.
๐ For marketers and brand teams
resultOrder: audienceSize surfaces which boards or profiles curating a keyword have the biggest owner following, and enrichDiscoveredBoards fills in followerCount and createdAt for those boards so a team can prioritize outreach to established curators over brand-new ones without opening a single board page by hand.
๐ฌ For researchers and analysts
Because every board and profile row is public data returned exactly as Pinterest's search surface sent it โ including nulls where Pinterest sent nothing, never a fabricated zero โ researchers tracking topic trends (home decor, recipe formats, seasonal aesthetics) get a dataset that distinguishes "Pinterest didn't report this" from "the true value is zero," which matters for any count-based analysis.
๐ ๏ธ For developers building data products
The Actor is one Apify API call away from any pipeline: a keyword or URL in, a dataset of typed rows out. matchedQuery and discoverySource on every row make it straightforward to build a scheduled monitor that re-runs a fixed keyword list and diffs board or pin counts over time.
๐ How to scrape Pinterest boards, pins and profiles (step by step)
- Open Pinterest Boards Scraper By Keyword Search on its Apify Store listing and click Try for free (or Run, if you've used it before).
- Provide input โ enter at least one keyword under
searchQueriesor one URL underurls; the run fails with an explicit error if both are left empty. - Set the scope โ pick
searchType(boards,profiles,pinsorvideos) and, if you want the pins inside discovered boards too, turn onexpandBoardsToPins. - Start the run from the Apify Console, the API, or a schedule.
- Download the results as JSON, CSV, Excel, XML or RSS once the run finishes, or read them straight from the dataset via the API.
What to do when Pinterest changes its structure
The Actor is maintained, and the output schema is designed to stay stable โ the same field names carry the same meaning across runs, so a downstream integration built against this README's field list keeps working without changes on your end.
โฌ๏ธ Input
At least one of searchQueries or urls is required; every other field has a default.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
searchQueries | No | array | Topics to search Pinterest for, one per line. Results are de-duplicated across the run โ the first keyword to surface a row owns it, and matchedQuery lists every keyword that surfaced it. | ["amazon home finds", "cottagecore kitchen"] |
searchType | No | string (enum: boards, profiles, pins, videos; default boards) | Which Pinterest search surface to read. | "boards" |
maxItemsPerQuery | No | integer (1โ500, default 50) | Results taken from each keyword before moving on. Separate from maxItems, which governs URL targets. | 50 |
resultOrder | No | string (enum: relevance, audienceSize, librarySize, newest; default relevance) | Re-orders each keyword's results before the per-query cap is applied. | "relevance" |
expandBoardsToPins | No | boolean (default false) | After each board row, walk that board's feed and emit its pins too. Only applies when searchType is boards. | true |
maxBoardsToExpand | No | integer (0โ500, default 10) | Ceiling on how many discovered boards get expanded per run. 0 = every discovered board. | 5 |
maxPinsPerDiscoveredBoard | No | integer (1โ5000, default 20) | Pins taken from each expanded board. | 20 |
enrichDiscoveredBoards | No | boolean (default false) | Spend one extra request per discovered board to fill followerCount and createdAt, which the search surface never sends. | true |
maxBoardEnrichments | No | integer (0โ5000, default 50) | Ceiling on enrichment requests per run. 0 = no ceiling. | 50 |
urls | No | array | Board URLs, profile URLs/usernames, or pin URLs/pin IDs โ one per line. Scraped before any keyword. | ["https://www.pinterest.com/homefinds/amazon-home-finds/"] |
maxItems | No | integer (1โ5000, default 10) | Maximum pins returned per URL target. Does not apply to keyword results. | 10 |
fetchLinkDetails | No | boolean (default true) | Fill link / externalLink / domain with each pin's outbound destination. | true |
fetchPinDetails | No | boolean (default false) | Open each pin's closeup for commentCount, shareCount, pinner follower count, and โ for keyword-found pins โ save counts. Costs one extra request per pin. | false |
maxPinDetailFetches | No | integer (0โ5000, default 50) | Ceiling on closeup requests per run. 0 = no ceiling. | 50 |
includeBoardSections | No | boolean (default false) | Stamp sectionId / sectionTitle / sectionSlug onto pins that sit inside a board section. | false |
proxyConfiguration | No | object (default {"useApifyProxy": false}) | Your own Apify Proxy selection โ groups, country, custom URLs. | {"useApifyProxy": false} |
Example input:
{"searchQueries": ["amazon home finds", "cottagecore kitchen"],"searchType": "boards","maxItemsPerQuery": 50,"resultOrder": "relevance","expandBoardsToPins": true,"maxBoardsToExpand": 5,"maxPinsPerDiscoveredBoard": 20,"enrichDiscoveredBoards": true,"maxBoardEnrichments": 50,"urls": [],"maxItems": 10,"fetchLinkDetails": true,"fetchPinDetails": false,"maxPinDetailFetches": 50,"includeBoardSections": false,"proxyConfiguration": { "useApifyProxy": false }}
โ ๏ธ The most common mistake is leaving both searchQueries and urls empty โ the run raises an error immediately ("Nothing to do") instead of finishing with an empty dataset, so check both fields before starting.
โฌ๏ธ Output
Results are pushed as typed, normalized JSON rows to an Apify dataset, downloadable as JSON, CSV, Excel, XML or RSS. Board, pin and profile rows have different, purpose-built shapes โ a board is not a pin with 15 null columns bolted on โ so filter on type or use the built-in dataset views (Discovered boards, Pins, Discovered profiles, Board enrichment) to see one shape at a time.
Scraped board
{"type": "board","id": "654321098765432109","index": 1,"boardUrl": "https://www.pinterest.com/homefinds/amazon-home-finds/","sourceUrl": "https://www.pinterest.com/search/boards/?q=amazon%20home%20finds","boardName": "Amazon Home Finds","boardDescription": "Budget-friendly home decor and organization finds from Amazon.","pinCount": 341,"sectionCount": 6,"collaboratorCount": 0,"isCollaborative": false,"lastPinnedAt": "2026-07-29T14:12:00Z","followerCount": 95813,"createdAt": "2021-03-18T00:00:00Z","coverImageUrl": "https://i.pinimg.com/236x/aa/bb/cc/aabbcc.jpg","coverImageHdUrl": "https://i.pinimg.com/736x/aa/bb/cc/aabbcc.jpg","thumbnailUrl": "https://i.pinimg.com/60x60/aa/bb/cc/aabbcc.jpg","pinThumbnailUrls": ["https://i.pinimg.com/236x/11/22/33/112233.jpg","https://i.pinimg.com/236x/44/55/66/445566.jpg"],"user": "homefinds","owner": {"id": "998877665544332211","username": "homefinds","fullName": "Home Finds Daily","profileUrl": "https://www.pinterest.com/homefinds/","imageUrl": "https://i.pinimg.com/280x280_RS/aa/bb/cc/aabbcc.jpg","followerCount": 42100,"isVerifiedMerchant": false,"domainVerified": true},"scrapedAt": "2026-08-04T09:00:00Z","discoverySource": "search","matchedQuery": ["amazon home finds"],"searchType": "boards","resultRank": 1}
followerCount and createdAt stay null unless enrichDiscoveredBoards is turned on โ the board search surface itself never sends them.
Scraped pin
{"type": "pin","id": "778899001122334455","index": 1,"pinUrl": "https://www.pinterest.com/pin/778899001122334455/","sourceUrl": "https://www.pinterest.com/homefinds/amazon-home-finds/","title": "Under-Cabinet LED Lighting Strip","gridTitle": "Under-Cabinet LED Lighting Strip","description": "Stick-on LED strip that runs on batteries โ no wiring needed.","altText": "White kitchen cabinet with warm LED strip lighting underneath","visualAnnotations": ["kitchen lighting", "led strip", "cabinet"],"imageUrl": "https://i.pinimg.com/736x/12/34/56/123456.jpg","images": [{ "url": "https://i.pinimg.com/236x/12/34/56/123456.jpg", "width": 236, "height": 354, "quality": "236x", "extension": "jpg" },{ "url": "https://i.pinimg.com/736x/12/34/56/123456.jpg", "width": 736, "height": 1104, "quality": "736x", "extension": "jpg" }],"dominantColor": "#e8dcc8","imageSignature": "3f9a7c1b8e2d4f5a","hasVideo": false,"videoDurationMs": null,"videos": null,"isIdeaPin": false,"isRepin": true,"repins": 1840,"savesCount": 1840,"repinCount": 12,"commentCount": null,"shareCount": null,"date": null,"externalLink": "https://www.amazon.com/dp/B0EXAMPLE","link": "https://www.amazon.com/dp/B0EXAMPLE","domain": "amazon.com","boardName": "Amazon Home Finds","sectionId": null,"sectionTitle": null,"sectionSlug": null,"board": {"id": "654321098765432109","url": "https://www.pinterest.com/homefinds/amazon-home-finds/","privacy": "public","name": "Amazon Home Finds"},"boardInfo": {"boardName": "Amazon Home Finds","boardDescription": "Budget-friendly home decor and organization finds from Amazon.","boardUrl": "https://www.pinterest.com/homefinds/amazon-home-finds/","totalPins": 341,"boardId": "654321098765432109","boardPrivacy": "public","boardFollowerCount": 95813,"boardSectionCount": 6,"boardCollaboratorCount": 0,"boardIsCollaborative": false,"boardCreatedAt": "2021-03-18T00:00:00Z","boardOwnerUsername": "homefinds"},"user": "kitchenfinds22","pinner": {"id": "112233445566778899","fullName": "Kitchen Finds","username": "kitchenfinds22","imageUrl": "https://i.pinimg.com/280x280_RS/11/22/33/112233.jpg","isVerifiedMerchant": false,"followerCount": null},"nativeCreator": null,"scrapedAt": "2026-08-04T09:00:00Z","discoverySource": "boardExpansion","matchedQuery": ["amazon home finds"],"searchType": "boards","resultRank": null}
commentCount, shareCount and date stay null unless fetchPinDetails is on. Pins found directly on the pins/videos search scopes carry no save, repin, comment or share count at all until fetchPinDetails resolves them from the pin closeup.
Scraped profile
{"type": "profile","id": "334455667788990011","index": 1,"profileUrl": "https://www.pinterest.com/cottagecorehome/","sourceUrl": "https://www.pinterest.com/search/users/?q=cottagecore%20kitchen","username": "cottagecorehome","user": "cottagecorehome","fullName": "Cottagecore Home","imageUrl": "https://i.pinimg.com/280x280_RS/22/33/44/223344.jpg","followerCount": 18400,"pinCount": 5230,"boardCount": 47,"isVerifiedMerchant": false,"domainVerified": false,"lastPinSavedAt": "2026-07-30T18:22:00Z","scrapedAt": "2026-08-04T09:00:00Z","discoverySource": "search","matchedQuery": ["cottagecore kitchen"],"searchType": "profiles","resultRank": 3}
A failed target (deleted board, unreachable profile, invalid input) is pushed as an uncharged type: "error" row (sourceUrl, errorReason, errorMessage, scrapedAt) so it stays auditable in the dataset without being billed. Filter it out with item.type !== "error" if you only want billable rows.
โ๏ธ How does Pinterest Boards Scraper By Keyword Search compare to other Pinterest scrapers?
| Feature | This Actor | Generic pin-only alternative |
|---|---|---|
| Entity coverage | Boards, profiles, pins and video pins from one input | โ /โ varies โ most Pinterest scrapers return only the pin grid |
| Board discovery by keyword | โ
native searchType: boards scope | โ typically requires a board URL you already have |
| Board โ pin expansion in one run | โ
expandBoardsToPins | โ usually a separate run |
| Null handling | Missing counts are null, never a fabricated 0 | Varies by implementation |
| Uncharged error rows | โ failed targets logged without being billed | Varies by implementation |
If you're building an AI agent or RAG pipeline, the null-vs-zero handling above is the decision-maker โ a scraper that silently turns "Pinterest sent nothing" into 0 will feed your agent a fabricated data point it has no way to detect.
โ How many results can you scrape with Pinterest Boards Scraper By Keyword Search?
There is no single hard cap in the Actor itself โ the effective ceiling is the sum of the per-input caps you set: up to 500 results per keyword (maxItemsPerQuery), up to 5,000 pins per URL target (maxItems), and, if you expand boards, up to maxBoardsToExpand ร maxPinsPerDiscoveredBoard additional pin rows (default 10 ร 20 = 200). Pagination follows Pinterest's own bookmark cursor: board and profile search always serves 50 rows per page regardless of the page size requested (Pinterest ignores page_size on those two scopes), while the pins and videos scopes honour it up to 250 rows per request. If a keyword's own result pool runs out before its cap is reached, the shortfall is logged by keyword name rather than silently under-delivering. A run that ends with zero rows across every target fails loudly instead of finishing empty.
๐ Integrate Pinterest Boards Scraper By Keyword Search and automate your workflow
Pinterest Boards Scraper By Keyword Search works with any language or tool that can send an HTTP request, since it runs as a standard Apify Actor behind the Apify API.
REST API integration
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run = client.actor("YOUR_USERNAME/pinterest-boards-scraper-by-keyword-search").call(run_input={"searchQueries": ["cottagecore kitchen"],"searchType": "boards","maxItemsPerQuery": 50,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["type"], item.get("boardName") or item.get("title") or item.get("username"))
Works in Python, Node.js, Go, Ruby, cURL.
Automation platforms (n8n, Make, LangChain)
In n8n, the official Apify node's "Run Actor and get dataset" operation can call this Actor by ID and hand the resulting items to the next node in your workflow. In Make, the Apify app's "Run Actor" and "Get Dataset Items" modules do the same inside a scenario. In LangChain, the apify-client-backed ApifyWrapper/ApifyDatasetLoader can run this Actor and load its dataset directly into a document loader or retriever for a RAG pipeline.
โ๏ธ Is it legal to scrape Pinterest boards, pins and profiles?
Scraping publicly accessible Pinterest data is generally lawful; this Actor returns only what Pinterest's own public, logged-out search and board pages already serve โ no login-gated boards, no private profiles, no comment threads (which Pinterest itself blocks on logged-out reply endpoints). Because board, pin and profile rows carry personal identifiers โ usernames, full names, avatar images and follower counts tied to identifiable people โ collecting them at scale falls under data-protection regimes like GDPR and CCPA, which govern how you may store and use personal data even when it was public. Consult legal counsel for commercial use cases involving bulk personal data.
โ Frequently asked questions
Does Pinterest Boards Scraper By Keyword Search work without a Pinterest account?
Yes. Every request goes to Pinterest's public, logged-out /resource/ endpoints โ no Pinterest login, cookie or CSRF token is used or required.
How often is the scraped data updated?
Every run fetches live from Pinterest at the moment it runs; nothing is served from a cache. Two runs of the same keyword can return different result sets, because Pinterest's own search is personalized and undisclosed even to a logged-out client.
What happens if a board, profile or pin no longer exists?
A target that Pinterest reports as not found is pushed as an uncharged type: "error" row with errorReason: "target_not_found" and the original sourceUrl, so you can see exactly which target failed and why without being billed for it. If every target in a run fails or returns nothing, the run itself fails with a non-zero exit instead of finishing green and empty.
Can I scrape private or restricted Pinterest boards and profiles?
No. Only publicly accessible boards, profiles and pins are returned โ the same content anyone could see on Pinterest without logging in. Private boards and login-gated content are outside what the public search and board endpoints expose.
How is Pinterest Boards Scraper By Keyword Search charged?
Every board, pin and profile row is billed as one row_result event. Rows pushed for a failed target (type: "error") use no charged event, so they cost nothing โ filter the dataset on item.type !== "error" if you want to see only billable rows.
Does it work for AI agent workflows and LLM pipelines?
Yes. It is callable as an HTTP endpoint by any agent framework through the Apify API, and every response is typed JSON with stable field names โ no HTML and no parsing step before the data reaches an LLM context window or a vector store.
How does it handle Pinterest's anti-bot system?
It fetches through curl_cffi with Chrome TLS impersonation over Pinterest's public endpoints, retries transport failures โ HTTP 403/429/5xx and "HTTP 200 with an empty body" soft blocks โ up to 3 attempts with a short backoff between tries, and rotates across your configured proxy pool between attempts and between requests if you supply one.
How does it compare to other Pinterest scrapers?
Its default search scope returns the boards curating a topic, not just the pin grid, and it can expand any of those boards into their pins in the same run. Missing counts are always null, never a guessed 0, and failed targets are logged as uncharged rows rather than silently dropped.
Does it return data in a format LLMs can use directly?
Yes. Typed, normalized JSON with stable field names for every row type โ pass it directly into an LLM context window, index it into a vector store, or route it through an agent tool without a parsing step.
Can I use it without managing proxies?
Yes. Pinterest's public search and board endpoints answered every request in testing without a proxy, so the Actor runs direct by default. If your runs start getting blocked, supply your own Apify Proxy configuration via proxyConfiguration and it is honored exactly as configured.
What happens when Pinterest changes its structure or blocks the scraper?
The Actor is maintained, and its output schema is designed to stay stable โ field names and types do not change on your end when Pinterest's internal markup or endpoints shift.
๐ฌ Your feedback
Found a bug, or a field that doesn't match what's documented here? We want to know. Open an issue on this Actor's Issues tab in the Apify Console, or message API-Empire directly through the Console โ either route reaches the team that maintains this Actor.