# Likee Scraper - Videos, Creators & Trending by Country (`scrapewise/likee-scraper`) Actor

Scrape Likee (likee.video) without login: all videos of a profile with views, likes, comments, shares and engagement, video by link, featured creators and trending hashtags by country, and a Creators mode with one summary row per profile. US$ 4 per 1,000.

- **URL**: https://apify.com/scrapewise/likee-scraper.md
- **Developed by:** [Scrapewise Data](https://apify.com/scrapewise) (community)
- **Categories:** Social media, Videos
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.40 / 1,000 result delivereds

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

## Likee Scraper: creator videos, stats, featured creators and trending hashtags by country

Scrape [Likee](https://likee.video/) (likee.video, the short-video app from BIGO) **without an account, cookies or
a browser**: every public video of a creator with views, likes, comments, shares, engagement rate, caption,
hashtags, publish date, cover, music and country, plus the creator's followers, following, total likes and verified
badge. Paste a video link to get that one video. Discover the **creators Likee features in each country** (US,
Indonesia, Russia, India...) and the **trending hashtags by country**. Switch to **Creators mode** for one summary
row per profile: averages and medians of views, likes and engagement, posts per week and best video.

Built for influencer agencies and brands vetting Likee creators, social media analysts tracking competitors,
researchers building short-video datasets, and anyone who needs Likee stats in JSON, CSV or Excel.

**US$ 4.00 per 1,000 results. No start fee, no monthly fee. Error rows, duplicates and filtered-out videos are
free.**

### At a glance

- **Price per 1,000 results, Free plan:** US$ 4.00
- **Fee per run start:** None
- **All videos of a profile (latest or most viewed):** Yes
- **Video by link:** Yes
- **Only new videos since a date (for schedules):** Yes
- **Filters: views, likes, comments, shares, engagement, date:** Yes
- **Creators mode (one summary row per profile):** Yes
- **Featured creators by country:** Yes
- **Trending hashtags by country:** Yes
- **Direct MP4 link:** No (see Limitations)
- **Error rows (profile not found, video not found, private):** Free, with an `errorCode`

### One real row

From a cloud test run on 2026-09-28 (`"profiles": ["troomhands"]`, the Troom Troom brand channel):

```json
{
  "type": "video",
  "id": "7237052592019851234",
  "url": "https://likee.video/@troomhands/video/7237052592019851234",
  "caption": "#StressOff from #Likee️ #HelloLikee check it out!",
  "title": null,
  "hashtags": ["HelloLikee", "StressOff", "MyDramaID", "Likee️"],
  "createTime": "2023-05-25T09:40:13Z",
  "timestamp": 1685007613,
  "viewCount": 7466,
  "likeCount": 497,
  "commentCount": 17,
  "shareCount": 12,
  "engagementRate": 7.05,
  "coverUrl": "https://videosnap.like.video/eu_live/9uN/1FWtlR_4.jpg?wmk_sdk=1&type=8",
  "width": 720,
  "height": 1280,
  "postType": 0,
  "country": "US",
  "musicMeta": {"id": null, "title": null, "author": null, "isOriginalSound": null},
  "videoUrl": null,
  "authorMeta": {
    "likeeId": "troomhands",
    "uid": "673826786",
    "nickname": "Troom Troom",
    "url": "https://likee.video/@troomhands",
    "followers": 3505027,
    "following": 28,
    "totalLikes": 3058154,
    "verified": true,
    "verifiedLabel": "Verified Creator",
    "level": 25,
    "privateAccount": false
  },
  "source": "profile:troomhands",
  "scrapedAt": "2026-09-28T22:38:41Z",
  "errorCode": null
}
```

`engagementRate` is (likes + comments + shares) / views x 100. When the video uses a song, `musicMeta` has its id,
title and author (for example `{"id": "4588094", "title": "original sound - Fear And Peace", "author": "Fear And
Peace", "isOriginalSound": true}`). `authorMeta.avatar` (profile picture link) is also included.

### Input

Every field is optional. An empty input returns 20 videos of the public brand profile `troomhands`.

```json
{
  "profiles": ["https://likee.video/@troomhands", "@WooHoo_en", "673826786"],
  "maxVideosPerProfile": 100,
  "sortBy": "latest",
  "publishedAfter": "30 days",
  "minViews": 1000
}
```

| Field | What it does |
|---|---|
| `profiles` | Profile links (`likee.video/@handle`), handles with or without `@`, or numeric uids. |
| `videoUrls` | Video links `likee.video/@handle/video/<id>`. Each returns that video with its stats. |
| `countries` | Two-letter codes (US, ID, RU, IN, BR...). Takes the creators Likee features in each country. |
| `maxCreatorsPerCountry` | Featured creators per country (empty = 20, up to 100; 0 = none, for hashtags only). |
| `includeTrendingHashtags` | Adds the trending hashtags of each country (or the US): name, views, posts, rank. |
| `resultType` | `videos` (one row per video) or `creators` (one summary row per profile). |
| `maxVideosPerProfile` | Videos per profile (empty = 50; in Creators mode, the latest 30 are analyzed). 0 = all. |
| `maxItems` | Rows in the whole run (empty or 0 = no total limit). |
| `sortBy` | `latest` (default) or `popular` (reads up to 3,000 videos per profile, most viewed first). |
| `publishedAfter` / `publishedBefore` | Date (YYYY-MM-DD) or relative period (`7 days`, `2 weeks`). |
| `minViews`, `minLikes`, `minComments`, `minShares`, `minEngagementRate` | Skip videos below these values. |
| `minFollowers` | Skip creators below this follower count. |

#### Only new videos, every day

Schedule the Actor with `"publishedAfter": "1 day"` (or `"7 days"` weekly). With `latest`, it stops reading each
profile as soon as it passes that date, so a daily run over a list of creators costs only the new videos.

#### Creators mode

```json
{ "countries": ["US", "ID"], "resultType": "creators", "maxCreatorsPerCountry": 20 }
```

One row per creator: `likeeId`, `uid`, `nickname`, `url`, `avatar`, `followers`, `following`, `totalLikes`,
`verified`, `verifiedLabel`, `level`, `privateAccount`, and over the latest videos analyzed: `videosAnalyzed`,
`avgViews`, `medianViews`, `avgLikes`, `avgComments`, `avgShares`, `avgEngagementRate`, `viewsPerFollower`,
`postsPerWeek`, `lastPostAt`, `oldestAnalyzedPostAt`, `topVideoUrl`, `topVideoViews`, `topVideoCaption`. Rows
from `countries` add `featuredCountry` and `featuredRank`. The dataset has a **Creators** view.

#### Trending hashtags

```json
{ "countries": ["US", "RU"], "includeTrendingHashtags": true, "maxCreatorsPerCountry": 0 }
```

A real row from a cloud run on 2026-09-28:

```json
{"type": "hashtag", "hashtag": "WindowView", "hashtagId": "6521256422621236646", "viewCount": 11152566,
 "postCount": 2192, "country": "US", "rank": 2, "source": "hashtags:US"}
```

### Price

- **US$ 4.00 per 1,000 results** (US$ 0.004 each): a video, a creator row or a hashtag row. No fee per run.
- Never charged: error rows, duplicates, and videos or creators outside your filters.
- Examples: 500 videos of one creator = US$ 2.00. 40 featured creators in Creators mode = US$ 0.16.

You can set a maximum cost per run in Apify: the Actor stops when the limit is reached and keeps what it saved.

### Errors you may see

Every error is a row with `errorCode` and is never charged:

| errorCode | Meaning |
|---|---|
| `INVALID_INPUT` | A field has a wrong value (the message says which). |
| `INVALID_URL` | Not a Likee profile or video link, or a share link (`l.likee.video/v/...`), which opens only in the app. |
| `NOT_FOUND` | The profile does not exist. |
| `PROFILE_REMOVED` | Likee removed the account. |
| `PRIVATE_ACCOUNT` | The account is private; its videos are not public. |
| `NO_VIDEOS` | The profile has no public videos. |
| `VIDEO_NOT_FOUND` | The video is not in the creator's profile any more (deleted or hidden). |
| `NO_RESULTS` | Likee has no featured creators or trending hashtags for that country. |
| `BLOCKED` | Likee did not answer after several attempts; run again. |
| `NOT_REACHED` | The run timeout arrived before this item. |

### Good to know

- Profiles are read from the newest video back, 50 videos per request. In our tests a 500-video profile took
  41 seconds and 850 videos from 20 creators took 66 seconds.
- The Actor uses Apify's datacenter proxy and, only if Likee refuses it, a residential IP for that request. You pay
  only the per-result price above.
- Public creator data only: Likee ID, uid, display name, avatar, followers, following, total likes, level and
  badge. Bio, links to other social networks, birthday, mentions and comments are **never** collected, and any
  email address, phone number or WhatsApp/Telegram link written in a caption or name is replaced by
  `[contact removed]`.

### Limitations

- **No MP4 link.** Likee's public web API returns `videoUrl: null` for every video, so `videoUrl` is always null.
  Covers, stats and captions are complete.
- **No keyword search, no hashtag feeds, no "popular" feed.** Likee switched those web endpoints off for everyone
  (they answer "system busy"). Start from profiles, video links or countries.
- **No video duration.** Likee does not return it on the web.
- Video links need the creator's handle (`likee.video/@handle/video/<id>`). App share links (`l.likee.video/v/...`)
  only redirect to Likee's home page on the web.
- Countries without their own featured list get Likee's default list (the US one); those rows have
  `featuredListIsDefault: true`. Trending hashtags are Likee's own recommended list and can include older
  campaigns.

### FAQ

**Do I need a Likee account?** No. Everything comes from Likee's public web data, without login.

**How do I get only the videos posted since my last run?** Set `publishedAfter` to `1 day` (or the date of your
last run) and schedule the Actor.

**Can I get a creator's most viewed videos?** Yes: `"sortBy": "popular"` reads up to 3,000 videos of each profile
and returns the most viewed first.

**How do I find Likee influencers in a country?** Use `countries` with `resultType: creators`. Add `minFollowers`
to skip small accounts.

**Something broke or a field is missing?** Open an issue on the Actor page. Issues are answered within a day.

### Changelog

- **0.1 (28 Sep 2026):** first version. Profiles (link, handle or uid), video links, featured creators and
  trending hashtags by country, Creators mode, latest or popular order, date, views, likes, comments, shares,
  engagement and follower filters.

# Actor input Schema

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

Likee creators, one per line: profile link (https://likee.video/@troomhands), handle with or without @ (troomhands, @troomhands) or numeric uid. Each profile returns its videos, newest first (or most viewed first with 'Sort by: popular').

## `videoUrls` (type: `array`):

Likee video links, one per line, in the form https://likee.video/@handle/video/<id>. The Actor finds each video in its creator's profile and returns it with its stats.

## `countries` (type: `array`):

Two-letter country codes, one per line (US, ID, RU, IN, BR...). For each country the Actor takes the creators Likee features there and returns their videos, or one row per creator in 'Creators' mode. Countries without their own list return Likee's default list (flagged as featuredListIsDefault).

## `maxCreatorsPerCountry` (type: `integer`):

How many featured creators to take from each country, in Likee's order. Empty = 20. Likee lists up to 100 per country. 0 = no creators (only the trending hashtags, if turned on).

## `includeTrendingHashtags` (type: `boolean`):

Adds one row per trending hashtag in each country above (or in the US when no country is set): hashtag name, total views and number of posts. Likee shows 1 to 50 per country (in our tests: US 8, Indonesia 1, Russia 50). Each hashtag row is charged like a video.

## `resultType` (type: `string`):

'Videos' returns every video with its stats. 'Creators' returns one row per profile: followers, total likes, verified badge, plus averages and medians over its latest videos (views, likes, engagement rate, posts per week, best video). Same price per row.

## `maxVideosPerProfile` (type: `integer`):

Videos returned per profile (in 'Creators' mode: latest videos used for the averages). Empty = 50 (30 in 'Creators' mode, no cap per profile when 'Max items' is set). 0 = all videos of the profile.

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

Stop after this many rows in the whole run, across all profiles, links and countries. Empty or 0 = no total limit. You pay per row delivered.

## `sortBy` (type: `string`):

'Latest' follows the profile from the newest video back. 'Popular' reads up to 3,000 videos of each profile and returns the most viewed first.

## `publishedAfter` (type: `string`):

Only videos newer than this date (YYYY-MM-DD) or relative period ('7 days', '2 weeks'). Use it to collect only new videos on a schedule. With 'Latest', the Actor stops reading a profile once it passes this date.

## `publishedBefore` (type: `string`):

Only videos older than this date (YYYY-MM-DD) or relative period.

## `minViews` (type: `integer`):

Skip videos with fewer views. Skipped videos are not charged.

## `minLikes` (type: `integer`):

Skip videos with fewer likes.

## `minComments` (type: `integer`):

Skip videos with fewer comments.

## `minShares` (type: `integer`):

Skip videos with fewer shares.

## `minEngagementRate` (type: `number`):

Skip videos below this engagement rate, in percent: (likes + comments + shares) / views x 100.

## `minFollowers` (type: `integer`):

Skip creators with fewer followers (useful with featured creators by country). Skipped creators are not charged.

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

Apify datacenter proxy is the default and works for Likee. Failed requests are retried on a new IP.

## Actor input object example

```json
{
  "profiles": [
    "troomhands"
  ],
  "resultType": "videos",
  "maxVideosPerProfile": 20,
  "sortBy": "latest",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (type: `string`):

No description

## `resultsCsv` (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": [
        "troomhands"
    ],
    "maxVideosPerProfile": 20,
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapewise/likee-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": ["troomhands"],
    "maxVideosPerProfile": 20,
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapewise/likee-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": [
    "troomhands"
  ],
  "maxVideosPerProfile": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call scrapewise/likee-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapewise/likee-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/3g1b0StMWY0hcwiGx/builds/aF7ffWKTwbTp2hYdt/openapi.json
