# Likee Scraper | Profile URLs, Video Stats & Growth (`cauldo/likee-creator-video-scraper`) Actor

Scrape Likee videos from public profile URLs, handles or creator UIDs. Export exact views, likes, comments and shares, track growth between runs, and return only new or changed videos. Bulk profiles, filters, creator summaries and CSV. No login or API key.

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

## Pricing

$3.00 / 1,000 video saveds

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

## Likee Scraper: Profile URLs, Video Stats & Growth

Turn public Likee creator profiles into a clean video dataset. Paste profile URLs, @handles or visible Likee IDs: the Actor resolves the internal creator UID for you, follows video pagination, and exports exact views, likes, comments and shares.

Use it for creator research, sponsored-content reporting and recurring content monitoring. No Likee login, cookies or separate API key is required.

### Why use this Actor?

- **Start with a profile URL.** `https://likee.video/@theAINA`, `@theAINA` and visible numeric Likee IDs work. Internal creator UIDs are also supported in a separate field.
- **Measure change, not just the current count.** Reuse a monitor name to get views, likes, comments and shares gained since the previous observation, the comparison interval, and views per hour.
- **Pay only for returned videos.** $3 per 1,000 videos, with no Actor start fee. Filters, duplicate inputs, unchanged videos in monitoring mode, and failed profile lookups do not create billable results.
- **Inspect multiple creators in one run.** Up to 100 profile inputs, with per-profile inspection limits and a global output cap.
- **Use clean tables immediately.** Video and growth views, downloadable CSV, and a separate creator summary. IDs stay strings so long video IDs are not rounded.
- **Know what was actually collected.** A run report lists every profile, errors, empty feeds, pagination limits and work skipped because the budget ran out. Missing counts stay `null`, rather than looking like zero engagement.

This Actor focuses on public creator feeds and repeatable measurement. It does not offer hashtag search, private content, comment bodies or guaranteed video-file downloads.

### Quick start

1. Enter one or more public profile URLs or @handles.
2. Start with 10 results and inspect the Videos table.
3. Download the video CSV, or use the dataset API in your workflow.

```json
{
  "profiles": ["https://likee.video/@theAINA"],
  "maxResults": 10,
  "maxVideosPerProfile": 10
}
```

Ten returned videos cost **$0.03**. One hundred cost **$0.30**; one thousand cost **$3.00**. The same event price applies to all Apify plans. Platform usage is included in this Actor's event pricing; external proxy-provider fees, if you configure your own provider, are separate.

There is one billing event, `video-result`, at **$0.003 per video successfully saved to the dataset**. There are no additional fees for creator summaries, growth columns, pagination or exports. A run can return fewer videos than requested because of source availability, filters or the maximum run charge.

### Track growth or receive only new videos

```json
{
  "profiles": ["@theAINA", "@HouseofB"],
  "mode": "changed",
  "monitorName": "brand-watch",
  "maxResults": 200,
  "maxVideosPerProfile": 100
}
```

Save this input as an Apify Task and attach a schedule if you want recurring checks. Reuse the same monitor name and run **one non-overlapping schedule per monitor**. This Actor does not create a schedule automatically.

| Mode | Output |
| --- | --- |
| `snapshot` | Every matching video in the inspected window. With a monitor name, also includes growth and updates the baseline. |
| `new` | Only matching videos not previously observed by this monitor. |
| `changed` | First observations and videos whose views, likes, comments or shares changed. |

The **first monitoring run returns a baseline** and charges for those returned videos. Later unchanged observations are free. `first_observation` means new to your monitor, not necessarily newly published. Use `publishedAfter` when you need recent publication dates.

Growth compares against `previousObservedAt`, not an assumed daily interval. `viewsPerHour` is computed only when the interval is positive and the view count did not decrease. Negative metric deltas remain visible with `countersDecreased: true` because the source can correct its counters.

History is stored in the named key-value store `likee-monitor-<monitorName>` in your Apify account. Up to 20,000 videos per creator are retained for 90 days after their last observation; pruning happens when that creator's history is updated. A video absent from that history can become a first observation again. Use a new monitor name for an independent baseline. Changed captions, follower counts or thumbnails alone do not trigger `changed` mode.

### Filters and collection limits

```json
{
  "profiles": ["@theAINA"],
  "maxResults": 100,
  "maxVideosPerProfile": 500,
  "minViews": 1000,
  "minEngagementRate": 1,
  "publishedAfter": "2026-01-01",
  "captionContains": "music"
}
```

All filters run before charging. Date boundaries use inclusive UTC dates. Engagement rate is `100 × (likes + comments + shares) / views`; unavailable counters and zero views produce a null rate. It is an interaction ratio, not a percentage of unique viewers, and may exceed 100%.

`maxVideosPerProfile` limits how many source videos are inspected **before** filters. Increase it to search farther into a creator's history. It is capped at 5,000; the global output limit is capped at 10,000. Profiles are processed in input order, so an early profile can fill the global limit before later profiles are reached. Source requests also have an internal safety ceiling of 400 per run. The run summary reports incomplete windows rather than promising a full archive.

### Output fields

Each dataset row is one video. The main fields are:

| Group | Fields |
| --- | --- |
| Identity | `videoId`, `videoUrl`, `creatorUid`, `creatorHandle`, `creatorName`, `creatorLikeeId`, `creatorProfileUrl` |
| Content | `caption`, `publishedAt`, `hashtags`, `country`, `musicTitle`, `musicId` |
| Engagement | `views`, `likes`, `comments`, `shares`, `engagementRate`, `creatorFollowers` |
| Growth | `observationType`, `viewsDelta`, `likesDelta`, `commentsDelta`, `sharesDelta`, `viewsPerHour`, `previousObservedAt`, `comparisonHours`, `countersDecreased` |
| Media and provenance | `width`, `height`, `thumbnailUrl`, `mediaUrl`, `observedAt`, `source` |

`mediaUrl` is often null: the public feed may omit direct video files. Thumbnail and media URLs can expire. The canonical video and profile links remain available. Follower counts are populated when a public profile resolves; internal-UID-only input may leave them null.

The Output tab also links to:

- **VIDEOS.csv** — all returned video fields, with spreadsheet formula protection for source text.
- **CREATORS.csv / CREATORS.json** — followers when available, inspected/returned counts, status and view aggregates for the returned sample. Sample totals are not career-wide statistics.
- **OUTPUT** — profile-by-profile outcomes, stop reason, source request count, pricing and monitor storage ID.

### API example

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('cauldo/likee-creator-video-scraper').call({
  profiles: ['https://likee.video/@theAINA'],
  maxResults: 50,
  maxVideosPerProfile: 50,
}, { maxTotalChargeUsd: 0.15 });

if (run.status !== 'SUCCEEDED') throw new Error(`Run status: ${run.status}`);
const report = await client.keyValueStore(run.defaultKeyValueStoreId).getRecord('OUTPUT');
// Check report.value.outcome for partial collection or limits.
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

The same Actor can be called through Apify's integrations with n8n, Make and other workflow tools. Read the run report as well as the dataset when completeness matters.

### Reliability and troubleshooting

**A profile is missing or removed.** Check its public handle or visible Likee ID. Errors appear in the run report and do not create charged rows. If all requested profiles fail, the Actor fails rather than reporting an empty successful scrape.

**An internal UID returns no videos.** Likee does not reliably distinguish an invalid UID, an unavailable creator and an empty account in this response. The Actor reports `empty_or_unavailable`. Prefer a profile URL for clearer validation.

**A run is partial.** Successful profile results are retained, and the terminal status message and run report identify the incomplete profiles. Apify may show the run itself as succeeded when some useful data was collected; inspect `OUTPUT.outcome`.

**The maximum charge stops a run.** The Actor checks the remaining allowance before saving each batch. It does not knowingly exceed the configured event budget. Pending billing calls use stable idempotency keys so replaying a batch in the same run does not charge it twice. Start a fresh run to change inputs.

**A monitor is already active.** Wait for the other run to finish. A best-effort overlap guard is included, but the underlying store does not support atomic locking: do not intentionally overlap runs sharing a monitor name. After a forced termination, a stale guard can remain for up to 24 hours; a new monitor name starts an independent baseline.

**A region blocks requests.** Direct requests worked in our release tests. An optional proxy configuration is available. Private or subscriber-only videos remain excluded; no login is performed.

### Support and scope

Open an issue on this Actor with your run ID, the affected public profile and what you expected. Never post your Apify token.

This is an independent tool, not affiliated with or endorsed by Likee. It reads public creator profiles and their public video feeds. It does not collect birthdays, contact details, private accounts or subscriber-only content. Use exported content and media only as you are permitted to do.

# Actor input Schema

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

Public profile URLs (https://likee.video/@theAINA), @handles, or visible numeric Likee IDs. Handles resolve automatically; internal creator UIDs go in Creator UIDs below.

## `creatorUids` (type: `array`):

Internal numeric posterUid/creatorUid values from a previous result. These are different from the visible Likee ID.

## `maxResults` (type: `integer`):

Global maximum across profiles. Only videos saved to the dataset are charged. The run charge limit can reduce this further.

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

Newest-first source window before filters. Limits work even if filters or monitoring return no rows. A limited window is not a complete archive.

## `mode` (type: `string`):

Monitoring uses the named monitor below. First run returns a baseline. Changed mode compares views, likes, comments and shares. Unchanged videos are free.

## `monitorName` (type: `string`):

Reuse a unique name across scheduled runs to retain history and calculate growth. Required for new/changed mode. Letters, digits and hyphens, max 50. Use one non-overlapping schedule per name; storage is in your own Apify account.

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

Videos below the threshold are skipped before charging.

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

100 × (likes + comments + shares) / views. Videos with unavailable counts or zero views cannot pass a positive threshold.

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

Optional YYYY-MM-DD, inclusive.

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

Optional YYYY-MM-DD, inclusive.

## `captionContains` (type: `string`):

Case-insensitive literal text filter on the public video caption.

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

Direct public API requests work in our tests. Enable your Apify proxy only if your region needs it. Custom proxy-provider costs are outside the Actor price.

## Actor input object example

```json
{
  "profiles": [
    "https://likee.video/@theAINA"
  ],
  "creatorUids": [],
  "maxResults": 100,
  "maxVideosPerProfile": 100,
  "mode": "snapshot",
  "minViews": 0,
  "minEngagementRate": 0,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

## `videos` (type: `string`):

No description

## `growth` (type: `string`):

No description

## `videoCsv` (type: `string`):

No description

## `creators` (type: `string`):

No description

## `creatorJson` (type: `string`):

No description

## `summary` (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": [
        "https://likee.video/@theAINA"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("cauldo/likee-creator-video-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": ["https://likee.video/@theAINA"] }

# Run the Actor and wait for it to finish
run = client.actor("cauldo/likee-creator-video-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": [
    "https://likee.video/@theAINA"
  ]
}' |
apify call cauldo/likee-creator-video-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,cauldo/likee-creator-video-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/zTUlVSXiD0y36MQHF/builds/hePfb2CCBGu5LIB6c/openapi.json
