Lemon8 Profile Scraper icon

Lemon8 Profile Scraper

Scrape Lemon8 user profiles with automated multi-profile discovery. Extract profile data, detailed posts, engagement metrics, comments, and…

Start using this actor on Apify ↗Need a custom scraper?Contact us ↗

Lemon8 Profile Scraper at a glance

Lemon8 Profile Scraper is a ready-to-run Apify actor from abotapi for collecting social media data. Its documented output includes id, title, content, author and followers, which you can export as JSON, CSV or Excel or read through the Apify API. It costs $2.40 per 1,000 results on the Apify Free plan and from $2.00 on paid plans, with smaller per-run or optional feature charges listed on Apify.

Runs on
Apify cloud: console, API, schedules and integrations
Data type
Social Media, Automation, Developer Tools
Pricing
$2.40 per 1,000 results (Free plan), from $2.00 on paid plans
Output
Documented below · JSON, CSV, Excel
Inputs
24 options

Scrape Lemon8 user profiles with automated multi-profile discovery. Extract profile data, detailed posts, engagement metrics, comments, and high-quality images and videos with download support. Built for influencer research, content analysis, and media archiving.

What Lemon8 Profile Scraper: Posts, Engagement, Comments & Media can do

  • Three ways to target a profile. Scrape one profile by username, paste a full profile link, or list many profile links at once. A clear precedence order means you always know which input wins.
  • Full post extraction. Title, content, hashtags, publish date and, when Get Detailed Post Data is on, the complete comment thread with replies.
  • Profile context included. Bio, follower and following counts, verification status and total post count come back with every profile, not just the posts.
  • Network mapping. Turn on Scrape Following Profiles to also collect the accounts a creator follows.
  • Media on demand. Optionally save every post's images and videos into the run's storage instead of only linking to them.
  • 11 regions. Scrape the US, Australia, Japan, the Philippines and seven other Lemon8 storefronts by changing one field.

Choose what to collect

These inputs let you configure Lemon8 Profile Scraper: Posts, Engagement, Comments & Media. Open the actor on Apify to enter your values and review the current options.

Supported input fields
InputWhat it controls
usernamestring · requiredLemon8 username to scrape, without the '@'. Ignored if a Profile URL is provided below.
startUrlsarrayLemon8 URLs to scrape. Supported: a profile (/@user, with or without ?region=), a single post (/@user/) and a following list (/@user/follow). Left untouched, this scrapes one example of each shape. Unverified shapes (other regions, m. or bare host) are tried with a warning; /tag/ and feed links are skipped with a warning. Takes precedence over Username and Profile URL, unless it is still the untouched example list and you set a different Username or a Profile URL.
profileUrlstringFull profile URL for a SINGLE profile, e.g. https://www.lemon8-app.com/@username?region=us. Takes precedence over Username. Ignored if Start URLs is provided.
regionstringTarget region for Lemon8 content

Choices: us, au, nz, jp, th, id, vn, my, sg, ca, ph

limitintegerMaximum number of posts to extract per profile (max 500)
getDetailsbooleanNavigate to individual post pages to extract full content and all comments
detailsLimitintegerMaximum number of posts to get detailed data for
Show 17 more inputs
More input fields
InputWhat it controls
commentExpansionTimeoutintegerMaximum time in seconds to spend expanding comments on each post. Posts with many comments may timeout.
getFollowingbooleanAutomatically scrape profiles that the main user is following
followingLimitintegerMaximum number of following profiles to scrape
saveImagesbooleanDownload post images locally
saveVideosbooleanDownload videos from video posts
dev_transform_fieldsarrayTransform the resulting output. Select only needed fields. For nested object use DOT (e.g., 'statistics.rating'). For nested array use NUMBER as array index (e.g., 'comments.0.text').
dev_dataset_namestringSave results into custom named Dataset. Use masks to customize: {ACTOR} = actor name, {DATE} = date (YYYYMMDD), {TIME} = time (HHMMSS). Example: 'lemon8-{DATE}' will create 'lemon8-20250519'.
dev_dataset_clearbooleanClear Dataset before inserting new data
resumeFromRunIdstringPaste a previous run ID or dataset ID to continue a large pull of posts without returning or charging for posts already collected there. Use this after an interrupted run, or when continuing a pull for the same profile(s) in another run. For recurring daily monitoring of the same profile(s), use Incremental mode below instead.
incrementalModebooleanTurn this on for daily or recurring monitoring. The first run returns all matching posts as NEW. Later runs normally return only NEW, UPDATED, and REAPPEARED posts. Turn on "Emit unchanged" or "Emit expired" only when you also want those posts returned (and billed). State is kept separately for each username/Profile URL/Start URLs set, region, and Get Detailed Post Data setting; use State key when you want to name or deliberately share a monitoring campaign. UPDATED means the post's own content changed. Compared: every returned post field (text, title, images, author, comment lists, saved/likes/comments counters, details). Excluded: signed-URL tokens and CDN host numbers on image/video links, comment order, files re-saved by Save Images/Videos, and the view counter (details.statistics.viewsCount); add your own with "Ignore fields when detecting changes". Details: the post's view counter (details.statistics.viewsCount) is a live engagement number that keeps ticking on its own, so a post whose view count alone moved stays UNCHANGED and is not returned or billed again. The current view count is still on every returned row. To continue one specific interrupted run instead, use Resume from a previous run above.
stateKeystringOptional. Name this monitoring campaign to keep its state stable, or to deliberately share state across differently-configured runs. Leave empty to let the actor derive a key automatically from the username/Profile URL/Start URLs, region, and Get Detailed Post Data setting, different profile setups then never mix state with each other.
emitUnchangedbooleanOff by default. Turn on to also return posts that have not changed since the last run, marked UNCHANGED. This returns, and bills, extra rows you already have, so leave it off unless you specifically want the full snapshot every run.
emitExpiredbooleanOff by default. Turn on to also return posts that were present in a previous run but are no longer found, marked EXPIRED. Only produced once a run has fully scanned every tracked profile, not when Post Limit capped it, or when Resume was used. This returns, and bills, extra synthetic rows, so leave it off unless you need expiry tracking.
ignoreFieldsForChangesarrayIncremental mode only. Field names that must NOT count as a change when deciding NEW vs UPDATED vs UNCHANGED, and are left out of changedFields. A bare name (e.g. savedCount) is ignored at any depth; a dotted path (e.g. details.statistics.likesCount) ignores just that field. The ignored fields still appear, with their current values, on every returned row. Applied to the stored baseline too, so changing this list never triggers a one-time wave of UPDATED rows. Leave empty to use the built-in rules (see Incremental changes above).
mcpConnectorsarrayOptionally send the scraped results into the apps you already use, via Model Context Protocol (MCP) connectors. Authorize a connector once under Apify → Settings → Integrations, then select it here. The connector receives a condensed, human-readable summary per item (title + key fields), not the full JSON, the complete record stays in the dataset. Leave empty to skip. Supported: Notion (https://mcp.notion.com/mcp), Linear (https://mcp.linear.app/sse), Airtable (https://mcp.airtable.com/mcp), Apify (https://mcp.apify.com).
notionParentPageUrlstringURL (or id) of the Notion page under which item pages are created. Required to enable the Notion export; ignored by other connectors.
maxNotifyListingsintegerCap on items written to each connector per run. Does not affect the dataset.

Fields in the output

The documented dataset includes the fields below. Availability can depend on the source page and selected mode.

idID (text)
titleTitle (text)
contentContent (text)
author.nameAuthor (text)
author.followerCountFollowers (text)
postUrlURL (link)
statistics.savedCountSaves (text)
statistics.likesCountLikes (number)
statistics.commentsCountComments (number)
searchQuerySearch Query (text)
imagesImages (json)
details.videoDataVideo Data (json)
Show 22 more fields
author.profileUrlProfile URL (link)
author.profileImageUrlProfile Image (image)
commentsPreview Comments (json)
allCommentsAll Comments (json)
details.fullContentFull Content (text)
details.hashtagsHashtags (json)
details.editTimeLast Edited (text)
details.relatedTopicsRelated Topics (json)
details.isVideoIs Video (boolean)
details.statisticsDetailed Stats (json)
userInfo.nameUsername (text)
userInfo.bioBio (text)
userInfo.followersFollowers (text)
userInfo.followingFollowing (text)
userInfo.likesAndSavesLikes & Saves (text)
userInfo.profileImageUrlProfile Image (image)
userInfo.profileUrlProfile URL (link)
userInfo.scraped_fromScraped From (json)
changeTypeChange (text)
changedFieldsChanged Fields (json)
firstSeenAtFirst Seen (date)
lastSeenAtLast Seen (date)

Example output

An example from this actor’s documentation. Values are illustrative; this is not a fresh live result.

{
  "id": "7123456789012345678",
  "author": {
    "name": "Sample Creator",
    "profileUrl": "/@sample_creator123?region=us",
    "profileImageUrl": "https://p16-lemon8.byteimg.com/sample-avatar.jpeg",
    "userId": "6800000000000000001"
  },
  "title": "Sample post title",
  "content": "Short preview text pulled from the post card...",
  "postUrl": "https://www.lemon8-app.com/@sample_creator123/7123456789012345678?region=us",
  "imageUrl": "https://p16-lemon8.byteimg.com/sample-cover.jpeg",
  "statistics": {
    "savedCount": "0",
    "likesCount": "450",
    "commentsCount": "0"
  },
  "images": [
    {
      "src": "https://p16-lemon8.byteimg.com/sample-cover.jpeg",
      "alt": ""
    }
  ],
  "isVideo": false,
  "details": {
    "title": "Sample post title",
    "fullContent": "The full post body text appears here, hashtags stripped of markup...",
    "hashtags": [
      "#sampletag",
      "#lemon8"
    ],
    "editTime": "1/16",
    "publishedAt": "2025-01-15T09:30:00Z",
    "statistics": {
      "savedCount": "8",
      "likesCount": "31",
      "commentsCount": "2",
      "viewsCount": "1500"
    },
    "galleryImages": [
      {
        "src": "https://p16-lemon8.byteimg.com/sample-gallery-1.jpeg",
        "alt": ""
      }
    ],
    "relatedTopics": [
      "Sample Topic"
    ],
    "isVideo": false,
    "videoData": null
  },
  "comments": [
    {
      "author": "Sample Commenter",
      "authorTag": null,
      "content": "Sample comment text",
      "time": "1/16",
      "likes": "3",
      "replies": null,
      "commentId": "7123456789012345679"
    }
  ],
  "allComments": [
    {
      "author": "Sample Commenter",
      "authorTag": null,
      "content": "Sample comment text",
      "time": "1/16",
      "likes": "3",
      "replies": null,
      "commentId": "7123456789012345679"
    }
  ],
  "commentStats": {
    "totalComments": 12,
    "totalReplies": 4
  }
}

Ways to use this data

  • Creator and influencer research: track a profile's bio, follower growth and post cadence over time.
  • Content and trend analysis: pull full post text, hashtags and images across a set of profiles to spot recurring topics.
  • Network mapping: use Scrape Following Profiles to see who a creator follows and build an account graph.
  • Media archiving: save every image and video attached to a profile's posts.
  • Recurring monitoring: schedule incremental runs to catch new posts and edits without re-collecting everything each time.

Before you run

Start with a small input and check the resulting records against your expected fields. Source content and actor options can change; the current Apify listing is the reference for availability and pricing.

Questions about this actor

What data does Lemon8 Profile Scraper return?

The documented output for Lemon8 Profile Scraper includes id, title, content, author, followers, url, saves and likes. Availability of each field depends on the source page and the selected mode.

How much does Lemon8 Profile Scraper cost?

It costs $2.40 per 1,000 results on the Apify Free plan and from $2.00 on paid plans, with smaller per-run or optional feature charges listed on Apify. The Apify listing shows the current rate for every plan.

What is the difference between Resume and Incremental mode?

Resume continues one specific interrupted run from a pasted run or dataset id. Incremental mode is for scheduling this actor on the same profile(s) again and again and getting only what changed. They solve different problems and cannot be combined on a profile set that already has saved incremental state; use a separate State key to start a new campaign if you need both.

Can I get only new 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, and unchanged ones are not billed unless you turn that on too.

Can I use it with AI agents or MCP?

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

Ready to collect with Lemon8 Profile Scraper?

Run it on Apify with your own input and export the results as JSON, CSV or Excel.