# Lnk.Bio Email & Profile Scraper: Extract Leads (`ahmed_jasarevic/lnk-bio-scraper`) Actor

Scrape Lnk.Bio link-in-bio profiles: bio, avatar, all links (with group labels), social profiles, verified status and email.

- **URL**: https://apify.com/ahmed\_jasarevic/lnk-bio-scraper.md
- **Developed by:** [Ahmed Jasarevic](https://apify.com/ahmed_jasarevic) (community)
- **Categories:** Lead generation, Social media, E-commerce
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 results

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/platform/actors/running/actors-in-store#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

## Lnk.Bio Profile Scraper

Scrape **Lnk.Bio link-in-bio profiles** — the link-in-bio pages used by 1.5M+ creators on Instagram, TikTok and YouTube. Given one or more usernames or profile URLs, this Actor extracts the **bio**, **avatar photo**, **verified badge**, **all links** (with their group/section labels and thumbnails), **social & contact profiles** (Instagram, TikTok, Facebook, YouTube, Spotify, website, …) and the **email address** when the profile publishes one.

Works for any public profile, e.g. `https://lnk.bio/guggenheim` or just `guggenheim`. Runs on the Apify platform, so results are available via API, schedule, webhooks and integrations (Make, Zapier, n8n, Google Sheets…).

### Why use Lnk.Bio Profile Scraper?

- **Influencer & creator research** — collect bios, links and socials for outreach and sponsorship scouting.
- **Brand monitoring** — track how competitors structure their link-in-bio pages (campaign links, group labels, CTAs).
- **Lead generation** — harvest publicly published emails from creators' contact buttons.
- **Portfolio & media kits** — quickly snapshot an artist's or actor's bio, avatar, press links and social profiles.
- **No login required** — Lnk.Bio profiles are public; nothing needs an account or cookies.

### How to use Lnk.Bio Profile Scraper

1. Open the Actor in Apify Console (or call it via [API](https://docs.apify.com/api/v2)).
2. In the **Input** tab, enter one Lnk.Bio username or full profile URL per line.
3. Optionally set **Max profiles** (0 = unlimited). Free users are capped at 10 profiles per run.
4. Click **Start**. Each profile becomes one row in the dataset.

Example input:

```json
{
    "profiles": ["guggenheim", "https://lnk.bio/thuymusic", "royalcaribbean"],
    "maxProfiles": 100
}
```

### Input

| Field                | Type                | Description                                                                                                            |
| -------------------- | ------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| `profiles`           | string\[] (required) | Lnk.Bio usernames or full profile URLs, one per line.                                                                  |
| `maxProfiles`        | integer             | Maximum profiles to scrape. `0` = unlimited. Free users are capped at 10.                                              |
| `proxyConfiguration` | object              | Optional proxy. Direct access works for small batches; enable residential/datacenter proxy for large or repeated runs. |

### Output

One dataset record per profile:

```json
{
    "url": "https://lnk.bio/thuymusic",
    "username": "thuymusic",
    "profileId": "-1146495",
    "displayName": "thủy",
    "verified": false,
    "bio": "Bay Area native recording artist and songwriter...",
    "avatarUrl": "https://cdn2.lnk.bi/profilepics/-1146495_...jpg",
    "instagramUrl": "https://www.instagram.com/thuymusic",
    "links": [
        {
            "title": "Listen on Spotify",
            "url": "https://open.spotify.com/artist/...",
            "imageUrl": "https://cdn2.lnk.bi/uploads/...jpg",
            "linkId": "14042968",
            "group": "Music"
        }
    ],
    "socialProfiles": [
        { "network": "SOCIAL_IG", "platform": "Instagram", "url": "https://www.instagram.com/thuymusic" },
        { "network": "CONTACT_EM", "platform": "Email", "url": "info@thuymusic.com" }
    ],
    "email": ["info@thuymusic.com"],
    "scrapedAt": "2026-08-07T08:02:24.239Z"
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel.

### Data table

| Field              | Description                                                                                                        |
| ------------------ | ------------------------------------------------------------------------------------------------------------------ |
| `username`         | Profile username (without `@`).                                                                                    |
| `displayName`      | Custom display name, if set.                                                                                       |
| `verified`         | Whether Lnk.Bio shows a "Verified" badge.                                                                          |
| `bio`              | Profile bio text.                                                                                                  |
| `avatarUrl`        | Profile picture URL.                                                                                               |
| `instagramUrl`     | Link from the username badge (usually the Instagram profile).                                                      |
| `links[]`          | All bio links: `title`, `url`, `imageUrl` (thumbnail), `linkId`, `group` (section label such as "Music", "Press"). |
| `socialProfiles[]` | Contact/social icons: `network` code (e.g. `SOCIAL_IG`, `MUSIC_SPO`, `CONTACT_WE`), `platform` name, `url`.        |
| `email[]`          | Email address(es) published on the profile (including Cloudflare-protected ones).                                  |
| `error`            | Present only for profiles that returned a 404 page or were blocked.                                                |

### How much does it cost to scrape Lnk.Bio?

Runs are billed on Apify compute units (CU). Lnk.Bio pages are small static HTML pages and are fetched with a lightweight **CheerioCrawler** (no browser), so a typical run of 100 profiles consumes well under 1 CU. Free Apify users get a preview of up to **10 profiles per run**; paid users can scrape unlimited profiles. To keep runs cheap, lower `maxConcurrency` or spread large lists across scheduled runs. If lnk.bio starts rate-limiting you (Cloudflare), enabling the Apify proxy in `proxyConfiguration` adds a small per-GB cost.

### Tips and advanced options

- **Enter just the username** — the Actor normalizes it to `https://lnk.bio/<username>` automatically.
- **Links are deduplicated** — Lnk.Bio renders each link twice when it belongs to a group (once in the main list, once in the section); the Actor keeps one entry and preserves the group label.
- **Multi-page accounts** — links from all sub-pages present on the main page are captured in one record.
- **Emails** — Lnk.Bio sometimes obfuscates emails via Cloudflare's email protection; the Actor decodes those automatically.
- **Missing/removed profiles** — unknown usernames soft-redirect to Lnk.Bio's 404 page; the Actor reports them with an `error` field instead of failing the run.

### FAQ, disclaimers and support

- **Is scraping Lnk.Bio allowed?** Lnk.Bio publishes public profile pages and allows crawlers in `robots.txt`. Scrape responsibly, respect the site and the profiles' content rights, and do not republish personal data without permission.
- **Known limitations** — very large runs (thousands of profiles) may trigger Cloudflare rate limiting; enable the proxy and add delays if that happens.
- **Feedback** — open an issue in the Actor's Issues tab for problems or feature requests. Need a custom solution (bulk discovery, search by keyword, screenshot capture)? Contact the developer.

Built with Crawlee + Apify SDK. Made for creators who want their favorite creators' links in one structured dataset.

# Actor input Schema

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

One Lnk.Bio username or full profile URL per line, e.g. `guggenheim` or `https://lnk.bio/guggenheim`.

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

Maximum number of profiles to scrape. 0 = unlimited. Free users are capped at 10 profiles.

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

Proxy to use when accessing lnk.bio. Direct access works for small batches; enable residential/datacenter proxy for large or repeated runs to avoid rate-limiting.

## Actor input object example

```json
{
  "profiles": [
    "guggenheim",
    "https://lnk.bio/msjennafischer"
  ],
  "maxProfiles": 100,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `results` (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": [
        "guggenheim",
        "https://lnk.bio/msjennafischer"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("ahmed_jasarevic/lnk-bio-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": [
        "guggenheim",
        "https://lnk.bio/msjennafischer",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("ahmed_jasarevic/lnk-bio-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": [
    "guggenheim",
    "https://lnk.bio/msjennafischer"
  ]
}' |
apify call ahmed_jasarevic/lnk-bio-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,ahmed_jasarevic/lnk-bio-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/uHhH0vrUbkNbt3LML/builds/WA9a7agOIKKCtq9uA/openapi.json
