# TikTok Social Share Preview Scraper (`rainminer/tiktok-social-share-preview-scraper`) Actor

Extract TikTok link preview metadata — title, description, thumbnail image, and embed URL — from public TikTok video, profile, hashtag, and music URLs. Returns the same Open Graph and Twitter card fields Slack, Discord, iMessage, and Facebook show when a TikTok link is pasted. No login required.

- **URL**: https://apify.com/rainminer/tiktok-social-share-preview-scraper.md
- **Developed by:** [rainminer](https://apify.com/rainminer) (community)
- **Categories:** Social media, SEO tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.49 / 1,000 share previews

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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

The **TikTok Social Share Preview Scraper** extracts **link preview card metadata** from public [TikTok](https://www.tiktok.com/) URLs — the same **Open Graph** and **Twitter card** fields that **Slack**, **Discord**, **iMessage**, **LinkedIn**, and **Facebook** show when someone pastes a TikTok link. Paste video, profile, hashtag, or music URLs and get structured JSON with title, description, thumbnail image, and embed URL.

[![TikTok social share preview card](https://api.apify.com/v2/key-value-stores/vdPXKRB5smkRYhtEV/records/tiktok-social-share-preview-scraper-banner.jpg)](https://apify.com/rainminer/tiktok-social-share-preview-scraper)

No TikTok login is required. The Actor emulates a link-preview crawler user-agent (Facebook by default) and reads the public meta tags TikTok serves to messaging apps.

***

### What does TikTok Social Share Preview Scraper do?

Most TikTok scrapers return engagement stats, comments, or transcripts. This Actor focuses on a different job — **what the link looks like when shared**:

- Reads public TikTok pages with a link-preview bot user-agent
- Returns **og:title**, **og:description**, **og:image**, and canonical **og:url**
- Includes **Twitter card** fields and TikTok **embed iframe** URL when present
- Works on **videos**, **profiles**, **hashtags**, and **music** pages
- Accepts short **vm.tiktok.com** / **vt.tiktok.com** links (redirects followed)
- Exports JSON, CSV, Excel, or API rows for CMS, chatbots, and marketing tools

***

### What data can you extract?

| Field | Description |
| ----- | ----------- |
| `url` | Canonical TikTok URL from `og:url` |
| `inputUrl` | URL you provided in the input |
| `contentType` | `video`, `profile`, `hashtag`, `music`, or `unknown` |
| `videoId` | Numeric video id when the URL is a video |
| `username` | Creator handle when available |
| `title` | Share card title — for videos: `{author} on TikTok` (matches Slack/iMessage cards) |
| `description` | Share card description — for videos: the caption from TikTok oEmbed |
| `caption` | Video caption (same as `description` for video URLs) |
| `authorName` | Creator display name |
| `authorUrl` | Creator profile URL |
| `ogTitle` | Raw `og:title` from link-preview HTML |
| `ogDescription` | Raw `og:description` from link-preview HTML |
| `imageUrl` | Preview thumbnail (`og:image`) |
| `siteName` | Usually `TikTok` |
| `twitterTitle` | Twitter card title |
| `twitterDescription` | Twitter card description |
| `twitterImage` | Twitter card image |
| `iframeUrl` | TikTok embed player URL when present |
| `iconUrl` | TikTok brand icon from Lark meta tags |
| `brandName` | Brand label (usually `TikTok`) |
| `previewBot` | Bot user-agent used (`facebook`, `twitter`, etc.) |
| `isGenericFallback` | `true` when TikTok returned a generic placeholder (often deleted/private videos) |
| `scrapedAt` | ISO timestamp |

***

### Why scrape TikTok share previews?

1. **CMS / link unfurling** — show the same preview card in your app that Slack or Discord would
2. **Marketing QA** — verify how a campaign link renders before launch
3. **Influencer outreach** — batch-check how profile and video links appear in DMs
4. **Hashtag monitoring** — capture how `#fyp` and branded tags preview in chat apps
5. **Competitive research** — compare preview thumbnails and titles across creators
6. **Chatbot enrichment** — attach title + image when a user drops a TikTok URL
7. **Archive / audit** — store what the public preview looked like on a given date
8. **No heavy browser** — fast HTTP extraction without Playwright overhead

***

### How to scrape TikTok share previews

1. Open the Actor in [Apify Console](https://console.apify.com/)
2. Paste one or more **public TikTok URLs** (video, profile, hashtag, or music)
3. Leave **Preview bot** on `facebook` (recommended)
4. Click **Start**
5. Download results from the **Output** tab (JSON, CSV, Excel, or API)

You can also call the Actor from the Apify API, a schedule, or a webhook.

***

### Input

| Field | Required | Default | Description |
| ----- | -------- | ------- | ----------- |
| `startUrls` / `tiktokUrls` | yes\* | — | Public TikTok URLs |
| `previewBot` | no | `facebook` | Link-preview bot to emulate (`facebook`, `twitter`, `discord`, `slack`, `linkedin`) |
| `maxItems` | no | `1` | Max preview rows per input URL |
| `proxyConfiguration` | no | No proxy | Enable only if TikTok is blocked in your region |

\*Provide at least one URL in `startUrls` or `tiktokUrls`.

#### Example input

```json
{
  "startUrls": [
    { "url": "https://www.tiktok.com/@khaby.lame/video/7631024397754600735" },
    { "url": "https://www.tiktok.com/@khaby.lame" },
    { "url": "https://www.tiktok.com/tag/fyp" }
  ],
  "previewBot": "facebook",
  "maxItems": 1,
  "proxyConfiguration": { "useApifyProxy": false }
}
```

***

### Output example

```json
{
  "inputUrl": "https://www.tiktok.com/@khaby.lame",
  "url": "https://www.tiktok.com/@khaby.lame",
  "contentType": "profile",
  "videoId": null,
  "username": "khaby.lame",
  "title": "Khabane lame on TikTok",
  "description": "@khaby.lame 163.0m Followers, 81 Following, 2680.9m Likes - Watch awesome short videos created by Khabane lame",
  "imageUrl": "https://p16-common-sign.tiktokcdn-us.com/...jpeg",
  "siteName": "TikTok",
  "ogType": "website",
  "twitterTitle": "Khabane lame on TikTok",
  "twitterDescription": "@khaby.lame 163.0m Followers, 81 Following, 2680.9m Likes - Watch awesome short videos created by Khabane lame",
  "twitterImage": "https://p16-common-sign.tiktokcdn-us.com/...jpeg",
  "brandName": "TikTok",
  "iconUrl": "https://lf16-tiktok-common.ibytedtos.com/obj/tiktok-web-common-sg/mtact/static/images/tiktok-logo/logo.png",
  "iframeUrl": null,
  "previewBot": "facebook",
  "isGenericFallback": false,
  "scrapedAt": "2026-09-24T12:00:00.000Z"
}
```

***

### Notes

- **Share preview ≠ full video metadata.** This Actor returns what link unfurlers see — not likes, comments, or transcripts. Use [TikTok Scraper](https://apify.com/clockworks/tiktok-scraper) for full video stats.
- **Video captions:** TikTok’s link-preview HTML often serves a generic `og:description` (`TikTok | Make Your Day`). For video URLs the Actor also calls TikTok’s public oEmbed API so `title` and `description` match Slack, Discord, and iMessage cards (e.g. `x0tkin on TikTok` + the real caption).
- **`isGenericFallback`:** When `true`, TikTok returned the generic “Visit TikTok to discover videos!” card — often for deleted, private, or invalid video ids.
- **Bot user-agent matters:** TikTok serves Open Graph tags to link-preview crawlers. The default `facebook` bot works reliably; other bots may return sparser HTML.
- **Proxies:** Usually not needed. Enable Apify Proxy only if TikTok is geo-blocked in your region.

***

### How much does it cost?

Pay-per-event pricing on the Apify platform (platform usage included):

| Event | Price |
| ----- | ----- |
| Actor start | $0.00005 |
| Share preview (per TikTok URL) | from **$0.00149** (GOLD) / **$0.00199** (FREE) |

Example: 1,000 TikTok link previews on the FREE tier ≈ **$1.99** plus the actor start fee. No proxy required for most runs.

***

### Integrations

Use the Apify API, webhooks, schedules, or integrations with Zapier, Make, and Google Sheets to automate preview checks whenever new TikTok URLs are added to a spreadsheet or CRM.

***

### Image Credit

Image credit: [TikTok](https://www.tiktok.com/)

# Actor input Schema

## `startUrls` (type: `array`):

Public TikTok URLs — videos, profiles, hashtags, music pages, or short vm.tiktok.com / vt.tiktok.com links. No login required.

## `tiktokUrls` (type: `array`):

Alternative to startUrls — plain list of TikTok URLs to fetch share previews for.

## `previewBot` (type: `string`):

Which link-preview crawler user-agent to emulate. Facebook is the default and works reliably for TikTok Open Graph tags.

## `maxItems` (type: `integer`):

Maximum share-preview rows to save per input URL. Each TikTok URL produces one preview row; keep at 1 unless you intentionally re-fetch.

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

Proxies are usually not required for TikTok share-preview metadata. Enable only if your region blocks TikTok.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.tiktok.com/@khaby.lame/video/7631024397754600735"
    },
    {
      "url": "https://www.tiktok.com/@khaby.lame"
    },
    {
      "url": "https://www.tiktok.com/tag/fyp"
    }
  ],
  "tiktokUrls": [
    "https://www.tiktok.com/@khaby.lame/video/7631024397754600735"
  ],
  "previewBot": "facebook",
  "maxItems": 1,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        {
            "url": "https://www.tiktok.com/@khaby.lame/video/7631024397754600735"
        },
        {
            "url": "https://www.tiktok.com/@khaby.lame"
        },
        {
            "url": "https://www.tiktok.com/tag/fyp"
        }
    ],
    "tiktokUrls": [
        "https://www.tiktok.com/@khaby.lame/video/7631024397754600735"
    ],
    "previewBot": "facebook",
    "maxItems": 1,
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("rainminer/tiktok-social-share-preview-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 = {
    "startUrls": [
        { "url": "https://www.tiktok.com/@khaby.lame/video/7631024397754600735" },
        { "url": "https://www.tiktok.com/@khaby.lame" },
        { "url": "https://www.tiktok.com/tag/fyp" },
    ],
    "tiktokUrls": ["https://www.tiktok.com/@khaby.lame/video/7631024397754600735"],
    "previewBot": "facebook",
    "maxItems": 1,
    "proxyConfiguration": { "useApifyProxy": False },
}

# Run the Actor and wait for it to finish
run = client.actor("rainminer/tiktok-social-share-preview-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 '{
  "startUrls": [
    {
      "url": "https://www.tiktok.com/@khaby.lame/video/7631024397754600735"
    },
    {
      "url": "https://www.tiktok.com/@khaby.lame"
    },
    {
      "url": "https://www.tiktok.com/tag/fyp"
    }
  ],
  "tiktokUrls": [
    "https://www.tiktok.com/@khaby.lame/video/7631024397754600735"
  ],
  "previewBot": "facebook",
  "maxItems": 1,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}' |
apify call rainminer/tiktok-social-share-preview-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rainminer/tiktok-social-share-preview-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/DXZtAzT9fwd5Ihcak/builds/zcGdkhjk2L3W7SQZU/openapi.json
