> ## Documentation Index
> Fetch the complete documentation index at: https://docs.brightdata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# TikTok Scraper API

> Extract structured data from TikTok profiles, posts, comments and shop products with the Bright Data [TikTok Scraper API](https://brightdata.com/products/web-scraper/tiktok). Up to 20 URLs per request.

Send a TikTok URL, get structured JSON back. The Bright Data TikTok Scraper API handles proxies, CAPTCHAs, and parsing so you can focus on your data pipeline.

<Tip>
  New to Bright Data? [Create a free account](https://brightdata.com/products/web-scraper/tiktok?hs_signup=1\&utm_source=docs) and get **5,000 free credits every month**, no credit card required. That's up to **5,000 TikTok records** to start scraping. See the [free tier](/general/account/billing-and-pricing/free-tier).
</Tip>

## How it works

You send one or more TikTok URLs to the Bright Data TikTok Scraper API. Bright Data handles the scraping infrastructure and returns clean, structured JSON.

```text theme={null}
Your app  -->  Bright Data API  -->  Structured JSON
           POST /datasets/v3/scrape
           Authorization: Bearer YOUR_API_KEY
```

All requests use a `dataset_id` to specify the data type (profiles, posts, shop, or comments) and return results in JSON, NDJSON, or CSV.

## What the response looks like

A single record returned by the Bright Data TikTok Scraper API on September 6, 2026, trimmed to the fields shown. Run the request yourself in the [quickstart](/products/scrapers/tiktok/quickstart).

```json theme={null}
{
  "nickname": "TikTok",
  "account_id": "tiktok",
  "biography": "One TikTok can make a big impact",
  "followers": 95600000,
  "following": 1,
  "likes": 463200000,
  "videos_count": 1502,
  "is_verified": true,
  "url": "https://www.tiktok.com/@tiktok",
  "profile_pic_url": "https://p16-common-sign.tiktokcdn-us.com/tos-useast5-avt-0068-tx/ba67b11de451691939223e9d978e613a~tplv-tiktokx-cropcenter:720:720.jpeg?dr=9640&refresh_token=..."
}
```

## Supported data types

<CardGroup cols={2}>
  <Card title="Profiles" icon="user" href="/api-reference/scrapers/social-media-apis/tiktok-profiles-collect-by-url">
    Follower counts, bios, verification status, likes, and video counts. Discover profiles by search URL.
  </Card>

  <Card title="Posts" icon="video" href="/api-reference/scrapers/social-media-apis/tiktok-posts-collect-by-url">
    Captions, likes, comments, shares, views, hashtags, and video URLs. Discover posts by keyword or profile URL.
  </Card>

  <Card title="TikTok Shop" icon="store" href="/api-reference/scrapers/social-media-apis/tiktok-shop-collect-by-url">
    Product names, prices, ratings, reviews, and seller details. Discover products by category, keyword, or shop.
  </Card>

  <Card title="Comments" icon="comments" href="/api-reference/scrapers/social-media-apis/tiktok-comments-collect-by-url">
    Comment text, likes, replies, and commenter details for any post.
  </Card>

  <Card title="Posts by Profile Fast API" icon="bolt" href="/api-reference/scrapers/social-media-apis/tiktok-posts-by-profile-fast-api-collect-by-url">
    Quickly collect all posts from a specific TikTok profile URL.
  </Card>
</CardGroup>

## Request methods

The Bright Data Scraper API supports two request methods. Choose based on your volume and latency needs.

| Method           | Endpoint                                                         | Best for                                          |
| :--------------- | :--------------------------------------------------------------- | :------------------------------------------------ |
| **Synchronous**  | `/scrape`                                                        | Real-time lookups, up to 20 URLs                  |
| **Asynchronous** | [`/trigger`](/products/scrapers/scrapers-library/async-requests) | Batch jobs, 20 or more URLs, production pipelines |

Learn more in [Understanding sync vs. async requests](/concepts/sync-vs-async).

Both endpoints accept the inputs as a bare JSON array, which is what every example on this page uses, or as an object with an `input` array. Use the object form when you also send `custom_output_fields` or `limit_per_input` on either endpoint, or a `deliver` block on `/trigger`. See [Request body](/api-reference/scrapers/synchronous-requests#request-body).

## Capabilities and limits

| Capability                     | Detail                                                                                                                                                                                                                                    |
| :----------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Output formats**             | JSON, NDJSON, CSV                                                                                                                                                                                                                         |
| **Max URLs per sync request**  | 20                                                                                                                                                                                                                                        |
| **Max URLs per async request** | Unlimited, up to 1 GB of input per job                                                                                                                                                                                                    |
| **Data freshness**             | Real-time (scraped on demand)                                                                                                                                                                                                             |
| **Delivery options**           | API download, [webhook](/products/scrapers/scrapers-library/data-delivery), [Amazon S3](/products/scrapers/scrapers-library/data-delivery), Snowflake, Azure, GCS ([all destinations](/products/scrapers/scrapers-library/data-delivery)) |
| **Pricing**                    | Pay per successful record ([see pricing](https://brightdata.com/pricing/web-scraper))                                                                                                                                                     |

## Common questions

### Is the data scraped in real time?

Yes. Each request triggers a live scrape. There is no cached or stale data. Processing time varies with target-site conditions and scraper workload. The Bright Data TikTok Scraper API does not publish a fixed response time. A synchronous request waits up to 1 minute, then returns HTTP `202` with a `snapshot_id` and continues asynchronously. Discovery requests always run asynchronously and take longer depending on result volume.

### Why do response times change over time?

TikTok changes how its pages are served, and the Bright Data TikTok Scraper API collectors are updated to match. A collector update can change how long a scrape takes even when the success rate stays the same. For production workloads, build against the [async workflow](/products/scrapers/scrapers-library/async-requests) or [webhook delivery](/products/scrapers/scrapers-library/data-delivery) so a longer run does not break the integration.

### What is the difference between URL collection and discovery?

**URL collection** scrapes a specific TikTok page you provide (e.g., a profile URL). **Discovery** finds TikTok content matching search criteria (e.g., all posts containing a keyword) and scrapes the results. Discovery is accepted on both endpoints. On `/scrape` it usually runs past the 1-minute limit and returns HTTP `202` with a `snapshot_id`, so use the async [`/trigger`](/products/scrapers/scrapers-library/async-requests) endpoint for discovery.

### How is this different from scraping using proxies or Web Unlocker API?

When scraping using proxies or Web Unlocker API, you still need to write and maintain your own parsing logic and update it whenever the target site changes its page structure. The Bright Data Scraper API handles the entire stack: proxy rotation, anti-bot bypassing and parsing. You send a URL or keyword and get clean, structured JSON back, with no scraping infrastructure or parser maintenance on your end.

## Next steps

<CardGroup cols={3}>
  <Card title="Quickstart" icon="rocket" href="/products/scrapers/tiktok/quickstart">
    Scrape your first TikTok profile in 5 minutes.
  </Card>

  <Card title="Endpoints" icon="bolt" href="/products/scrapers/tiktok/send-first-request">
    One request per endpoint, each with a captured response.
  </Card>

  <Card title="API reference" icon="code" href="/api-reference/scrapers/social-media-apis/tiktok-profiles-collect-by-url">
    Endpoint specs, parameters, and response schemas.
  </Card>
</CardGroup>
