Linktree Scraper - Bio Links & Destination URLs
Pricing
from $2.67 / 1,000 results
Linktree Scraper - Bio Links & Destination URLs
Extract every destination URL behind a Linktree bio-link page, plus the account's title, description, avatar, tier, country and creation date. Reads the page's embedded data island, so it returns fields the page never displays. HTTP-only, no account.
Pricing
from $2.67 / 1,000 results
Rating
0.0
(0)
Developer
Farhan Febrian Nauval
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
23 days ago
Last modified
Categories
Share
Linktree Scraper — Bio Links & Destination URLs
Extract every destination URL behind a Linktree bio-link page, plus the account's title, description, avatar, tier, country and creation date. HTTP-only, no account, no browser.
Useful when you have a list of creators or brands and want the links they actually point people at — the shop, the newsletter, the booking page — rather than just the bio-link URL.
Input
| Field | Type | Default | Description |
|---|---|---|---|
profiles | array | required | Usernames (spotify), @handles, or full URLs (https://linktr.ee/spotify) |
maxConcurrency | integer | 5 | Profiles fetched in parallel |
proxyConfiguration | object | Apify proxy | Optional — a bare IP worked in testing |
Output
One row per input, always — including failures, so downstream joins never silently lose a key.
{"_input": "spotify","_source": "S1-next-data","_scrapedAt": "2026-09-07T01:52:39Z","username": "spotify","profileUrl": "https://linktr.ee/spotify","pageTitle": "@spotify","description": "…","profilePictureUrl": "…","tier": "free","country": "US","createdAt": 1557790392,"isActive": true,"isUnclaimedAccount": false,"linkCount": 6,"urls": ["https://open.spotify.com/…", "…"], // flat list of destinations"links": [ // structured, with Linktree's own fields{ "id": "9964805", "title": "Playlist 1", "url": "https://open.spotify.com/…","type": "CLASSIC", "position": 0, "_depth": 0 }],"pinnedLinks": [],"socialLinks": []}
Failure rows carry _error (not_found, bad_input, blocked, unexpected_shape) and
_errorDetail, and no payload.
How it works
Everything comes from the __NEXT_DATA__ island Next.js ships with the page, not from the
rendered markup. That is both more stable across redesigns and richer — tier, country,
createdAt and link position are all in the island and never shown on the page.
Two details worth knowing, because both cause silent wrong answers if you get them wrong:
Select the island by id, not by a regex over its opening tag. Linktree renders it as
<script id="__NEXT_DATA__" type="application/json" crossorigin="anonymous">. A regex written
against the usual two-attribute form matches nothing, and the page then looks empty rather than
broken.
A 200 is not proof the profile exists. Linktree answers an unregistered handle with a normal
200 "claim this username" page that still carries a __NEXT_DATA__ island — so the parse
succeeds and every field comes back null. This actor checks for account identity markers
(id, uuid, createdAt, pageTitle, username) and emits not_found instead of a
null-filled row that looks like a successful scrape of an empty profile.
Nested links are flattened. Linktree lets a link be an expandable group with children.
Each descendant is emitted as its own row in links with a _depth and _parentTitle, so you
get every destination URL without walking a tree but can still reconstruct the grouping.
Known limits
| Limit | Detail |
|---|---|
| No click analytics | View and click counts are private to the account owner |
| No email capture | Linktree's email-signup blocks expose no collected addresses |
| Gated profiles | Pages behind a password or age gate return no links |