Pinterest API & Scraper
The Pinterest API returns public Pinterest data — pins, boards, profiles and search — as clean JSON.
🤖 Using an AI assistant? Copy this link into ChatGPT / Claude / Cursor — it reads every endpoint and parameter instantly and tells you if this API fits your use case.
The primary search_pins endpoint returns pins with id, URL, title, description, image, link, domain, repin count, video flag and pinner, and you can also search videos, users and boards, pull a pin and its comments, related pins, a profile and user boards. It is built for content research, trend analysis and social-marketing tools that need public Pinterest data without a login or a scraper. One ReefAPI key, one shared credit pool, the standard envelope.
Pin ids, board slugs, image sizes and which fields only the pin action carries
The two things that catch people out here are that a save count is not on a search row, and that the pin timestamp is not ISO 8601. Everything below came off live calls on 2026-08-27: search_pins for "minimalist home office", pin 99360735500167749, and the nike profile with its boards.
| Thing | Measured shape | Which action returns it |
|---|---|---|
| pin_id | 99360735500167749, the digits in pinterest.com/pin/<id>/ | pin, comments and related_pins all accept pin_id or pin_url |
| board id | 99360804217844427, the same numeric space as pins but a different object | board.id on a full pin row, or user_boards and board |
| board slug | nike-running, the path segment after the username | board and board_pins, combined with username, or pass board_url |
| full-size image | https://i.pinimg.com/originals/a7/66/56/....jpg | pin.image_url and full search_pins rows |
| avatar and board cover | i.pinimg.com/75x75_RS/... and i.pinimg.com/200x150/... | pinner.avatar_url and board.cover_image_url |
| created_at | "Thu, 04 Oct 2012 21:50:37 +0000", RFC 2822 rather than ISO 8601 | pin and full search_pins rows |
| repin_count, comment_count, share_count | 4838, 35 and 23 on pin 99360735500167749 | pin only. Search rows carry none of the three |
| source link | link "http://www.flickr.com/photos/kentbrew/6851755809/" plus domain "flickr.com" | pin, and the search rows that have an outbound link (3 of 11 measured) |
| aggregated_pin_id | 4793404135709870511 | pin only. It groups every save of the same underlying image |
search_pins mixes Pinterest's own interstitial cards into the result list. On a measured "minimalist home office" call with limit 10, eleven rows came back and four of them carried only id, url and is_video, with no image_url, description, board or created_at. Filter on the presence of image_url if you only want real pins, and treat limit as approximate rather than exact.
Real request and response JSON
Captured from the indexed primary action, search_pins, on .
{
"method": "POST",
"url": "https://api.reefapi.com/pinterest/v1/search_pins",
"headers": {
"x-api-key": "$REEF_KEY",
"content-type": "application/json"
},
"body": {
"query": "minimalist home office",
"limit": 10
}
}{
"ok": true,
"meta": {
"api": "pinterest",
"endpoint": "search_pins",
"mode": "live",
"latency_ms": 3197.4,
"record_count": 12,
"bytes": 1077369,
"cache_hit": false,
"method": "internal_resource_json"
},
"data": {
"pins": [
{
"id": "[redacted-phone]",
"url": "https://www.pinterest.com/pin/[redacted-phone]/",
"title": "Explore featured boards",
"is_video": false
},
{
"id": "[redacted-phone]",
"url": "https://www.pinterest.com/pin/[redacted-phone]/",
"is_video": false,
"pinner": {
"username": "pinterestman",
"follower_count": 9095,
"is_verified_merchant": false,
"avatar_url": "https://i.pinimg.com/75x75_RS/1c/b5/61/1cb561c8e7b9c709f78d110a4b5f0863.jpg"
}
},
{
"id": "[redacted-phone]",
"url": "https://www.pinterest.com/pin/[redacted-phone]/",
"is_video": false,
"pinner": {
"username": "homedecor",
"follower_count": 26494,
"is_verified_merchant": false,
"avatar_url": "https://i.pinimg.com/75x75_RS/20/ee/75/20ee75eb55a815f82f1fa6617233d83d.jpg"
}
}
],
"bookmark": "Y2JVSG81V2sxcmNHRlpWM1J5VFVaU2NscEhSbE5XYlhjeVZsZHpNVlV4U25Sa1JGSlhVak5TVkZreWMzZGtNRFZYVm14V1YxSldjRkZXVjNSclZHMVJlRlZzV2xaaVJYQnhWbTEwYzA1R1ZuUmpNMmhWVWpCd01WZFVUbTlXVlRGWVZXdGtZVlpXVlRGV2JGcEhWbFpTZEZKdGJGZGhNVlkwVm10YWIyUXhiRmhTYmtwUFYwWktXVlpyVm5kVU1WcHhVVzFHYWxKc1JqUldWM1IzVkRGS2RHVklhRmROYWtaNlYxWmFZVkpzV25GVWJGWnBVakZLU0ZaR1dsWk5WbHBYVTJ4c2FsSXdXbGhVVm1RelRWWlplRmRzVG1oTmEzQlhWREZhVjFZeVNsaGxSVGxoVmpOU00xbHFSbE5XYkZaelUyczFVMVpGV2pSV2FrWnZZVEZTZEZOc1drOVdlbXhXVkZWYVMyVnNiSE5YYmtwc1ZteGFXbGt3VlRWVWJVcEdWMVJHV0dKWVVsZFVWbHBMWXpGa1dXTkhkR3hoYTBVMVdtdGFWMU5YU2paVmJYaFRWMGRvUmxkc1ZsZGhNV1J6"
}
}What the Pinterest API does
| Action | Description | Concrete use case | Key params |
|---|---|---|---|
| search_pins | Search Pinterest pins by keyword. Returns pin id/title/description/image/link/save-count with the pinner. Paginate with meta.bookmark. | Social-listening tools call search_pins to search Pinterest pins by keyword. | query, limit, bookmark |
| search_videos | Search Pinterest video pins (Idea Pins / video) by keyword. Same shape as search_pins but scoped to video content (image_url + video_url). Paginate with meta.bookmark. | Creator and influencer platforms call search_videos to search Pinterest video pins (Idea Pins / video) by keyword. | query, limit, bookmark |
| search_users | Search Pinterest users/creators by keyword. Returns username/profile stats/avatar. | Brand-monitoring teams call search_users to search Pinterest users/creators by keyword. | query, limit, bookmark |
| search_boards | Search Pinterest boards by keyword. Returns board name/url/description/pin-count/owner. | Audience analysts call search_boards to search Pinterest boards by keyword. | query, limit, bookmark |
| suggestions | Autocomplete / typeahead search suggestions for a partial query — the dropdown Pinterest shows as you type. Great for keyword research. | Social-listening tools call suggestions to get autocomplete / typeahead search suggestions for a partial query. | query |
| pin | Full detail for one pin: title, description, image, video, outbound link/domain, save & comment & share counts, reactions, hashtags, board, dominant color, product/price (when a shopping pin) and the pinner. Provide pin_id or pin_url. | Creator and influencer platforms call pin to get full detail for one pin. | pin_id, pin_url, id |
| pin_comments | Public comments & 'Tried it' notes on a pin: text, like/helpful counts, commenter and whether the pin owner highlighted it. Provide pin_id or pin_url. Paginate with meta.bookmark. | Brand-monitoring teams call pin_comments to get public comments & 'Tried it' notes on a pin. | pin_id, pin_url, id, limit, bookmark |
| related_pins | 'More like this' pins related to a source pin. Provide pin_id or pin_url. | Audience analysts call related_pins to get 'More like this' pins related to a source pin. | pin_id, pin_url, id, limit, bookmark |
| profile | Public profile for a username: name, bio, follower/following/board/pin counts, avatar, website. | Social-listening tools call profile to get public profile for a username. | username |
| user_boards | Public boards owned by a username: name, url, description, pin-count, cover image. | Creator and influencer platforms call user_boards to get public boards owned by a username. | username |
| user_pins | Pins created by a username (their feed). Paginate with meta.bookmark. | Brand-monitoring teams call user_pins to get pins created by a username (their feed). | username, limit, bookmark |
| board | Board metadata: name, description, pin & follower & section counts, cover image, owner. Provide board_url or username + board. | Audience analysts call board to get board metadata. | board_url, username, board, board_slug |
| board_pins | Pins inside a board. Provide board_url or username + board. Paginate with meta.bookmark. | Social-listening tools call board_pins to get pins inside a board. | board_url, username, board, board_slug, limit, ... |
Call search_pins from your stack
curl -X POST https://api.reefapi.com/pinterest/v1/search_pins \
-H "x-api-key: $REEF_KEY" \
-H "content-type: application/json" \
-d '{"query":"minimalist home office","limit":10}'import requests
r = requests.post(
"https://api.reefapi.com/pinterest/v1/search_pins",
headers={"x-api-key": REEF_KEY},
json={
"query": "minimalist home office",
"limit": 10
},
)
print(r.json()["data"])const res = await fetch("https://api.reefapi.com/pinterest/v1/search_pins", {
method: "POST",
headers: {
"x-api-key": process.env.REEF_KEY,
"content-type": "application/json",
},
body: JSON.stringify({
"query": "minimalist home office",
"limit": 10
}),
});
const { ok, data, meta, error } = await res.json();Ask your MCP-connected assistant: call reefapi.pinterest.search_pins with {"query":"minimalist home office","limit":10}.Who uses this API and why
- Content and trend teams call search_pins to find top-performing pins and rising visual themes.
- Brand-monitoring tools use search_pins by domain to see which of a site's pages get repinned.
- Social-marketing tools use profile and user_boards to study a competitor's Pinterest strategy.
Questions developers ask before integrating
Why do some search_pins rows have no image, title or description?
They are not pins. Pinterest injects module cards into its own search feed, and they come through as rows with only id, url and is_video, sometimes plus a stray title like "Explore featured boards". A live call for "minimalist home office" returned 11 rows of which 4 were these thin cards. A full pin row always has image_url, description, board, domain, dominant_color and created_at, so test for image_url and drop the rest.
Where do I get a pin's save or repin count?
From the pin action, not from search. A live pin read of 99360735500167749 returned repin_count 4838, comment_count 35 and share_count 23, none of which appear on any search_pins or board_pins row. If you need engagement for a list of pins, collect the ids from search and then call pin for each one.
Is created_at ISO 8601?
No. Pinterest returns it in RFC 2822 form, for example "Thu, 04 Oct 2012 21:50:37 +0000", which most ISO date parsers will refuse. Use an RFC 2822 or email-date parser, or convert once at ingest. The offset is always +0000 in the responses measured, so the value is effectively UTC.
Does the outbound source link come through?
Yes, when the pin has one. A pin that points somewhere returns both link, the full destination URL, and domain, the host on its own. Measured examples: link http://www.flickr.com/photos/kentbrew/6851755809/ with domain flickr.com, and a shopping pin with domain link.amazon. Plenty of pins have no destination at all, and on those two fields are simply absent from the object rather than null, so use a key check.
Why does a profile report pin_count 0 when the account clearly has pins?
pin_count on a profile is Pinterest's created-pins counter for that account, and brand accounts that only save into boards read 0. A live profile read of nike on 2026-08-27 returned pin_count 0, board_count 10 and follower_count 1,088,703, while user_boards for the same account returned 9 public boards holding 61, 114, 194 pins and more. board_count can also exceed the number of boards user_boards returns, because it counts boards that are not on the public profile grid. Sum board.pin_count if you want a real total.
What image sizes does the API return?
Three, each on a different field, and each a different host path on i.pinimg.com. image_url on a pin is the /originals/ path, the full-resolution file. board.cover_image_url is the /200x150/ thumbnail. pinner.avatar_url is the /75x75_RS/ square. The paths are stable enough to swap by hand, but only the originals path is guaranteed to exist for every pin.
What is reaction_counts, and why is it usually empty?
It is Pinterest's per-reaction breakdown, keyed by reaction id. On every search_pins row measured it came back as an empty object {}, and on the pin action it returned {"1": 4} for a pin with four reactions of type 1. Empty means nobody reacted, not that the field failed, so read it as zero rather than as missing.
Can I use this for Pinterest keyword research?
That is what suggestions is for. It returns the typeahead dropdown for a partial query, so "home off" returned 12 rows on 2026-08-27, each shaped {term, display, type}, with type "query" on all of them and terms including "home office", "home office ideas", "home office inspiration" and "home office setup". There is no volume figure attached; the ordering is Pinterest's own ranking.
What is the Pinterest API?
Pinterest API is a ReefAPI endpoint group for pinterest It returns live JSON through POST requests under /pinterest/v1.
Is the Pinterest API free to try?
Yes. ReefAPI starts with 1,000 free credits, no card required. Pinterest calls use the same shared credit balance as every other ReefAPI engine.
Do I need a Pinterest login or account?
No login to Pinterest is needed for the API response. You call ReefAPI with your x-api-key header, and the playground can run live examples before you create a production key.
How fresh is the Pinterest data?
The page example is captured from a live search_pins call, and production requests fetch live data through ReefAPI rather than a static sample.
How many credits does the Pinterest API use?
Pinterest actions currently cost 1 credit per successful call. Failed or blocked calls are free, and all APIs draw from one credit pool.
Can I call Pinterest from an AI assistant or MCP client?
Yes. Connect ReefAPI once through MCP and your assistant can call pinterest actions with the same key, credit pool and JSON envelope used by normal REST requests.