Pinterest Profile Scraper With Email & Website Contacts
Pricing
from $2.99 / 1,000 results
Pinterest Profile Scraper With Email & Website Contacts
Collect actionable insights from Pinterest profiles automatically. This scraper fetches board data, pins, descriptions, and audience metrics. Useful for trend discovery, competitive research, and large-scale data extraction.
Pricing
from $2.99 / 1,000 results
Rating
0.0
(0)
Developer
SimpleAPI
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
4 days ago
Last modified
Categories
Share
Pinterest Scraper — Profiles, Bios and Email & Website Contacts
Pinterest profile scraper that returns the full public profile record — bio, follower/pin/board counts, avatar, verification flags — for every account you name, then reads the contact details the account publishes about itself: emails, phone numbers and social handles from the bio, plus its own linked website followed to /contact, /about and /impressum. Every value is tagged with where it was found (bio or a specific page path). Built for partnerships teams, influencer-marketing agencies and market researchers who already have a list of Pinterest usernames or URLs and need working contact data next to it — not a Pinterest search tool, a Pinterest enrichment tool.
🧭 What is Pinterest Profile Scraper With Email & Website Contacts?
Pinterest Profile Scraper With Email & Website Contacts takes a list of Pinterest accounts and returns one JSON row per account: the account's full public profile plus every contact detail it could read off the bio and the account's own linked website. No Pinterest login or API key is required — the actor reads the same guest-accessible profile data a logged-out visitor sees.
- Discovery is by name, not by search. You supply exact usernames, profile URLs, regional domains (
au.pinterest.com), or even board/tab URLs — a board link or a_createdtab both resolve to the parent account. Search phrases are not accepted. - Core identifying fields: username, display name, bio, avatar and cover images, Pinterest user ID.
- Contact fields: emails, phone numbers, social handles, plus which page each value came from.
- Secondary/engagement data: follower count, following count, pin count, board count, verified-merchant and business-account flags.
- Two-stage contact extraction: a zero-request pass over the bio, then a bounded fetch of the account's own linked website (homepage,
/contact,/about,/impressumby default), never a third-party site or a search engine. - Export formats: JSON, CSV, Excel and XML via the Apify dataset — no code required to download results.
⚠️ Real constraint, stated plainly: this actor does not discover Pinterest accounts. It has no keyword, category or location search — only startUrls. If you need to find which accounts to target first, you need a separate discovery step; this actor is the enrichment step that follows it.
What data can I extract with Pinterest Profile Scraper With Email & Website Contacts?
Every row carries the account's full public profile (45 fields, straight from Pinterest's own guest API) plus 9 contact fields this actor derives from the bio and the linked website. Every key below is written by the actor's row builder — nothing here is a subset.
| Field | Example Value | Use Case |
|---|---|---|
username | "cozyhomedecor" | Primary key for de-duplication and CRM matching |
profileUrl | "https://www.pinterest.com/cozyhomedecor/" | Direct link back to the account |
full_name | "Cozy Home Decor" | Display name for outreach personalization |
first_name | "Cozy" | Pinterest's own first-token split of the display name |
about | "Affordable home decor ideas, DIY tutorials..." | Bio text; also the source for the zero-request contact pass |
follower_count | 184320 | Reach/influence sizing for prospect qualification |
following_count | 412 | Account-type signal (personal vs. brand behaviour) |
pin_count | 9876 | Content-volume signal |
board_count | 58 | Content-organization signal |
interest_following_count | 12 | Pinterest interest topics the account follows |
website_url | "https://www.cozyhomedecor.com" | The site the account links from its own profile — also the second-hop fetch target |
domain_url | "cozyhomedecor.com" | Fallback site value used when website_url is empty |
domain_verified | true | Whether Pinterest verified the linked domain — a trust signal |
is_primary_website_verified | true | Verification status of the primary linked site |
impressum_url | null | Legally mandated DE/AT disclosure page, when the account publishes one |
instagram_data | {"url": "https://www.instagram.com/cozyhomedecor/", "username": "cozyhomedecor"} | Cross-platform handle Pinterest itself links |
verified_identity | null | Pinterest's identity-verification object, when present |
is_verified_merchant | false | Commerce qualification flag |
is_inspirational_merchant | true | Pinterest's merchant-classification flag |
is_partner | true | Business/partner account flag |
partner | null | Partner metadata object, when present |
is_private_profile | false | Whether the account is private (still returned as a normal row, see FAQ) |
is_ads_only_profile | false | Ads-only account flag |
is_gco_account | false | Pinterest "global content operations" account flag |
indexed | true | Whether Pinterest allows the profile to be search-indexed |
seo_noindex_reason | null | Reason Pinterest gives for excluding the profile from indexing |
seo_title | "Cozy Home Decor (cozyhomedecor) - Profile | Pinterest" | Pinterest's own SEO title for the profile page |
seo_description | "Cozy Home Decor | Affordable home decor ideas..." | Second bio-like string; also fed into the zero-request contact pass |
seo_canonical_domain | "www.pinterest.com" | The account's regional Pinterest domain (15 distinct values observed, not a constant) |
image_medium_url | "https://i.pinimg.com/280x280_RS/.../medium.jpg" | Medium-resolution avatar |
image_xlarge_url | "https://i.pinimg.com/750x/.../xlarge.jpg" | Full-resolution avatar |
profile_cover_url | "https://i.pinimg.com/1200x/.../cover.jpg" | Highest-resolution cover image the actor could resolve |
profile_cover | {"images": {"originals": {"url": "..."}}} | Raw Pinterest cover-image object |
eligible_profile_tabs | ["home","created","saved"] | Profile tabs Pinterest exposes for the account |
created_at | "Wed, 12 Jan 2011 03:15:22 +0000" | Pinterest's raw RFC-1123 account-creation timestamp |
createdAtIso | "2011-01-12T03:15:22Z" | Same value, ISO-8601 |
last_pin_save_time | "Mon, 03 Aug 2026 18:40:02 +0000" | Raw RFC-1123 last-activity timestamp |
lastPinSaveTimeIso | "2026-08-03T18:40:02Z" | Same value, ISO-8601 — activity-recency filtering |
id | "549762718203456789" | Pinterest's internal numeric user ID |
node_id | "VXNlcjo1NDk3NjI3MTgyMDM0NTY3ODk=" | Pinterest's GraphQL node ID |
input | "cozyhomedecor" | The raw value you supplied in startUrls |
dataSource | "user_resource_api" | Which of the three fetch surfaces produced this row: user_resource_api, profile_html_props or profile_ldjson |
errorReason | null | Set only on uncharged accounting rows — see below |
errorMessage | null | Human-readable detail for errorReason |
scrapedAt | "2026-08-04T09:12:41Z" | When this row was fetched |
emails | ["hello@cozyhomedecor.com"] | All emails found across the bio and the linked website |
owner_domain_emails | ["hello@cozyhomedecor.com"] | Subset of emails whose domain matches the linked site — the highest-confidence subset |
phones | ["+1-877-555-0142"] | Phone numbers exactly as published, never reformatted |
social_links | {"instagram": "https://www.instagram.com/cozyhomedecor/", "facebook": "https://www.facebook.com/cozyhomedecor"} | Social profile URLs keyed by platform |
contact_page_urls | ["https://www.cozyhomedecor.com/contact-us/"] | Pages actually fetched on the linked site |
contact_sources | {"hello@cozyhomedecor.com": "website:/contact-us"} | Maps each contact value to bio, impressum or website:<path> |
website_reachable | true | Whether the first fetched page on the linked site answered 2xx (null when no fetch was attempted) |
website_final_url | "https://www.cozyhomedecor.com/contact-us/" | URL the first fetch landed on after redirects |
has_contact | true | true only when an email, phone or social profile was found — a reachable-but-empty site does not count |
Two Pinterest response fields are read but deliberately never emitted: type (a constant "user" payload discriminator with no information value) and ads_only_profile_site (null on every profile measured). is_private_profile is written to every row but left out of the default dataset view because it was false on every profile measured logged-out — it is still a genuine field you can pull from the "all fields" view.
📧 Contact and outreach fields
emails, phones, social_links, owner_domain_emails, contact_sources, has_contact, website_reachable and website_final_url are the block a partnerships or growth team actually filters on. contact_sources is the honesty layer: it tells you whether a given email came from the bio or from a specific page path on the account's own site, so you can weight a website:/contact hit higher than a bio-guess. has_contact is strict — it is only true when an email, phone or social profile was actually found; a site that answered 200 with no address on it scores website_reachable: true and has_contact: false, so the two flags never get confused with each other.
🎯 Targeting and qualification fields
follower_count, is_verified_merchant, is_partner, domain_verified and is_primary_website_verified are Pinterest's own signals for filtering a raw account list down to accounts worth contacting: a verified, domain-linked business account with five-figure followers reads very differently from a personal account with none of those flags set. seo_canonical_domain additionally exposes the account's regional Pinterest edition (.com, .co.uk, .com.au, …), useful for market-level segmentation.
How does Pinterest Profile Scraper differ from the official Pinterest API?
Pinterest publishes an official API (v5) and it does something fundamentally different: it is OAuth-scoped to accounts that have explicitly authorized your app, so it can read the profile of the account that logged in through your OAuth flow — it has no endpoint to look up an arbitrary public username without that account's own consent (developers.pinterest.com, checked 2026-08-04). That makes it unusable for the core use case here: reading contact details off a list of accounts you found, not accounts that signed up with you.
| Feature | Pinterest API v5 | This Actor |
|---|---|---|
| Look up any public username | No — requires that account's own OAuth consent | Yes — from a username or URL you supply |
| Bulk list of unrelated accounts in one call | No | Yes, up to 1,000 targets per run |
| Bio-based email/phone/social extraction | Not provided | Built in, zero extra requests |
| Linked-website contact hop | Not provided | Built in, bounded and path-scoped |
| Setup requirement | Pinterest developer app + OAuth review | Apify account only |
| Output schema | Raw API response shape, versioned by Pinterest | Fixed, flat dataset row, stable across runs |
Can the Pinterest API look up any public profile by username?
No. Pinterest's v5 API is built around OAuth: your app requests a scope like user_accounts:read, the account holder authorizes it, and you then get that one account's data — or, via Pinterest Business Access, accounts that have explicitly granted your app manager access. There is no endpoint that takes a bare username and returns that account's public profile the way a logged-out browser tab does. For a partnerships team with a spreadsheet of a hundred creator usernames who never authorized anything, the official API simply has no door in. This actor covers exactly that gap: it reads the same guest-accessible profile surface a logged-out visitor sees, for any username you supply, with no consent flow required because no private data is being accessed.
Use the official API when you are building an app that manages a Pinterest business account's own boards, ads or analytics on that account's behalf. Use this actor when you have a list of other accounts you need public profile and contact data for.
How to use data extracted from Pinterest profiles?
🤝 Partnerships and influencer-marketing teams
Feed a list of candidate usernames into startUrls, set requireContact: true, and the output is a ready outreach list: emails, phones and social_links next to follower_count and is_verified_merchant for quick qualification. Accounts with no reachable contact are dropped from the export entirely (and not charged), so the sheet that lands in your outreach tool needs no manual cleaning before the first email goes out.
🏷️ Agencies managing multiple client lists
Agencies running the same enrichment for several client prospect lists can point one Actor run at each client's username list with maxProfiles set to the batch size the client is paying for, then export per-client CSVs straight from the Apify dataset — no shared spreadsheet, no manual contact lookup per account.
📊 Market research and creator-economy intelligence
Researchers profiling a niche (home decor, fitness, recipe creators) can run a known account list through the actor and use follower_count, pin_count, is_verified_merchant and seo_canonical_domain to map audience size, content volume and regional distribution across the segment, without touching Pinterest's UI account by account.
🤖 AI agents and automated pipelines
Because the actor is a standard Apify Actor, it drops into an agent's tool list as a callable HTTP action: give it a username or URL extracted from another step (a lead list, a CRM import, a web-search result) and get back a structured contact record an agent can act on directly — send an email, log a CRM note, or flag a dead lead when has_contact is false.
🔼 Input sample
Every input comes straight from .actor/actor.json. startUrls is the only required field — everything else has a working default.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
startUrls | Yes | array (string list) | One entry per account: a bare username, a profile URL, a regional domain, or a board/tab sub-path (auto-resolved to the parent profile). Search phrases are not supported. | ["cozyhomedecor", "https://www.pinterest.com/thepioneerwoman/"] |
maxProfiles | No | integer (min 0, max 1000) | Hard cap on how many supplied accounts are worked. No schema default; the UI prefills 10, but if the value is omitted or 0 the actor works every supplied account. | 50 |
extractContactDetails | No | boolean, default true | Parses about and seo_description for emails, phones and handles — zero extra requests. Turn off for the plain profile record only. | true |
followProfileWebsite | No | boolean, default true | Fetches the account's own linked website (website_url, falling back to domain_url) for contact details. Fetches impressum_url first when present. | true |
contactPagePaths | No | array (string list), default ["/", "/contact", "/contact-us", "/about", "/impressum"] | Paths tried on the linked site, in order, until the page budget is hit. No link discovery, no recursion. | ["/", "/contact", "/impressum"] |
maxContactPagesPerProfile | No | integer (min 1, max 10), default 3 | How many pages may be fetched per account's site. robots.txt is fetched once per host and does not count against this budget. | 3 |
requireContact | No | boolean, default false | Drops (and does not charge) every account with no email, phone or social profile found. | true |
proxyConfiguration | No | object (proxy editor) | Applies to Pinterest requests only. External sites are always fetched direct with a truthful bot user agent; a proxied retry fires only on a 403/429 from a third-party site when a proxy is configured. | {"useApifyProxy": true} |
{"startUrls": ["cozyhomedecor","https://www.pinterest.com/thepioneerwoman/","https://au.pinterest.com/etsy/"],"maxProfiles": 50,"extractContactDetails": true,"followProfileWebsite": true,"contactPagePaths": ["/", "/contact", "/contact-us", "/about", "/impressum"],"maxContactPagesPerProfile": 3,"requireContact": true,"proxyConfiguration": { "useApifyProxy": true }}
Common pitfall: maxProfiles: 0 does not mean "scrape nothing" — it means "no cap, work every account in startUrls." If you meant to test with a handful of accounts, set an explicit small number instead of leaving it at 0. Separately, startUrls only accepts accounts you can name — a search term, a category, or a pin URL will produce an uncharged row with errorReason: "invalid_input", not a search result.
🔽 Output sample
Output is a flat, typed JSON row per account — every one of the 54 fields documented above is always present, with null for anything Pinterest or the contact pass did not find. Export as JSON, CSV, Excel or XML directly from the Apify dataset, no extra configuration needed.
{"username": "cozyhomedecor","profileUrl": "https://www.pinterest.com/cozyhomedecor/","full_name": "Cozy Home Decor","first_name": "Cozy","about": "Affordable home decor ideas, DIY tutorials and seasonal styling tips. Shop the look at cozyhomedecor.com","follower_count": 184320,"following_count": 412,"pin_count": 9876,"board_count": 58,"interest_following_count": 12,"website_url": "https://www.cozyhomedecor.com","domain_url": "cozyhomedecor.com","domain_verified": true,"is_primary_website_verified": true,"impressum_url": null,"instagram_data": {"url": "https://www.instagram.com/cozyhomedecor/","username": "cozyhomedecor"},"verified_identity": null,"is_verified_merchant": false,"is_inspirational_merchant": true,"is_partner": true,"partner": null,"is_private_profile": false,"is_ads_only_profile": false,"is_gco_account": false,"indexed": true,"seo_noindex_reason": null,"seo_title": "Cozy Home Decor (cozyhomedecor) - Profile | Pinterest","seo_description": "Cozy Home Decor | Affordable home decor ideas, DIY tutorials and seasonal styling tips.","seo_canonical_domain": "www.pinterest.com","image_medium_url": "https://i.pinimg.com/280x280_RS/aa/bb/cc/cozyhomedecor_medium.jpg","image_xlarge_url": "https://i.pinimg.com/750x/aa/bb/cc/cozyhomedecor_xlarge.jpg","profile_cover_url": "https://i.pinimg.com/1200x/dd/ee/ff/cozyhomedecor_cover.jpg","profile_cover": {"id": "123456","images": { "originals": { "url": "https://i.pinimg.com/originals/dd/ee/ff/cozyhomedecor_cover.jpg" } }},"eligible_profile_tabs": ["home", "created", "saved"],"created_at": "Wed, 12 Jan 2011 03:15:22 +0000","createdAtIso": "2011-01-12T03:15:22Z","last_pin_save_time": "Mon, 03 Aug 2026 18:40:02 +0000","lastPinSaveTimeIso": "2026-08-03T18:40:02Z","id": "549762718203456789","node_id": "VXNlcjo1NDk3NjI3MTgyMDM0NTY3ODk=","input": "cozyhomedecor","dataSource": "user_resource_api","errorReason": null,"errorMessage": null,"scrapedAt": "2026-08-04T09:12:41Z","emails": ["hello@cozyhomedecor.com"],"owner_domain_emails": ["hello@cozyhomedecor.com"],"phones": ["+1-877-555-0142"],"social_links": {"instagram": "https://www.instagram.com/cozyhomedecor/","facebook": "https://www.facebook.com/cozyhomedecor"},"contact_page_urls": ["https://www.cozyhomedecor.com/contact-us/"],"contact_sources": {"hello@cozyhomedecor.com": "website:/contact-us","+1-877-555-0142": "website:/contact-us","https://www.facebook.com/cozyhomedecor": "website:/contact-us"},"website_reachable": true,"website_final_url": "https://www.cozyhomedecor.com/contact-us/","has_contact": true}
Targets that fail to resolve to a profile (invalid input, account not found, or the request was blocked) still produce a row — with every profile and contact field null, dataSource: null, and errorReason set to one of invalid_input, not_found, blocked, no_data or request_failed. These accounting rows are pushed uncharged. Filter them out of a paid-row count or an outreach export with errorReason == null.
🎯 How do you filter and target specific Pinterest profiles?
This actor's targeting model is enumeration, not search — you name the accounts and the actor decides how far to go reading each one, not which ones to fetch. Four real controls shape a run:
- Input precision —
startUrlsaccepts a bare username, a full profile URL, a regional-domain URL, or a board/tab sub-path (both resolve to the parent account). It does not accept search phrases or category terms; if you need to find accounts first, that's a separate step upstream of this actor. - Scope precision —
extractContactDetails(bio-only, free) andfollowProfileWebsite(the second-hop fetch) can be toggled independently. Turn off the website hop for a fast, one-request-per-profile run when you only need the base profile plus whatever the bio carries. - Page targeting —
contactPagePathscontrols exactly which paths are tried on the linked site, in order, andmaxContactPagesPerProfile(1–10) caps how many are actually fetched. When the account publishes animpressum_url, that page is always fetched first, ahead of the path list. - Quality threshold and volume —
requireContactdrops (uncharged) every account where no email, phone or social profile was found, andmaxProfilescaps how many of the supplied accounts are worked at all.
{ "startUrls": ["etsy", "thepioneerwoman"], "extractContactDetails": true, "followProfileWebsite": false }
Bio-only, one request per profile — cheapest possible run.
{ "startUrls": ["etsy", "thepioneerwoman", "nestafitness"], "maxProfiles": 2, "requireContact": true }
Full website hop, but only keep accounts with a working contact, capped at the first two targets.
{ "startUrls": ["shop-de-example"], "contactPagePaths": ["/impressum", "/kontakt"], "maxContactPagesPerProfile": 2 }
Custom path list for German/Austrian sites, where the impressum page is the legally reliable contact source.
▶️ Want to try other Pinterest scrapers?
| Scraper Name | What it extracts |
|---|---|
| Pinterest Ads Scraper — Performance Analytics | Pinterest Ads Library ads with flattened targeting data and derived reach/engagement metrics |
| Facebook Group Posts And Details & Contact Leads Scraper | Facebook group posts, group profile data, and member-level email/phone leads |
| LinkedIn Profile Posts Scraper By Media & Hashtag | LinkedIn profile posts classified by format, with hashtags extracted |
| TikTok Data Scraper — Video, Hashtag & Sound Performance | TikTok profiles, videos, comments, hashtag/music feeds and cross-run performance tracking |
How to extract Pinterest data programmatically
The actor runs like any Apify Actor: one API call starts the run, and the dataset comes back as structured JSON you can pull with the apify-client SDK or plain HTTP.
Python example
from apify_client import ApifyClientclient = ApifyClient("<APIFY_API_TOKEN>")run = client.actor("<your-username>/pinterest-profile-scraper-with-email-and-website-contacts").call(run_input={"startUrls": ["cozyhomedecor", "thepioneerwoman"],"maxProfiles": 50,"requireContact": True,})for item in client.dataset(run["defaultDatasetId"]).iterate_items():print(item["username"], item["emails"], item["website_url"])
Export to spreadsheets or CRM
Every dataset can be exported as CSV or Excel directly from the Apify Console or via the API's dataset export endpoint. Map username → Name, emails → Email, phones → Phone, website_url → Website, and social_links.instagram / social_links.facebook → your CRM's social columns for a ready outreach import.
⚖️ Is it legal to scrape Pinterest?
Scraping public Pinterest profiles is generally legal — these pages are published for anyone, logged in or not, to view, and no login or paywall is bypassed to read them. That legality does not remove your own obligations once you store the data: this actor's output includes personal data (names, email addresses, phone numbers, social handles) tied to identifiable individuals or small-business owners, so GDPR (for EU/UK data subjects) and CCPA (for California residents) apply to how you store, use and eventually delete it. You need a lawful basis for holding this data and must honor deletion and opt-out requests from the people it identifies. Consult legal counsel for commercial applications involving bulk storage of personal data.
❓ FAQ
What happens if a Pinterest account is deleted, not found, or private?
A deleted or nonexistent username returns HTTP 404 from Pinterest and is emitted as an uncharged accounting row with errorReason: "not_found". A private account is different — Pinterest still returns its full public header object, so it comes back as a normal, charged row with is_private_profile: true, not an error.
Can I get email and phone data along with the profile record?
Yes, in the same row — emails, phones and social_links are populated by the same run as follower_count, about and every other profile field, no second run needed. The website hop is capped at maxContactPagesPerProfile (1–10, default 3) pages per account, so a site that hides its contact page more than a few links deep may not surface an address.
How accurate is the contact and profile data?
The actor returns data exactly as Pinterest and the account's own website publish it at request time — nothing is normalized, guessed or backfilled. Accuracy depends on whether the account keeps its bio and website up to date; treat every export as a starting list and verify addresses before a bulk send.
How many profiles can I scrape per run?
Up to 1,000 per run via maxProfiles (schema maximum). Leaving maxProfiles unset or at 0 removes the cap entirely and works every account in startUrls, however many that is.
How do I target only accounts that have a working contact detail?
Set requireContact: true. Accounts where no email, phone or social profile was found are dropped from the output and are not charged — a website merely answering 200 does not count as a contact by itself.
Does the actor need a Pinterest login or API key?
No. It reads the same guest-accessible profile data a logged-out browser sees. You only need an Apify account to run it; the optional proxyConfiguration input is for Pinterest requests only and is not required — Pinterest served this endpoint to a plain Apify datacenter IP in testing.
Does Pinterest Profile Scraper With Email & Website Contacts work with Claude, ChatGPT, and AI agent frameworks?
Yes, as a standard HTTP-callable Apify Actor — any agent framework that can call a REST API can start a run, poll for completion, and read the resulting dataset, no special integration required.
Why does the actor check /impressum before other contact pages?
Because German and Austrian law requires businesses to publish contact details on an impressum page, and it's the single most reliable contact source on sites in those markets. When an account's profile publishes an impressum_url, the actor fetches it first and skips the rest of the contactPagePaths list for that account.
Conclusion
Pinterest Profile Scraper With Email & Website Contacts turns a list of Pinterest usernames or URLs into a structured record of who they are and how to reach them — full public profile fields plus emails, phones and social handles sourced and labeled from the bio and the account's own website, with no Pinterest API key or login required. It's built for the enrichment step, not the discovery step: point it at accounts you already know you want, and it does the reading for you. Start a run from the Apify Console or the API with a startUrls list to see it on your own accounts.