# Linktree Profile & Contact Scraper (`plowdata/linktree-profile-scraper`) Actor

Extract Linktree profiles, emails, phone numbers, social links, bios, and profile metadata. Start from URLs or usernames, or enable crawling to discover related profiles from a small seed list.

- **URL**: https://apify.com/plowdata/linktree-profile-scraper.md
- **Developed by:** [Frederic](https://apify.com/plowdata) (community)
- **Categories:** Lead generation, Automation, Developer tools
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, NaN bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.003 / profile

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use 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 Profile Scraper

Extract structured profile and contact data from Linktree pages at scale – emails, phone numbers, social links, bios, profile metadata, and more.

Enable crawling mode to turn a small seed list into hundreds or thousands of related Linktree profiles, bounded by your `maxItems` setting.

Just paste Linktree URLs or usernames and hit **"Start"**. The scraper requires **no proxies**, making it cheaper to run and easier to use than browser-heavy scraping solutions.

Great for:
- 🎵 Music & creator outreach – extract emails, phone numbers, and social handles from artist profiles
- 📊 Influencer research & lead generation – discover creators and enrich contact lists
- 🔗 Building creator contact databases for agencies
- 🤖 Feeding structured profile and contact data into CRMs, enrichment tools, or outreach pipelines

### 🔍 What data do you get?

| Data type       | Description                                                                                                       |
|:---------------:|:-----------------------------------------------------------------------------------------------------------------:|
| Identity        | Username, page title, bio/description, profile picture                                                            |
| Contact info    | Full email and phone extraction from bios, social links, button URLs, link titles, metadata, and mailto/tel links |
| Social links    | Typed platform links – Instagram, TikTok, YouTube, Spotify, X, and 30+ more                                       |
| Links           | All profile buttons with title, URL, type, and thumbnail                                                          |
| Status signals  | Account tier (free/paid/pro), verified status, active status, country                                             |
| Crawl metadata  | Crawl depth relative to your seed profiles, source URL, scrape timestamp                                          |

### 🔋 Why use this scraper?

- 📬 **Full email and phone extraction**: Pulls contact details from bios, profile text, social links, button URLs, link titles, metadata, `mailto:` links, and `tel:` links
- 🌐 **Crawling mode**: Start with a few seed profiles and automatically discover related Linktree profiles – useful for mapping creator niches or expanding lead lists
- ⚡ **No proxies required**: Lower running costs, simpler setup, and fewer scraping headaches
- 📞 **E.164 phone normalization**: Phone numbers are normalized to international format using country context where available
- ⚙️ **Typed output**: 30+ social platform types enumerated, 90+ link types classified
- 🚀 **Multi-format export**: CSV, JSON, Excel, XML, and more via the Apify platform

### ✏️ Input fields

- `urls` (optional) – List of Linktree profile URLs, e.g. `https://linktr.ee/garyvee`
- `usernames` (optional) – List of Linktree usernames as an alternative to full URLs
- `enableCrawling` (optional) – Automatically expand your input by crawling related profiles
- `crawlDepth` (optional) – Maximum degrees of separation from your seed profiles (leave unset for unlimited)
- `maxItems` (optional) – Hard cap on total profiles scraped

At least one of `urls` or `usernames` must be provided.

### 🔧 Output format

Each scraped profile is emitted as a single record. Contact information is extracted and normalized into top-level fields for easy filtering, with a `raw` field containing the full unmodified page data for complete fidelity.

```json
{
  "id": 1056269512,
  "username": "2003toyotacorollaofficial",
  "pageTitle": "haylee",
  "description": "Official SoundCloud profile for haylee's 2003 Toyota Corolla project.\nIf you'd like to get in contact, please check my website below.",
  "profilePictureUrl": "https://...",

  "tier": "free",
  "isVerified": false,
  "isActive": true,
  "country": "US",

  "emails": ["haylee@example.com"],
  "phone": ["+14155552671"],

  "socialLinks": [
    { "type": "INSTAGRAM", "url": "https://instagram.com/example" },
    { "type": "EMAIL_ADDRESS", "url": "mailto:haylee@example.com" },
    { "type": "SOUNDCLOUD", "url": "https://soundcloud.com/example" }
  ],

  "links": [
    {
      "id": "12345",
      "type": "CLASSIC",
      "title": "My latest track",
      "url": "https://soundcloud.com/example/track",
      "thumbnail": "https://..."
    }
  ],

  "depth": 0,

  "provenance": {
    "sourceUrl": "https://linktr.ee/2003toyotacorollaofficial",
    "username": "2003toyotacorollaofficial",
    "scrapedAt": "2026-05-09T20:00:00.000Z"
  },

  "raw": { ... }
}
````

### 🌐 Crawling mode

When crawling is enabled, the scraper uses Linktree's internal profile similarity graph to automatically discover related profiles from your seed inputs. This is useful when you want to map out a creator niche without manually curating a full list of usernames.

- `crawlDepth: 1` – scrape your seeds and their directly related profiles
- `crawlDepth: 2` – go one level further, scraping profiles related to those
- Unset – crawl as broadly as `maxItems` allows

Your seed profiles are always prioritized and processed first, regardless of crawl settings.

### 👤 Who is it for?

- 🎵 **Music marketers & booking agencies** – Build targeted artist outreach lists with verified contact info
- 📣 **Influencer marketing teams** – Discover and contact creators across any niche
- 💼 **B2B lead generation** – Many small businesses use Linktree as a contact hub
- 💻 **Developers** – Enrich CRM data or feed creator profiles into recommendation or matching systems

***

Built with ❤️ and an unreasonable amount of attention to contact extraction edge cases.\
Questions or edge cases? Drop us a message – we actively maintain this actor.

# Actor input Schema

## `urls` (type: `array`):

List of Linktree profile urls to scrape, can be left empty if you provide usernames instead.

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

Provide a list of usernames here to scrape, can be left empty if you provide urls instead.

## `enableCrawling` (type: `boolean`):

If enabled, the scraper will also crawl related profiles to the ones you provided via urls/usernames

## `crawlDepth` (type: `integer`):

The maximum separation between your provided usernames/urls and the ones the scraper processes, only applies if crawling is enabled. E.g. when set to 1, and any increase beyond this deepens the accepted degree of separation. When this is set to zero, it effectively disables crawling. If this is left unset and crawling is enabled, then the actor will scrape as many profiles as your set limits (via maxItems)  allow.

## `maxItems` (type: `integer`):

If this is set, the scraper will only scrape up to this configured amount of profiles. It will always prioritize your initially provided urls and usernames, and if enabled, process the crawled ones next.

## Actor input object example

```json
{
  "urls": [
    {
      "url": "https://linktr.ee/garyvee"
    }
  ]
}
```

# Actor output Schema

## `profiles` (type: `string`):

Extracted profile information from Linktree user pages, including username, description, social links and contact information.

# 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 = {
    "urls": [
        {
            "url": "https://linktr.ee/garyvee"
        }
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("plowdata/linktree-profile-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 = { "urls": [{ "url": "https://linktr.ee/garyvee" }] }

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

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

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

```

## CLI example

```bash
echo '{
  "urls": [
    {
      "url": "https://linktr.ee/garyvee"
    }
  ]
}' |
apify call plowdata/linktree-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=plowdata/linktree-profile-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Linktree Profile & Contact Scraper",
        "description": "Extract Linktree profiles, emails, phone numbers, social links, bios, and profile metadata. Start from URLs or usernames, or enable crawling to discover related profiles from a small seed list.",
        "version": "1.0",
        "x-build-id": "iHg8gvMaDd3VFApOA"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/plowdata~linktree-profile-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-plowdata-linktree-profile-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/plowdata~linktree-profile-scraper/runs": {
            "post": {
                "operationId": "runs-sync-plowdata-linktree-profile-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/plowdata~linktree-profile-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-plowdata-linktree-profile-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "urls": {
                        "title": "Linktree profile URLs",
                        "uniqueItems": true,
                        "type": "array",
                        "description": "List of Linktree profile urls to scrape, can be left empty if you provide usernames instead.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "usernames": {
                        "title": "Linktree usernames",
                        "type": "array",
                        "description": "Provide a list of usernames here to scrape, can be left empty if you provide urls instead.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "enableCrawling": {
                        "title": "Enable crawling mode",
                        "type": "boolean",
                        "description": "If enabled, the scraper will also crawl related profiles to the ones you provided via urls/usernames"
                    },
                    "crawlDepth": {
                        "title": "Crawl Depth",
                        "type": "integer",
                        "description": "The maximum separation between your provided usernames/urls and the ones the scraper processes, only applies if crawling is enabled. E.g. when set to 1, and any increase beyond this deepens the accepted degree of separation. When this is set to zero, it effectively disables crawling. If this is left unset and crawling is enabled, then the actor will scrape as many profiles as your set limits (via maxItems)  allow."
                    },
                    "maxItems": {
                        "title": "Limit the maximum number of profiles",
                        "minimum": 1,
                        "type": "integer",
                        "description": "If this is set, the scraper will only scrape up to this configured amount of profiles. It will always prioritize your initially provided urls and usernames, and if enabled, process the crawled ones next."
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
