The Mine Works
← All posts
tutorial June 22, 2026 · 2 min read Updated June 22, 2026

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.

Try the scraper

The actor referenced in this article. Pay only for results delivered.

View the scraper →

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.

Related Actor

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.