# Lemon8 Scraper (`automation-lab/lemon8-scraper`) Actor

Extract public Lemon8 posts, creators, media, hashtags, publish dates, and engagement metrics from searches and URLs.

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

## Pricing

Pay per event

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/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## Lemon8 Scraper

Extract public Lemon8 posts, creators, captions, media, hashtags, dates, and engagement metrics into a clean dataset.

Use topic searches or paste public Lemon8 discover, post, hashtag, and creator URLs. The Actor renders each public page, reads Lemon8's structured page state, deduplicates posts, and exports normalized records.

### What does Lemon8 Scraper do?

Lemon8 Scraper turns public Lemon8 content into analysis-ready JSON, CSV, Excel, XML, or RSS data.

It collects:

- Post IDs and URLs
- Titles and captions
- Creator names, usernames, avatars, and follower counts
- Image and media URLs
- Hashtags and topic provenance
- Publish and update timestamps
- Likes, comments, saves, and views
- Region and collection timestamps

### Who is it for?

#### Social-listening teams

Monitor emerging conversations and compare engagement across topics.

#### Influencer marketers

Find creators and assess audience and post performance signals.

#### Agencies

Refresh client research datasets on a schedule and deliver exports automatically.

#### Trend researchers

Build reproducible datasets for content, creator, and hashtag analysis.

### Why use this Lemon8 scraper?

- One Actor covers searches and public URLs.
- Every post has stable source and query provenance.
- Post IDs are deduplicated across inputs.
- Structured page state is more reliable than visual text parsing.
- Failed sources return structured error rows instead of hiding problems.
- SHADER proxy support keeps browser collection cost-efficient.

### How to scrape Lemon8 posts

1. Open the Actor input page.
2. Add one or more topic queries, such as `travel`.
3. Optionally paste public Lemon8 URLs.
4. Set the maximum number of posts.
5. Click **Start**.
6. Export the dataset in your preferred format.

### Input

```json
{
  "queries": ["travel"],
  "maxItems": 20
}
````

You can also use URLs:

```json
{
  "startUrls": [
    { "url": "https://www.lemon8-app.com/discover/travel" }
  ],
  "maxItems": 20
}
```

#### Input fields

| Field | Type | Description |
|---|---|---|
| `queries` | string\[] | Public Lemon8 topics or hashtags |
| `startUrls` | RequestList sources | Public Lemon8 URLs |
| `maxItems` | integer | Global number of unique posts to save |
| `pageLoadWaitSecs` | integer | Extra rendered-page wait time |
| `proxyConfiguration` | object | Apify Proxy settings |

### Output

Each dataset row describes one public Lemon8 post.

```json
{
  "postId": "7525499229712745015",
  "postUrl": "https://www.lemon8-app.com/@erionnedanielle/7525499229712745015",
  "title": "Best Countries to Visit by Month ✈️🌴",
  "caption": "Best Countries to Visit by Month ✈️🌴\n\nAre any of these destinations on your Bucketlist?",
  "authorName": "Erie",
  "authorUsername": "erionnedanielle",
  "authorFollowers": 17347,
  "hashtags": ["bucketlist", "lemon8travel"],
  "likes": 2116,
  "comments": 22,
  "saves": 2296,
  "views": 101151,
  "query": "travel"
}
```

### Lemon8 data fields

| Field | Meaning |
|---|---|
| `postId` | Stable Lemon8 post identifier |
| `postUrl` | Public post URL |
| `title` | Post title |
| `caption` | Combined title and public text |
| `authorId` | Creator identifier |
| `authorName` | Creator display name |
| `authorUsername` | Creator link name |
| `authorUrl` | Public creator URL |
| `authorAvatarUrl` | Avatar image URL |
| `authorFollowers` | Public follower count |
| `mediaType` | Lemon8 article class |
| `mediaUrls` | Public image URLs |
| `hashtags` | Hashtags parsed from caption |
| `publishedAt` | ISO publish timestamp |
| `updatedAt` | ISO update timestamp |
| `likes` | Like count |
| `comments` | Comment count |
| `saves` | Save count |
| `views` | Read/view count |
| `region` | Lemon8 content region |
| `sourceUrl` | Input page that produced the row |
| `query` | Originating query, when used |
| `scrapedAt` | Collection timestamp |

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

The Actor uses pay-per-event pricing: a small start charge plus one charge per saved post. Your Apify subscription tier determines the exact discounted per-post price shown in Console.

Use a low `maxItems` value for first tests. Browser and proxy usage are included in your platform usage separately according to your Apify plan.

### Search and hashtag monitoring

Schedule a run daily or weekly with the same query list. Store each run in a named dataset or send results to your warehouse. Use `postId` as the deduplication key across runs.

### Creator and influencer research

Filter output by `authorFollowers`, saves, views, or engagement counts. Group records by `authorUsername` to compare creators and identify frequently appearing accounts.

### Tips for reliable runs

- Start with broad public discover topics known to have web results.
- Keep the default SHADER proxy unless a specific region needs another route.
- Increase `pageLoadWaitSecs` only when rendered state loads slowly.
- Use multiple inputs in one run to benefit from cross-source deduplication.
- Treat structured error rows as a signal to retry or review an unsupported page.

### Apify integrations

Connect Lemon8 Scraper to:

- Google Sheets for campaign shortlists
- Slack for trend alerts
- Zapier or Make for no-code workflows
- Webhooks for run-completion notifications
- Amazon S3, Google Drive, or a database for archival
- LangChain and LlamaIndex for content analysis

### API usage

Run the Actor programmatically with JavaScript, Python, or cURL. Each example starts a run and lets you retrieve the default dataset through the Apify API.

#### JavaScript API example

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

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/lemon8-scraper').call({
  queries: ['travel'],
  maxItems: 20,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Python API example

```python
from apify_client import ApifyClient

client = ApifyClient('YOUR_APIFY_TOKEN')
run = client.actor('automation-lab/lemon8-scraper').call(run_input={
    'queries': ['travel'],
    'maxItems': 20,
})
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items)
```

### cURL API example

```bash
curl -X POST 'https://api.apify.com/v2/acts/automation-lab~lemon8-scraper/runs?token=YOUR_APIFY_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"queries":["travel"],"maxItems":20}'
```

### Use Lemon8 Scraper with MCP

Use the actor-scoped MCP endpoint:

`https://mcp.apify.com?tools=automation-lab/lemon8-scraper`

#### Claude Code

```bash
claude mcp add --transport http apify-lemon8 \
  'https://mcp.apify.com?tools=automation-lab/lemon8-scraper'
```

Authenticate with Apify when Claude Code opens the connection.

#### Claude Desktop, Cursor, and VS Code

Add this server to the client's MCP JSON configuration (`claude_desktop_config.json` in Claude Desktop, **MCP: Open User Configuration** in Cursor, or `.vscode/mcp.json` in VS Code):

```json
{
  "servers": {
    "apify-lemon8": {
      "type": "http",
      "url": "https://mcp.apify.com?tools=automation-lab/lemon8-scraper"
    }
  }
}
```

Restart the client if it does not discover the tool immediately, then complete Apify authentication.

Example prompts:

- “Scrape 20 public Lemon8 travel posts and rank them by saves.”
- “Monitor these Lemon8 creator URLs and return posts published this week.”
- “Find recurring creators in this Lemon8 dataset.”
- “Summarize the hashtags with the highest median engagement.”

### Scheduling and webhooks

Create an Apify schedule for recurring monitoring. Attach a webhook to send the dataset ID to your pipeline after a successful run. Keep snapshots keyed by `postId` to detect newly discovered posts or engagement changes.

### Error handling

If one source fails, the Actor continues with the remaining sources and writes a row containing `error`, `sourceUrl`, `query`, and `scrapedAt`. Invalid non-Lemon8 URLs fail validation before browser work begins.

### Legality

#### Is it legal to scrape Lemon8?

This Actor accesses public web pages without requiring login credentials. Use the data responsibly, follow applicable laws and Lemon8's terms, avoid collecting sensitive personal data, and respect rights such as deletion and copyright. You are responsible for your use case.

### FAQ

#### Does it require a Lemon8 account?

No. It works with public web content and does not request account credentials.

#### Can it download images?

It exports public media URLs. Your downstream workflow can download them when permitted.

#### Why did a query return an error row?

Some terms do not have a public Lemon8 discover page, or Lemon8 may temporarily return a challenge page. Try a known public topic URL, keep Apify Proxy enabled, or retry later.

#### How are duplicate posts handled?

Records are deduplicated by stable Lemon8 post ID across all queries and URLs in one run.

#### Can I monitor engagement over time?

Yes. Schedule recurring runs and compare likes, comments, saves, and views by `postId`.

#### Can I scrape private profiles?

No. The Actor only processes public Lemon8 surfaces.

### Related social media scrapers

Explore other public social-media data tools from [automation-lab](https://apify.com/automation-lab) for cross-platform monitoring workflows.

### Support

For reproducible support, include the run ID, sanitized input, failed source URL, and expected result. Do not post private credentials or personal data in support requests.

# Actor input Schema

## `queries` (type: `array`):

Lemon8 topics to discover, such as travel, skincare, or meal prep.

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

Public Lemon8 discover, post, hashtag, or creator URLs.

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

Maximum number of unique post records saved across all inputs.

## `pageLoadWaitSecs` (type: `integer`):

Extra time for Lemon8's rendered public data to load.

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

Apify Proxy is recommended. The default SHADER group is cost-efficient and works for Lemon8.

## Actor input object example

```json
{
  "queries": [
    "travel"
  ],
  "startUrls": [],
  "maxItems": 20,
  "pageLoadWaitSecs": 3,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "SHADER"
    ]
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "queries": [
        "travel"
    ],
    "startUrls": [],
    "maxItems": 20
};

// Run the Actor and wait for it to finish
const run = await client.actor("automation-lab/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 = {
    "queries": ["travel"],
    "startUrls": [],
    "maxItems": 20,
}

# Run the Actor and wait for it to finish
run = client.actor("automation-lab/lemon8-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "queries": [
    "travel"
  ],
  "startUrls": [],
  "maxItems": 20
}' |
apify call automation-lab/lemon8-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=automation-lab/lemon8-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Lemon8 Scraper",
        "description": "Extract public Lemon8 posts, creators, media, hashtags, publish dates, and engagement metrics from searches and URLs.",
        "version": "0.1",
        "x-build-id": "6hQAlY9UnceeV6R11"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/automation-lab~lemon8-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-automation-lab-lemon8-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/automation-lab~lemon8-scraper/runs": {
            "post": {
                "operationId": "runs-sync-automation-lab-lemon8-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/automation-lab~lemon8-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-automation-lab-lemon8-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "properties": {
                    "queries": {
                        "title": "🔎 Search topics or hashtags",
                        "type": "array",
                        "description": "Lemon8 topics to discover, such as travel, skincare, or meal prep.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "startUrls": {
                        "title": "🔗 Lemon8 URLs",
                        "type": "array",
                        "description": "Public Lemon8 discover, post, hashtag, or creator URLs.",
                        "items": {
                            "type": "object",
                            "required": [
                                "url"
                            ],
                            "properties": {
                                "url": {
                                    "type": "string",
                                    "title": "URL of a web page",
                                    "format": "uri"
                                }
                            }
                        }
                    },
                    "maxItems": {
                        "title": "Maximum posts",
                        "minimum": 1,
                        "maximum": 10000,
                        "type": "integer",
                        "description": "Maximum number of unique post records saved across all inputs.",
                        "default": 20
                    },
                    "pageLoadWaitSecs": {
                        "title": "Page load wait (seconds)",
                        "minimum": 1,
                        "maximum": 15,
                        "type": "integer",
                        "description": "Extra time for Lemon8's rendered public data to load.",
                        "default": 3
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Apify Proxy is recommended. The default SHADER group is cost-efficient and works for Lemon8.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "SHADER"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
