# Bio Sites Profile & Links Scraper (`datascraperes/bio-sites-profile-scraper`) Actor

Extract public Bio Sites profiles in structured JSON with identities, bios, images, content sections, links, social destinations, public emails, media, video URLs and SEO metadata. Useful for creator research, link-in-bio analysis and competitor monitoring.

- **URL**: https://apify.com/datascraperes/bio-sites-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

$1.00 / 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.

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

## Bio Sites Profile & Links Scraper

[Open the Actor on Apify](https://apify.com/datascraperes/bio-sites-profile-scraper)

Extract complete public Bio Sites profiles into a structured dataset. Enter
Bio Sites usernames or public `bio.site` URLs and receive one record per
successfully collected profile with identity, public content, links, social
destinations, images, media, public emails and SEO metadata.

Each successful profile is returned as one complete Dataset record. Links,
sections, social destinations, emails and videos remain together with the
profile that published them.

### What this Actor collects

- One or many public Bio Sites profiles in a single run.
- Bio Sites usernames, `@usernames`, and `bio.site/username` URLs.
- Display name, username, normalized profile URL and public profile ID when
  exposed by the page.
- Public text sections and biography-style content when published.
- Profile image, link thumbnails, public media and available theme details.
- Link titles, destinations, subtitles, thumbnails, layouts, sections and
  positions.
- Social destinations such as Instagram, TikTok, YouTube, Snapchat, X,
  LinkedIn, Facebook, Amazon, Spotify, Twitch, Telegram and other supported
  networks.
- Unique email addresses explicitly published by the profile.
- Public video URLs found in links or embedded media.
- Page title, canonical URL, Open Graph, Twitter and other public metadata.

### Pricing

The Actor costs **$1 per 1,000 successfully obtained profiles**, equivalent to
**$0.001 per profile**.

You are charged once for each successfully obtained profile record. The number
of links, sections, social destinations, emails, images, media items or videos
inside that profile does not create additional charges.

Invalid, duplicated, unavailable, blocked and not-found references are not
charged as successful profiles. Apify may show its normal platform resource
costs separately according to your account and run settings.

### Input

The only input is `profiles`.

| Field | Required | Default | Description |
| --- | --- | --- | --- |
| `profiles` | Yes | `biosites` | Bio Sites usernames or public profile URLs. Up to 500 entries per run. |

Accepted values include:

```text
biosites
@creator
https://bio.site/creator
https://bio.site/creator?fbclid=example
```

Duplicate usernames and URLs are removed automatically. References to other
websites are rejected so that the Actor only processes supported Bio Sites
profiles.

### Output

The Dataset contains one JSON record for every successfully obtained public
profile. Failed references are summarized in the run statistics without being
charged as successful profiles.

#### Profile information

| Field | Description |
| --- | --- |
| `profileUrl` | Normalized public Bio Sites URL that was collected. |
| `finalUrl` | Final URL after a normal page redirect, when available. |
| `slug` | Username segment used in the normalized profile URL. |
| `profileId` | Public Bio Sites profile identifier when exposed by image assets. |
| `username` | Username represented by the public profile URL. |
| `displayName` | Public profile heading. |
| `pageTitle` | HTML page title. |
| `description` | Public page description when available. |
| `bio` | Public text content assembled from text sections. |
| `bioParagraphs` | Public text content split into readable blocks. |
| `textBlocks` | Text sections with their position and section name. |
| `avatarUrl` | Public profile image URL, when available. |
| `profileImage` | Public profile image details. |
| `theme` | Public color, layout and theme information exposed by the page. |

#### Links, sections, social destinations and media

| Field | Description |
| --- | --- |
| `links` | Public links with title, URL, subtitle, thumbnail, layout, section and position. |
| `groupSections` | Public sections and the link IDs they contain. |
| `contentBlocks` | Public Bio Sites text and link blocks in page order. |
| `socialLinks` | Public social and messaging destinations. |
| `media` | Public profile images, link thumbnails and media references. |
| `videoLinks` | Detected public video records with URL, title, type and position. |
| `linksCount` | Number of unique public profile links. |
| `socialLinksCount` | Number of public social destinations. |
| `videoCount` | Number of detected public video URLs. |

#### Contact and SEO fields

| Field | Description |
| --- | --- |
| `emails` | Unique email addresses explicitly published by the profile. |
| `emailsCount` | Number of extracted public email addresses. |
| `profileSocialUrl` | First public social or messaging destination when available. |
| `seo` | Page title, description, canonical URL, Open Graph, Twitter and related metadata. |
| `status` | `ok` for a successfully collected profile. |
| `warnings` | Non-fatal collection observations. |
| `capturedAt` | UTC timestamp for the collected record. |

Emails are collected only when the profile publishes them in visible public
content or a public email link. Private account information, login-only data,
analytics, passwords and form submissions are not collected.

Video fields contain public URLs and references. The Actor does not download,
store or host video files.

### Example output

The following abbreviated record is based on the public Bio Sites profile
`https://bio.site/biosites`. Public profiles can change after collection.

```json
{
  "recordType": "profile",
  "ok": true,
  "status": "ok",
  "profileUrl": "https://bio.site/biosites",
  "finalUrl": "https://bio.site/biosites",
  "slug": "biosites",
  "profileId": "a39fd718-dc5a-4b35-ad75-7c3a360afe8e",
  "username": "biosites",
  "displayName": "BIO SITES",
  "pageTitle": "BIO SITES — Bio Sites",
  "linksCount": 15,
  "socialLinksCount": 2,
  "emails": [],
  "emailsCount": 0,
  "videoCount": 0,
  "links": [
    {
      "title": "Create your own free Bio Site",
      "url": "https://biosites.com/editor#/create?utm_source=biosite&utm_medium=organic-social",
      "section": "Section 1",
      "position": 0
    },
    {
      "title": "10 Tips for your Bio Site",
      "url": "https://drive.google.com/file/d/1zzQ-6gN2SvYulBT3VoBtyBnaHlf-gRsb/view",
      "section": "Learn",
      "position": 1
    }
  ],
  "socialLinks": [
    {
      "platform": "INSTAGRAM",
      "url": "https://www.instagram.com/bio.sites"
    },
    {
      "platform": "TIKTOK",
      "url": "https://www.tiktok.com/@bio.sites"
    }
  ],
  "warnings": [],
  "capturedAt": "2026-08-18T00:00:00+00:00"
}
```

### Status values and limitations

- Only public Bio Sites profile pages are supported.
- Password-protected links and private content cannot be opened.
- Some profiles may be unpublished, empty or temporarily unavailable.
- A profile may not publish text, email, image, social destination, media or
  links.
- Custom domains are not treated as Bio Sites profile URLs unless the supplied
  input is a supported `bio.site` URL.
- Data reflects what the public page exposes at collection time.
- Profile links are collected as published; the Actor does not crawl the
  external websites behind those links.

Use the Actor only for public profiles and information you are allowed to
collect. Respect applicable laws, privacy expectations and Bio Sites rules.

# Actor input Schema

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

Enter Bio Sites usernames, @usernames, or public bio.site profile URLs. Duplicate entries are removed.

## Actor input object example

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

# Actor output Schema

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

Dataset containing one complete record per successfully obtained public Bio Sites 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": [
        "biosites"
    ]
};

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

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

```

## MCP server setup

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