Pinterest Profile Scraper With Email & Website Contacts avatar

Pinterest Profile Scraper With Email & Website Contacts

Pricing

from $2.99 / 1,000 results

Go to Apify Store
Pinterest Profile Scraper With Email & Website Contacts

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

SimpleAPI

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

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 _created tab 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, /impressum by 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.

FieldExample ValueUse 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_count184320Reach/influence sizing for prospect qualification
following_count412Account-type signal (personal vs. brand behaviour)
pin_count9876Content-volume signal
board_count58Content-organization signal
interest_following_count12Pinterest 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_verifiedtrueWhether Pinterest verified the linked domain — a trust signal
is_primary_website_verifiedtrueVerification status of the primary linked site
impressum_urlnullLegally 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_identitynullPinterest's identity-verification object, when present
is_verified_merchantfalseCommerce qualification flag
is_inspirational_merchanttruePinterest's merchant-classification flag
is_partnertrueBusiness/partner account flag
partnernullPartner metadata object, when present
is_private_profilefalseWhether the account is private (still returned as a normal row, see FAQ)
is_ads_only_profilefalseAds-only account flag
is_gco_accountfalsePinterest "global content operations" account flag
indexedtrueWhether Pinterest allows the profile to be search-indexed
seo_noindex_reasonnullReason 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
errorReasonnullSet only on uncharged accounting rows — see below
errorMessagenullHuman-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_reachabletrueWhether 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_contacttruetrue 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.

FeaturePinterest API v5This Actor
Look up any public usernameNo — requires that account's own OAuth consentYes — from a username or URL you supply
Bulk list of unrelated accounts in one callNoYes, up to 1,000 targets per run
Bio-based email/phone/social extractionNot providedBuilt in, zero extra requests
Linked-website contact hopNot providedBuilt in, bounded and path-scoped
Setup requirementPinterest developer app + OAuth reviewApify account only
Output schemaRaw API response shape, versioned by PinterestFixed, 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.

ParameterRequiredTypeDescriptionExample Value
startUrlsYesarray (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/"]
maxProfilesNointeger (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
extractContactDetailsNoboolean, default trueParses about and seo_description for emails, phones and handles — zero extra requests. Turn off for the plain profile record only.true
followProfileWebsiteNoboolean, default trueFetches the account's own linked website (website_url, falling back to domain_url) for contact details. Fetches impressum_url first when present.true
contactPagePathsNoarray (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"]
maxContactPagesPerProfileNointeger (min 1, max 10), default 3How many pages may be fetched per account's site. robots.txt is fetched once per host and does not count against this budget.3
requireContactNoboolean, default falseDrops (and does not charge) every account with no email, phone or social profile found.true
proxyConfigurationNoobject (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:

  1. Input precisionstartUrls accepts 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.
  2. Scope precisionextractContactDetails (bio-only, free) and followProfileWebsite (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.
  3. Page targetingcontactPagePaths controls exactly which paths are tried on the linked site, in order, and maxContactPagesPerProfile (1–10) caps how many are actually fetched. When the account publishes an impressum_url, that page is always fetched first, ahead of the path list.
  4. Quality threshold and volumerequireContact drops (uncharged) every account where no email, phone or social profile was found, and maxProfiles caps 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 NameWhat it extracts
Pinterest Ads Scraper — Performance AnalyticsPinterest Ads Library ads with flattened targeting data and derived reach/engagement metrics
Facebook Group Posts And Details & Contact Leads ScraperFacebook group posts, group profile data, and member-level email/phone leads
LinkedIn Profile Posts Scraper By Media & HashtagLinkedIn profile posts classified by format, with hashtags extracted
TikTok Data Scraper — Video, Hashtag & Sound PerformanceTikTok 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 ApifyClient
client = 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.

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.