{
  "data": {
    "id": "aT8GkXhjIG7JQF8J0",
    "actId": "rYwbbQBxhDrt2c8YN",
    "userId": "zq8lKbpLzTjGDayPC",
    "startedAt": "2026-11-11T09:03:01.399Z",
    "finishedAt": "2026-11-11T09:03:35.526Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 33939,
      "runTimeSecs": 33.939,
      "computeUnits": 0.03771,
      "imageSizeBytes": 3157703680
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "GK9YjZRyQZVzOdoH5",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Reddit Profile Crawler Pro Input\",\n  \"description\": \"Scrape public Reddit user profiles without login: posts, comments, split karma, account age, badges, bio/avatar, trophies, moderated communities, media, awards and client-side filters.\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"usernames\": {\n      \"title\": \"Reddit users\",\n      \"type\": \"array\",\n      \"description\": \"Reddit usernames to scrape. Accepts plain names (`spez`), `u/spez`, or full profile URLs such as `https://www.reddit.com/user/spez`. URLs are normalised automatically.\",\n      \"editor\": \"stringList\",\n      \"example\": [\n        \"spez\",\n        \"u/example_user\",\n        \"https://www.reddit.com/user/another_user\"\n      ],\n      \"prefill\": [\n        \"spez\"\n      ]\n    },\n    \"section\": {\n      \"title\": \"Profile section\",\n      \"type\": \"string\",\n      \"description\": \"Which part of the profile to collect. Overview includes the mixed posts + comments feed.\",\n      \"enum\": [\n        \"submitted\",\n        \"overview\",\n        \"comments\",\n        \"gilded\"\n      ],\n      \"enumTitles\": [\n        \"Posts (submitted)\",\n        \"Overview (posts + comments)\",\n        \"Comments\",\n        \"Gilded (legacy: Reddit no longer exposes it; treated as Posts)\"\n      ],\n      \"default\": \"submitted\",\n      \"sectionCaption\": \"Users\"\n    },\n    \"sort\": {\n      \"title\": \"Sort by\",\n      \"type\": \"string\",\n      \"description\": \"Feed order for the chosen section. `top` and `controversial` use the time filter below.\",\n      \"enum\": [\n        \"new\",\n        \"hot\",\n        \"top\",\n        \"controversial\"\n      ],\n      \"enumTitles\": [\n        \"New\",\n        \"Hot\",\n        \"Top\",\n        \"Controversial\"\n      ],\n      \"default\": \"new\"\n    },\n    \"timeFilter\": {\n      \"title\": \"Time filter\",\n      \"type\": \"string\",\n      \"description\": \"Time window used when sorting by Top or Controversial. Ignored for New and Hot.\",\n      \"enum\": [\n        \"all\",\n        \"year\",\n        \"month\",\n        \"week\",\n        \"day\",\n        \"hour\"\n      ],\n      \"enumTitles\": [\n        \"All time\",\n        \"Past year\",\n        \"Past month\",\n        \"Past week\",\n        \"Past day\",\n        \"Past hour\"\n      ],\n      \"default\": \"all\"\n    },\n    \"maxPosts\": {\n      \"title\": \"Max posts per user\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum posts to collect per user. The actor stops when the profile runs out of pages.\",\n      \"minimum\": 1,\n      \"maximum\": 1000,\n      \"default\": 50,\n      \"prefill\": 3\n    },\n    \"maxComments\": {\n      \"title\": \"Max comments per user\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum comments to collect per user in the Comments and Overview sections, or when Include comments is on.\",\n      \"minimum\": 1,\n      \"maximum\": 1000,\n      \"default\": 25,\n      \"sectionCaption\": \"Feed\"\n    },\n    \"includeComments\": {\n      \"title\": \"Include recent comments\",\n      \"type\": \"boolean\",\n      \"description\": \"Also collect the user's recent comments when section is Posts. Adds `recent_comments[]`.\",\n      \"default\": false,\n      \"sectionCaption\": \"Enrichment\"\n    },\n    \"includeTrophies\": {\n      \"title\": \"Include trophy case\",\n      \"type\": \"boolean\",\n      \"description\": \"Collect trophy names and icons shown on the profile. Adds `trophies[]` and `trophy_count`.\",\n      \"default\": false\n    },\n    \"includeModeratedSubreddits\": {\n      \"title\": \"Include moderated communities\",\n      \"type\": \"boolean\",\n      \"description\": \"Collect the public list of communities the user moderates. Adds `moderated_subreddits[]`.\",\n      \"default\": false\n    },\n    \"minPostScore\": {\n      \"title\": \"Minimum post score\",\n      \"type\": \"integer\",\n      \"description\": \"Drop posts whose score is below this value.\",\n      \"minimum\": -10000,\n      \"maximum\": 10000000,\n      \"sectionCaption\": \"Filters\"\n    },\n    \"maxPostAgeDays\": {\n      \"title\": \"Maximum post age (days)\",\n      \"type\": \"integer\",\n      \"description\": \"Drop posts older than this many days.\",\n      \"minimum\": 1,\n      \"maximum\": 36500\n    },\n    \"excludeNsfwPosts\": {\n      \"title\": \"Exclude NSFW posts\",\n      \"type\": \"boolean\",\n      \"description\": \"Drop posts Reddit marks NSFW or not brand-safe.\",\n      \"default\": false\n    },\n    \"minPostComments\": {\n      \"title\": \"Minimum comments on a post\",\n      \"type\": \"integer\",\n      \"description\": \"Drop posts with fewer comments than this value.\",\n      \"minimum\": 0,\n      \"maximum\": 10000000\n    },\n    \"maxPostComments\": {\n      \"title\": \"Maximum comments on a post\",\n      \"type\": \"integer\",\n      \"description\": \"Drop posts with more comments than this value.\",\n      \"minimum\": 0,\n      \"maximum\": 10000000\n    },\n    \"postType\": {\n      \"title\": \"Post type\",\n      \"type\": \"string\",\n      \"description\": \"Keep only one kind of post, or all types.\",\n      \"enum\": [\n        \"all\",\n        \"text\",\n        \"link\",\n        \"image\",\n        \"video\",\n        \"gallery\",\n        \"crosspost\",\n        \"gif\",\n        \"multi_media\",\n        \"poll\"\n      ],\n      \"enumTitles\": [\n        \"All types\",\n        \"Text\",\n        \"Link\",\n        \"Image\",\n        \"Video\",\n        \"Gallery\",\n        \"Crosspost\",\n        \"GIF\",\n        \"Multi-media\",\n        \"Poll\"\n      ],\n      \"default\": \"all\"\n    },\n    \"includeKeywords\": {\n      \"title\": \"Include keywords\",\n      \"type\": \"array\",\n      \"description\": \"Keep only posts whose title, body, flair or subreddit contains at least one of these terms (or all of them when Keyword match is All).\",\n      \"editor\": \"stringList\",\n      \"example\": [\n        \"python\",\n        \"data\"\n      ]\n    },\n    \"excludeKeywords\": {\n      \"title\": \"Exclude keywords\",\n      \"type\": \"array\",\n      \"description\": \"Drop posts whose title, body, flair or subreddit contains any of these terms.\",\n      \"editor\": \"stringList\",\n      \"example\": [\n        \"giveaway\",\n        \"meme\"\n      ]\n    },\n    \"keywordMatch\": {\n      \"title\": \"Keyword match\",\n      \"type\": \"string\",\n      \"description\": \"Whether a post must contain any or all include keywords.\",\n      \"enum\": [\n        \"any\",\n        \"all\"\n      ],\n      \"enumTitles\": [\n        \"Any keyword\",\n        \"All keywords\"\n      ],\n      \"default\": \"any\"\n    },\n    \"excludeStickied\": {\n      \"title\": \"Exclude stickied posts\",\n      \"type\": \"boolean\",\n      \"description\": \"Drop posts pinned to the top of a community.\",\n      \"default\": false\n    }\n  }\n}",
    "readme": "# Reddit User Profile & Post History Crawler Pro\n\nTurn Reddit usernames or profile links into structured user records: split karma, account age, badges, bio and avatar, plus the user's posts or comments with media, awards, upvote ratio, trophies and moderated communities.\n\nRuns on public pages without a Reddit account, login cookie, API key, or proxy setup.\n\n## Modes\n\n| Mode | What it collects |\n|---|---|\n| **Posts** (`submitted`) | The user's submitted posts, with optional recent comments. |\n| **Overview** (`overview`) | Posts **and** comments in one record. |\n| **Comments** (`comments`) | The user's recent comments only. |\n| **Gilded** (legacy) | Reddit no longer exposes a gilded feed; accepted for saved tasks and treated as Posts with a warning. |\n\nEvery mode supports Hot, New, Top and Controversial ordering. Top and Controversial use the `timeFilter` window.\n\n## What each record contains\n\n### User fields\n\n- `username`, `user_id`, `profile_url`\n- `post_karma`, `comment_karma`, `total_karma`\n- `account_created` (ISO 8601), `account_age_years`\n- `description`, `icon_img`\n- `contributions`\n- `is_admin`, `is_employee`, `is_moderator`, `is_gold`, `verified`, `has_verified_email` — only present when Reddit shows the badge\n- `posts[]`, `post_count`\n- `filtered_post_count` — only when posts existed but every one was filtered out\n- `section_empty` — only when the chosen feed genuinely has no content for that user\n- `trophies[]`, `trophy_count` — when Include trophy case is on\n- `moderated_subreddits[]`, `moderated_subreddit_count` — when Include moderated communities is on\n- `moderator_list_hidden` — when the public moderator list is hidden\n- `recent_comments[]`, `recent_comment_count`, `recent_comments_total_score` — for Overview, Comments, or when Include recent comments is on\n- `posts_total_score` — sum of kept post scores when non-zero\n- `scraped_at`\n\n### Post fields\n\n- `post_id`, `post_name`, `title`, `author`, `author_fullname`\n- `subreddit` (bare name, e.g. `aww`), `subreddit_prefixed` (`r/aww`)\n- `score`, `num_comments`, `upvote_ratio`\n- `permalink`, `url`, `external_url`, `domain`, `post_type`, `post_hint`\n- `content` (self-text, up to 1,000 characters), `content_html`\n- `thumbnail_url`, `link_flair`\n- `created_utc`, `created_at`, `post_age_seconds`, `title_word_count`\n- `is_self`, `is_gallery`, `is_video`, `is_crosspost`, `is_stickied`, `is_locked`, `is_archived`, `is_nsfw`, `is_spoiler`, `is_original_content`, `is_promoted`\n- `awards[]`, `total_awards_received`, `gilded_count` (when Reddit labels the award as a gild)\n- `media_metadata` — type, thumbnail, gallery images, MP4/HLS video URL\n- `crosspost_parent` — original post id, subreddit and link\n\n### Comment fields\n\n- `comment_id`, `comment_name`, `post_id`, `post_title`\n- `author`, `text`, `body_html`\n- `score`, `subreddit`, `subreddit_prefixed`\n- `permalink`, `created_utc`, `created_at`\n- `is_edited`, `distinguished`\n\nA field the profile genuinely lacks is omitted, never emitted as `null`.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `usernames` | array | – | Usernames, `u/name` handles, or full profile URLs. Legacy `username` is also accepted. |\n| `section` | select | `submitted` | Posts, Overview, Comments, or legacy Gilded. |\n| `sort` | select | `new` | New, Hot, Top, or Controversial. |\n| `timeFilter` | select | `all` | All time, year, month, week, day, or hour. Used by Top/Controversial. |\n| `maxPosts` | integer | `50` | Posts to collect per user (1–1000). |\n| `maxComments` | integer | `25` | Comments to collect per user (1–1000). |\n| `includeComments` | boolean | `false` | Also collect comments when the section is Posts. |\n| `includeTrophies` | boolean | `false` | Add the trophy case. |\n| `includeModeratedSubreddits` | boolean | `false` | Add the public moderated-community list. |\n| `minPostScore` | integer | – | Drop posts below this score. |\n| `maxPostAgeDays` | integer | – | Drop posts older than this many days. |\n| `excludeNsfwPosts` | boolean | `false` | Drop NSFW / not-brand-safe posts. |\n| `minPostComments` | integer | – | Drop posts with fewer comments. |\n| `maxPostComments` | integer | – | Drop posts with more comments. |\n| `postType` | select | `all` | Keep one type: text, link, image, video, gallery, crosspost, GIF, multi-media, or poll. |\n| `includeKeywords` | array | – | Keep posts matching these terms in title, body, flair, or subreddit. |\n| `excludeKeywords` | array | – | Drop posts matching any of these terms. |\n| `keywordMatch` | select | `any` | Include keywords may match any or all terms. |\n| `excludeStickied` | boolean | `false` | Drop pinned posts. |\n\n### Example: recent posts\n\n```json\n{\n  \"usernames\": [\"spez\", \"https://www.reddit.com/user/Poem_for_your_sprog\"],\n  \"section\": \"submitted\",\n  \"sort\": \"new\",\n  \"maxPosts\": 25\n}\n```\n\n### Example: top comments\n\n```json\n{\n  \"usernames\": [\"spez\"],\n  \"section\": \"comments\",\n  \"sort\": \"top\",\n  \"timeFilter\": \"year\",\n  \"maxComments\": 50,\n  \"excludeNsfwPosts\": true\n}\n```\n\n### Example: filtered image posts\n\n```json\n{\n  \"usernames\": [\"GallowBoob\"],\n  \"section\": \"submitted\",\n  \"sort\": \"top\",\n  \"timeFilter\": \"month\",\n  \"maxPosts\": 100,\n  \"postType\": \"image\",\n  \"minPostScore\": 500,\n  \"excludeKeywords\": [\"giveaway\"]\n}\n```\n\n### Example: full profile\n\n```json\n{\n  \"usernames\": [\"spez\"],\n  \"section\": \"overview\",\n  \"maxPosts\": 50,\n  \"maxComments\": 50,\n  \"includeTrophies\": true,\n  \"includeModeratedSubreddits\": true,\n  \"excludeNsfwPosts\": true\n}\n```\n\n## Error records\n\nEach unusable username emits one record with `recordType: \"error\"` and `type: \"reddit_profile_crawler_pro_error\"`. The run continues with the remaining users.\n\n| `reason` | Meaning |\n|---|---|\n| `user_not_found` | Reddit has no profile with that name. |\n| `profile_private` | The profile is private. |\n| `profile_suspended` | The account is suspended. |\n| `blocked` | Reddit blocked every anonymous route for this run. |\n| `scrape_failed` | The page raised an unexpected error. |\n| `no_valid_usernames` | The input contained no usable username. |\n\n## Use cases\n\n- **User research** — posting cadence, top communities, karma split and account age.\n- **Trust and safety checks** — combine age, status badges, verification and trophy history.\n- **Influence analysis** — rank posts by score, comments, awards and upvote ratio.\n- **Community audits** — export the public list of communities a user moderates.\n- **Dataset building** — collect posts and comments with media and engagement metadata.\n\n## FAQ\n\n### Is this affiliated with Reddit?\n\nNo. This is an independent third-party actor that reads publicly available Reddit pages. It is not operated by or affiliated with Reddit.\n\n### Do I need a Reddit account, API key, or proxy?\n\nNo. The actor reads public pages anonymously. It handles Reddit's network challenges automatically and needs no credentials or proxy configuration from you.\n\n### Why is `post_count` lower than `maxPosts`?\n\nThe profile feed ran out of pages before reaching the limit, or the client-side filters removed posts. `filtered_post_count` appears when filters removed every post.\n\n### Why did a user return no comments?\n\nThe account may have no public comments, or Reddit's comments feed may be empty for that profile. `section_empty` flags the empty feed.\n\n### Why is `section: \"gilded\"` treated as Posts?\n\nReddit's current public profile UI no longer has a gilded-only feed. Saved tasks that send `gilded` keep working as Posts, and the status log explains the substitution.\n\n### Why are awarder/awardee karma fields often missing?\n\nReddit's current public profile header only shows post, comment and total karma for most accounts. Those fields appear only when the page carries them.\n\n### Are private or suspended profiles supported?\n\nNo. They emit an error record explaining the reason; no personal data is collected from them.\n\n## Data source\n\nPublic Reddit profile, posts and comments pages. The actor does not use Reddit's OAuth API, does not log in, and does not require cookies.\n\n## Legacy input compatibility\n\nOld saved tasks keep working. The actor maps these keys in code:\n\n- `username` (string) → `usernames`\n- `sortBy` → `sort`\n- `section: \"gilded\"` → `submitted`\n- old sort aliases `best` / `rising` / `relevance` → `hot` / `new` / `hot`\n\nLegacy keys are intentionally **not** shown in the input form, so the schema only contains fields the actor actually uses.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "reddit-user-profile-and-post-history-crawler-pro",
      "title": "Reddit User Profile & Post History Crawler Pro",
      "description": "Collect any public Reddit user's split karma, account age, badges, bio and avatar, plus their filtered post history or comments with media, awards, upvote ratio, trophies and moderated communities. Cookieless: no login, API key or proxy setup.",
      "version": "2.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# Reddit User Profile & Post History Crawler Pro\n\nTurn Reddit usernames or profile links into structured user records: split karma, account age, badges, bio and avatar, plus the user's posts or comments with media, awards, upvote ratio, trophies and moderated communities.\n\nRuns on public pages without a Reddit account, login cookie, API key, or proxy setup.\n\n## Modes\n\n| Mode | What it collects |\n|---|---|\n| **Posts** (`submitted`) | The user's submitted posts, with optional recent comments. |\n| **Overview** (`overview`) | Posts **and** comments in one record. |\n| **Comments** (`comments`) | The user's recent comments only. |\n| **Gilded** (legacy) | Reddit no longer exposes a gilded feed; accepted for saved tasks and treated as Posts with a warning. |\n\nEvery mode supports Hot, New, Top and Controversial ordering. Top and Controversial use the `timeFilter` window.\n\n## What each record contains\n\n### User fields\n\n- `username`, `user_id`, `profile_url`\n- `post_karma`, `comment_karma`, `total_karma`\n- `account_created` (ISO 8601), `account_age_years`\n- `description`, `icon_img`\n- `contributions`\n- `is_admin`, `is_employee`, `is_moderator`, `is_gold`, `verified`, `has_verified_email` — only present when Reddit shows the badge\n- `posts[]`, `post_count`\n- `filtered_post_count` — only when posts existed but every one was filtered out\n- `section_empty` — only when the chosen feed genuinely has no content for that user\n- `trophies[]`, `trophy_count` — when Include trophy case is on\n- `moderated_subreddits[]`, `moderated_subreddit_count` — when Include moderated communities is on\n- `moderator_list_hidden` — when the public moderator list is hidden\n- `recent_comments[]`, `recent_comment_count`, `recent_comments_total_score` — for Overview, Comments, or when Include recent comments is on\n- `posts_total_score` — sum of kept post scores when non-zero\n- `scraped_at`\n\n### Post fields\n\n- `post_id`, `post_name`, `title`, `author`, `author_fullname`\n- `subreddit` (bare name, e.g. `aww`), `subreddit_prefixed` (`r/aww`)\n- `score`, `num_comments`, `upvote_ratio`\n- `permalink`, `url`, `external_url`, `domain`, `post_type`, `post_hint`\n- `content` (self-text, up to 1,000 characters), `content_html`\n- `thumbnail_url`, `link_flair`\n- `created_utc`, `created_at`, `post_age_seconds`, `title_word_count`\n- `is_self`, `is_gallery`, `is_video`, `is_crosspost`, `is_stickied`, `is_locked`, `is_archived`, `is_nsfw`, `is_spoiler`, `is_original_content`, `is_promoted`\n- `awards[]`, `total_awards_received`, `gilded_count` (when Reddit labels the award as a gild)\n- `media_metadata` — type, thumbnail, gallery images, MP4/HLS video URL\n- `crosspost_parent` — original post id, subreddit and link\n\n### Comment fields\n\n- `comment_id`, `comment_name`, `post_id`, `post_title`\n- `author`, `text`, `body_html`\n- `score`, `subreddit`, `subreddit_prefixed`\n- `permalink`, `created_utc`, `created_at`\n- `is_edited`, `distinguished`\n\nA field the profile genuinely lacks is omitted, never emitted as `null`.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `usernames` | array | – | Usernames, `u/name` handles, or full profile URLs. Legacy `username` is also accepted. |\n| `section` | select | `submitted` | Posts, Overview, Comments, or legacy Gilded. |\n| `sort` | select | `new` | New, Hot, Top, or Controversial. |\n| `timeFilter` | select | `all` | All time, year, month, week, day, or hour. Used by Top/Controversial. |\n| `maxPosts` | integer | `50` | Posts to collect per user (1–1000). |\n| `maxComments` | integer | `25` | Comments to collect per user (1–1000). |\n| `includeComments` | boolean | `false` | Also collect comments when the section is Posts. |\n| `includeTrophies` | boolean | `false` | Add the trophy case. |\n| `includeModeratedSubreddits` | boolean | `false` | Add the public moderated-community list. |\n| `minPostScore` | integer | – | Drop posts below this score. |\n| `maxPostAgeDays` | integer | – | Drop posts older than this many days. |\n| `excludeNsfwPosts` | boolean | `false` | Drop NSFW / not-brand-safe posts. |\n| `minPostComments` | integer | – | Drop posts with fewer comments. |\n| `maxPostComments` | integer | – | Drop posts with more comments. |\n| `postType` | select | `all` | Keep one type: text, link, image, video, gallery, crosspost, GIF, multi-media, or poll. |\n| `includeKeywords` | array | – | Keep posts matching these terms in title, body, flair, or subreddit. |\n| `excludeKeywords` | array | – | Drop posts matching any of these terms. |\n| `keywordMatch` | select | `any` | Include keywords may match any or all terms. |\n| `excludeStickied` | boolean | `false` | Drop pinned posts. |\n\n### Example: recent posts\n\n```json\n{\n  \"usernames\": [\"spez\", \"https://www.reddit.com/user/Poem_for_your_sprog\"],\n  \"section\": \"submitted\",\n  \"sort\": \"new\",\n  \"maxPosts\": 25\n}\n```\n\n### Example: top comments\n\n```json\n{\n  \"usernames\": [\"spez\"],\n  \"section\": \"comments\",\n  \"sort\": \"top\",\n  \"timeFilter\": \"year\",\n  \"maxComments\": 50,\n  \"excludeNsfwPosts\": true\n}\n```\n\n### Example: filtered image posts\n\n```json\n{\n  \"usernames\": [\"GallowBoob\"],\n  \"section\": \"submitted\",\n  \"sort\": \"top\",\n  \"timeFilter\": \"month\",\n  \"maxPosts\": 100,\n  \"postType\": \"image\",\n  \"minPostScore\": 500,\n  \"excludeKeywords\": [\"giveaway\"]\n}\n```\n\n### Example: full profile\n\n```json\n{\n  \"usernames\": [\"spez\"],\n  \"section\": \"overview\",\n  \"maxPosts\": 50,\n  \"maxComments\": 50,\n  \"includeTrophies\": true,\n  \"includeModeratedSubreddits\": true,\n  \"excludeNsfwPosts\": true\n}\n```\n\n## Error records\n\nEach unusable username emits one record with `recordType: \"error\"` and `type: \"reddit_profile_crawler_pro_error\"`. The run continues with the remaining users.\n\n| `reason` | Meaning |\n|---|---|\n| `user_not_found` | Reddit has no profile with that name. |\n| `profile_private` | The profile is private. |\n| `profile_suspended` | The account is suspended. |\n| `blocked` | Reddit blocked every anonymous route for this run. |\n| `scrape_failed` | The page raised an unexpected error. |\n| `no_valid_usernames` | The input contained no usable username. |\n\n## Use cases\n\n- **User research** — posting cadence, top communities, karma split and account age.\n- **Trust and safety checks** — combine age, status badges, verification and trophy history.\n- **Influence analysis** — rank posts by score, comments, awards and upvote ratio.\n- **Community audits** — export the public list of communities a user moderates.\n- **Dataset building** — collect posts and comments with media and engagement metadata.\n\n## FAQ\n\n### Is this affiliated with Reddit?\n\nNo. This is an independent third-party actor that reads publicly available Reddit pages. It is not operated by or affiliated with Reddit.\n\n### Do I need a Reddit account, API key, or proxy?\n\nNo. The actor reads public pages anonymously. It handles Reddit's network challenges automatically and needs no credentials or proxy configuration from you.\n\n### Why is `post_count` lower than `maxPosts`?\n\nThe profile feed ran out of pages before reaching the limit, or the client-side filters removed posts. `filtered_post_count` appears when filters removed every post.\n\n### Why did a user return no comments?\n\nThe account may have no public comments, or Reddit's comments feed may be empty for that profile. `section_empty` flags the empty feed.\n\n### Why is `section: \"gilded\"` treated as Posts?\n\nReddit's current public profile UI no longer has a gilded-only feed. Saved tasks that send `gilded` keep working as Posts, and the status log explains the substitution.\n\n### Why are awarder/awardee karma fields often missing?\n\nReddit's current public profile header only shows post, comment and total karma for most accounts. Those fields appear only when the page carries them.\n\n### Are private or suspended profiles supported?\n\nNo. They emit an error record explaining the reason; no personal data is collected from them.\n\n## Data source\n\nPublic Reddit profile, posts and comments pages. The actor does not use Reddit's OAuth API, does not log in, and does not require cookies.\n\n## Legacy input compatibility\n\nOld saved tasks keep working. The actor maps these keys in code:\n\n- `username` (string) → `usernames`\n- `sortBy` → `sort`\n- `section: \"gilded\"` → `submitted`\n- old sort aliases `best` / `rising` / `relevance` → `hot` / `new` / `hot`\n\nLegacy keys are intentionally **not** shown in the input form, so the schema only contains fields the actor actually uses.\n",
      "input": {
        "title": "Reddit Profile Crawler Pro Input",
        "description": "Scrape public Reddit user profiles without login: posts, comments, split karma, account age, badges, bio/avatar, trophies, moderated communities, media, awards and client-side filters.",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "usernames": {
            "title": "Reddit users",
            "type": "array",
            "description": "Reddit usernames to scrape. Accepts plain names (`spez`), `u/spez`, or full profile URLs such as `https://www.reddit.com/user/spez`. URLs are normalised automatically.",
            "editor": "stringList",
            "example": [
              "spez",
              "u/example_user",
              "https://www.reddit.com/user/another_user"
            ],
            "prefill": [
              "spez"
            ]
          },
          "section": {
            "title": "Profile section",
            "type": "string",
            "description": "Which part of the profile to collect. Overview includes the mixed posts + comments feed.",
            "enum": [
              "submitted",
              "overview",
              "comments",
              "gilded"
            ],
            "enumTitles": [
              "Posts (submitted)",
              "Overview (posts + comments)",
              "Comments",
              "Gilded (legacy: Reddit no longer exposes it; treated as Posts)"
            ],
            "default": "submitted",
            "sectionCaption": "Users"
          },
          "sort": {
            "title": "Sort by",
            "type": "string",
            "description": "Feed order for the chosen section. `top` and `controversial` use the time filter below.",
            "enum": [
              "new",
              "hot",
              "top",
              "controversial"
            ],
            "enumTitles": [
              "New",
              "Hot",
              "Top",
              "Controversial"
            ],
            "default": "new"
          },
          "timeFilter": {
            "title": "Time filter",
            "type": "string",
            "description": "Time window used when sorting by Top or Controversial. Ignored for New and Hot.",
            "enum": [
              "all",
              "year",
              "month",
              "week",
              "day",
              "hour"
            ],
            "enumTitles": [
              "All time",
              "Past year",
              "Past month",
              "Past week",
              "Past day",
              "Past hour"
            ],
            "default": "all"
          },
          "maxPosts": {
            "title": "Max posts per user",
            "type": "integer",
            "description": "Maximum posts to collect per user. The actor stops when the profile runs out of pages.",
            "minimum": 1,
            "maximum": 1000,
            "default": 50,
            "prefill": 3
          },
          "maxComments": {
            "title": "Max comments per user",
            "type": "integer",
            "description": "Maximum comments to collect per user in the Comments and Overview sections, or when Include comments is on.",
            "minimum": 1,
            "maximum": 1000,
            "default": 25,
            "sectionCaption": "Feed"
          },
          "includeComments": {
            "title": "Include recent comments",
            "type": "boolean",
            "description": "Also collect the user's recent comments when section is Posts. Adds `recent_comments[]`.",
            "default": false,
            "sectionCaption": "Enrichment"
          },
          "includeTrophies": {
            "title": "Include trophy case",
            "type": "boolean",
            "description": "Collect trophy names and icons shown on the profile. Adds `trophies[]` and `trophy_count`.",
            "default": false
          },
          "includeModeratedSubreddits": {
            "title": "Include moderated communities",
            "type": "boolean",
            "description": "Collect the public list of communities the user moderates. Adds `moderated_subreddits[]`.",
            "default": false
          },
          "minPostScore": {
            "title": "Minimum post score",
            "type": "integer",
            "description": "Drop posts whose score is below this value.",
            "minimum": -10000,
            "maximum": 10000000,
            "sectionCaption": "Filters"
          },
          "maxPostAgeDays": {
            "title": "Maximum post age (days)",
            "type": "integer",
            "description": "Drop posts older than this many days.",
            "minimum": 1,
            "maximum": 36500
          },
          "excludeNsfwPosts": {
            "title": "Exclude NSFW posts",
            "type": "boolean",
            "description": "Drop posts Reddit marks NSFW or not brand-safe.",
            "default": false
          },
          "minPostComments": {
            "title": "Minimum comments on a post",
            "type": "integer",
            "description": "Drop posts with fewer comments than this value.",
            "minimum": 0,
            "maximum": 10000000
          },
          "maxPostComments": {
            "title": "Maximum comments on a post",
            "type": "integer",
            "description": "Drop posts with more comments than this value.",
            "minimum": 0,
            "maximum": 10000000
          },
          "postType": {
            "title": "Post type",
            "type": "string",
            "description": "Keep only one kind of post, or all types.",
            "enum": [
              "all",
              "text",
              "link",
              "image",
              "video",
              "gallery",
              "crosspost",
              "gif",
              "multi_media",
              "poll"
            ],
            "enumTitles": [
              "All types",
              "Text",
              "Link",
              "Image",
              "Video",
              "Gallery",
              "Crosspost",
              "GIF",
              "Multi-media",
              "Poll"
            ],
            "default": "all"
          },
          "includeKeywords": {
            "title": "Include keywords",
            "type": "array",
            "description": "Keep only posts whose title, body, flair or subreddit contains at least one of these terms (or all of them when Keyword match is All).",
            "editor": "stringList",
            "example": [
              "python",
              "data"
            ]
          },
          "excludeKeywords": {
            "title": "Exclude keywords",
            "type": "array",
            "description": "Drop posts whose title, body, flair or subreddit contains any of these terms.",
            "editor": "stringList",
            "example": [
              "giveaway",
              "meme"
            ]
          },
          "keywordMatch": {
            "title": "Keyword match",
            "type": "string",
            "description": "Whether a post must contain any or all include keywords.",
            "enum": [
              "any",
              "all"
            ],
            "enumTitles": [
              "Any keyword",
              "All keywords"
            ],
            "default": "any"
          },
          "excludeStickied": {
            "title": "Exclude stickied posts",
            "type": "boolean",
            "description": "Drop posts pinned to the top of a community.",
            "default": false
          }
        }
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Reddit User Profile & Post History Crawler Pro Output",
        "description": "Reddit user records with split karma, account age, badges, bio/avatar and filtered posts or comments (media, awards, upvote ratio, trophies, moderated communities).",
        "properties": {
          "profiles": {
            "type": "string",
            "title": "Reddit user profiles",
            "description": "Dataset containing all scraped Reddit user profiles.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Reddit User Profiles (Pro)",
              "transformation": {
                "fields": [
                  "username",
                  "post_karma",
                  "comment_karma",
                  "total_karma",
                  "account_age_years",
                  "is_admin",
                  "is_moderator",
                  "trophy_count",
                  "post_count",
                  "recent_comment_count",
                  "scraped_at"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {},
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 900,
        "memoryMbytes": 2048
      }
    },
    "buildNumber": "2.0.1",
    "imageDigest": "71e0d1a5d7f78160694344e86b8ea935d4fa45e9bf6c3da65ec59016e2e42699",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "2.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.03771
    }
  }
}