{
  "data": {
    "id": "fnN0CgcvwNm5wV0EC",
    "actId": "LxcZex2BAoPonkyrQ",
    "userId": "tnBVjt3CXmcUrEE3L",
    "startedAt": "2026-11-12T19:22:17.942Z",
    "finishedAt": "2026-11-12T19:23:03.113Z",
    "status": "SUCCEEDED",
    "meta": {
      "origin": "CLI"
    },
    "stats": {
      "durationMillis": 45084,
      "runTimeSecs": 45.084,
      "computeUnits": 0.05009333333333333,
      "imageSizeBytes": 1239022592
    },
    "options": {
      "useCache": true,
      "betaPackages": false,
      "memoryMbytes": 4096,
      "diskMbytes": 8192
    },
    "createdByOrganizationMemberUserId": "F2Aeb3gE2syjqz9xC",
    "exitCode": 0,
    "inputSchema": "{\n  \"title\": \"Reddit Keywords Scraper Input\",\n  \"type\": \"object\",\n  \"schemaVersion\": 1,\n  \"properties\": {\n    \"keywords\": {\n      \"title\": \"Keywords\",\n      \"type\": \"array\",\n      \"description\": \"List of keywords to search for on Reddit. Each keyword is searched separately. Advanced search syntax is supported: exact phrases (\\\"machine learning\\\"), boolean (python AND rust, python OR django, python NOT snake, (python OR django) AND framework), exclusion (-javascript), and field operators (author:name, subreddit:name, flair:tag, selftext:\\\"phrase\\\", site:domain).\",\n      \"editor\": \"stringList\",\n      \"items\": {\n        \"type\": \"string\"\n      },\n      \"minItems\": 1,\n      \"example\": [\n        \"python programming\",\n        \"machine learning\",\n        \"best laptops 2025\"\n      ],\n      \"prefill\": [\n        \"machine learning\"\n      ]\n    },\n    \"searchPosts\": {\n      \"title\": \"Search for posts\",\n      \"type\": \"boolean\",\n      \"description\": \"Include posts in the keyword search results.\",\n      \"default\": true,\n      \"prefill\": true\n    },\n    \"searchComments\": {\n      \"title\": \"Search for comments\",\n      \"type\": \"boolean\",\n      \"description\": \"Include comments in the keyword search results.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"searchCommunities\": {\n      \"title\": \"Search for communities\",\n      \"type\": \"boolean\",\n      \"description\": \"Include subreddits in the keyword search results (full community data: subscribers, description, rules-friendly fields).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"searchUsers\": {\n      \"title\": \"Search for users\",\n      \"type\": \"boolean\",\n      \"description\": \"Include Reddit accounts (usernames) that match the keyword in the results (e.g. finding accounts named after a brand or topic).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"withinCommunity\": {\n      \"title\": \"Limit search to one or more communities\",\n      \"type\": \"string\",\n      \"description\": \"Restrict the keyword search to specific subreddits. Accepts a bare name (developers), r/developers, a full subreddit URL, or a comma-separated list to search several subreddits at once (developers,programming). Leave empty to search all of Reddit. Applies to posts and comments; community and account search are always global (Reddit does not scope those to a subreddit).\",\n      \"example\": \"r/technology,r/programming\",\n      \"editor\": \"textfield\"\n    },\n    \"sort\": {\n      \"title\": \"Sort search results by\",\n      \"type\": \"string\",\n      \"description\": \"How the keyword search results are ranked.\",\n      \"enum\": [\n        \"relevance\",\n        \"hot\",\n        \"top\",\n        \"new\",\n        \"comments\"\n      ],\n      \"default\": \"relevance\",\n      \"prefill\": \"relevance\",\n      \"enumTitles\": [\n        \"Relevance\",\n        \"Hot\",\n        \"Top\",\n        \"New\",\n        \"Comment count\"\n      ]\n    },\n    \"timeFilter\": {\n      \"title\": \"Time range\",\n      \"type\": \"string\",\n      \"description\": \"Limit results to posts from a specific time window. Applies to the Top sort (as in Reddit's search UI); other sorts ignore it.\",\n      \"enum\": [\n        \"hour\",\n        \"day\",\n        \"week\",\n        \"month\",\n        \"year\",\n        \"all\"\n      ],\n      \"default\": \"all\",\n      \"prefill\": \"all\",\n      \"enumTitles\": [\n        \"Past Hour\",\n        \"Past Day\",\n        \"Past Week\",\n        \"Past Month\",\n        \"Past Year\",\n        \"All Time\"\n      ]\n    },\n    \"resultLimit\": {\n      \"title\": \"Maximum posts per keyword\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of posts to scrape for each keyword (1-1000).\",\n      \"default\": 100,\n      \"prefill\": 3,\n      \"minimum\": 1,\n      \"maximum\": 1000,\n      \"example\": 100\n    },\n    \"maxComments\": {\n      \"title\": \"Maximum comments per keyword\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of comments to scrape per keyword (when 'Search for comments' is enabled).\",\n      \"default\": 100,\n      \"prefill\": 100,\n      \"minimum\": 0,\n      \"maximum\": 100000,\n      \"example\": 100\n    },\n    \"maxCommunities\": {\n      \"title\": \"Maximum communities per keyword\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of subreddits to return per keyword (when 'Search for communities' is enabled).\",\n      \"default\": 10,\n      \"prefill\": 10,\n      \"minimum\": 0,\n      \"maximum\": 1000,\n      \"example\": 10\n    },\n    \"maxUsers\": {\n      \"title\": \"Maximum users per keyword\",\n      \"type\": \"integer\",\n      \"description\": \"Maximum number of Reddit accounts to return per keyword (when 'Search for users' is enabled). Reddit serves a single results page for account search (no further pagination), so the reliable ceiling is 100.\",\n      \"default\": 25,\n      \"prefill\": 25,\n      \"minimum\": 0,\n      \"maximum\": 100,\n      \"example\": 25\n    },\n    \"maxItems\": {\n      \"title\": \"Maximum total results\",\n      \"type\": \"integer\",\n      \"description\": \"Hard cap on the total number of records returned for the whole run (all keywords, all result types combined). The run stops as soon as this budget is spent.\",\n      \"default\": 100000,\n      \"prefill\": 3,\n      \"minimum\": 1,\n      \"maximum\": 1000000,\n      \"example\": 100000\n    },\n    \"includeNSFW\": {\n      \"title\": \"Include NSFW (18+) content\",\n      \"type\": \"boolean\",\n      \"description\": \"Include NSFW posts in the results.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"onlyWithFlair\": {\n      \"title\": \"Only posts with a link flair\",\n      \"type\": \"boolean\",\n      \"description\": \"Keep only posts that have a link flair set (e.g. 'Discussion', 'News'). Posts without any flair are dropped.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"postType\": {\n      \"title\": \"Only posts of this type\",\n      \"type\": \"string\",\n      \"description\": \"Keep only posts of the selected content type. Leave unset to keep all types.\",\n      \"enum\": [\n        \"self\",\n        \"link\",\n        \"image\",\n        \"video\",\n        \"gallery\",\n        \"poll\"\n      ],\n      \"enumTitles\": [\n        \"Text (self post)\",\n        \"Link\",\n        \"Image\",\n        \"Video\",\n        \"Gallery\",\n        \"Poll\"\n      ]\n    },\n    \"minScore\": {\n      \"title\": \"Minimum score (upvotes minus downvotes)\",\n      \"type\": \"integer\",\n      \"description\": \"Only keep posts with a score at or above this value. Leave unset to keep all scores.\",\n      \"minimum\": -100000,\n      \"maximum\": 1000000,\n      \"example\": 10\n    },\n    \"minComments\": {\n      \"title\": \"Minimum number of comments\",\n      \"type\": \"integer\",\n      \"description\": \"Only keep posts with at least this many comments. Leave unset to keep all posts.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000,\n      \"example\": 5\n    },\n    \"maxScore\": {\n      \"title\": \"Maximum score (upvotes minus downvotes)\",\n      \"type\": \"integer\",\n      \"description\": \"Only keep posts with a score at or below this value. Useful for finding overlooked/low-visibility posts. Leave unset to keep all scores.\",\n      \"minimum\": -100000,\n      \"maximum\": 1000000,\n      \"example\": 1000\n    },\n    \"minAwards\": {\n      \"title\": \"Minimum awards received\",\n      \"type\": \"integer\",\n      \"description\": \"Only keep posts (and comments, when 'Search for comments' is enabled) with at least this many total awards. Leave unset to keep all.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000,\n      \"example\": 1\n    },\n    \"titleContains\": {\n      \"title\": \"Title contains keyword\",\n      \"type\": \"string\",\n      \"description\": \"Only keep posts whose title contains this text (case-insensitive substring match). Applies on top of the keyword search. Leave empty to keep all titles.\",\n      \"editor\": \"textfield\",\n      \"example\": \"launch\"\n    },\n    \"contentContains\": {\n      \"title\": \"Post text contains keyword\",\n      \"type\": \"string\",\n      \"description\": \"Only keep self (text) posts whose body contains this text (case-insensitive substring match). Link/image/video posts have no body text and are excluded when this is set. Leave empty to keep all posts.\",\n      \"editor\": \"textfield\",\n      \"example\": \"tutorial\"\n    },\n    \"flairContains\": {\n      \"title\": \"Flair contains keyword\",\n      \"type\": \"string\",\n      \"description\": \"Only keep posts whose flair text contains this text (case-insensitive substring match). Leave empty to keep all flairs.\",\n      \"editor\": \"textfield\",\n      \"example\": \"Discussion\"\n    },\n    \"authorFlairContains\": {\n      \"title\": \"Author flair contains keyword\",\n      \"type\": \"string\",\n      \"description\": \"Only keep posts (and comments, when 'Search for comments' is enabled) whose author flair text contains this text (case-insensitive substring match). Leave empty to keep all.\",\n      \"editor\": \"textfield\",\n      \"example\": \"Moderator\"\n    },\n    \"authors\": {\n      \"title\": \"Only results by these authors\",\n      \"type\": \"array\",\n      \"description\": \"Only keep posts (and comments, when 'Search for comments' is enabled) submitted by one of these usernames (bare name or u/-prefixed, case-insensitive). Leave empty to keep results from all authors.\",\n      \"editor\": \"stringList\",\n      \"example\": [\n        \"spez\"\n      ]\n    },\n    \"domain\": {\n      \"title\": \"Domain contains\",\n      \"type\": \"string\",\n      \"description\": \"Only keep posts whose link domain contains this text (case-insensitive, e.g. 'youtube.com' or 'self.python'). Leave empty to keep all domains.\",\n      \"editor\": \"textfield\",\n      \"example\": \"youtube.com\"\n    },\n    \"distinguished\": {\n      \"title\": \"Distinguished (official) posts/comments only\",\n      \"type\": \"string\",\n      \"description\": \"Only keep posts (and comments, when 'Search for comments' is enabled) distinguished by Reddit as moderator, admin or special (e.g. Reddit-team), or only regular (non-distinguished) results. Leave unset to keep all.\",\n      \"enum\": [\n        \"moderator\",\n        \"admin\",\n        \"special\",\n        \"none\"\n      ],\n      \"enumTitles\": [\n        \"Moderator posts only\",\n        \"Admin posts only\",\n        \"Special (official) posts only\",\n        \"Regular posts only (exclude all distinguished)\"\n      ]\n    },\n    \"excludeSpoilers\": {\n      \"title\": \"Exclude spoiler-tagged posts\",\n      \"type\": \"boolean\",\n      \"description\": \"When enabled, posts marked as a spoiler by their author are dropped from the results.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"onlyOriginalContent\": {\n      \"title\": \"Only original content (OC) posts\",\n      \"type\": \"boolean\",\n      \"description\": \"When enabled, only posts the author tagged as original content are kept.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"excludeStickied\": {\n      \"title\": \"Exclude stickied/pinned posts\",\n      \"type\": \"boolean\",\n      \"description\": \"When enabled, posts pinned/stickied by moderators (and, when 'Search for comments' is enabled, comments stickied by a moderator) are dropped from the results.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"excludeCrossposts\": {\n      \"title\": \"Exclude crossposts\",\n      \"type\": \"boolean\",\n      \"description\": \"When enabled, posts that are crossposted from another subreddit are dropped from the results.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"excludeArchived\": {\n      \"title\": \"Exclude archived posts\",\n      \"type\": \"boolean\",\n      \"description\": \"When enabled, posts (and, when 'Search for comments' is enabled, comments) that Reddit has archived (locked from further voting/commenting after 6 months) are dropped from the results.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"excludeLocked\": {\n      \"title\": \"Exclude locked posts\",\n      \"type\": \"boolean\",\n      \"description\": \"When enabled, posts that a moderator has locked from further comments (and, when 'Search for comments' is enabled, comments a moderator has locked from further replies) are dropped from the results.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"excludeDeleted\": {\n      \"title\": \"Exclude deleted/removed content\",\n      \"type\": \"boolean\",\n      \"description\": \"Drop posts and comments whose author account was deleted or whose content was removed by a moderator/admin (Reddit marks these with the literal '[deleted]' or '[removed]' placeholders).\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"minUpvoteRatio\": {\n      \"title\": \"Minimum upvote ratio\",\n      \"type\": \"number\",\n      \"description\": \"Only keep posts whose upvote ratio (fraction of upvotes among all votes) is at or above this value. Leave unset to keep all ratios.\",\n      \"minimum\": 0,\n      \"maximum\": 1,\n      \"example\": 0.8\n    },\n    \"minCommentScore\": {\n      \"title\": \"Minimum comment score (upvotes minus downvotes)\",\n      \"type\": \"integer\",\n      \"description\": \"Only keep comments with a score at or above this value. Applies when 'Search for comments' is enabled; ignored otherwise. Leave unset to keep all scores.\",\n      \"minimum\": -100000,\n      \"maximum\": 1000000,\n      \"example\": 5\n    },\n    \"commentContains\": {\n      \"title\": \"Comment text contains keyword\",\n      \"type\": \"string\",\n      \"description\": \"Only keep comments whose body contains this text (case-insensitive substring match). Applies when 'Search for comments' is enabled; ignored otherwise. Leave empty to keep all comments.\",\n      \"editor\": \"textfield\",\n      \"example\": \"agree\"\n    },\n    \"onlyOPComments\": {\n      \"title\": \"Only comments by the original poster\",\n      \"type\": \"boolean\",\n      \"description\": \"When enabled, keep only comments written by the post's original poster (self-replies). Applies when 'Search for comments' is enabled; ignored otherwise.\",\n      \"default\": false,\n      \"prefill\": false\n    },\n    \"minCommunitySubscribers\": {\n      \"title\": \"Minimum community subscribers\",\n      \"type\": \"integer\",\n      \"description\": \"Only keep communities (subreddits) with at least this many subscribers. Applies when 'Search for communities' is enabled; ignored otherwise. Leave unset to keep all sizes.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000,\n      \"example\": 1000\n    },\n    \"subredditType\": {\n      \"title\": \"Community access type\",\n      \"type\": \"string\",\n      \"description\": \"Only keep results whose community has this access type (e.g. 'public' to exclude results from private/restricted/gold-only/archived subs you can't freely join, post or comment in). Applies to posts, comments and communities alike. Leave unset to keep all types.\",\n      \"enum\": [\n        \"public\",\n        \"restricted\",\n        \"private\",\n        \"gold_only\",\n        \"archived\",\n        \"user\"\n      ],\n      \"enumTitles\": [\n        \"Public\",\n        \"Restricted (posting requires approval)\",\n        \"Private (invite-only)\",\n        \"Gold only\",\n        \"Archived (read-only)\",\n        \"User profile subreddit\"\n      ]\n    },\n    \"minUserKarma\": {\n      \"title\": \"Minimum total karma\",\n      \"type\": \"integer\",\n      \"description\": \"Only keep Reddit accounts with at least this much total karma. Applies when 'Search for users' is enabled; ignored otherwise. Leave unset to keep all accounts.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000,\n      \"example\": 1000\n    },\n    \"minPostKarma\": {\n      \"title\": \"Minimum post karma\",\n      \"type\": \"integer\",\n      \"description\": \"Only keep Reddit accounts with at least this much post (link) karma. Applies when 'Search for users' is enabled; ignored otherwise. Leave unset to keep all accounts.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000,\n      \"example\": 100\n    },\n    \"minCommentKarma\": {\n      \"title\": \"Minimum comment karma\",\n      \"type\": \"integer\",\n      \"description\": \"Only keep Reddit accounts with at least this much comment karma. Applies when 'Search for users' is enabled; ignored otherwise. Leave unset to keep all accounts.\",\n      \"minimum\": 0,\n      \"maximum\": 1000000000,\n      \"example\": 100\n    },\n    \"postedAfter\": {\n      \"title\": \"Created on or after (YYYY-MM-DD)\",\n      \"type\": \"string\",\n      \"description\": \"Only keep results created on or after this date (UTC). Applies to posts, comments and communities (subreddit creation date). Reddit's cookieless account search exposes no account creation date, so account records are not date-filtered. Reddit caps each search at roughly 1,000 results and the live index often serves far fewer (~225-250), so a distant date window on a very broad query may not be fully reachable.\",\n      \"editor\": \"datepicker\",\n      \"example\": \"2025-01-01\"\n    },\n    \"postedBefore\": {\n      \"title\": \"Created on or before (YYYY-MM-DD)\",\n      \"type\": \"string\",\n      \"description\": \"Only keep results created on or before this date (interpreted as the end of that day, UTC). Applies to posts, comments and communities; account records are not date-filtered.\",\n      \"editor\": \"datepicker\",\n      \"example\": \"2025-12-31\"\n    }\n  },\n  \"required\": [\n    \"keywords\"\n  ]\n}",
    "readme": "# Reddit Keyword Monitor with Score & Karma Filters\n\nReddit's own search box only gets you so far before you need to sift the results by hand. This actor runs a keyword search across Reddit and hands back posts, comments, subreddits and accounts as filtered, structured records — score thresholds, karma minimums, flair text, date windows and more applied before the data ever reaches you. No Reddit account or API key needed on your side.\n\n## What this actor does\n\n- Searches Reddit by keyword and returns **posts, comments, communities and users** — pick any combination via `searchPosts` / `searchComments` / `searchCommunities` / `searchUsers`\n- Supports Reddit's full search syntax inside each keyword: exact phrases, `AND` / `OR` / `NOT`, `-exclusions`, and field operators (`author:`, `subreddit:`, `flair:`, `selftext:`, `site:`)\n- 5 sort orders (Relevance, Hot, Top, New, Comment count), 6 time filters, and 30+ optional filters — score, karma, flair, author, domain, awards, NSFW, subreddit access type, and creation-date windows\n- Scope a search to one or more subreddits at once (`withinCommunity`), or leave it unset to search all of Reddit\n- Empty fields are omitted from every record — the output never contains null or blank values\n\n## Output: per-post\n\nEach post record starts with `dataType: \"post\"` and includes:\n\n`subreddit`, `subreddit_prefixed`, `subreddit_id`, `subreddit_subscribers`, `subreddit_type`, `post_id`, `post_name`, `title`, `author`, `author_id`, `author_flair`, `author_flair_background_color`, `author_flair_text_color`, `author_flair_type`, `author_flair_css_class`, `author_flair_richtext`, `author_flair_template_id`, `author_premium`, `author_is_blocked`, `author_patreon_flair`, `content`, `content_html`, `content_url`, `content_categories`, `url` (reddit permalink), `permalink`, `url_overridden_by_dest`, `domain`, `post_hint`, `is_self`, `post_type` (self/link/image/video/gallery/poll), `score`, `ups`, `downs`, `upvote_ratio`, `num_comments`, `link_flair`, `link_flair_background_color`, `link_flair_text_color`, `link_flair_type`, `link_flair_css_class`, `link_flair_richtext`, `link_flair_template_id`, `thumbnail_url`, `thumbnail_width`, `thumbnail_height`, `created_utc`, `created_at`, `edited`, `edited_at`, `is_stickied`, `is_locked`, `is_archived`, `is_pinned`, `is_nsfw`, `is_spoiler`, `is_original_content`, `is_crosspost`, `is_crosspostable`, `is_meta`, `is_robot_indexable`, `is_reddit_media_domain`, `media_only`, `no_follow`, `send_replies`, `allow_live_comments`, `contest_mode`, `hide_score`, `suggested_sort`, `quarantine`, `num_crossposts`, `num_duplicates` (link posts only), `gilded`, `total_awards_received`, `awards` (award-type breakdown — name, count, coin price, icon URL — for every award given), `removed_by_category`, `distinguished`, `hidden`, `media_type`, `has_media`, `images[]`, `gallery_images[]`, `gallery_count`, `video_url`, `poll_data`, `crosspost_parent_id`, `search_term`, `crawled_at`, `source`\n\n## Output: per-comment\n\nEach comment record starts with `dataType: \"comment\"` and includes:\n\n`post_id`, `post_url`, `post_title`, `comment_id`, `comment_name`, `author`, `author_id`, `author_flair`, `author_flair_css_class`, `author_flair_template_id`, `author_flair_type`, `author_flair_text_color`, `author_flair_background_color`, `author_flair_richtext`, `author_premium`, `author_is_blocked`, `author_patreon_flair`, `body`, `body_html`, `score`, `ups`, `downs`, `score_hidden`, `subreddit`, `subreddit_prefixed`, `subreddit_id`, `subreddit_type`, `link_id`, `created_utc`, `created_at`, `edited`, `edited_at`, `archived`, `can_gild`, `depth`, `parent_id`, `parent_kind`, `is_op`, `is_stickied`, `is_locked`, `distinguished`, `controversiality`, `collapsed`, `collapsed_reason`, `collapsed_because_crowd_control`, `collapsed_reason_code`, `comment_type`, `unrepliable_reason`, `no_follow`, `send_replies`, `gilded`, `total_awards_received`, `awards`, `removed_by_category`, `permalink`, `search_term`, `crawled_at`, `source`\n\n## Output: per-community\n\nEach community record starts with `dataType: \"community\"` and includes:\n\n`subreddit`, `subreddit_prefixed`, `subreddit_id`, `url`, `title`, `description`, `description_html`, `public_description`, `public_description_html`, `submit_text`, `submit_text_html`, `submit_text_label`, `submit_link_label`, `subscribers`, `active_user_count`, `weekly_visitors`, `weekly_contributions`, `created_utc`, `created_at`, `subreddit_type`, `submission_type`, `restrict_posting`, `restrict_commenting`, `over18`, `quarantine`, `wiki_enabled`, `lang`, `advertiser_category`, `community_icon`, `icon_img`, `banner_img`, `banner_background_image`, `banner_background_color`, `mobile_banner_image`, `header_img`, `header_title`, `banner_width`, `banner_height`, `header_width`, `header_height`, `icon_width`, `icon_height`, `primary_color`, `key_color`, `allow_images`, `allow_videos`, `allow_videogifs`, `allow_galleries`, `allow_polls`, `allow_predictions`, `allow_predictions_tournament`, `allow_prediction_contributors`, `allow_talks`, `allow_discovery`, `allowed_media_in_comments`, `spoilers_enabled`, `original_content_tag_enabled`, `all_original_content`, `is_crosspostable_subreddit`, `link_flair_enabled`, `link_flair_position`, `user_flair_enabled_in_sr`, `user_flair_position`, `user_flair_type`, `user_flair_text`, `user_flair_richtext`, `user_flair_template_id`, `user_flair_background_color`, `user_flair_text_color`, `can_assign_link_flair`, `can_assign_user_flair`, `suggested_comment_sort`, `accept_followers`, `emojis_enabled`, `comment_score_hide_mins`, `collapse_deleted_comments`, `free_form_reports`, `hide_ads`, `public_traffic`, `community_reviewed`, `has_menu_widget`, `disable_contributor_requests`, `should_archive_posts`, `show_media`, `show_media_preview`, `should_show_media_in_comments_setting`, `user_sr_theme_enabled`, `search_term`, `crawled_at`, `source`\n\n## Output: per-user\n\nEach user record starts with `dataType: \"user\"` and includes:\n\n`username`, `user_id`, `profile_url`, `post_karma`, `comment_karma`, `total_karma`, `awardee_karma`, `awarder_karma`, `is_gold`, `is_mod`, `is_employee`, `has_verified_email`, `verified`, `has_subscribed`, `is_blocked`, `is_friend`, `pref_show_snoovatar`, `icon_img`, `snoovatar_img`, `snoovatar_size`, `accept_followers`, `hide_from_robots`, `user_subreddit` (the account's profile subreddit: display name, title, subscribers, icon, banner, bio, NSFW flag, type, URL), `created_utc`, `created_at`, `search_term`, `crawled_at`, `source`\n\nFields that don't apply to a given record (no media, no flair, no poll, no gallery, etc.) are **omitted entirely** — the output never contains null or empty values.\n\n## Data source\n\nReddit protects its public JSON endpoints with a browser challenge on many networks, so this actor reads the **server-rendered Reddit search pages** in a real browser session (cookieless — no Reddit account, login or API key) and extracts the result cards from the page. Posts, comments and communities are then enriched with their full field sets from the public, keyless **Arctic Shift** Reddit archive API (looked up by the IDs found on Reddit), which also supplies the awards, flair, media and karma breakdowns that the search cards don't show. If the archive is temporarily unavailable, the actor still returns the fields visible on the search page.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `keywords` | string[] | – | Search terms. Each keyword is searched separately and results are tagged with `search_term`. Supports Reddit's search syntax: exact phrases (`\"machine learning\"`), boolean (`python AND rust`, `python OR django`, `python NOT snake`, `(python OR django) AND framework`), exclusion (`-javascript`), and field operators (`author:name`, `subreddit:name`, `flair:tag`, `selftext:\"phrase\"`, `site:domain`) |\n| `searchPosts` | boolean | `true` | Include posts in the results |\n| `searchComments` | boolean | `false` | Include comments in the results |\n| `searchCommunities` | boolean | `false` | Include subreddits in the results (community discovery) |\n| `searchUsers` | boolean | `false` | Include Reddit accounts whose username matches the keyword (user discovery) |\n| `withinCommunity` | string | – | Restrict the search to one or more subs — bare name (`technology`), `r/technology`, a full URL, or a comma-separated list (`technology,programming`) to search several subreddits at once. Applies to posts and comments; community and account search are always global |\n| `sort` | enum | `relevance` | `relevance`, `hot`, `top`, `new`, `comments` |\n| `timeFilter` | enum | `all` | `hour`, `day`, `week`, `month`, `year`, `all` (applies to the Top sort, as in Reddit's own search UI) |\n| `resultLimit` | integer | `100` | Maximum posts per keyword (1–1,000) |\n| `maxComments` | integer | `100` | Maximum comments per keyword, when `searchComments` is on (0–100,000) |\n| `maxCommunities` | integer | `10` | Maximum subreddits per keyword, when `searchCommunities` is on (0–1,000) |\n| `maxUsers` | integer | `25` | Maximum accounts per keyword, when `searchUsers` is on (0–100 — Reddit serves a single results page for account search, so 100 is the reliable ceiling) |\n| `maxItems` | integer | `100000` | Hard cap on the **total** number of records for the whole run (all keywords, all types combined); the run stops as soon as this budget is spent (1–1,000,000) |\n| `includeNSFW` | boolean | `false` | Include 18+ posts |\n| `onlyWithFlair` | boolean | `false` | Keep only posts that have a link flair set; drop unflaired posts |\n| `postType` | enum | – | Keep only posts of one content type: `self`, `link`, `image`, `video`, `gallery`, `poll`. Leave unset to keep all types |\n| `minScore` | integer | – | Keep only posts with a score (upvotes minus downvotes) at or above this value |\n| `maxScore` | integer | – | Keep only posts with a score at or below this value — useful for finding overlooked/low-visibility posts |\n| `minComments` | integer | – | Keep only posts with at least this many comments |\n| `minAwards` | integer | – | Keep only posts (and comments, when `searchComments` is on) with at least this many total awards |\n| `titleContains` | string | – | Keep only posts whose title contains this text (case-insensitive substring match) |\n| `contentContains` | string | – | Keep only self (text) posts whose body contains this text (case-insensitive substring match) |\n| `flairContains` | string | – | Keep only posts whose link flair text contains this text (case-insensitive substring match) |\n| `authorFlairContains` | string | – | Keep only posts (and comments, when `searchComments` is on) whose author flair text contains this text (case-insensitive substring match) |\n| `authors` | string[] | – | Keep only results submitted by one of these usernames (bare name or `u/`-prefixed); applies to posts and, when `searchComments` is on, comments |\n| `domain` | string | – | Keep only posts whose link domain contains this text (e.g. `youtube.com`, `self.python`) |\n| `distinguished` | enum | – | Keep only `moderator`, `admin`, or `special` (Reddit-team) results, or `none` to keep only regular results. Applies to posts and, when `searchComments` is on, comments |\n| `subredditType` | enum | – | Keep only results whose community has this access type: `public`, `restricted`, `private`, `gold_only`, `archived`, `user`. Applies to posts, comments and communities alike |\n| `minUpvoteRatio` | number | – | Keep only posts with an upvote ratio (0–1) at or above this value |\n| `excludeStickied` | boolean | `false` | Drop posts pinned by moderators (and comments stickied by a moderator, when `searchComments` is on) |\n| `excludeCrossposts` | boolean | `false` | Drop posts that are crossposted from another subreddit |\n| `excludeArchived` | boolean | `false` | Drop content Reddit has archived (locked from voting/commenting), for posts and, when `searchComments` is on, comments |\n| `excludeLocked` | boolean | `false` | Drop content a moderator has locked from further comments/replies, for posts and, when `searchComments` is on, comments |\n| `excludeDeleted` | boolean | `false` | Drop posts and comments whose author was deleted or whose content was removed by a moderator/admin |\n| `excludeSpoilers` | boolean | `false` | Drop posts marked as a spoiler by their author |\n| `onlyOriginalContent` | boolean | `false` | Keep only posts the author tagged as original content (OC) |\n| `minCommentScore` | integer | – | Keep only comments with a score at or above this value, when `searchComments` is on |\n| `commentContains` | string | – | Keep only comments whose body contains this text, when `searchComments` is on |\n| `onlyOPComments` | boolean | `false` | Keep only comments written by the post's original poster, when `searchComments` is on |\n| `minCommunitySubscribers` | integer | – | Keep only communities with at least this many subscribers, when `searchCommunities` is on |\n| `minUserKarma` | integer | – | Keep only accounts with at least this much total karma, when `searchUsers` is on |\n| `minPostKarma` | integer | – | Keep only accounts with at least this much post (link) karma, when `searchUsers` is on |\n| `minCommentKarma` | integer | – | Keep only accounts with at least this much comment karma, when `searchUsers` is on |\n| `postedAfter` | date | – | Keep only results created on or after this date (UTC, `YYYY-MM-DD`). Applies to posts, comments and communities (subreddit creation date). Reddit's cookieless account search exposes no account creation date, so account records are not date-filtered |\n| `postedBefore` | date | – | Keep only results created on or before this date (UTC, inclusive of the whole day). Applies to posts, comments and communities; account records are not date-filtered |\n\n### Example: basic keyword search\n\n```json\n{\n  \"keywords\": [\"notion alternative\", \"best productivity app\"],\n  \"searchPosts\": true,\n  \"sort\": \"top\",\n  \"timeFilter\": \"month\",\n  \"resultLimit\": 50\n}\n```\n\n### Example: advanced search syntax with quality filters\n\n```json\n{\n  \"keywords\": [\"\\\"machine learning\\\" AND python -tutorial\"],\n  \"searchPosts\": true,\n  \"postType\": \"self\",\n  \"minScore\": 50,\n  \"minComments\": 10,\n  \"excludeStickied\": true,\n  \"resultLimit\": 100\n}\n```\n\n### Example: scoped subreddit search\n\n```json\n{\n  \"keywords\": [\"AI agents\"],\n  \"searchPosts\": true,\n  \"withinCommunity\": \"r/MachineLearning,r/artificial\",\n  \"sort\": \"new\",\n  \"resultLimit\": 30\n}\n```\n\n### Example: multi-type search (posts, comments, communities and users)\n\n```json\n{\n  \"keywords\": [\"notion\"],\n  \"searchPosts\": true,\n  \"searchComments\": true,\n  \"searchCommunities\": true,\n  \"searchUsers\": true,\n  \"resultLimit\": 30,\n  \"maxComments\": 30,\n  \"maxCommunities\": 10,\n  \"maxUsers\": 10,\n  \"postedAfter\": \"2026-01-01\",\n  \"maxItems\": 200\n}\n```\n\n## Use cases\n\n- **Brand monitoring** — track mentions of your product or competitors across Reddit, scheduled to run daily\n- **Lead generation** — find posts with purchase intent or \"recommend me a tool\" requests in your niche\n- **Market research** — mine opinions and sentiment across relevant communities\n- **Content ideation** — discover trending questions and discussion topics before you write\n- **Community discovery** — find every subreddit that matters for a given topic, with subscriber counts and rules-relevant metadata\n- **Influencer/account discovery** — find Reddit accounts whose username matches a brand or topic keyword\n\n## FAQ\n\n**Do I need a Reddit API key or login?** No — the actor searches Reddit's public data on your behalf; you don't need your own Reddit account or credentials.\n\n**Does this actor need a proxy configured?** No — there is no proxy field to set. Nothing on your end is required beyond the keywords and filters above.\n\n**Why did I get fewer results than my `resultLimit` / `maxItems`?** Reddit's own search index caps each query at roughly 1,000 results, and in practice it often serves noticeably fewer than that — commonly around 200–300 — for broad or generic keywords. This is a limitation of Reddit's search index itself, not a bug in the actor: the actor paginates through everything Reddit's search exposes and returns every result it can reach. Narrower, more specific keywords (or scoping with `withinCommunity`) typically surface a higher share of the available results.\n\n**Why do I get at most about 100 comments per keyword?** Reddit's Comments tab renders a single page of comment matches (roughly 100) and exposes no further cursor for that query, so each keyword/community returns at most about 100 comments before your score/date filters are applied. Narrow the keyword or scope it to a subreddit to surface different matches.\n\n**Why do scores differ slightly from what I see on Reddit?** Live scores and comment counts are read from Reddit's search page at run time; the archive enrichment can lag by up to ~36 hours, so the actor always prefers the live values for those two fields.\n\n**Which sort orders and time filters are available?** Relevance, Hot, Top, New and Comment count, matching Reddit's own search UI. The time filter (past hour/day/week/month/year/all time) applies to the Top sort, exactly as it does on reddit.com.\n\n**Can I search inside one or more specific subreddits?** Yes — set `withinCommunity` to a bare name, `r/name`, a full URL, or a comma-separated list to search several subreddits in one query. This applies to posts and comments; community and account search are always global.\n\n**Can I find Reddit users by keyword?** Yes — enable `searchUsers` to get accounts whose username matches the keyword, along with karma breakdown, verification/moderator/gold status and their profile subreddit. Account search always searches globally and returns up to 100 accounts per keyword.\n\n**How fresh is the data?** Every run scrapes Reddit live at the time it executes — there is no cached or delayed data. Each record includes a `crawled_at` timestamp.\n\n**Why are `gilded`/`awards`/`total_awards_received` usually empty or zero?** Reddit retired most of its public award program, so award data is now rare on individual posts and comments. The actor still returns these fields whenever Reddit's data does include them.\n\n**Is this actor affiliated with Reddit?** No — this is an independent, third-party actor that reads Reddit's publicly accessible search results. It is not endorsed by or affiliated with Reddit, Inc.\n",
    "actorDefinition": {
      "actorSpecification": 1,
      "name": "reddit-keyword-monitor-with-score-and-karma",
      "title": "Reddit Keyword Monitor with Score & Karma Filters",
      "description": "Search Reddit by keyword for matching posts, comments, communities and accounts, with score, karma, flair, date and subreddit filters, Reddit's own boolean search syntax, and 5 sort orders. No API key, no login.",
      "version": "1.0",
      "buildTag": "latest",
      "dockerfile": "./Dockerfile",
      "readme": "# Reddit Keyword Monitor with Score & Karma Filters\n\nReddit's own search box only gets you so far before you need to sift the results by hand. This actor runs a keyword search across Reddit and hands back posts, comments, subreddits and accounts as filtered, structured records — score thresholds, karma minimums, flair text, date windows and more applied before the data ever reaches you. No Reddit account or API key needed on your side.\n\n## What this actor does\n\n- Searches Reddit by keyword and returns **posts, comments, communities and users** — pick any combination via `searchPosts` / `searchComments` / `searchCommunities` / `searchUsers`\n- Supports Reddit's full search syntax inside each keyword: exact phrases, `AND` / `OR` / `NOT`, `-exclusions`, and field operators (`author:`, `subreddit:`, `flair:`, `selftext:`, `site:`)\n- 5 sort orders (Relevance, Hot, Top, New, Comment count), 6 time filters, and 30+ optional filters — score, karma, flair, author, domain, awards, NSFW, subreddit access type, and creation-date windows\n- Scope a search to one or more subreddits at once (`withinCommunity`), or leave it unset to search all of Reddit\n- Empty fields are omitted from every record — the output never contains null or blank values\n\n## Output: per-post\n\nEach post record starts with `dataType: \"post\"` and includes:\n\n`subreddit`, `subreddit_prefixed`, `subreddit_id`, `subreddit_subscribers`, `subreddit_type`, `post_id`, `post_name`, `title`, `author`, `author_id`, `author_flair`, `author_flair_background_color`, `author_flair_text_color`, `author_flair_type`, `author_flair_css_class`, `author_flair_richtext`, `author_flair_template_id`, `author_premium`, `author_is_blocked`, `author_patreon_flair`, `content`, `content_html`, `content_url`, `content_categories`, `url` (reddit permalink), `permalink`, `url_overridden_by_dest`, `domain`, `post_hint`, `is_self`, `post_type` (self/link/image/video/gallery/poll), `score`, `ups`, `downs`, `upvote_ratio`, `num_comments`, `link_flair`, `link_flair_background_color`, `link_flair_text_color`, `link_flair_type`, `link_flair_css_class`, `link_flair_richtext`, `link_flair_template_id`, `thumbnail_url`, `thumbnail_width`, `thumbnail_height`, `created_utc`, `created_at`, `edited`, `edited_at`, `is_stickied`, `is_locked`, `is_archived`, `is_pinned`, `is_nsfw`, `is_spoiler`, `is_original_content`, `is_crosspost`, `is_crosspostable`, `is_meta`, `is_robot_indexable`, `is_reddit_media_domain`, `media_only`, `no_follow`, `send_replies`, `allow_live_comments`, `contest_mode`, `hide_score`, `suggested_sort`, `quarantine`, `num_crossposts`, `num_duplicates` (link posts only), `gilded`, `total_awards_received`, `awards` (award-type breakdown — name, count, coin price, icon URL — for every award given), `removed_by_category`, `distinguished`, `hidden`, `media_type`, `has_media`, `images[]`, `gallery_images[]`, `gallery_count`, `video_url`, `poll_data`, `crosspost_parent_id`, `search_term`, `crawled_at`, `source`\n\n## Output: per-comment\n\nEach comment record starts with `dataType: \"comment\"` and includes:\n\n`post_id`, `post_url`, `post_title`, `comment_id`, `comment_name`, `author`, `author_id`, `author_flair`, `author_flair_css_class`, `author_flair_template_id`, `author_flair_type`, `author_flair_text_color`, `author_flair_background_color`, `author_flair_richtext`, `author_premium`, `author_is_blocked`, `author_patreon_flair`, `body`, `body_html`, `score`, `ups`, `downs`, `score_hidden`, `subreddit`, `subreddit_prefixed`, `subreddit_id`, `subreddit_type`, `link_id`, `created_utc`, `created_at`, `edited`, `edited_at`, `archived`, `can_gild`, `depth`, `parent_id`, `parent_kind`, `is_op`, `is_stickied`, `is_locked`, `distinguished`, `controversiality`, `collapsed`, `collapsed_reason`, `collapsed_because_crowd_control`, `collapsed_reason_code`, `comment_type`, `unrepliable_reason`, `no_follow`, `send_replies`, `gilded`, `total_awards_received`, `awards`, `removed_by_category`, `permalink`, `search_term`, `crawled_at`, `source`\n\n## Output: per-community\n\nEach community record starts with `dataType: \"community\"` and includes:\n\n`subreddit`, `subreddit_prefixed`, `subreddit_id`, `url`, `title`, `description`, `description_html`, `public_description`, `public_description_html`, `submit_text`, `submit_text_html`, `submit_text_label`, `submit_link_label`, `subscribers`, `active_user_count`, `weekly_visitors`, `weekly_contributions`, `created_utc`, `created_at`, `subreddit_type`, `submission_type`, `restrict_posting`, `restrict_commenting`, `over18`, `quarantine`, `wiki_enabled`, `lang`, `advertiser_category`, `community_icon`, `icon_img`, `banner_img`, `banner_background_image`, `banner_background_color`, `mobile_banner_image`, `header_img`, `header_title`, `banner_width`, `banner_height`, `header_width`, `header_height`, `icon_width`, `icon_height`, `primary_color`, `key_color`, `allow_images`, `allow_videos`, `allow_videogifs`, `allow_galleries`, `allow_polls`, `allow_predictions`, `allow_predictions_tournament`, `allow_prediction_contributors`, `allow_talks`, `allow_discovery`, `allowed_media_in_comments`, `spoilers_enabled`, `original_content_tag_enabled`, `all_original_content`, `is_crosspostable_subreddit`, `link_flair_enabled`, `link_flair_position`, `user_flair_enabled_in_sr`, `user_flair_position`, `user_flair_type`, `user_flair_text`, `user_flair_richtext`, `user_flair_template_id`, `user_flair_background_color`, `user_flair_text_color`, `can_assign_link_flair`, `can_assign_user_flair`, `suggested_comment_sort`, `accept_followers`, `emojis_enabled`, `comment_score_hide_mins`, `collapse_deleted_comments`, `free_form_reports`, `hide_ads`, `public_traffic`, `community_reviewed`, `has_menu_widget`, `disable_contributor_requests`, `should_archive_posts`, `show_media`, `show_media_preview`, `should_show_media_in_comments_setting`, `user_sr_theme_enabled`, `search_term`, `crawled_at`, `source`\n\n## Output: per-user\n\nEach user record starts with `dataType: \"user\"` and includes:\n\n`username`, `user_id`, `profile_url`, `post_karma`, `comment_karma`, `total_karma`, `awardee_karma`, `awarder_karma`, `is_gold`, `is_mod`, `is_employee`, `has_verified_email`, `verified`, `has_subscribed`, `is_blocked`, `is_friend`, `pref_show_snoovatar`, `icon_img`, `snoovatar_img`, `snoovatar_size`, `accept_followers`, `hide_from_robots`, `user_subreddit` (the account's profile subreddit: display name, title, subscribers, icon, banner, bio, NSFW flag, type, URL), `created_utc`, `created_at`, `search_term`, `crawled_at`, `source`\n\nFields that don't apply to a given record (no media, no flair, no poll, no gallery, etc.) are **omitted entirely** — the output never contains null or empty values.\n\n## Data source\n\nReddit protects its public JSON endpoints with a browser challenge on many networks, so this actor reads the **server-rendered Reddit search pages** in a real browser session (cookieless — no Reddit account, login or API key) and extracts the result cards from the page. Posts, comments and communities are then enriched with their full field sets from the public, keyless **Arctic Shift** Reddit archive API (looked up by the IDs found on Reddit), which also supplies the awards, flair, media and karma breakdowns that the search cards don't show. If the archive is temporarily unavailable, the actor still returns the fields visible on the search page.\n\n## Input\n\n| Field | Type | Default | Description |\n|---|---|---|---|\n| `keywords` | string[] | – | Search terms. Each keyword is searched separately and results are tagged with `search_term`. Supports Reddit's search syntax: exact phrases (`\"machine learning\"`), boolean (`python AND rust`, `python OR django`, `python NOT snake`, `(python OR django) AND framework`), exclusion (`-javascript`), and field operators (`author:name`, `subreddit:name`, `flair:tag`, `selftext:\"phrase\"`, `site:domain`) |\n| `searchPosts` | boolean | `true` | Include posts in the results |\n| `searchComments` | boolean | `false` | Include comments in the results |\n| `searchCommunities` | boolean | `false` | Include subreddits in the results (community discovery) |\n| `searchUsers` | boolean | `false` | Include Reddit accounts whose username matches the keyword (user discovery) |\n| `withinCommunity` | string | – | Restrict the search to one or more subs — bare name (`technology`), `r/technology`, a full URL, or a comma-separated list (`technology,programming`) to search several subreddits at once. Applies to posts and comments; community and account search are always global |\n| `sort` | enum | `relevance` | `relevance`, `hot`, `top`, `new`, `comments` |\n| `timeFilter` | enum | `all` | `hour`, `day`, `week`, `month`, `year`, `all` (applies to the Top sort, as in Reddit's own search UI) |\n| `resultLimit` | integer | `100` | Maximum posts per keyword (1–1,000) |\n| `maxComments` | integer | `100` | Maximum comments per keyword, when `searchComments` is on (0–100,000) |\n| `maxCommunities` | integer | `10` | Maximum subreddits per keyword, when `searchCommunities` is on (0–1,000) |\n| `maxUsers` | integer | `25` | Maximum accounts per keyword, when `searchUsers` is on (0–100 — Reddit serves a single results page for account search, so 100 is the reliable ceiling) |\n| `maxItems` | integer | `100000` | Hard cap on the **total** number of records for the whole run (all keywords, all types combined); the run stops as soon as this budget is spent (1–1,000,000) |\n| `includeNSFW` | boolean | `false` | Include 18+ posts |\n| `onlyWithFlair` | boolean | `false` | Keep only posts that have a link flair set; drop unflaired posts |\n| `postType` | enum | – | Keep only posts of one content type: `self`, `link`, `image`, `video`, `gallery`, `poll`. Leave unset to keep all types |\n| `minScore` | integer | – | Keep only posts with a score (upvotes minus downvotes) at or above this value |\n| `maxScore` | integer | – | Keep only posts with a score at or below this value — useful for finding overlooked/low-visibility posts |\n| `minComments` | integer | – | Keep only posts with at least this many comments |\n| `minAwards` | integer | – | Keep only posts (and comments, when `searchComments` is on) with at least this many total awards |\n| `titleContains` | string | – | Keep only posts whose title contains this text (case-insensitive substring match) |\n| `contentContains` | string | – | Keep only self (text) posts whose body contains this text (case-insensitive substring match) |\n| `flairContains` | string | – | Keep only posts whose link flair text contains this text (case-insensitive substring match) |\n| `authorFlairContains` | string | – | Keep only posts (and comments, when `searchComments` is on) whose author flair text contains this text (case-insensitive substring match) |\n| `authors` | string[] | – | Keep only results submitted by one of these usernames (bare name or `u/`-prefixed); applies to posts and, when `searchComments` is on, comments |\n| `domain` | string | – | Keep only posts whose link domain contains this text (e.g. `youtube.com`, `self.python`) |\n| `distinguished` | enum | – | Keep only `moderator`, `admin`, or `special` (Reddit-team) results, or `none` to keep only regular results. Applies to posts and, when `searchComments` is on, comments |\n| `subredditType` | enum | – | Keep only results whose community has this access type: `public`, `restricted`, `private`, `gold_only`, `archived`, `user`. Applies to posts, comments and communities alike |\n| `minUpvoteRatio` | number | – | Keep only posts with an upvote ratio (0–1) at or above this value |\n| `excludeStickied` | boolean | `false` | Drop posts pinned by moderators (and comments stickied by a moderator, when `searchComments` is on) |\n| `excludeCrossposts` | boolean | `false` | Drop posts that are crossposted from another subreddit |\n| `excludeArchived` | boolean | `false` | Drop content Reddit has archived (locked from voting/commenting), for posts and, when `searchComments` is on, comments |\n| `excludeLocked` | boolean | `false` | Drop content a moderator has locked from further comments/replies, for posts and, when `searchComments` is on, comments |\n| `excludeDeleted` | boolean | `false` | Drop posts and comments whose author was deleted or whose content was removed by a moderator/admin |\n| `excludeSpoilers` | boolean | `false` | Drop posts marked as a spoiler by their author |\n| `onlyOriginalContent` | boolean | `false` | Keep only posts the author tagged as original content (OC) |\n| `minCommentScore` | integer | – | Keep only comments with a score at or above this value, when `searchComments` is on |\n| `commentContains` | string | – | Keep only comments whose body contains this text, when `searchComments` is on |\n| `onlyOPComments` | boolean | `false` | Keep only comments written by the post's original poster, when `searchComments` is on |\n| `minCommunitySubscribers` | integer | – | Keep only communities with at least this many subscribers, when `searchCommunities` is on |\n| `minUserKarma` | integer | – | Keep only accounts with at least this much total karma, when `searchUsers` is on |\n| `minPostKarma` | integer | – | Keep only accounts with at least this much post (link) karma, when `searchUsers` is on |\n| `minCommentKarma` | integer | – | Keep only accounts with at least this much comment karma, when `searchUsers` is on |\n| `postedAfter` | date | – | Keep only results created on or after this date (UTC, `YYYY-MM-DD`). Applies to posts, comments and communities (subreddit creation date). Reddit's cookieless account search exposes no account creation date, so account records are not date-filtered |\n| `postedBefore` | date | – | Keep only results created on or before this date (UTC, inclusive of the whole day). Applies to posts, comments and communities; account records are not date-filtered |\n\n### Example: basic keyword search\n\n```json\n{\n  \"keywords\": [\"notion alternative\", \"best productivity app\"],\n  \"searchPosts\": true,\n  \"sort\": \"top\",\n  \"timeFilter\": \"month\",\n  \"resultLimit\": 50\n}\n```\n\n### Example: advanced search syntax with quality filters\n\n```json\n{\n  \"keywords\": [\"\\\"machine learning\\\" AND python -tutorial\"],\n  \"searchPosts\": true,\n  \"postType\": \"self\",\n  \"minScore\": 50,\n  \"minComments\": 10,\n  \"excludeStickied\": true,\n  \"resultLimit\": 100\n}\n```\n\n### Example: scoped subreddit search\n\n```json\n{\n  \"keywords\": [\"AI agents\"],\n  \"searchPosts\": true,\n  \"withinCommunity\": \"r/MachineLearning,r/artificial\",\n  \"sort\": \"new\",\n  \"resultLimit\": 30\n}\n```\n\n### Example: multi-type search (posts, comments, communities and users)\n\n```json\n{\n  \"keywords\": [\"notion\"],\n  \"searchPosts\": true,\n  \"searchComments\": true,\n  \"searchCommunities\": true,\n  \"searchUsers\": true,\n  \"resultLimit\": 30,\n  \"maxComments\": 30,\n  \"maxCommunities\": 10,\n  \"maxUsers\": 10,\n  \"postedAfter\": \"2026-01-01\",\n  \"maxItems\": 200\n}\n```\n\n## Use cases\n\n- **Brand monitoring** — track mentions of your product or competitors across Reddit, scheduled to run daily\n- **Lead generation** — find posts with purchase intent or \"recommend me a tool\" requests in your niche\n- **Market research** — mine opinions and sentiment across relevant communities\n- **Content ideation** — discover trending questions and discussion topics before you write\n- **Community discovery** — find every subreddit that matters for a given topic, with subscriber counts and rules-relevant metadata\n- **Influencer/account discovery** — find Reddit accounts whose username matches a brand or topic keyword\n\n## FAQ\n\n**Do I need a Reddit API key or login?** No — the actor searches Reddit's public data on your behalf; you don't need your own Reddit account or credentials.\n\n**Does this actor need a proxy configured?** No — there is no proxy field to set. Nothing on your end is required beyond the keywords and filters above.\n\n**Why did I get fewer results than my `resultLimit` / `maxItems`?** Reddit's own search index caps each query at roughly 1,000 results, and in practice it often serves noticeably fewer than that — commonly around 200–300 — for broad or generic keywords. This is a limitation of Reddit's search index itself, not a bug in the actor: the actor paginates through everything Reddit's search exposes and returns every result it can reach. Narrower, more specific keywords (or scoping with `withinCommunity`) typically surface a higher share of the available results.\n\n**Why do I get at most about 100 comments per keyword?** Reddit's Comments tab renders a single page of comment matches (roughly 100) and exposes no further cursor for that query, so each keyword/community returns at most about 100 comments before your score/date filters are applied. Narrow the keyword or scope it to a subreddit to surface different matches.\n\n**Why do scores differ slightly from what I see on Reddit?** Live scores and comment counts are read from Reddit's search page at run time; the archive enrichment can lag by up to ~36 hours, so the actor always prefers the live values for those two fields.\n\n**Which sort orders and time filters are available?** Relevance, Hot, Top, New and Comment count, matching Reddit's own search UI. The time filter (past hour/day/week/month/year/all time) applies to the Top sort, exactly as it does on reddit.com.\n\n**Can I search inside one or more specific subreddits?** Yes — set `withinCommunity` to a bare name, `r/name`, a full URL, or a comma-separated list to search several subreddits in one query. This applies to posts and comments; community and account search are always global.\n\n**Can I find Reddit users by keyword?** Yes — enable `searchUsers` to get accounts whose username matches the keyword, along with karma breakdown, verification/moderator/gold status and their profile subreddit. Account search always searches globally and returns up to 100 accounts per keyword.\n\n**How fresh is the data?** Every run scrapes Reddit live at the time it executes — there is no cached or delayed data. Each record includes a `crawled_at` timestamp.\n\n**Why are `gilded`/`awards`/`total_awards_received` usually empty or zero?** Reddit retired most of its public award program, so award data is now rare on individual posts and comments. The actor still returns these fields whenever Reddit's data does include them.\n\n**Is this actor affiliated with Reddit?** No — this is an independent, third-party actor that reads Reddit's publicly accessible search results. It is not endorsed by or affiliated with Reddit, Inc.\n",
      "input": {
        "title": "Reddit Keywords Scraper Input",
        "type": "object",
        "schemaVersion": 1,
        "properties": {
          "keywords": {
            "title": "Keywords",
            "type": "array",
            "description": "List of keywords to search for on Reddit. Each keyword is searched separately. Advanced search syntax is supported: exact phrases (\"machine learning\"), boolean (python AND rust, python OR django, python NOT snake, (python OR django) AND framework), exclusion (-javascript), and field operators (author:name, subreddit:name, flair:tag, selftext:\"phrase\", site:domain).",
            "editor": "stringList",
            "items": {
              "type": "string"
            },
            "minItems": 1,
            "example": [
              "python programming",
              "machine learning",
              "best laptops 2025"
            ],
            "prefill": [
              "machine learning"
            ]
          },
          "searchPosts": {
            "title": "Search for posts",
            "type": "boolean",
            "description": "Include posts in the keyword search results.",
            "default": true,
            "prefill": true
          },
          "searchComments": {
            "title": "Search for comments",
            "type": "boolean",
            "description": "Include comments in the keyword search results.",
            "default": false,
            "prefill": false
          },
          "searchCommunities": {
            "title": "Search for communities",
            "type": "boolean",
            "description": "Include subreddits in the keyword search results (full community data: subscribers, description, rules-friendly fields).",
            "default": false,
            "prefill": false
          },
          "searchUsers": {
            "title": "Search for users",
            "type": "boolean",
            "description": "Include Reddit accounts (usernames) that match the keyword in the results (e.g. finding accounts named after a brand or topic).",
            "default": false,
            "prefill": false
          },
          "withinCommunity": {
            "title": "Limit search to one or more communities",
            "type": "string",
            "description": "Restrict the keyword search to specific subreddits. Accepts a bare name (developers), r/developers, a full subreddit URL, or a comma-separated list to search several subreddits at once (developers,programming). Leave empty to search all of Reddit. Applies to posts and comments; community and account search are always global (Reddit does not scope those to a subreddit).",
            "example": "r/technology,r/programming",
            "editor": "textfield"
          },
          "sort": {
            "title": "Sort search results by",
            "type": "string",
            "description": "How the keyword search results are ranked.",
            "enum": [
              "relevance",
              "hot",
              "top",
              "new",
              "comments"
            ],
            "default": "relevance",
            "prefill": "relevance",
            "enumTitles": [
              "Relevance",
              "Hot",
              "Top",
              "New",
              "Comment count"
            ]
          },
          "timeFilter": {
            "title": "Time range",
            "type": "string",
            "description": "Limit results to posts from a specific time window. Applies to the Top sort (as in Reddit's search UI); other sorts ignore it.",
            "enum": [
              "hour",
              "day",
              "week",
              "month",
              "year",
              "all"
            ],
            "default": "all",
            "prefill": "all",
            "enumTitles": [
              "Past Hour",
              "Past Day",
              "Past Week",
              "Past Month",
              "Past Year",
              "All Time"
            ]
          },
          "resultLimit": {
            "title": "Maximum posts per keyword",
            "type": "integer",
            "description": "Maximum number of posts to scrape for each keyword (1-1000).",
            "default": 100,
            "prefill": 3,
            "minimum": 1,
            "maximum": 1000,
            "example": 100
          },
          "maxComments": {
            "title": "Maximum comments per keyword",
            "type": "integer",
            "description": "Maximum number of comments to scrape per keyword (when 'Search for comments' is enabled).",
            "default": 100,
            "prefill": 100,
            "minimum": 0,
            "maximum": 100000,
            "example": 100
          },
          "maxCommunities": {
            "title": "Maximum communities per keyword",
            "type": "integer",
            "description": "Maximum number of subreddits to return per keyword (when 'Search for communities' is enabled).",
            "default": 10,
            "prefill": 10,
            "minimum": 0,
            "maximum": 1000,
            "example": 10
          },
          "maxUsers": {
            "title": "Maximum users per keyword",
            "type": "integer",
            "description": "Maximum number of Reddit accounts to return per keyword (when 'Search for users' is enabled). Reddit serves a single results page for account search (no further pagination), so the reliable ceiling is 100.",
            "default": 25,
            "prefill": 25,
            "minimum": 0,
            "maximum": 100,
            "example": 25
          },
          "maxItems": {
            "title": "Maximum total results",
            "type": "integer",
            "description": "Hard cap on the total number of records returned for the whole run (all keywords, all result types combined). The run stops as soon as this budget is spent.",
            "default": 100000,
            "prefill": 3,
            "minimum": 1,
            "maximum": 1000000,
            "example": 100000
          },
          "includeNSFW": {
            "title": "Include NSFW (18+) content",
            "type": "boolean",
            "description": "Include NSFW posts in the results.",
            "default": false,
            "prefill": false
          },
          "onlyWithFlair": {
            "title": "Only posts with a link flair",
            "type": "boolean",
            "description": "Keep only posts that have a link flair set (e.g. 'Discussion', 'News'). Posts without any flair are dropped.",
            "default": false,
            "prefill": false
          },
          "postType": {
            "title": "Only posts of this type",
            "type": "string",
            "description": "Keep only posts of the selected content type. Leave unset to keep all types.",
            "enum": [
              "self",
              "link",
              "image",
              "video",
              "gallery",
              "poll"
            ],
            "enumTitles": [
              "Text (self post)",
              "Link",
              "Image",
              "Video",
              "Gallery",
              "Poll"
            ]
          },
          "minScore": {
            "title": "Minimum score (upvotes minus downvotes)",
            "type": "integer",
            "description": "Only keep posts with a score at or above this value. Leave unset to keep all scores.",
            "minimum": -100000,
            "maximum": 1000000,
            "example": 10
          },
          "minComments": {
            "title": "Minimum number of comments",
            "type": "integer",
            "description": "Only keep posts with at least this many comments. Leave unset to keep all posts.",
            "minimum": 0,
            "maximum": 1000000,
            "example": 5
          },
          "maxScore": {
            "title": "Maximum score (upvotes minus downvotes)",
            "type": "integer",
            "description": "Only keep posts with a score at or below this value. Useful for finding overlooked/low-visibility posts. Leave unset to keep all scores.",
            "minimum": -100000,
            "maximum": 1000000,
            "example": 1000
          },
          "minAwards": {
            "title": "Minimum awards received",
            "type": "integer",
            "description": "Only keep posts (and comments, when 'Search for comments' is enabled) with at least this many total awards. Leave unset to keep all.",
            "minimum": 0,
            "maximum": 1000000,
            "example": 1
          },
          "titleContains": {
            "title": "Title contains keyword",
            "type": "string",
            "description": "Only keep posts whose title contains this text (case-insensitive substring match). Applies on top of the keyword search. Leave empty to keep all titles.",
            "editor": "textfield",
            "example": "launch"
          },
          "contentContains": {
            "title": "Post text contains keyword",
            "type": "string",
            "description": "Only keep self (text) posts whose body contains this text (case-insensitive substring match). Link/image/video posts have no body text and are excluded when this is set. Leave empty to keep all posts.",
            "editor": "textfield",
            "example": "tutorial"
          },
          "flairContains": {
            "title": "Flair contains keyword",
            "type": "string",
            "description": "Only keep posts whose flair text contains this text (case-insensitive substring match). Leave empty to keep all flairs.",
            "editor": "textfield",
            "example": "Discussion"
          },
          "authorFlairContains": {
            "title": "Author flair contains keyword",
            "type": "string",
            "description": "Only keep posts (and comments, when 'Search for comments' is enabled) whose author flair text contains this text (case-insensitive substring match). Leave empty to keep all.",
            "editor": "textfield",
            "example": "Moderator"
          },
          "authors": {
            "title": "Only results by these authors",
            "type": "array",
            "description": "Only keep posts (and comments, when 'Search for comments' is enabled) submitted by one of these usernames (bare name or u/-prefixed, case-insensitive). Leave empty to keep results from all authors.",
            "editor": "stringList",
            "example": [
              "spez"
            ]
          },
          "domain": {
            "title": "Domain contains",
            "type": "string",
            "description": "Only keep posts whose link domain contains this text (case-insensitive, e.g. 'youtube.com' or 'self.python'). Leave empty to keep all domains.",
            "editor": "textfield",
            "example": "youtube.com"
          },
          "distinguished": {
            "title": "Distinguished (official) posts/comments only",
            "type": "string",
            "description": "Only keep posts (and comments, when 'Search for comments' is enabled) distinguished by Reddit as moderator, admin or special (e.g. Reddit-team), or only regular (non-distinguished) results. Leave unset to keep all.",
            "enum": [
              "moderator",
              "admin",
              "special",
              "none"
            ],
            "enumTitles": [
              "Moderator posts only",
              "Admin posts only",
              "Special (official) posts only",
              "Regular posts only (exclude all distinguished)"
            ]
          },
          "excludeSpoilers": {
            "title": "Exclude spoiler-tagged posts",
            "type": "boolean",
            "description": "When enabled, posts marked as a spoiler by their author are dropped from the results.",
            "default": false,
            "prefill": false
          },
          "onlyOriginalContent": {
            "title": "Only original content (OC) posts",
            "type": "boolean",
            "description": "When enabled, only posts the author tagged as original content are kept.",
            "default": false,
            "prefill": false
          },
          "excludeStickied": {
            "title": "Exclude stickied/pinned posts",
            "type": "boolean",
            "description": "When enabled, posts pinned/stickied by moderators (and, when 'Search for comments' is enabled, comments stickied by a moderator) are dropped from the results.",
            "default": false,
            "prefill": false
          },
          "excludeCrossposts": {
            "title": "Exclude crossposts",
            "type": "boolean",
            "description": "When enabled, posts that are crossposted from another subreddit are dropped from the results.",
            "default": false,
            "prefill": false
          },
          "excludeArchived": {
            "title": "Exclude archived posts",
            "type": "boolean",
            "description": "When enabled, posts (and, when 'Search for comments' is enabled, comments) that Reddit has archived (locked from further voting/commenting after 6 months) are dropped from the results.",
            "default": false,
            "prefill": false
          },
          "excludeLocked": {
            "title": "Exclude locked posts",
            "type": "boolean",
            "description": "When enabled, posts that a moderator has locked from further comments (and, when 'Search for comments' is enabled, comments a moderator has locked from further replies) are dropped from the results.",
            "default": false,
            "prefill": false
          },
          "excludeDeleted": {
            "title": "Exclude deleted/removed content",
            "type": "boolean",
            "description": "Drop posts and comments whose author account was deleted or whose content was removed by a moderator/admin (Reddit marks these with the literal '[deleted]' or '[removed]' placeholders).",
            "default": false,
            "prefill": false
          },
          "minUpvoteRatio": {
            "title": "Minimum upvote ratio",
            "type": "number",
            "description": "Only keep posts whose upvote ratio (fraction of upvotes among all votes) is at or above this value. Leave unset to keep all ratios.",
            "minimum": 0,
            "maximum": 1,
            "example": 0.8
          },
          "minCommentScore": {
            "title": "Minimum comment score (upvotes minus downvotes)",
            "type": "integer",
            "description": "Only keep comments with a score at or above this value. Applies when 'Search for comments' is enabled; ignored otherwise. Leave unset to keep all scores.",
            "minimum": -100000,
            "maximum": 1000000,
            "example": 5
          },
          "commentContains": {
            "title": "Comment text contains keyword",
            "type": "string",
            "description": "Only keep comments whose body contains this text (case-insensitive substring match). Applies when 'Search for comments' is enabled; ignored otherwise. Leave empty to keep all comments.",
            "editor": "textfield",
            "example": "agree"
          },
          "onlyOPComments": {
            "title": "Only comments by the original poster",
            "type": "boolean",
            "description": "When enabled, keep only comments written by the post's original poster (self-replies). Applies when 'Search for comments' is enabled; ignored otherwise.",
            "default": false,
            "prefill": false
          },
          "minCommunitySubscribers": {
            "title": "Minimum community subscribers",
            "type": "integer",
            "description": "Only keep communities (subreddits) with at least this many subscribers. Applies when 'Search for communities' is enabled; ignored otherwise. Leave unset to keep all sizes.",
            "minimum": 0,
            "maximum": 1000000000,
            "example": 1000
          },
          "subredditType": {
            "title": "Community access type",
            "type": "string",
            "description": "Only keep results whose community has this access type (e.g. 'public' to exclude results from private/restricted/gold-only/archived subs you can't freely join, post or comment in). Applies to posts, comments and communities alike. Leave unset to keep all types.",
            "enum": [
              "public",
              "restricted",
              "private",
              "gold_only",
              "archived",
              "user"
            ],
            "enumTitles": [
              "Public",
              "Restricted (posting requires approval)",
              "Private (invite-only)",
              "Gold only",
              "Archived (read-only)",
              "User profile subreddit"
            ]
          },
          "minUserKarma": {
            "title": "Minimum total karma",
            "type": "integer",
            "description": "Only keep Reddit accounts with at least this much total karma. Applies when 'Search for users' is enabled; ignored otherwise. Leave unset to keep all accounts.",
            "minimum": 0,
            "maximum": 1000000000,
            "example": 1000
          },
          "minPostKarma": {
            "title": "Minimum post karma",
            "type": "integer",
            "description": "Only keep Reddit accounts with at least this much post (link) karma. Applies when 'Search for users' is enabled; ignored otherwise. Leave unset to keep all accounts.",
            "minimum": 0,
            "maximum": 1000000000,
            "example": 100
          },
          "minCommentKarma": {
            "title": "Minimum comment karma",
            "type": "integer",
            "description": "Only keep Reddit accounts with at least this much comment karma. Applies when 'Search for users' is enabled; ignored otherwise. Leave unset to keep all accounts.",
            "minimum": 0,
            "maximum": 1000000000,
            "example": 100
          },
          "postedAfter": {
            "title": "Created on or after (YYYY-MM-DD)",
            "type": "string",
            "description": "Only keep results created on or after this date (UTC). Applies to posts, comments and communities (subreddit creation date). Reddit's cookieless account search exposes no account creation date, so account records are not date-filtered. Reddit caps each search at roughly 1,000 results and the live index often serves far fewer (~225-250), so a distant date window on a very broad query may not be fully reachable.",
            "editor": "datepicker",
            "example": "2025-01-01"
          },
          "postedBefore": {
            "title": "Created on or before (YYYY-MM-DD)",
            "type": "string",
            "description": "Only keep results created on or before this date (interpreted as the end of that day, UTC). Applies to posts, comments and communities; account records are not date-filtered.",
            "editor": "datepicker",
            "example": "2025-12-31"
          }
        },
        "required": [
          "keywords"
        ]
      },
      "output": {
        "actorOutputSchemaVersion": 1,
        "title": "Reddit Keyword Monitor with Score & Karma Filters Output",
        "description": "Reddit keyword search matches across posts, comments, communities and accounts, each tagged with a dataType and its full set of real fields.",
        "properties": {
          "searchResultRecords": {
            "type": "string",
            "title": "Search result records",
            "description": "Dataset containing the matching posts, comments, communities and/or users for the searched keywords. Records are distinguished by the `dataType` field.",
            "template": "{{links.apiDefaultDatasetUrl}}/items"
          }
        }
      },
      "storages": {
        "dataset": {
          "actorSpecification": 1,
          "views": {
            "overview": {
              "title": "Reddit Search Results",
              "transformation": {
                "fields": [
                  "dataType",
                  "search_term",
                  "title",
                  "author",
                  "subreddit_prefixed",
                  "score",
                  "num_comments",
                  "url",
                  "created_at"
                ]
              },
              "display": {
                "component": "table",
                "properties": {}
              }
            }
          }
        }
      },
      "environmentVariables": {},
      "defaultRunOptions": {
        "build": "latest",
        "timeoutSecs": 3600,
        "memoryMbytes": 2048
      }
    },
    "buildNumber": "1.0.2",
    "imageDigest": "12f318766b34ac3115468d89e8d40f7aaad78d64dc5a23482f062861719fb09f",
    "actVersion": {
      "sourceType": "SOURCE_FILES",
      "buildTag": "latest",
      "versionNumber": "1.0"
    },
    "usage": {
      "ACTOR_COMPUTE_UNITS": 0.05009333333333333
    }
  }
}