Pinterest Boards Scraper By Keyword Search avatar

Pinterest Boards Scraper By Keyword Search

Pricing

from $4.99 / 1,000 results

Go to Apify Store
Pinterest Boards Scraper By Keyword Search

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

API Empire

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

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.

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 TypeKey FieldsJSON Field Names
Boardsname, pin count, sections, collaborators, owner audienceboardName, pinCount, sectionCount, collaboratorCount, owner.followerCount
Pins (incl. video pins)title, image/video, aggregated saves, board, outbound linktitle, imageUrl, videos, savesCount, boardName, link
Profilesusername, followers, pin/board counts, verificationusername, 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).

FeaturePinterest API v5Pinterest Boards Scraper By Keyword Search
Access modelOAuth 2.0 app + Pinterest app reviewRuns directly on Apify, no Pinterest developer account
Scope of accessible dataThe developer's own connected account's boards/pinsAny public board, profile, pin or video pin discoverable by keyword or URL
Keyword search across other users' contentNot documented as a public endpointNative โ€” four search scopes (boards, profiles, pins, videos)
Required scopesboards:read, pins:read, user_accounts:read and similar, per endpointNone โ€” logged-out public endpoints
Board โ†’ pin expansion in one callNot applicable (account-scoped)Built in via expandBoardsToPins
Setup timeDeveloper account, app creation, OAuth flow, reviewProvide 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)

  1. 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).
  2. Provide input โ€” enter at least one keyword under searchQueries or one URL under urls; the run fails with an explicit error if both are left empty.
  3. Set the scope โ€” pick searchType (boards, profiles, pins or videos) and, if you want the pins inside discovered boards too, turn on expandBoardsToPins.
  4. Start the run from the Apify Console, the API, or a schedule.
  5. 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.

ParameterRequiredTypeDescriptionExample Value
searchQueriesNoarrayTopics 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"]
searchTypeNostring (enum: boards, profiles, pins, videos; default boards)Which Pinterest search surface to read."boards"
maxItemsPerQueryNointeger (1โ€“500, default 50)Results taken from each keyword before moving on. Separate from maxItems, which governs URL targets.50
resultOrderNostring (enum: relevance, audienceSize, librarySize, newest; default relevance)Re-orders each keyword's results before the per-query cap is applied."relevance"
expandBoardsToPinsNoboolean (default false)After each board row, walk that board's feed and emit its pins too. Only applies when searchType is boards.true
maxBoardsToExpandNointeger (0โ€“500, default 10)Ceiling on how many discovered boards get expanded per run. 0 = every discovered board.5
maxPinsPerDiscoveredBoardNointeger (1โ€“5000, default 20)Pins taken from each expanded board.20
enrichDiscoveredBoardsNoboolean (default false)Spend one extra request per discovered board to fill followerCount and createdAt, which the search surface never sends.true
maxBoardEnrichmentsNointeger (0โ€“5000, default 50)Ceiling on enrichment requests per run. 0 = no ceiling.50
urlsNoarrayBoard URLs, profile URLs/usernames, or pin URLs/pin IDs โ€” one per line. Scraped before any keyword.["https://www.pinterest.com/homefinds/amazon-home-finds/"]
maxItemsNointeger (1โ€“5000, default 10)Maximum pins returned per URL target. Does not apply to keyword results.10
fetchLinkDetailsNoboolean (default true)Fill link / externalLink / domain with each pin's outbound destination.true
fetchPinDetailsNoboolean (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
maxPinDetailFetchesNointeger (0โ€“5000, default 50)Ceiling on closeup requests per run. 0 = no ceiling.50
includeBoardSectionsNoboolean (default false)Stamp sectionId / sectionTitle / sectionSlug onto pins that sit inside a board section.false
proxyConfigurationNoobject (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?

FeatureThis ActorGeneric pin-only alternative
Entity coverageBoards, 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 handlingMissing counts are null, never a fabricated 0Varies by implementation
Uncharged error rowsโœ… failed targets logged without being billedVaries 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.

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 ApifyClient
client = 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.

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.