How to Scrape Pinterest Profiles in Python (Followers, Pins, Boards Without Login)
Pinterest has no public API for scraping profiles. Learn how to extract follower counts, monthly views, board lists, recent pins with save counts, and profile metadata as structured JSON without login or API key.
The actor referenced in this article. Pay only for results delivered.
Pinterest is one of the highest-intent social platforms for e-commerce, fashion, food, home decor, and DIY content. With no public API for profile metrics, scraping is the standard method for influencer research and audience analysis. Here is the complete guide.
What each profile contains
- Follower count and monthly views
- Board count and total pin count
- Profile bio and external website link
- Recent pins: save count, image URL, caption, and board name
Common use cases
Influencer vetting. Before a partnership, pull follower count, monthly views, and recent pin engagement to assess reach and authenticity.
Competitor content research. Monitor the pins, boards, and save counts for competitors or category leaders to identify high-performing content angles.
Brand monitoring. Track what pins featuring your products get shared and saved by checking for your URL in profiles that link back.
E-commerce product research. High save counts on pins indicate purchase intent. Use this to identify what visual styles or products are trending in a niche.
Using the Apify actor
import apify_client
client = apify_client.ApifyClient('YOUR_APIFY_TOKEN')
run_input = {
"username": "anthropic",
"maxItems": 20,
}
run = client.actor('themineworks/pinterest-profile-scraper').call(run_input=run_input)
for item in client.dataset(run['defaultDatasetId']).iterate_items():
if item.get('_type') == 'profile':
print(f"Profile: {item.get('full_name')} (@{item.get('username')})")
print(f" Followers: {item.get('follower_count', 0):,}")
print(f" Monthly views: {item.get('monthly_views', 0):,}")
print(f" Boards: {item.get('board_count', 0)} | Pins: {item.get('pin_count', 0)}")
print(f" Website: {item.get('website', 'N/A')}")
elif item.get('_type') == 'pin':
print(f" Pin: {item.get('description', '')[:60]}...")
print(f" Saves: {item.get('save_count', 0)} | Board: {item.get('board_name', 'N/A')}")
Bulk influencer vetting
ACCOUNTS = ['joannagaines', 'thepioneerwoman', 'minimalistbaker', 'halfbakedharvest']
run_input = {
"usernames": ACCOUNTS,
"maxItems": 10,
}
run = client.actor('themineworks/pinterest-profile-scraper').call(run_input=run_input)
profiles = [i for i in client.dataset(run['defaultDatasetId']).iterate_items()
if i.get('_type') == 'profile']
# Sort by monthly views
for p in sorted(profiles, key=lambda x: x.get('monthly_views', 0), reverse=True):
ratio = p.get('monthly_views', 0) / max(p.get('follower_count', 1), 1)
print(f"{p.get('full_name', p.get('username'))}")
print(f" {p.get('monthly_views', 0):,} monthly views | {p.get('follower_count', 0):,} followers")
print(f" Views-to-follower ratio: {ratio:.1f}x")
Top pins by save count
Find the content resonating most with an audience:
run_input = {
"username": "target",
"includePins": True,
"maxItems": 50,
}
run = client.actor('themineworks/pinterest-profile-scraper').call(run_input=run_input)
pins = [i for i in client.dataset(run['defaultDatasetId']).iterate_items()
if i.get('_type') == 'pin' and i.get('save_count')]
top_pins = sorted(pins, key=lambda x: x.get('save_count', 0), reverse=True)[:10]
print("Top 10 pins by saves:")
for pin in top_pins:
print(f" [{pin.get('save_count', 0):,} saves] {pin.get('description', '')[:80]}")
print(f" Board: {pin.get('board_name', 'N/A')} | {pin.get('image_url', '')[:60]}")
Board analysis
from collections import defaultdict
board_stats = defaultdict(lambda: {'pins': 0, 'total_saves': 0})
for pin in pins:
board = pin.get('board_name', 'Unknown')
board_stats[board]['pins'] += 1
board_stats[board]['total_saves'] += pin.get('save_count', 0)
print("Boards ranked by total saves:")
for board, stats in sorted(board_stats.items(), key=lambda x: -x[1]['total_saves'])[:10]:
avg = stats['total_saves'] / max(stats['pins'], 1)
print(f" {board}: {stats['pins']} pins | {stats['total_saves']:,} saves | {avg:.0f} avg")
Pricing
$0.003 per profile, nothing charged on failure. Pins are included when includePins: true is set.
Explore the scraper referenced in this article — see inputs, outputs, and pricing, then run it on Apify.
Frequently asked questions
Does Pinterest have a public API for scraping profiles? +
Pinterest offers a limited API for business accounts, but it does not expose public profile metrics like follower count or monthly views. Scraping is required to get this data from public profiles.
What data does the Pinterest scraper return? +
Follower count, monthly views, board count, pin count, bio, website URL, and recent pins with save counts, image URLs, captions, and board names.
Does the scraper require a Pinterest login? +
No. The scraper works entirely on publicly visible profile pages without any account credentials.
Airbnb Scraper: Listing Prices, Ratings, and Availability Without the API
Airbnb has no public listings API. Here's how to pull nightly price, rating, superhost status and coordinates from Airbnb search results using Python.
Maps Leads: Verified Email Extraction from Google Maps Business Listings
How to pull B2B leads from Google Maps with MX-verified emails, past the official API's 120-result cap, and pay only for contactable businesses.
Realtor.com Scraper: Property and Agent Data Without the MLS Paywall
Scrape Realtor.com listings in Python — price, beds, baths, county, and the listing agent + brokerage office on every record. No login, no API key.