Lemon8 Feed Scraper: Posts, Comments, Analytics & Media avatar

Lemon8 Feed Scraper: Posts, Comments, Analytics & Media

Pricing

from $1.40 / 1,000 results

Go to Apify Store
Lemon8 Feed Scraper: Posts, Comments, Analytics & Media

Lemon8 Feed Scraper: Posts, Comments, Analytics & Media

Scrape Lemon8 feeds across 22 categories and 10+ regions. Extract posts, images, videos, comments, engagement metrics, and post analytics with support for infinite scrolling and high-quality media downloads. Ideal for content monitoring, research, and trend analysis.

Pricing

from $1.40 / 1,000 results

Rating

0.0

(0)

Developer

Abot API

Abot API

Maintained by Community

Actor stats

0

Bookmarked

18

Total users

1

Monthly active users

8 days ago

Last modified

Features

Limited permissions

Share

Lemon8 Feeds Scraper: Posts, Media, Comments and Analytics by Category

Lemon8 Feeds Scraper turns Lemon8 category feeds into structured data. Pick from 37 feed categories across 10 regions, or paste feed links directly, and get post titles, full text, hashtags, engagement counts, images or video, and comment threads with their replies. Turn on Incremental mode for recurring runs that return only new and changed posts, download images and videos straight into the key-value store, or export a summary of each post to the apps you already use.

Why This Scraper?

  • 37 feed categories, 10 regions. For You, Outfits, Skincare, Recipes, Fitness, Travel and 31 more, each available for the US, Australia, Japan and 7 other regions.
  • Two ways in. Pick a category (by number or by name) and region, or paste Lemon8 feed, post or profile links and let the actor work out the rest.
  • Full post data. Title, preview text, engagement counts, images and hashtags from the feed listing, with the complete post body, related topics and edit time available when full details are turned on.
  • Comment threads. Top-level comments plus their replies, expanded until the Comment Expansion Timeout (30 seconds per post by default). Max Comments per Post keeps the first 20 comments per post by default (0 to 1000; also the cap on replies per comment); raise it for deeper threads, or set 0 to skip comments.
  • Optional media downloads. Save a post's images and its video straight into the key-value store.
  • Automatic fallback. When Apify Proxy is enabled and your plan has no access to it, the actor switches to a backup connection so a run keeps going instead of failing outright.
  • Built for schedules. Incremental mode returns only new and changed posts on recurring runs, and a refused run fails loudly instead of quietly returning an empty dataset.

Use Cases

  • Trend and content research: track what is trending inside a category, from Skincare to Outfits to Recipes, across 10 regions.
  • Creator discovery: collect author names, profile links and like counts to find creators worth reaching out to.
  • Community and sentiment analysis: pull full comment threads with replies to see how an audience reacts to a topic.
  • Competitive or brand monitoring: schedule the actor with Incremental mode to see only new and changed posts for a category over time.
  • Media archiving: save post images and videos into the key-value store alongside the text data.

Data You Get

Sample shape: values are illustrative placeholders, not from a live record.

FieldExample
id"7412987407534162437"
author.name"Sample Creator"
author.profileUrl"https://www.lemon8-app.com/@sample_creator?region=us"
author.profileImageUrl"https://p16-lemon8-sign.byteimg.com/sample-avatar.jpg"
title"5 Skincare Steps I Swear By"
content"Here's my short daily routine that actually..."
postUrl"https://www.lemon8-app.com/@sample_creator/7412987407534162437?region=us"
statistics.likesCount"6437"
images[{ "src": "https://...jpg", "alt": "" }]
isVideofalse (also true for video posts)
category / categoryId"Skincare" / 2
details.fullContentfull plain-text post body (when Get Detailed Post Data is on)
details.hashtags["#skincare", "#glowup"]
details.editTime"7/30"
details.statistics{ "savedCount": "312", "likesCount": "6437", "commentsCount": "148" }
details.galleryImagesthe post's own full-resolution image list
details.relatedTopics["Skincare Routine", "Glass Skin"]
details.videoData{ "videoUrl": "...", "posterUrl": "...", "width": "720", "height": "1280" } (video posts only)
allComments[{ "author": "...", "content": "...", "time": "7/30", "likes": "12", "replies": [...] }]
commentStats.totalComments42
commentStats.totalReplies9
changeType"NEW" (Incremental mode only)
changedFields["statistics"] (Incremental mode only)
firstSeenAt / lastSeenAt"2026-07-30T03:00:00Z" (Incremental mode only)

The statistics block at the top of a record only ever carries a real likesCount; its savedCount and commentsCount stay "0" because those come from the feed listing, not the post page. The accurate saved and comment counts live in details.statistics, which is only populated when Get Detailed Post Data is on, along with allComments and commentStats. Video posts carry a details.videoData block instead of (or alongside) their gallery images.

How to Use

  1. Pick a Category (0 to 36, or a Category name such as Skincare) and Region, or paste Lemon8 links into Start URLs. Start URLs win when both are set.
  2. Set Post Limit, and turn on Get Detailed Post Data for full text, hashtags and comment threads (with a Details Post Limit to cap how many posts go that deep).
  3. Optionally turn on Save Images or Save Videos to store post media in the key-value store.
  4. Click Start, then download the dataset as JSON, CSV or Excel, or read it through the API.

Scrape a category feed:

{
"category": 2,
"region": "us",
"limit": 20,
"getDetails": true,
"detailsLimit": 10,
"proxy": { "useApifyProxy": true, "apifyProxyCountry": "US" }
}

Start URLs mode. Every link shape below is supported. Only region is read from the query string; tracking parameters such as share_token are dropped, and the same post pasted twice is scraped once.

Link shapeExampleWhat you get
Category feed with regionhttps://www.lemon8-app.com/feed/outfits?region=auThe feed's posts
Category feed without regionhttps://www.lemon8-app.com/feed/outfitsThe feed's posts, in the Region input (default us)
Post detail pagehttps://www.lemon8-app.com/@lylassecret10/7699504612750934559?region=usThat one post, with details and comments when Get Detailed Post Data is on
Author profile pagehttps://www.lemon8-app.com/@lylassecret10?region=usThe profile's posts, up to Post Limit
Post with tracking parameterhttps://www.lemon8-app.com/@lylassecret10/7699504612750934559?region=us&share_token=xSame post as the clean link, scraped once

category and categoryId are null on rows from post and profile links, because those pages are not tied to one feed category. Anything else (an unknown feed name such as /feed/notacat, /hashtag/, /search, or the m.lemon8-app.com host) is skipped with a warning in the run log that names the reason; if no link at all is usable the run fails before any request.

Pre-filled Start URLs. In the Console, Start URLs is pre-filled with one example of each shape above, so a Console run left untouched scrapes those examples (up to Post Limit posts per feed or profile). The field itself has no default: an API call or schedule that omits Start URLs scrapes by Category exactly as before (Category 0 is the For You feed), with the same incremental state. A Console run that sets a non-default Category, Category name or Region while Start URLs still holds only the pre-filled examples is treated as a Category run. To scrape by Category from the Console, clear Start URLs.

Paste feed links instead (Start URLs mode):

{
"startUrls": [
"https://www.lemon8-app.com/feed/skincare_category?region=jp",
"https://www.lemon8-app.com/feed/outfits?region=us"
],
"limit": 15,
"getDetails": false,
"proxy": { "useApifyProxy": true, "apifyProxyCountry": "US" }
}

Download images and videos:

{
"category": 6,
"region": "us",
"limit": 10,
"getDetails": true,
"detailsLimit": 10,
"saveImages": true,
"saveVideos": true,
"proxy": { "useApifyProxy": true, "apifyProxyCountry": "US" }
}

Recurring run, only new and changed posts:

{
"category": 0,
"region": "us",
"limit": 50,
"incrementalMode": true,
"emitExpired": true,
"stateKey": "foryou-us-daily",
"proxy": { "useApifyProxy": true, "apifyProxyCountry": "US" }
}

Categories and regions

IDNameIDName
0For You19Drinks
1Outfits20Dining
2Skincare21Home skills
3Nails22Bags
4Home23Reading
5Recipes24Photography
6Makeup25Movie
7Hair26Outdoors
8Fitness27Tech
9Accessories28Art & Design
10Perfume29Gardening
11Mental Health30Career
12Relationship31Games
13Wellness32Education
14Baking33Cars
15Music34Wedding
16Shoes35Maternity
17Travel36Pets
18Tattoo

Regions: us (United States), au (Australia), nz (New Zealand), jp (Japan), th (Thailand), id (Indonesia), vn (Vietnam), my (Malaysia), sg (Singapore), ca (Canada).

Run it from your code

Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("abotapi/lemon8-feeds-scraper").call(run_input={
"category": 2, "region": "us", "limit": 20,
"proxy": {"useApifyProxy": True, "apifyProxyCountry": "US"},
})
for post in client.dataset(run["defaultDatasetId"]).iterate_items():
print(post["title"], post["statistics"]["likesCount"])

JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('abotapi/lemon8-feeds-scraper').call({
category: 2, region: 'us', limit: 20,
proxy: { useApifyProxy: true, apifyProxyCountry: 'US' },
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

Or connect it to Make, Zapier, n8n, Google Sheets or webhooks from the Integrations tab.

Resume and recurring updates

  • Resume (resumeFromRunId) reads the post IDs from a previous run or dataset so a follow-up run can continue a large pull. It is not for daily monitoring, and it cannot be combined with Incremental mode once that mode already has tracked posts for the same feed, the run fails fast with a message asking you to pick one.
  • Incremental mode (incrementalMode) is for scheduling this actor against the same category or Start URLs, region and Get Detailed Post Data setting. Each post is classified NEW, UPDATED (with changedFields), UNCHANGED, REAPPEARED or EXPIRED. UNCHANGED posts are suppressed and not billed unless emitUnchanged is on. EXPIRED rows are produced only once a run has scanned every tracked feed to its natural end, not when Post Limit capped it, a block cut it short, or Resume was used, and only with emitExpired on. REAPPEARED can only happen for a post that was previously tombstoned EXPIRED and is later seen again, so it needs a prior emitExpired run first; a fresh state key never produces it. stateKey names or shares the stored state; leaving it empty derives a key automatically from the scope, so differently configured runs never mix state. Change detection compares every output field of a post (text, hashtags, statistics, images, video, details, comments) and normalizes the signing tokens and shard hosts in CDN image and video links plus the order of comments and replies, so those never cause a false UPDATED. Ignore fields when detecting changes (ignoreFieldsForChanges) lets you exclude more fields from UPDATED detection while keeping them in the output; use dotted names for nested fields, for example statistics.likesCount or allComments.time. Adding a name to it never causes a one-time wave of UPDATED rows. With Incremental mode off, output is exactly as before, with none of these fields added.

Send results into your apps (MCP connectors)

Optionally pipe the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. This is an extra delivery step after the scrape, the Apify dataset is never changed.

What gets written to the connector: a condensed, human-readable summary of each record, not the full JSON. Each item becomes one entry with a title and its key fields flattened to plain text. The complete record always stays in the Apify dataset.

  1. Authorize a connector once under Apify > Settings > Integrations (Notion, Linear, Airtable, or Apify).
  2. Select it in the "Pipe results into your apps" input field. If the picker is empty, you haven't authorized a connector yet.
  3. For Notion, also set notionParentPageUrl to the page where items should be created.

The connection is mediated by Apify's MCP proxy, so this actor never sees your third-party credentials. Leave the field empty to skip.

Input Parameters

ParameterTypeDefaultDescription
categoryinteger0Feed category, 0 to 36. Ignored when Start URLs is set.
categoryNamestringnoneCategory by name, for example Skincare or Mental Health. Replaces category when set; an unknown name stops the run.
startUrlsarrayone example per shapeLemon8 feed, post or profile links. Wins over Category and Region when set. See the shapes table above.
regionstringusRegion code for category mode.
limitinteger2Maximum posts to extract per feed, up to 5000.
getDetailsbooleantrueNavigate to each post's page for full content and comment threads.
detailsLimitinteger2Maximum posts to fetch full details and comments for, up to 3000.
commentExpansionTimeoutinteger30Seconds to spend expanding comments on each post (10 to 300) before moving on.
maxCommentsPerPostinteger20Comments kept per post, and replies kept per comment (0 to 1000). 0 skips comments. In incremental mode a saved baseline that holds more comments than this is compared on its first comments only, so lowering the cap alone does not mark posts as updated.
resumeFromRunIdstringnoneReads the post IDs from a previous run or dataset to continue a large pull.
incrementalModebooleanfalseReturn only new, changed and reappeared posts on recurring runs against the same feed.
stateKeystringnoneName or share an incremental-mode state; auto-derived from the scope when left empty.
ignoreFieldsForChangesarraynoneField names (dotted for nested) left out of UPDATED detection in Incremental mode; they stay in the output.
emitUnchangedbooleanfalseAlso return, and bill, UNCHANGED posts every run.
emitExpiredbooleanfalseAlso return, and bill, posts no longer found once a run fully scans every feed.
saveImagesbooleanfalseDownload every image on each returned post to the key-value store.
saveVideosbooleanfalseDownload the video and poster image of each video post that received full details (Get Detailed Post Data on, within Details Post Limit) to the key-value store.
proxyobjectnone (prefill: Apify Proxy, country US)Connection settings.
dev_transform_fieldsarray[]Advanced: keep only the listed fields (dot notation) in the output.
dev_dataset_namestringdefaultAdvanced: save results into a custom-named dataset. Supports {ACTOR}, {DATE}, {TIME} placeholders.
dev_dataset_clearbooleanfalseAdvanced: clear the target dataset before inserting new data.
mcpConnectorsarraynoneOptional: send a summary of each post to apps you authorized under Integrations.
notionParentPageUrlstringnoneNotion connector only: page under which post pages are created.
maxNotifyListingsinteger50Cap on items written to each connector per run. Does not affect the dataset.

Output Example

Sample shape: values are illustrative placeholders, not from a live record.

{
"id": "7412987407534162437",
"author": {
"name": "Sample Creator",
"followerCount": null,
"profileUrl": "https://www.lemon8-app.com/@sample_creator?region=us",
"profileImageUrl": "https://p16-lemon8-sign.byteimg.com/sample-avatar.jpg"
},
"title": "5 Skincare Steps I Swear By",
"content": "Here's my short daily routine that actually works for me...",
"postUrl": "https://www.lemon8-app.com/@sample_creator/7412987407534162437?region=us",
"statistics": {
"savedCount": "0",
"likesCount": "6437",
"commentsCount": "0"
},
"images": [
{ "src": "https://p16-lemon8-sign.byteimg.com/sample-image-1.jpg", "alt": "" }
],
"isVideo": false,
"category": "Skincare",
"categoryId": 2,
"details": {
"title": "5 Skincare Steps I Swear By",
"fullContent": "Here's my full daily skincare routine, step by step, with the products I use.",
"hashtags": ["#skincare", "#glowup"],
"editTime": "7/30",
"statistics": {
"savedCount": "312",
"likesCount": "6437",
"commentsCount": "148"
},
"galleryImages": [
{ "src": "https://p16-lemon8-sign.byteimg.com/sample-image-1.jpg", "alt": "" }
],
"relatedTopics": ["Skincare Routine", "Glass Skin"],
"isVideo": false,
"videoData": null
},
"allComments": [
{
"author": "Sample Fan",
"authorTag": null,
"content": "This actually worked for me too!",
"time": "7/30",
"likes": "12",
"replies": null
}
],
"commentStats": {
"totalComments": 42,
"totalReplies": 9,
"previewCommentCount": 0
},
"groupId": "7412987407534162437",
"url": "https://www.lemon8-app.com/@sample_creator/7412987407534162437?region=us",
"likes": 6437,
"saves": 312,
"commentCount": 148,
"authorUsername": "sample_creator",
"authorNickname": "Sample Creator",
"hashtags": ["#skincare", "#glowup"],
"topComments": [{ "author": "Sample Fan", "content": "This actually worked for me too!", "likes": 12, "time": "7/30" }],
"articleClass": "Image",
"region": "us",
"sourceMode": "feed",
"scrapedAt": "2026-10-30T00:00:00+00:00",
"keyword": null
}

The flat fields (groupId, url, likes, saves, commentCount, author*, videoUrl, thumbnailUrl, hashtags, articleClass, region, sourceMode, scrapedAt, keyword, topComments) repeat data already in the nested keys, for easy flat exports. saves, commentCount, hashtags and topComments are filled only when Get Detailed Post Data is on (saves and commentCount are null otherwise, never a placeholder 0); topComments holds up to the first 5 comments. They add no charge and do not trigger incremental UPDATED rows.

Plan Requirement

No residential connection is needed. Lemon8 feed, post and profile pages loaded in testing over a standard Apify Proxy datacenter connection, so the prefilled setting (Apify Proxy, country US) is enough. If you call the actor through the API, pass "proxy": {"useApifyProxy": true, "apifyProxyCountry": "US"} explicitly, because an omitted proxy field runs without one. Apify free plans do not include Apify Proxy access; on such a plan the actor continues on a backup connection and logs "The selected connection is unavailable to this run", and some pages may still be unavailable. If the proxy is refused for the account, the run fails with "The proxy connection was refused for this account", which means a paid plan is required, or your own proxy URLs must be valid.

FAQ

How much does it cost?

Billing has two events: a tiered per-result event for each post returned, with the rate depending on your Apify plan, and a per-GB start event charged when a run begins. Turning on Get Detailed Post Data, comments or the media downloads adds processing time but no separate line item. The Pricing tab on the actor page shows the current rates. Use Post Limit and Details Post Limit to cap the cost of any run.

This actor collects only publicly available feed content. You are responsible for how you use it: follow Lemon8's terms and the laws that apply to you, and get legal advice if you plan commercial redistribution. Even though the data is public, usernames, photos and video may be subject to third-party rights.

Can I get only new or changed posts on a schedule?

Yes. Schedule the actor from the Schedules tab and turn on Incremental mode. Each run then returns only new, updated and reappeared posts for the same category or Start URLs, region and Get Detailed Post Data setting. Unchanged posts are not billed unless you also turn on Emit unchanged.

What is the difference between Resume and Incremental mode?

Resume reads the post IDs from ONE specific interrupted run so a follow-up run can continue that large pull, it is for finishing a large pull, not for daily monitoring. Incremental mode is for scheduling the SAME feed again and again and getting only what changed; it remembers state itself, keyed by category or Start URLs, region and Get Detailed Post Data, or a State key you choose. Turning both on together against an incremental state that already has tracked posts fails fast with a message asking you to remove one.

Why did my run fail instead of returning an empty dataset?

If Lemon8 refuses every request for a feed, a blocked connection or a non-200 response after retries, the run stops with a clear message so "no posts today" is never confused with "nothing could be read", and nothing is charged. Try again in a few minutes, or open the proxy field and pick a different country. Start URLs that don't match a recognizable Lemon8 feed link also fail before any request is made, so you fix the input rather than retry a working feed forever.

Can I use it with AI agents or MCP?

Yes. Call it from any Apify integration or MCP client, and use the "Pipe results into your apps" field to push a summary of each post into Notion, Linear or Airtable.

πŸ”— Want more Lemon8 data?

Pair this actor with these related scrapers from the same team:

πŸ“± Lemon8 Search Scraper
Scrape Lemon8 posts by keyword across multiple regions. Extract posts, images, videos...
πŸ“± Lemon8 Profile Scraper
Scrape Lemon8 user profiles with automated multi-profile discovery. Extract profile data...
πŸ“± Lemon8 Media Scraper
Lightweight Lemon8 scraper for extracting image and video URLs from posts, with optional...
πŸ“± Reddit⚑ Lightning
Scrape Reddit posts, comments, and media from any subreddit or user profile - no login or...
πŸ“± Truth Social Scraper
Scrape public Truth Social profiles, posts, media, metrics, author data, and complete...
🧩 OK.ru Scraper
Scrape public OK.ru users, groups, topics, posts, videos, games and greetings by keyword...

πŸ‘‰ Browse all abotapi scrapers

πŸ’¬ Support

  • 🐞 Found a bug or a missing field? Open a ticket on the Issues tab. We usually reply within hours.
  • πŸ› οΈ Need another site, extra fields or a private build? Email contact@abotapi.com.
  • ⭐ Enjoying it? A quick review on the actor page helps other users find it.