# Linktree Scraper - Creator Bio Links, Emails & Leads (`scrapesage/linktree-scraper`) Actor

Scrape any Linktree (linktr.ee) profile into clean data: name, bio, every link with previews, social handles, emails & phones for lead gen. Discover related creators, enrich contacts from their website, and monitor for new profiles. Export JSON, CSV, Excel.

- **URL**: https://apify.com/scrapesage/linktree-scraper.md
- **Developed by:** [Scrape Sage](https://apify.com/scrapesage) (community)
- **Categories:** Social media, Lead generation, Agents
- **Stats:** 3 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 profile scrapeds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Linktree Scraper — Creator Bio Links, Emails & Leads

> **Disclaimer:** This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Linktree Pty Ltd or any of its subsidiaries. All trademarks mentioned are the property of their respective owners. "Linktree" is referenced only to describe the publicly available website this Actor collects data from.

Turn any **Linktree (`linktr.ee`) profile** into a clean, structured **lead record**: creator name, bio, **every link with its rich preview**, normalized **social handles**, and the fields that actually drive outreach — **emails and phone numbers**. Optionally **snowball-discover related creators**, **enrich contacts from each creator's own website**, and **monitor a niche for new profiles**.

No login, no cookies, no browser — fast JSON extraction straight from the page's embedded data, with 99%+ reliability.

### Why this Linktree scraper?

Most Linktree scrapers just dump the visible links from one URL. This actor ships the **richest record in the category** and turns Linktree into a real lead engine:

| Capability | Typical scrapers | This actor |
|---|---|---|
| All links (cleaned URLs, no tracking params) | ✅ | ✅ |
| Rich link previews (title, description, image) | ❌ | ✅ |
| Normalized social handles per platform | partial | ✅ Instagram, TikTok, YouTube, X, FB, LinkedIn, Spotify… |
| **Emails** (from `EMAIL` links, `mailto:` & bio) | ❌ | ✅ |
| **Phone numbers** | ❌ | ✅ |
| Website / shop / payment link classification | ❌ | ✅ |
| **Website contact enrichment** (crawl their site) | ❌ | ✅ opt-in |
| **Snowball discovery** of related creators | ❌ | ✅ opt-in |
| Verified, tier, country, created/updated, gating | ❌ | ✅ |
| Lead score (0–100) | ❌ | ✅ |
| Resolve from URL, bare username, @handle or social URL | ❌ | ✅ |
| Monitor mode — only NEW profiles | ❌ | ✅ |

### Use cases

- **Influencer & creator lead generation** — you already have a list of handles from Instagram/TikTok/YouTube; this actor resolves each to their Linktree and pulls **email, phone, website and every social** in one pass. Filter to `hasEmailOnly` for an outreach-ready list.
- **Bulk prospecting (discovery)** — start with a few creators in your niche and let **snowball discovery** follow Linktree's related-creator graph to build a large lead list automatically.
- **Agency & brand outreach** — find creators who **sell products** (`sellsProducts`, shop links), have a website, or accept donations, and reach them directly.
- **Competitive & market research** — see exactly which links, shops, socials and offers creators promote, with link previews.
- **List maintenance & monitoring** — schedule recurring runs with **monitor mode** to capture only newly discovered creators in a niche.

### How to use

1. [Sign up for Apify](https://console.apify.com/sign-up) — the free plan is enough to try this actor.
2. Open the **Linktree Scraper**, paste profile URLs / usernames (or turn on discovery), and click **Start**.
3. Watch results stream into the dataset table.
4. **Export** as JSON, CSV, Excel, XML, or RSS — or pull results programmatically via the [Apify API](https://docs.apify.com/api/v2).

### Input

```json
{
    "profileUrls": ["https://linktr.ee/garyvee"],
    "usernames": ["mkbhd", "@natgeo"],
    "discoverRelatedProfiles": true,
    "discoveryDepth": 2,
    "maxProfiles": 200,
    "enrichContactEmails": true,
    "hasEmailOnly": true
}
```

- **profileUrls** — full Linktree URLs (`https://linktr.ee/...`).
- **usernames** — bare usernames or `@handles`. A social-media URL works too — its handle is tried against `linktr.ee` (creators reuse the same handle).
- **startUrls** — generic URL list; anything that resolves to a Linktree username is scraped.
- **discoverRelatedProfiles** *(default false)* — snowball out to related/SEO-linked creators that Linktree lists on every page.
- **discoveryDepth** *(default 2)* — how many hops to snowball when discovery is on.
- **maxProfiles** *(default 100)* — max profiles to fetch in one run (the cost/work budget).
- **enrichContactEmails** *(default false)* — crawl each creator's own website (home + contact/about) for extra emails, phones and socials.
- **includeLinkPreviews** *(default true)* — attach each link's preview (title/description/image).
- **hasEmailOnly / verifiedOnly / countryFilter / minLinks** — output filters.
- **monitorMode / monitorKey** — return only profiles not seen in previous runs.
- **maxConcurrency / proxyConfiguration** — performance & proxy.

### Output

One record per creator (`type: "profile"`):

```json
{
    "type": "profile",
    "platform": "linktree",
    "username": "mkbhd",
    "profileUrl": "https://linktr.ee/mkbhd",
    "displayName": "MKBHD",
    "bio": "Quality Tech Videos",
    "avatarUrl": "https://ugc.production.linktr.ee/...",
    "isVerified": true,
    "tier": "free",
    "country": "US",
    "sellsProducts": true,
    "emails": ["podcast@mkbhd.com"],
    "primaryEmail": "podcast@mkbhd.com",
    "phones": [],
    "websiteUrls": ["https://shop.mkbhd.com/"],
    "primaryWebsite": "https://shop.mkbhd.com/",
    "shopUrls": ["https://shop.mkbhd.com/"],
    "socialLinks": [
        { "platform": "youtube", "url": "https://youtube.com/mkbhd", "handle": "@mkbhd" },
        { "platform": "instagram", "url": "https://instagram.com/mkbhd", "handle": "@mkbhd" },
        { "platform": "x", "url": "https://x.com/mkbhd", "handle": "@mkbhd" }
    ],
    "socialPlatforms": ["youtube", "instagram", "x", "spotify"],
    "links": [
        {
            "title": "Waveform Podcast",
            "url": "https://open.spotify.com/show/...",
            "type": "CLASSIC",
            "category": "social",
            "platform": "spotify",
            "isGated": false,
            "preview": { "title": "Waveform: The MKBHD Podcast", "description": "...", "image": "https://.../" }
        }
    ],
    "linkCount": 9,
    "relatedUsernames": ["...", "..."],
    "leadScore": 92,
    "discoverySource": "seed",
    "scrapedAt": "2026-06-16T18:00:00.000Z"
}
```

When `enrichContactEmails` is on, records also include `websiteCrawled`, `websitePagesCrawled`, `enrichedEmails`, `enrichedPhones`, and `enrichedSocials` (merged into the main `emails`/`phones`/`socialLinks`).

### How much does it cost to scrape Linktree?

This Actor uses Apify's **pay-per-event** pricing: you are charged only for the results it delivers, with no monthly rental and no start fee. The events it can charge are:

- **Profile scraped** - One Linktree creator profile: name, bio, every link with previews, social handles, emails, phone numbers, website, lead score and related-creator seeds.
- **Contact enrichment (website crawl)** - Charged only when a profile's own website is crawled (home plus contact/about) to extract additional emails, phone numbers and social links.

The current price of each event is shown on the **Pricing** tab of this page. Set a maximum total charge on the run if you want a hard cap on spend, and use the input limits to control how much the Actor fetches.

### Automate & schedule

Run this actor on autopilot and pull results into your own stack:

- **[Apify API](https://docs.apify.com/api/v2)** — start runs, fetch datasets, and manage schedules over REST.
- **[apify-client for JavaScript](https://docs.apify.com/api/client/js/)** and **[apify-client for Python](https://docs.apify.com/api/client/python/)** — official SDKs.
- **[Schedules](https://docs.apify.com/platform/schedules)** — run it daily/weekly to monitor a niche for new creators; pair with `monitorMode` to capture only new profiles.
- **[Webhooks](https://docs.apify.com/platform/integrations/webhooks)** — trigger downstream actions (CRM import, Slack alert, email sequence) the moment a run finishes.

```js
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });

const run = await client.actor('scrapesage/linktree-scraper').call({
    usernames: ['garyvee', 'mkbhd'],
    discoverRelatedProfiles: true,
    maxProfiles: 200,
    enrichContactEmails: true,
    hasEmailOnly: true,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Got ${items.length} creator leads`);
```

### Integrate with any app

Connect the dataset to 5,000+ apps — no code required:

- **[Make](https://docs.apify.com/platform/integrations/make)** — multi-step automation scenarios.
- **[Zapier](https://docs.apify.com/platform/integrations/zapier)** — push new creator leads straight into your CRM.
- **[Slack](https://docs.apify.com/platform/integrations/slack)** — get notified when a monitored niche surfaces new creators.
- **[Google Drive / Sheets](https://docs.apify.com/platform/integrations/drive)** — auto-export every run to a spreadsheet.
- **[Airbyte](https://docs.apify.com/platform/integrations/airbyte)** — pipe results into your data warehouse.
- **[GitHub](https://docs.apify.com/platform/integrations/github)** — trigger runs from commits or releases.

### Use with AI assistants (MCP)

The output is clean, LLM-ready JSON. You can call this actor from Claude, ChatGPT, or any agent framework through the **[Apify MCP server](https://docs.apify.com/platform/integrations/mcp)** — ask your assistant to "find fitness creators on Linktree with an email and a shop" and let it run this scraper for you.

### Agent-ready: autonomous payments (x402 & Skyfire)

This actor is **agent-ready** — AI agents can discover it, run it, and **pay for it autonomously**, with no Apify account and no human in the loop. It uses [pay-per-event](https://docs.apify.com/platform/actors/publishing/monetize/pay-per-event) pricing and [limited permissions](https://docs.apify.com/platform/actors/development/permissions), so it qualifies for Apify's agentic-payment standards:

- **[x402](https://docs.apify.com/platform/integrations/x402)** — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp) — no account, no API key.
- **[Skyfire](https://docs.apify.com/platform/integrations/skyfire)** — agent-to-service payments for fully autonomous AI-agent workflows.

Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.

### More scrapers from scrapesage

Build a complete **creator & influencer lead-gen stack** — Linktree is the contact hub; these pull the platform-side audience and monetization data:

- **[YouTube Scraper](https://apify.com/scrapesage/youtube-scraper)** — channels, videos and creator leads.
- **[Patreon Scraper](https://apify.com/scrapesage/patreon-scraper)** — creators, membership tiers, earnings estimates & leads.
- **[Substack Scraper](https://apify.com/scrapesage/substack-scraper)** — newsletters, posts & creator leads.
- **[SoundCloud Scraper](https://apify.com/scrapesage/soundcloud-scraper)** — artists, tracks & creator leads.
- **[Apple Podcasts Scraper](https://apify.com/scrapesage/apple-podcasts-scraper)** — shows, episodes, reviews & host leads.
- **[Bluesky Scraper](https://apify.com/scrapesage/bluesky-scraper)** — profiles, posts, followers & leads.
- **[Product Hunt Scraper](https://apify.com/scrapesage/product-hunt-scraper)** — launches, makers & leads.
- **[Eventbrite Scraper](https://apify.com/scrapesage/eventbrite-scraper)** — events + organizer leads.

### Tips

- **You have handles, not Linktree URLs?** Drop the handles into `usernames` — the scraper tries `linktr.ee/<handle>` (creators almost always reuse the same handle). Profiles that don't exist are skipped quietly.
- **Bulk lists**: turn on `discoverRelatedProfiles` with a few strong seed creators and raise `maxProfiles` to snowball a niche.
- **Outreach-ready only**: set `enrichContactEmails: true` and `hasEmailOnly: true` to keep just the profiles with a real email.
- **Cost control**: `maxProfiles` caps the work; email enrichment only runs for creators that actually link a website.
- **Monitoring**: combine [Schedules](https://docs.apify.com/platform/schedules) with `monitorMode` to capture only newly found creators each run.

### FAQ

**Do I need a Linktree login or API key?** No. The actor reads the public profile's embedded data — the same content any visitor sees.

**Where do the emails come from?** From the creator's own published contact links (Linktree `EMAIL`/`mailto:` links and bio text) and, with `enrichContactEmails`, from their own public website. Nothing private is accessed.

**Can it scrape usernames I only have from Instagram/TikTok?** Yes — paste the handle or the social URL; the actor tries the matching Linktree username.

**Can I export to Google Sheets, CSV, or Excel?** Yes — one click in the dataset view, or automatically on every run via the [Google Drive integration](https://docs.apify.com/platform/integrations/drive).

**How do I get only new creators over time?** Turn on `monitorMode` and run on a [Schedule](https://docs.apify.com/platform/schedules) — each run returns only profiles not seen before.

**A field is null — why?** Some creators simply don't publish an email, phone, website or country. Fields are `null` only when the data doesn't exist, not because the scraper skipped them.

**Is scraping Linktree legal?** This actor collects publicly available data only. You are responsible for using the data in compliance with applicable laws (GDPR/CCPA for personal data) and Linktree's terms.

### Data & lawful use

This Actor reads only what Linktree publishes to logged-out visitors: it does not log in, use cookies or session tokens, create accounts, or reach anything behind a sign-in. Names, handles, bios and engagement figures are public, but they relate to identifiable people, so treat the output as personal data. If you are in the EU or UK you are the data controller for what you do with it: have a lawful basis (usually legitimate interest for research, marketing analytics or B2B prospecting), honour access and deletion requests, and do not use the output for spam or unsolicited messaging.

Under [Apify's Standard Actor Contract](https://docs.apify.com/legal/standard-actor-contract), which governs your use of this Actor, you are the controller of any personal data in your input and output and scrapesage acts only as your processor: that data is processed solely to run your job, written only to your own Apify storage, never used for any other purpose and never shared onward. If you need help with a data-subject request that involves this Actor's output, open an issue on the Issues tab.

### Disclaimer

**This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by Linktree Pty Ltd or any of its subsidiaries. All trademarks mentioned are the property of their respective owners.**

"Linktree" and any related marks are the property of their respective owners and are used here only in a descriptive, nominative sense - to identify the publicly accessible website from which this Actor collects data. This Actor is not an official Linktree product, is not authorised or certified by Linktree Pty Ltd, and does not distribute Linktree software. It collects only publicly available information; you are responsible for ensuring your use of that data complies with applicable laws, regulations and the terms of the source website.

### Need help?

Open an issue on the actor's **Issues** tab, or visit the [Apify help center](https://help.apify.com/). Feature requests are welcome — this actor is actively maintained.

# Actor input Schema

## `profileUrls` (type: `array`):

Full Linktree profile URLs, e.g. `https://linktr.ee/garyvee`. The scraper reads the profile's embedded data (no login, no browser).

## `usernames` (type: `array`):

Bare Linktree usernames or @handles (e.g. `mkbhd`, `@natgeo`). A social-media URL (e.g. an Instagram link) also works — its handle is tried against linktr.ee, since creators reuse the same handle across platforms.

## `startUrls` (type: `array`):

Generic URL list — paste Linktree URLs or other profile links. Anything that resolves to a Linktree username is scraped.

## `discoverRelatedProfiles` (type: `boolean`):

Expand beyond your seed profiles: every Linktree page lists related/SEO-linked creators, so the scraper follows them to discover MORE creators like your seeds — great for building bulk lead lists. Bounded by `Max profiles` and `Discovery depth`.

## `discoveryDepth` (type: `integer`):

How many hops to snowball out from the seed profiles when discovery is on. 1 = direct relations only; 2–3 expands much wider.

## `maxProfiles` (type: `integer`):

Maximum number of Linktree profiles to fetch in one run (the work/cost budget). With discovery off, this caps the seed list; with discovery on, it caps total profiles scanned.

## `enrichContactEmails` (type: `boolean`):

For each profile that links to its own website, crawl the home + contact/about pages (capped) for extra emails, phone numbers and social links — the contact wedge a bio page doesn't always expose. Adds a few requests per profile.

## `maxEnrichPagesPerProfile` (type: `integer`):

When enriching, the most pages to crawl on each creator's website (home + contact/about).

## `includeLinkPreviews` (type: `boolean`):

Attach each link's rich preview (title, description, image) when Linktree provides it. Turn off for a leaner dataset.

## `hasEmailOnly` (type: `boolean`):

Keep only profiles that have at least one email address (after enrichment) — ideal for outreach-ready lead lists.

## `verifiedOnly` (type: `boolean`):

Keep only Linktree-verified profiles.

## `countryFilter` (type: `string`):

Keep only profiles whose Linktree country matches this two-letter code (e.g. `US`, `GB`). Leave empty for all countries.

## `minLinks` (type: `integer`):

Keep only profiles with at least this many links (filters out empty/placeholder pages).

## `monitorMode` (type: `boolean`):

Remember which profiles were emitted in previous runs (in a named key-value store) and return ONLY profiles not seen before — ideal for watching a niche for new creators. Works with Apify Schedules: the schedule starts the run, monitor mode deduplicates against prior runs.

## `monitorKey` (type: `string`):

Names the monitor store so you can keep separate watch-lists. Lowercase letters, numbers and hyphens.

## `maxConcurrency` (type: `integer`):

Maximum number of profiles fetched in parallel.

## `proxyConfiguration` (type: `object`):

Proxy settings. Linktree serves clean pages to Apify datacenter IPs, so the default Apify proxy is plenty. Switch to residential if you ever see blocks at scale.

## `urlsFromFile` (type: `string`):

Paste a list of URLs (one per line), OR one link to a .txt/.csv file, Google Sheet or Google Drive file containing them. Lets you import many Start URLs at once instead of typing each. Google Sheet/Drive share links are handled automatically.

## Actor input object example

```json
{
  "profileUrls": [
    "https://linktr.ee/garyvee"
  ],
  "discoverRelatedProfiles": false,
  "discoveryDepth": 2,
  "maxProfiles": 100,
  "enrichContactEmails": false,
  "maxEnrichPagesPerProfile": 3,
  "includeLinkPreviews": true,
  "hasEmailOnly": false,
  "verifiedOnly": false,
  "countryFilter": "",
  "minLinks": 0,
  "monitorMode": false,
  "monitorKey": "default",
  "maxConcurrency": 8,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

All scraped Linktree profile records as JSON items in the default dataset.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "profileUrls": [
        "https://linktr.ee/garyvee"
    ],
    "urlsFromFile": ""
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapesage/linktree-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "profileUrls": ["https://linktr.ee/garyvee"],
    "urlsFromFile": "",
}

# Run the Actor and wait for it to finish
run = client.actor("scrapesage/linktree-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "profileUrls": [
    "https://linktr.ee/garyvee"
  ],
  "urlsFromFile": ""
}' |
apify call scrapesage/linktree-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapesage/linktree-scraper"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/xVcfTyT1ALoA1U86d/builds/e4v1gIYUBKwE2MlR8/openapi.json
