# Taplink Profile Scraper (`datascraperes/taplink-profile-scraper`) Actor

Extract complete public Taplink profiles in structured JSON, including identity, biography, content blocks, links, social destinations, public emails, images, media, video URLs and SEO metadata. Tiered pricing from $0.75 per 1,000 successful profiles.

- **URL**: https://apify.com/datascraperes/taplink-profile-scraper.md
- **Developed by:** [DataScraperES](https://apify.com/datascraperes) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 2 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 Taplink usernames or profile URLs into structured profile records with identity, text blocks, links, social destinations, media, 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 Taplink 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 Taplink 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": [
    "ntc",
    "mainpage",
    "tiktok"
  ]
}
```

### 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
{
  "recordType": "profile",
  "ok": true,
  "status": "ok",
  "profileUrl": "https://taplink.cc/ntc",
  "slug": "ntc",
  "profileId": "12103606",
  "username": "ntc",
  "displayName": "О нас",
  "pageTitle": "ntc.taplink.ws",
  "description": "Мы - профессиональная экспертная организация, специализирующаяся на проведении экологических экспертиз, научно-технических экспертиз. Предлагающая своим клиентам полный спектр услуг в самых широких областях. ‌\n\nКонтакты",
  "bio": "Мы - профессиональная экспертная организация, специализирующаяся на проведении экологических экспертиз, научно-технических экспертиз. Предлагающая своим клиентам полный спектр услуг в самых широких областях. ‌\n\nКонтакты",
  "bioParagraphs": [
    "Мы - профессиональная экспертная организация, специализирующаяся на проведении экологических экспертиз, научно-технических экспертиз. Предлагающая своим клиентам полный спектр услуг в самых широких областях. ‌",
    "Контакты"
  ],
  "textBlocks": [
    {
      "text": "О нас",
      "html": "О нас",
      "position": 1,
      "section": "Section 1"
    },
    {
      "text": "Мы - профессиональная экспертная организация, специализирующаяся на проведении экологических экспертиз, научно-технических экспертиз. Предлагающая своим клиентам полный спектр услуг в самых широких областях. ‌",
      "html": "<b>Мы - профессиональная экспертная организация, специализирующаяся на проведении экологических экспертиз, научно-технических экспертиз. Предлагающая своим клиентам полный спектр услуг в самых широких областях. \n‌ </b>",
      "position": 2,
      "section": "Section 1"
    },
    {
      "text": null,
      "html": null,
      "position": 3,
      "section": "Section 2"
    },
    {
      "text": "Контакты",
      "html": "Контакты",
      "position": 6,
      "section": "Section 3"
    }
  ],
  "avatarUrl": "https://p.taplink.st/a/7/0/9/9/b8afb6.jpg?7",
  "profileImage": {
    "url": "https://p.taplink.st/a/7/0/9/9/b8afb6.jpg?7",
    "alt": "О нас",
    "source": "og:image"
  },
  "backgroundImageUrl": null,
  "profileSocialUrl": null,
  "links": [
    {
      "title": "Телефон",
      "url": "https://ntc.taplink.ws/+79964068181",
      "rawValue": "+79964068181",
      "kind": "link",
      "position": 7,
      "section": "Section 3",
      "sectionPosition": 2,
      "linkId": "77558471",
      "linkType": "phone",
      "subtitle": "+7 (996)406-81-81",
      "icon": {
        "i": "tabler/phone",
        "t": "i"
      }
    },
    {
      "title": "Электронная почта",
      "url": null,
      "rawValue": null,
      "kind": "link",
      "position": 8,
      "section": "Section 3",
      "sectionPosition": 2,
      "linkId": "77558469",
      "linkType": "email",
      "subtitle": "ntc_exp@bk.ru",
      "icon": {
        "i": "tabler/mail",
        "t": "i"
      }
    }
  ],
  "socialLinks": [],
  "groupSections": [
    {
      "title": "Section 1",
      "position": 0,
      "linkIds": [],
      "linkCount": 0
    },
    {
      "title": "Section 2",
      "position": 1,
      "linkIds": [],
      "linkCount": 0
    },
    {
      "title": "Section 3",
      "position": 2,
      "linkIds": [
        "77558471",
        "77558469"
      ],
      "linkCount": 2
    }
  ],
  "contentBlocks": [
    {
      "blockType": "avatar",
      "blockTypeId": 8,
      "blockId": "b37261d4b33d",
      "position": 0,
      "section": "Section 1",
      "sectionPosition": 0,
      "title": null,
      "text": null,
      "textHtml": null,
      "url": null,
      "rawValue": null,
      "subtitle": null,
      "type": null,
      "icon": null
    },
    {
      "blockType": "text",
      "blockTypeId": 1,
      "blockId": "be58529a392b",
      "position": 1,
      "section": "Section 1",
      "sectionPosition": 0,
      "title": null,
      "text": "О нас",
      "textHtml": "О нас",
      "url": null,
      "rawValue": null,
      "subtitle": null,
      "type": null,
      "icon": null
    },
    {
      "blockType": "text",
      "blockTypeId": 1,
      "blockId": "b64b62d6c2ae",
      "position": 2,
      "section": "Section 1",
      "sectionPosition": 0,
      "title": null,
      "text": "Мы - профессиональная экспертная организация, специализирующаяся на проведении экологических экспертиз, научно-технических экспертиз. Предлагающая своим клиентам полный спектр услуг в самых широких областях. ‌",
      "textHtml": "<b>Мы - профессиональная экспертная организация, специализирующаяся на проведении экологических экспертиз, научно-технических экспертиз. Предлагающая своим клиентам полный спектр услуг в самых широких областях. \n‌ </b>",
      "url": null,
      "rawValue": null,
      "subtitle": null,
      "type": null,
      "icon": null
    },
    {
      "blockType": "text",
      "blockTypeId": 1,
      "blockId": "b15e44748764",
      "position": 3,
      "section": "Section 2",
      "sectionPosition": 1,
      "title": null,
      "text": null,
      "textHtml": null,
      "url": null,
      "rawValue": null,
      "subtitle": null,
      "type": null,
      "icon": null
    },
    {
      "blockType": "media",
      "blockTypeId": 20,
      "blockId": "b4ea0c4f4861",
      "position": 4,
      "section": "Section 2",
      "sectionPosition": 1,
      "title": null,
      "text": null,
      "textHtml": null,
      "url": null,
      "rawValue": null,
      "subtitle": null,
      "type": null,
      "icon": null
    },
    {
      "blockType": "messenger",
      "blockTypeId": 3,
      "blockId": "77558470",
      "position": 5,
      "section": "Section 2",
      "sectionPosition": 1,
      "title": null,
      "text": null,
      "textHtml": null,
      "url": null,
      "rawValue": null,
      "subtitle": null,
      "type": null,
      "icon": null
    },
    {
      "blockType": "text",
      "blockTypeId": 1,
      "blockId": "bfe98617e2f8",
      "position": 6,
      "section": "Section 3",
      "sectionPosition": 2,
      "title": null,
      "text": "Контакты",
      "textHtml": "Контакты",
      "url": null,
      "rawValue": null,
      "subtitle": null,
      "type": null,
      "icon": null
    },
    {
      "blockType": "link",
      "blockTypeId": 2,
      "blockId": "77558471",
      "position": 7,
      "section": "Section 3",
      "sectionPosition": 2,
      "title": "Телефон",
      "text": null,
      "textHtml": null,
      "url": "https://ntc.taplink.ws/+79964068181",
      "rawValue": "+79964068181",
      "subtitle": "+7 (996)406-81-81",
      "type": "phone",
      "icon": {
        "i": "tabler/phone",
        "t": "i"
      }
    },
    {
      "blockType": "link",
      "blockTypeId": 2,
      "blockId": "77558469",
      "position": 8,
      "section": "Section 3",
      "sectionPosition": 2,
      "title": "Электронная почта",
      "text": null,
      "textHtml": null,
      "url": null,
      "rawValue": null,
      "subtitle": "ntc_exp@bk.ru",
      "type": "email",
      "icon": {
        "i": "tabler/mail",
        "t": "i"
      }
    }
  ],
  "emails": [],
  "emailsCount": 0,
  "theme": {
    "heading": {
      "font": 10,
      "color": "#143211",
      "weight": 2
    },
    "screen": {
      "font": 13,
      "color": "#143211"
    },
    "avatar": {
      "title": {
        "font": 12,
        "color": "#5d755d"
      },
      "bio": {
        "font": 12,
        "color": "#5d755d"
      }
    },
    "link": {
      "bg": "#5d755d",
      "transform": "u",
      "weight": 2,
      "font": 13,
      "subtitle": {
        "font": 13
      },
      "shadow": {
        "color": "#2b412c"
      },
      "radius": 10,
      "hover": {
        "transparent": {
          "on": true
        }
      }
    },
    "background": {
      "color": "#fffaf4",
      "imageUrl": null,
      "repeat": null,
      "size": null,
      "fixed": null
    },
    "blocks": {
      "radius": 3,
      "pictures": {
        "title": "#5d755d",
        "text": "#8a9988",
        "button_text": "#ac4302",
        "nav": "#5d755d"
      }
    },
    "sections": {
      "_": [],
      "p": {
        "text": {
          "color": "#fffaf4"
        },
        "heading": {
          "color": "#fffaf4"
        },
        "link": {
          "color": "#143211",
          "bg": "#fffaf4",
          "shadow": {
            "color": "#c2bdb7"
          },
          "weight": 1,
          "subtitle": {
            "color": "#143211"
          },
          "border": {
            "color": "#fffaf4"
          }
        },
        "indent": {
          "radius": 0
        },
        "bg": {
          "color": "#5d755d"
        }
      },
      "s": {
        "link": {
          "shadow": {
            "color": "#c2bdb7"
          },
          "weight": 1
        },
        "bg": {
          "color": "#ebdece"
        }
      }
    }
  },
  "seo": {
    "title": "ntc.taplink.ws",
    "canonicalUrl": "https://ntc.taplink.ws/",
    "ogUrl": "https://ntc.taplink.ws/",
    "ogTitle": "ntc.taplink.ws",
    "ogImage": "https://p.taplink.st/a/7/0/9/9/b8afb6.jpg?7",
    "ogType": "website",
    "ogSiteName": "ntc.taplink.ws"
  },
  "media": [
    {
      "kind": "image",
      "url": "https://p.taplink.st/a/7/0/9/9/b8afb6.jpg?7",
      "title": "О нас",
      "position": 0
    }
  ],
  "linksCount": 2,
  "socialLinksCount": 0,
  "videoCount": 0,
  "videoLinks": [],
  "warnings": [],
  "httpStatus": 200,
  "requestAttempts": 1,
  "finalUrl": "https://ntc.taplink.ws/",
  "capturedAt": "2026-08-18T16:10:39.722299+02:00"
}
```

### Pricing

You pay once per successfully collected `profile-item`. Higher Apify subscription tiers receive automatic 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. 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. |
| [Linktree Profile & Links Scraper](https://apify.com/datascraperes/linktree-profile-scraper) | Collecting complete public Linktree identities, links, themes, and social destinations. |
| [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. |

### 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 Taplink'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 Taplink usernames, @usernames, or public taplink.cc, taplink.at, or taplink.ws profile URLs. Duplicate entries are removed.

## Actor input object example

```json
{
  "profiles": [
    "ntc"
  ]
}
```

# Actor output Schema

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

Dataset containing one complete record per successfully obtained public Taplink profile.

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

Run summary and non-billable outcomes stored in the RUN\_STATS key-value record.

# 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": [
        "ntc"
    ]
};

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

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

```

## MCP server setup

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