# Lemon8 Scraper — Posts, Comments, Hashtags & Creators (`memo23/lemon8-scraper`) Actor

Lemon8 scraper: search posts by keyword or hashtag, get likes, saves, views, comments and shares, full text with hashtags, images and video links, comment threads, creator profiles with followers, creator search and hot keywords. No login or cookies.

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

## Pricing

from $2.00 / 1,000 posts

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

## Lemon8 Scraper — Posts, Comments, Hashtags & Creators

Get structured data from **Lemon8**, the lifestyle app from the makers of TikTok: posts by keyword or hashtag, post details, comment threads, creator profiles, creator search and the current hot keywords. No login, no cookies, no proxy to set up.

### What it does

| Input | You get |
|-------|---------|
| Search keyword | Posts matching the keyword |
| Hashtag | Posts under the hashtag, with the hashtag's total views and post count |
| Post link or id | The full post row, with region and category |
| Creator link, `@handle` or id | Followers, following, post count, likes and saves received, bio |
| Creator-search keyword | Creators matching a name or topic, with followers and post count |
| `includeComments` | Comments and replies of every post in the run |
| `includeHotKeywords` | Lemon8's current hot search keywords |
| `includeEditorsPicks` | Posts of the curated collections on the discover page |
| `includeFollowers` / `includeFollowing` | A creator's followers and the accounts they follow |

Every row carries a `type`: `post`, `comment`, `reply`, `creator`, `follower`, `following` or `hot-keyword`. The dataset has **Posts**, **Comments**, **Creators** and **Hot keywords** views.

### How It Works

<p align="center">
  <img src="https://api.apify.com/v2/key-value-stores/Ec8QTjlZQg8pgLRSR/records/how-it-works-lemon8.png" alt="How the Lemon8 scraper works" width="900" />
</p>

### Input

| Field | Type | Description |
|-------|------|-------------|
| `keywords` | `string[]` | Search keywords. A post found by two keywords is returned once. |
| `maxResultsPerKeyword` | integer | Posts per keyword. Default 50. |
| `hashtags` | `string[]` | Hashtag names, with or without `#`. The name must match exactly. |
| `maxResultsPerHashtag` | integer | Posts per hashtag. Default 30. |
| `postUrls` | `string[]` | `lemon8-app.com/@handle/…` links or post ids. |
| `creators` | `string[]` | Profile links, `@handle`s or creator ids (billed `creator-profile`). |
| `creatorKeywords` / `maxCreatorsPerKeyword` | `string[]` / integer | Find creators by keyword. Default 20 per keyword. |
| `includeComments` / `maxCommentsPerPost` | boolean / integer | Comment and reply rows. Default 20 per post. |
| `includeHotKeywords` | boolean | The current hot search keywords. |
| `includeEditorsPicks` | boolean | Posts of the curated discover-page collections (billed `post`). |
| `includeFollowers` / `includeFollowing` | boolean | For each creator: follower and following rows (billed `follower`). |
| `maxFollowersPerCreator` | integer | Default 100, up to 5,000, for each of the two lists. |
| `maxItems` | integer | Cap on post rows per run. Default 100. |

#### Example: keyword search with comments

```json
{
  "keywords": ["skincare", "outfit ideas"],
  "maxResultsPerKeyword": 100,
  "includeComments": true,
  "maxItems": 200
}
```

#### Example: hashtags and creators

```json
{
  "hashtags": ["skincareroutine"],
  "maxResultsPerHashtag": 40,
  "creators": ["https://www.lemon8-app.com/@addy.h.n"]
}
```

### Output

Post:

```json
{
  "type": "post",
  "source": "url",
  "postId": "7596769672020754999",
  "url": "https://www.lemon8-app.com/@addy.h.n/7596769672020754999",
  "kind": "images",
  "title": "Girly 🎀& clean routine 🫧",
  "hashtags": ["cleangirly", "skincare", "Lemon8Diary"],
  "language": "en",
  "region": "us",
  "category": "beauty/beauty_care/skincare",
  "publishedAt": "2026-01-18T18:32:59.000Z",
  "likes": 2499,
  "saves": 1986,
  "comments": 24,
  "shares": 22,
  "views": 107736,
  "creatorId": "7533005399441425422",
  "creatorName": "adeline.cute1",
  "creatorHandle": "addy.h.n",
  "creatorUrl": "https://www.lemon8-app.com/@addy.h.n",
  "imageCount": 6
}
```

Post rows also carry `text` (the full body), `images[]`, `coverUrl`, `creatorBio`, `creatorAvatar` and, for video posts, `videoDurationSeconds`, `videoUrl` and `videoQualities[]`. Search rows add `searchKeyword`; hashtag rows add `hashtag`, `hashtagViews` and `hashtagPosts`. `region` and `category` are filled for posts fetched by link. Media links are signed and expire after a few days.

Creator:

```json
{
  "type": "creator",
  "creatorId": "7533005399441425422",
  "handle": "addy.h.n",
  "url": "https://www.lemon8-app.com/@addy.h.n",
  "name": "adeline.cute1",
  "followers": 176,
  "following": 23,
  "postCount": 2,
  "likesReceived": 2950,
  "savesReceived": 2755
}
```

Comment:

```json
{
  "type": "comment",
  "postId": "7596769672020754999",
  "commentId": "7601605485103416119",
  "text": "I don’t have toner, face masks, or serum.😭😂",
  "likes": 8,
  "replyCount": 0,
  "postedAt": "2026-01-31T19:11:37.000Z",
  "author": "I❤️STEVEHARRINGTON",
  "authorHandle": "behzadnikzad845",
  "likedByCreator": true
}
```

A `reply` row has the same columns plus `parentCommentId`.

### Pricing

Pay per event. You pay for rows you receive; a failed lookup costs nothing.

| Event | When | Price |
|-------|------|-------|
| Actor start | Once per run | $0.005 |
| Post | Each post row | $0.002 |
| Comment | Each comment or reply row | $0.001 |
| Creator profile | Each full creator row | $0.004 |
| Creator search result | Each creator found by keyword | $0.001 |
| Hot keyword | Each hot keyword | $0.001 |
| Follower | Each follower or following row | $0.001 |

1,000 posts cost $2. Set a maximum cost per run in the run options and the Actor stops there with what it has.

### FAQ

**Do I need a Lemon8 account, cookies or a proxy?**
No.

**Which region do results come from?**
Search and hashtags return the US feed, mostly English posts.

**How many posts does a hashtag return?**
Usually 30 to 60 per run. Lemon8 serves hashtag posts as a feed, so the Actor keeps asking until it stops getting new ones.

**Why do some posts have no comment rows?**
Comments are fetched for posts with at least 2 comments.

**Can I get all posts of one creator?**
Not yet. Creator rows carry the profile numbers; posts come from search, hashtags or links.

**Are images and videos downloaded?**
No. Each row has direct links you can download from while they are valid.

### 🤖 For AI Agents & LLM Apps

**Purpose:** Lemon8 posts, comments, creators and hot keywords as structured JSON.

**Minimal input:** `{"keywords": ["skincare"], "maxResultsPerKeyword": 20}`

**Output:** rows with `type` = `post` | `comment` | `reply` | `creator` | `follower` | `following` | `hot-keyword`. Posts: postId, url, kind, title, text, hashtags, publishedAt, likes, saves, comments, shares, views, creatorId, creatorHandle, creatorUrl, images, videoUrl. Comments: postId, commentId, text, likes, postedAt, author. Replies add parentCommentId.

**Behaviors to know:** `maxItems` caps post rows only. Hashtag names must match exactly. Free-plan runs return up to 100 posts.

### ⚠️ Disclaimer

This Actor collects publicly available data only. It is not affiliated with, endorsed by, or sponsored by Lemon8 or ByteDance. You are responsible for using the data in line with applicable laws and Lemon8's terms, including rules on personal data.

### SEO Keywords

lemon8 scraper, lemon8 api, lemon8 post scraper, lemon8 search scraper, lemon8 hashtag scraper, lemon8 comments scraper, lemon8 creator data, lemon8 influencer search, lemon8 analytics, lemon8 trends, lemon8 data export

# Actor input Schema

## `keywords` (type: `array`):

Keywords to search posts for. Each keyword is searched on its own and a post found by two keywords is returned once.

## `hashtags` (type: `array`):

Hashtag names, with or without `#` (`skincareroutine`). Returns the hashtag's posts; each row carries the hashtag's total views and post count.

## `postUrls` (type: `array`):

Post links (`https://www.lemon8-app.com/@handle/7596769672020754999`) or post ids. Each returns the full post row.

## `creators` (type: `array`):

Creator profile links (`https://www.lemon8-app.com/@handle`), `@handle`s or creator ids. Each returns a `creator` row with followers, following, posts and likes received. Billed as `creator-profile`.

## `creatorKeywords` (type: `array`):

Find creators by name or topic. Each result is a `creator` row with handle, followers and post count. Billed as `creator-search-result`.

## `includeHotKeywords` (type: `boolean`):

Return Lemon8's current hot search keywords. Billed as `hot-keyword`.

## `includeEditorsPicks` (type: `boolean`):

Return the posts of Lemon8's curated collections on the discover page (weekly trends and themed picks). Each row carries `collection` and `collectionHashtag`. Billed as `post`.

## `maxResultsPerKeyword` (type: `integer`):

Upper bound on posts collected per search keyword.

## `maxResultsPerHashtag` (type: `integer`):

Upper bound on posts collected per hashtag.

## `maxCreatorsPerKeyword` (type: `integer`):

Upper bound on creators collected per creator-search keyword.

## `includeFollowers` (type: `boolean`):

For each entry in Creators, also return their followers as `follower` rows (handle, name, bio, profile link).

## `includeFollowing` (type: `boolean`):

For each entry in Creators, also return the accounts they follow as `following` rows.

## `maxFollowersPerCreator` (type: `integer`):

Upper bound on rows per creator, for followers and for following separately. 20 arrive per page.

## `includeComments` (type: `boolean`):

For every post in the run with at least 2 comments, also return its comments as `comment` and `reply` rows.

## `maxCommentsPerPost` (type: `integer`):

Upper bound on comments collected per post.

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

Cap on post rows across the whole run. Comments, creators and hot keywords have their own limits. Free-plan runs return up to 100 posts.

## Actor input object example

```json
{
  "keywords": [
    "skincare"
  ],
  "includeHotKeywords": false,
  "includeEditorsPicks": false,
  "maxResultsPerKeyword": 50,
  "maxResultsPerHashtag": 30,
  "maxCreatorsPerKeyword": 20,
  "includeFollowers": false,
  "includeFollowing": false,
  "maxFollowersPerCreator": 100,
  "includeComments": false,
  "maxCommentsPerPost": 20,
  "maxItems": 100
}
```

# Actor output Schema

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

Rows told apart by `type`: `post` (text, hashtags, likes, saves, views, comments, shares, images, video link, creator), `comment` and `reply`, `creator` (followers, posts, likes received) and `hot-keyword`.

# 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 = {
    "keywords": [
        "skincare"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/lemon8-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 = { "keywords": ["skincare"] }

# Run the Actor and wait for it to finish
run = client.actor("memo23/lemon8-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 '{
  "keywords": [
    "skincare"
  ]
}' |
apify call memo23/lemon8-scraper --silent --output-dataset

```

## MCP server setup

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