# Likee Scraper - Profiles, Videos & Stats (`mina_safwat/likee-scraper`) Actor

Scrapes Likee without login: creator profiles with followers, likes and level, and their videos with exact views, likes, comments, shares, hashtags, sounds and post dates, from profile or video links.

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

## Pricing

$4.00 / 1,000 rows

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/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

### What does Likee Scraper do?

**Likee Scraper** extracts public data from [Likee](https://likee.video) without logging in. Paste a **creator's profile link** (or just their Likee ID) and get their **profile** — followers, following, total likes, level, verified badge, bio and linked social accounts — plus their **newest videos** with **exact view, like, comment and share counts**, caption, hashtags, Likee topics, mentions, sound, country and post date. Paste a **video link** to get that one video, including a **direct MP4 link** when it is a share link.

It reads the same public data the Likee website and app show, over plain HTTP, so runs are fast and cheap: the default input finishes in about 5 seconds. As an Apify Actor, it gives you API access, scheduling, integrations (Make, Zapier, Google Sheets, webhooks), automatic proxy fallback and run monitoring.

### Why use Likee Scraper?

- **Influencer research**: compare creators by followers, total likes and the real engagement of their latest videos.
- **Campaign tracking**: re-run on a schedule to follow views and likes of sponsored videos over time.
- **Trend and content analysis**: collect captions, hashtags, sounds and post times across many creators.
- **Exact numbers**: Likee's website rounds counters (84.84K); this Actor returns the exact figures (84,839).
- **Fair billing**: you pay only for rows saved. Missing users, private accounts and broken links are listed in a separate record and never billed.

### How to scrape Likee profiles and videos

1. Click **Try for free** and open the **Input** tab.
2. Paste one or more Likee links or IDs into **Likee profiles or videos**, one per line.
3. Choose how many videos to read per profile (newest first).
4. Click **Start** and wait a few seconds.
5. Open the **Output** tab and download your data as JSON, CSV, Excel or HTML.

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `startUrls` | array of strings | — | Profile links (`https://likee.video/@Likee_Official`), `@handles` or bare Likee IDs, share links (`https://likee.video/v/…` or `https://l.likee.video/v/…`, as the app's Share button gives them) or full video links (`https://likee.video/@mskaramelka01/video/7696047063190056253`). Links without `https://` work too. |
| `maxVideosPerProfile` | integer | 50 | Videos to save for each profile link, newest first. 0 saves only the profile row; with **Save profile rows** off as well, profile links are skipped and listed in `FAILED_INPUTS`, while video links still save their video. |
| `includeProfileRow` | boolean | true | Adds one profile row for each profile link. |
| `maxItems` | integer | 0 | Stops the whole run after this many rows. 0 = no limit. |
| `proxyConfiguration` | object | none | Leave empty; the Actor falls back to Apify Proxy on its own when needed. |

```json
{
    "startUrls": [
        "https://likee.video/@Likee_Official",
        "mskaramelka01",
        "https://likee.video/@mskaramelka01/video/7696047063190056253"
    ],
    "maxVideosPerProfile": 20,
    "includeProfileRow": true
}
```

API callers can also pass `startUrls` as objects: `[{"url": "https://likee.video/@Likee_Official"}]`.

### Output

Each row has a `type`: `profile` or `video`. You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. Real rows from runs on 2026-10-11 and 2026-10-13 (avatar and cover links shortened):

```json
[
    {
        "type": "profile",
        "url": "https://likee.video/@mskaramelka01",
        "uid": "1344384317",
        "handle": "mskaramelka01",
        "nickname": "ɪ’ᴍ ᴋᴀʀᴀᴍᴇʟᴋᴀ👑",
        "bio": "kristinakaramelka@gmprod.agency",
        "avatarUrl": "https://img.like.video/eu_live/2ux/1uMDLf00m4bSmrU1SfxNs_4.jpg?…",
        "followers": 5806637,
        "following": 5201,
        "totalLikes": 197954629,
        "level": 25,
        "beans": 1019428,
        "verified": true,
        "badge": "Verified Creator",
        "private": false,
        "website": "http://kristinakaramelkagmprod.agency",
        "socials": { "youtube": "UCxl5CwLGVn02TUKghy8MAEg" },
        "sourceUrl": "mskaramelka01",
        "scrapedAt": "2026-10-11T07:41:13.959138+00:00"
    },
    {
        "type": "video",
        "url": "https://likee.video/@mskaramelka01/video/7696047063190056253",
        "postId": "7696047063190056253",
        "caption": "МОИ ФАНЫ САМЫЕ ЛУЧШИЕ🥺❤️#мскарамелька",
        "hashtags": ["мскарамелька"],
        "topics": [],
        "mentions": [],
        "views": 59266,
        "likes": 11653,
        "comments": 575,
        "shares": 73,
        "statsExact": true,
        "postedAt": "2026-10-13T07:13:11+00:00",
        "coverUrl": "https://videosnap.like.video/eu_live/9uy/1xGWhB00m2IH3Aw27H1fz_4.jpg?…",
        "videoUrl": null,
        "width": 1080,
        "height": 1920,
        "soundId": "3401079767190056253",
        "soundName": "original sound - ɪ’ᴍ ᴋᴀʀᴀᴍᴇʟᴋᴀ👑",
        "country": "RU",
        "author": {
            "uid": "1344384317",
            "likeeId": "mskaramelka01",
            "nickname": "ɪ’ᴍ ᴋᴀʀᴀᴍᴇʟᴋᴀ👑",
            "avatarUrl": "https://img.like.video/eu_live/2ux/1uMDLf00m4bSmrU1SfxNs_4.jpg?…"
        },
        "sourceUrl": "https://likee.video/@mskaramelka01",
        "scrapedAt": "2026-10-13T11:54:24.621001+00:00"
    }
]
```

### Data fields

#### Video rows

| Field | Description |
|---|---|
| `url` | Canonical video link, `https://likee.video/@{likeeId}/video/{postId}` |
| `postId` | Likee's post ID, as text (it is too long for a JavaScript number) |
| `caption` | The video's text, or null when it has none |
| `hashtags` | Hashtags the creator typed in the caption, without `#` |
| `topics` | Topic tags Likee attached to the video on its own, often the same topic in several languages (for example `SkinCare`, `УходЗаЛицом`); empty when there are none and on `statsExact: false` rows |
| `mentions` | Tagged users: `{nickname, uid}` |
| `views`, `likes`, `comments`, `shares` | Counters as whole numbers |
| `statsExact` | `true` when the counters are exact; `false` when only Likee's rounded share-page figures were available (see FAQ) |
| `postedAt` | When it was posted, ISO 8601 in UTC |
| `coverUrl` | Cover image |
| `videoUrl` | Direct MP4 link — **only for share links** (`/v/…`); null for videos read from a profile or a full video link |
| `width`, `height` | Video size in pixels |
| `soundId`, `soundName` | The original sound (named "original sound - {creator}" as on Likee) or the licensed song used; null when the video has none |
| `country` | Country code Likee assigns to the post |
| `author` | `{uid, likeeId, nickname, avatarUrl}` |
| `sourceUrl` | The input that produced the row |
| `scrapedAt` | When the row was saved |

#### Profile rows

| Field | Description |
|---|---|
| `url`, `uid`, `handle` | Profile link, numeric user ID and Likee ID |
| `nickname`, `bio`, `avatarUrl` | Display name, bio text and profile picture |
| `followers`, `following`, `totalLikes` | Exact counters |
| `level` | Likee creator level |
| `beans` | Likee's in-app gift currency balance, as Likee reports it |
| `verified`, `badge` | Whether the creator has a badge, and its text (for example "Verified Creator") |
| `private` | Whether the account is private (its videos are hidden) |
| `website` | Link in the profile, or null |
| `socials` | Linked accounts by network: `instagram`, `youtube` (channel ID), `vk`, `twitter`, `facebook`, `odnoklassniki`, `weibo` |
| `sourceUrl`, `scrapedAt` | As for videos |

### How much does it cost to scrape Likee?

The Actor uses pay-per-result pricing: you pay a fixed price for each row saved (video or profile) — see the **Pricing** tab for the exact price. Rows that fail are never saved, so they are never billed. Platform costs are very low: a run that saved 1,059 rows used under one cent of compute and traffic, because Likee's data comes as small JSON answers (about 1.4 KB per video) and no browser is used. You can cap the spend of any run with **Max rows in total** or with the run's maximum cost setting; the Actor stops cleanly at either limit.

### Tips and advanced options

- **Scrape many creators at once**: paste dozens of profiles; five are read at the same time.
- **Profiles only**: set **Max videos per profile** to 0 to get just the creator rows — the cheapest way to compare follower counts.
- **Deep history**: videos are read in pages of 100, so 1,000 videos of one creator take about 10 requests.
- **Track a video over time**: schedule a run on its link; each run returns the current exact counters.
- **Leave the proxy empty**: the Actor connects directly, falls back to Apify's datacenter proxy and, only as a last resort, to residential proxy.

### FAQ, disclaimers and support

**Can it search Likee by keyword, hashtag or trending?** No. Likee's search, hashtag and trending data refuse requests made without logging in (Likee answers "system busy"), so this Actor only reads profiles and videos you link to. Hashtag and search links are listed in `FAILED_INPUTS` with that reason.

**Why does a video show `statsExact: false`?** For a share link, the Actor looks the video up in its author's public video list to get exact counters. If it is not there (for example the author hid it from their profile), it falls back to the rounded figures on the share page (such as 84.84K → 84840; views come from the page's description text). Such a row takes its hashtags from the caption and has no `topics` or `mentions`.

**What happens with private accounts, missing users or deleted videos?** They are not saved and not billed. Each is listed with a plain-language reason in the `FAILED_INPUTS` record of the run's key-value store, and the run still succeeds. A private account still gets its profile row when **Save profile rows** is on. A run fails only when Likee could not be reached for every input.

**Does it scrape comments?** No — each video row has the exact comment count, but not the comments themselves.

**Is it legal to scrape Likee?** This Actor reads only data that Likee shows publicly without logging in. Profiles and captions can contain personal data (names, contact details in bios); you are responsible for having a lawful reason to collect and process it, for example under GDPR, and for respecting Likee's terms. If unsure, consult a lawyer.

**Something not working, or need a custom solution?** Open an issue on the **Issues** tab with the input you used — we read every report.

# Actor input Schema

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

One per line. Paste a profile link (https://likee.video/@Likee_Official), an @handle or a bare Likee ID to get the profile and its newest videos; or a video link, either a share link from the app's Share button (https://likee.video/v/… or https://l.likee.video/v/…) or a full one (https://likee.video/@mskaramelka01/video/7696047063190056253), to get that one video. Hashtag, search and trending pages cannot be read and are listed in the FAILED_INPUTS record.

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

Stops after this many videos for each profile link, newest first. Set 0 to save only profile rows; with "Save profile rows" off as well, profile links are skipped and listed in the FAILED_INPUTS record. Video links always save their one video.

## `includeProfileRow` (type: `boolean`):

Adds one row for each profile link with the creator's followers, following, total likes, level, verified badge, bio and linked social accounts. A private account still gets its profile row; its videos are hidden by Likee.

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

Stops the whole run after this many rows (videos and profiles together). 0 means no limit beyond the per-profile one.

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

Leave this empty: Likee answers the Actor directly, and if it ever refuses, the Actor retries through Apify's datacenter and then residential proxies on its own. A proxy chosen here is used for every request instead.

## Actor input object example

```json
{
  "startUrls": [
    "https://likee.video/@Likee_Official",
    "https://likee.video/@mskaramelka01"
  ],
  "maxVideosPerProfile": 20,
  "includeProfileRow": true,
  "maxItems": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `dataset` (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": [
        "https://likee.video/@Likee_Official",
        "https://likee.video/@mskaramelka01"
    ],
    "maxVideosPerProfile": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("mina_safwat/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 = {
    "startUrls": [
        "https://likee.video/@Likee_Official",
        "https://likee.video/@mskaramelka01",
    ],
    "maxVideosPerProfile": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("mina_safwat/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 '{
  "startUrls": [
    "https://likee.video/@Likee_Official",
    "https://likee.video/@mskaramelka01"
  ],
  "maxVideosPerProfile": 20
}' |
apify call mina_safwat/likee-scraper --silent --output-dataset

```

## MCP server setup

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