Linktree Profile Scraper
Pricing
Pay per event
Linktree Profile Scraper
Scrape any public Linktree profile into a structured, link-level dataset — every link's title, URL, type, position, group, and gate status (age/passcode/password/NFT), with profile identity fields denormalized onto every row. Built for link-in-bio research, creator tooling, and affiliate audits.
Pricing
Pay per event
Rating
0.0
(0)
Developer
DevilScrapes
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
🎯 What this scrapes
Linktree profile pages ship their real data as a __NEXT_DATA__ JSON payload embedded in the page. This Actor reads that payload directly: give it one or more usernames or profile URLs and it returns one row per link — not one row per profile — so you get an analyzable, filterable table instead of a hand-scraped page dump.
🔥 Features
- 🔗 Link-level rows, not profile-level — filter by link type, gated status, or group membership directly in your dataset.
- 🧩 Group linkage resolved — child links carry
group_id/group_titleso you can reconstruct group membership with a simple join. - 🔒 Gate status surfaced — age / passcode / password / NFT-gated links are flagged (
gated,gate_type) without attempting to bypass them. - 🏷️ Every link type covered —
CLASSIC,GROUP,YOUTUBE_VIDEO,COMMERCE_PRODUCT, and unrecognized future types are all emitted, never dropped. - 🛡️ We rotate browser fingerprints so the target sees a real browser, not a script.
- 🧊 Clean, typed rows — Pydantic-validated, ISO-8601 timestamps. Export JSON / CSV / Excel straight from the Apify Console.
💡 Use cases
- Link-in-bio market research — analyze what creators and brands actually link to, and how they organize it.
- Creator tooling & influencer platforms — pull structured profile + link data instead of screen-scraping by hand.
- Affiliate-link auditing — surface every outbound destination a profile publishes, at scale.
- Brand-safety & monetization analysis — spot commerce links, affiliate patterns, and gated content across many profiles.
⚙️ How to use it
- Click Try for free at the top of the Store listing.
- Add one or more Usernames or profile URLs — a bare username (
selenagomez) or a full URL (https://linktr.ee/selenagomez) both work. - Click Start. Rows stream into the dataset as each profile is fetched.
- Export from Storage → Dataset as JSON, CSV, or Excel — or pull via the Apify API.
📥 Input
| Field | Type | Required | Default | Notes |
|---|---|---|---|---|
usernames | array | ✅ | — | Linktree usernames or full profile URLs. Case preserved for bare usernames. |
includeZeroLinkProfiles | boolean | no | false | Reserved for a future version — v1 always skips zero-link profiles. |
proxyConfiguration | object | no | BUYPROXIES94952 / US | Apify Proxy configuration. |
Example input
{"usernames": ["selenagomez"],"includeZeroLinkProfiles": false,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["BUYPROXIES94952"],"apifyProxyCountry": "US"}}
📤 Output
One row per link.
| Field | Type | Notes |
|---|---|---|
username | string | Input-normalized username. |
profile_title | string | null | Profile display title. |
profile_description | string | null | Profile bio/description. |
profile_avatar_url | string | null | Profile avatar image URL. |
profile_is_verified | boolean | Whether the profile is verified. |
profile_tier | string | null | Linktree account tier, e.g. pro. |
profile_has_password | boolean | Whether the whole page is password-gated. |
link_id | string | Stable link id. |
link_title | string | Link title. |
link_url | string | Destination URL (empty for GROUP rows). |
link_type | string | CLASSIC, GROUP, YOUTUBE_VIDEO, COMMERCE_PRODUCT, or another open-ended value. |
position | integer | Position within the profile. |
group_id | string | null | Parent GROUP link's id, when this link is a child. |
group_title | string | null | Parent GROUP link's title. |
thumbnail_url | string | null | Link thumbnail image. |
gated | boolean | Whether any gate (age/passcode/password/NFT) is active. |
gate_type | string | null | Which gate is active, when gated is true. |
meta_title | string | null | Link-level metadata title. |
meta_description | string | null | Link-level metadata description. |
scraped_at | string | ISO-8601 timestamp. |
Example output
{"username": "selenagomez","profile_title": "Selena Gomez","profile_description": "Rare Beauty | Wondermind | Music","profile_avatar_url": "https://example.linktr.ee/avatar.jpg","profile_is_verified": true,"profile_tier": "pro","profile_has_password": false,"link_id": "123456789","link_title": "Rare Beauty","link_url": "https://rarebeauty.com","link_type": "CLASSIC","position": 0,"group_id": null,"group_title": null,"thumbnail_url": "https://example.linktr.ee/thumb.jpg","gated": false,"gate_type": null,"meta_title": null,"meta_description": null,"scraped_at": "2026-09-24T18:00:00Z"}
💰 Pricing
Pay-per-event — you pay only for what lands in your dataset.
| Event | Price |
|---|---|
| Actor start | $0.20 (once per run) |
| Result emitted | $0.004 per link row |
At 1,000 link rows in a run, that's $4.20 / 1,000 ($0.20 start + $4.00 for the rows) — pricing amortizes toward $4.00/1,000 on larger runs.
🚧 Limitations
- Public profiles only — no login-required data, analytics, or edit-mode fields.
- Gated links (age/passcode/password/NFT) are flagged, not bypassed — this Actor never attempts to fetch what's behind a gate.
- Group membership is flat (
group_id/group_titlejoin), not a nested tree — reconstruct groups with a simple join if you need hierarchy. - Zero-link profiles emit no rows for that profile (logged, not a failure) — the run only fails if every requested profile yields zero rows.
❓ FAQ
Does this need a Linktree account or API key? No — it reads the same public JSON payload the profile page itself serves.
Can I pass a full profile URL instead of a bare username?
Yes — either works. A full https://linktr.ee/<username> URL has its username extracted automatically.
What happens if a profile doesn't exist or has no links? The run continues and reports zero rows for that profile — never a silent failure and never a crash, unless every requested profile comes back empty.
💬 Your feedback
Found a field that's missing, or a profile shape that doesn't behave as documented? Open an issue on the Actor's Store page or reach out via apify.com/DevilScrapes — we ship fixes fast.