# Linktree Profile & Links Scraper (`datascraperes/linktree-profile-scraper`) Actor

Extract complete public Linktree profiles in structured JSON. Get bios, avatars, verification, themes, social links, pinned links, every outbound link, and detected video links from usernames or profile URLs. Useful for creator research, link-in-bio analysis, and competitor monitoring.

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

## Pricing

from $0.75 / 1,000 profiles

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/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

Turn public Linktree usernames or profile URLs into structured profile records with identity, links, pinned links, social destinations, theme and SEO fields. Submit one profile or process a batch and export the results from Apify.

### What this Actor does

The Actor normalizes submitted profile references, removes duplicates, requests each public page, and writes one Dataset item per successfully collected profile. Results preserve the public page structure while also providing normalized links, social destinations, emails, images, media, SEO fields, and collection status when available.

### Use cases

- Research creators, brands, competitors, and link-in-bio strategies.
- Enrich CRM, directory, or outreach-review records with public profile data.
- Audit outbound links, social destinations, public emails, and embedded media.
- Compare profile content and destinations across creator platforms.

### How to use

1. Add one or more Linktree usernames or public profile URLs.
2. Start the Actor from Apify Console.
3. Open the Dataset when the run finishes.
4. Export the structured profile rows in your preferred format.

### Input

`profiles` is required and accepts Linktree usernames or public profile URLs. A run accepts up to 500 references. Usernames and URLs are normalized, duplicate profiles are processed only once, and references belonging to other platforms are reported as invalid rather than charged as successful profiles.

This exact input produced the complete output below:

```json
{
  "profiles": [
    "linktree"
  ],
  "includeImages": false
}
```

### Output

Each successful Dataset item contains the normalized profile identity and all customer-visible public data exposed for that page. Empty arrays, `null` values, warnings, status fields, and collection timestamps are preserved so integrations can distinguish unavailable data from omitted fields. Image and media URLs hosted by the source platform can expire.

This is the complete first Dataset item from a real successful run:

```json
{
  "ok": true,
  "status": "ok",
  "profileUrl": "https://linktr.ee/linktree",
  "username": "linktree",
  "pageTitle": "Linktree",
  "description": "Linktree. Make your link do more.",
  "avatarUrl": "https://ugc.production.linktr.ee/5fedeb7f-857e-41a8-bc4a-aab8317deb38_Linktree-Logo-Avatar-Symbol.png",
  "verified": true,
  "hasPagePassword": false,
  "hasUnlockedProfile": true,
  "links": [
    {
      "id": "589138106",
      "title": "Linktree's Linktree",
      "url": "https://linktr.ee/linktr.ee",
      "type": "CLASSIC",
      "position": 0,
      "layoutOption": "stack"
    },
    {
      "id": "98304012",
      "title": "Homepage",
      "url": "http://linktr.ee/linktr.ee",
      "type": "CLASSIC",
      "position": 1,
      "layoutOption": "stack"
    }
  ],
  "pinnedLinks": [],
  "socialLinks": [],
  "linksCount": 2,
  "socialLinksCount": 0,
  "emails": [],
  "emailsCount": 0,
  "theme": {
    "key": "leaf"
  },
  "metaTitle": "Linktree | Linktree",
  "metaDescription": "Linktree. Make your link do more.",
  "shouldNoIndex": false,
  "warnings": [],
  "slug": "linktree",
  "httpStatus": 200,
  "requestAttempts": 1,
  "finalUrl": "https://linktr.ee/linktree",
  "capturedAt": "2026-08-24T10:36:32.436867+02:00",
  "videoCount": 0,
  "recordType": "profile",
  "videoLinks": []
}
```

### Pricing

You pay once per successfully collected `profile-item`. Higher Apify subscription tiers receive automatic volume discounts:

| Apify user tier | Price per successful profile |
|---|---:|
| Free | $0.001 |
| Bronze | $0.0009 |
| Silver | $0.0008 |
| Gold | $0.00075 |
| Platinum | $0.00075 |
| Diamond | $0.00075 |

Invalid, duplicated, unavailable, blocked, rate-limited, or not-found references are not charged as successful profile items. Apify platform usage can still apply according to your plan.

### API and integrations

Run the Actor through Apify Console, API, CLI, schedules, tasks, or webhooks. Consume results through the default Dataset API or connect them to spreadsheets, databases, dashboards, and supported automation tools. Export formats include JSON, JSONL, CSV, Excel, XML, and RSS.

### Related Actors

| Actor | Best for |
|---|---|
| [Beacons Profile & Links Scraper](https://apify.com/datascraperes/beacons-profile-scraper) | Collecting structured creator profiles, featured links, social destinations, and media from Beacons. |
| [Bio Sites Profile & Links Scraper](https://apify.com/datascraperes/bio-sites-profile-scraper) | Extracting content sections, links, social destinations, and media from Bio Sites profiles. |
| [Lnk.Bio Profile Scraper](https://apify.com/datascraperes/lnk-bio-profile-scraper) | Extracting grouped links, public contact details, media, and SEO data from Lnk.Bio. |
| [Taplink Profile Scraper](https://apify.com/datascraperes/taplink-profile-scraper) | Collecting Taplink text blocks, links, social destinations, themes, and public contact data. |

### Limits and data quality

The 500-reference limit is a maximum, not a guaranteed result count. Only publicly accessible information can be returned. Private, deleted, unavailable, regionally restricted, or temporarily blocked profiles may produce a status record instead of a successful profile. Counts, links, page content, and signed media URLs can change after collection.

### Frequently asked questions

#### Can I submit usernames and full URLs together?

Yes. Both forms are normalized and duplicates are removed within the run.

#### Why is a field empty?

The public profile may not expose that field, the content may be intentionally hidden, or the source may have changed. Check the item's status and warnings before treating an empty value as an error.

#### Does the Actor open or crawl every external link?

No. It extracts the destinations and public metadata exposed on the profile; it does not crawl the external websites behind those links.

### Responsible use

Use only publicly available information for lawful purposes. Respect Linktree's terms, applicable privacy and data-protection laws, copyright, and profile-owner rights. Do not use the output for harassment, discrimination, deceptive activity, or unsolicited outreach without the required permission.

### Support

Open an issue in the Actor's **Issues** tab with the run ID, affected public profile reference, returned status, and expected result. Never include passwords, tokens, or private credentials.

# Actor input Schema

## `profiles` (type: `array`):

Enter Linktree usernames or full https://linktr.ee/<username> profile URLs. Duplicate entries are removed.

## `includeImages` (type: `boolean`):

Include link thumbnail/image URLs when available.

## Actor input object example

```json
{
  "profiles": [
    "linktree"
  ],
  "includeImages": false
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `runStats` (type: `string`):

No description

# 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 = {
    "profiles": [
        "linktree"
    ],
    "includeImages": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("datascraperes/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 = {
    "profiles": ["linktree"],
    "includeImages": False,
}

# Run the Actor and wait for it to finish
run = client.actor("datascraperes/linktree-profile-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 '{
  "profiles": [
    "linktree"
  ],
  "includeImages": false
}' |
apify call datascraperes/linktree-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,datascraperes/linktree-profile-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/gwdbbngIBRR1s7wxL/builds/kcqfQ8caieXIHZKWf/openapi.json
