# Lemon8 Profile Scraper - Followers, Posts & Likes (`tictechid/vanzi-lemon8-scraper`) Actor

Lemon8 scraper for public profiles by username. Get followers, following and likes & saves, plus recent posts with direct post link, post date, likes, post type, caption (hashtags included) and thumbnail. No login. Tested on Japan, Indonesia, Malaysia, Thailand, Vietnam and US creators.

- **URL**: https://apify.com/tictechid/vanzi-lemon8-scraper.md
- **Developed by:** [TicTech](https://apify.com/tictechid) (community)
- **Categories:** Automation, E-commerce, Social media
- **Features:** Limited permissions
- **Stats:** 73 total users, 7 monthly users, 100.0% runs succeeded, 3 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $2.00 / 1,000 profile | posts results

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

## Lemon8 Profile Scraper - Followers, Posts & Likes

Scrape public **Lemon8 profiles**: follower and following counts, profile likes & saves, and each creator's recent posts with a direct post link, post ID, post date, caption, likes and thumbnail. Built for influencer research, creator comparison and content analysis. Add one or many usernames, pick a region, get clean JSON/CSV.

### What you get

Each run returns one `profile` record per username, followed by up to `maxPosts` `post` records.

#### Profile record (`type: "profile"`)

| Field | Description |
| --- | --- |
| `type` | Always `profile` |
| `username` | Lemon8 handle (the part after `@`), e.g. `styledby.devon` |
| `profile_name` | Display name shown on the profile |
| `user_id` | Lemon8 user ID |
| `profile_url` | Link to the profile on lemon8-app.com |
| `avatar` | Avatar image URL |
| `bio` | Profile bio text |
| `followers` | Follower count (exact number) |
| `following` | Following count (exact number) |
| `likes_and_saves` | Profile-level total of likes **and** saves combined (exact number) |
| `posts_count` | Number of posts on the profile |

#### Post record (`type: "post"`)

| Field | Description |
| --- | --- |
| `type` | Always `post` |
| `post_id` | Lemon8 post ID, stable and unique, good for de-duplication |
| `post_url` | Direct link to the post |
| `posted_at` | When the post was published (UTC, ISO 8601). Derived from the post ID, accurate to within a few minutes |
| `title` | Post title, if the creator added one |
| `caption` | Post text. Hashtags appear inside the caption text. They are not a separate field |
| `likes` | Like count for the post |
| `thumbnail` | Thumbnail image URL |
| `image_count` | Number of images in a photo post |
| `post_type` | `Gallery` (photos) or `Video` |
| `profile_username` | Handle of the profile the post belongs to (matches the profile `username`) |
| `profile_name` | Display name of the profile the post belongs to |

Profile stats come back on every listed region, including Japan (`jp`), Indonesia, Malaysia, Thailand and Vietnam. If Lemon8 shows no stats at all for a profile, that profile row is skipped (it is not saved and not charged), the run log says so plainly, and the profile's posts are still saved. Saves are only available as the combined profile-level `likes_and_saves`. There is no per-post saves count.

**Changed in 0.0.30:** `username` and `profile_username` now hold the handle instead of the display name. The display name is in `profile_name`.

### Example input

```json
{
  "profileUsernames": ["prettyfiasco"],
  "maxPosts": 5,
  "region": "us"
}
```

- `profileUsernames` (required): Lemon8 usernames. `name`, `@name` and a full profile URL all work.
- `maxPosts`: posts per profile (default 5).
- `region`: `us`, `uk`, `jp`, `au`, `ca`, `nz`, `sg`, `my`, `id`, `th` or `vn` (default `us`).

**Free plan:** max items per run is limited — free tier max items per run ≤ 100, and posts per profile are capped at 10 (a `maxPosts` of 0 or above 10 is capped at 10). **Paid plans:** set `maxPosts` to `0` for unlimited, or any number. [Upgrade your plan](https://apify.com/pricing?fpr=maxknj).

### Example Tasks

Ready-to-run public Example Tasks: US beauty creator, two-creator fashion compare, UK region, Japan region (profile stats and posts for Japanese creators) and a 5-creator bulk run.

### FAQ

**Is it public data only?** Yes. Only publicly visible profile and post data is scraped. No login is used.

**Do I include the @?** You don't need to. `name`, `@name` and a full profile URL all work.

**Which regions work?** `us`, `uk`, `jp`, `au`, `ca`, `nz`, `sg`, `my`, `id`, `th`, `vn`. Pick the region the creator posts in. Profile stats and posts come back on all of them. For the same creator, the region mostly changes the link suffix rather than the data.

**What if a profile doesn't exist?** The run still succeeds and returns an error row for that username.

**Why is there no profile row for one of my usernames?** Lemon8 showed no follower, following or likes & saves numbers for it. The row is skipped so you aren't charged for an empty result, and the log names the profile. Its posts are still in the dataset.

**Can it scrape comments, search, hashtags or follower lists?** No. It covers profile stats and posts (link, ID, date, caption, likes, thumbnail) only.

**Does it give saves per post or hashtags as a field?** No. Saves are profile-level (`likes_and_saves`), and hashtags only appear inside captions.

**Can I run it on a schedule or via API?** Yes. Use Apify Schedules, webhooks, or the API.

```bash
curl -X POST "https://api.apify.com/v2/acts/tictechid~vanzi-lemon8-scraper/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"profileUsernames":["prettyfiasco"],"maxPosts":5,"region":"us"}'
```

### Usage Limits

- **Free tier:** free tier max items per run ≤ 100. Posts per profile are capped at 10.
- **Paid plans:** unlimited posts per profile (`maxPosts: 0`). [See pricing](https://apify.com/pricing?fpr=maxknj).

### Pricing

Pay-per-event: a small start fee per run plus a charge for each result (profile or post) added to the dataset. Profile rows with no stats are skipped and not charged. Current prices are shown on the Actor's Pricing tab.

For more details, contact the maintainer or email us at contact@tictech.id

# Actor input Schema

## `profileUsernames` (type: `array`):

List of Lemon8 profile usernames to scrape (without @ symbol)

## `maxPosts` (type: `integer`):

Maximum number of posts to scrape per profile (0 = unlimited for paid plans)

## `region` (type: `string`):

Lemon8 region site to read the profile from. Pick the region the creator posts in.

## Actor input object example

```json
{
  "profileUsernames": [
    "prettyfiasco"
  ],
  "maxPosts": 5,
  "region": "us"
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `profiles` (type: `string`):

No description

## `posts` (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 = {
    "profileUsernames": [
        "prettyfiasco"
    ]
};

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

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

```

## MCP server setup

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