Nimbryxo Studio

Reddit Keyword Search with Advanced Filters

Search Reddit by keyword and filter the matches by subreddit, score, date range, NSFW status, and author before they reach your dataset.

Input schema

Input fields, types, required flags, descriptions, defaults, and prefills come from the published definition. Prefill examples are distinct from defaults.

FieldTypeRequiredDescription
keywordsarrayrequiredList of keywords to search. Each runs as a separate Reddit search.
resultLimitintegeroptionalMax posts per keyword (1-1000).
sortstringoptionalHow to sort the search results.
Show all input fields
FieldTypeRequiredDescription
keywordsarrayrequiredList of keywords to search. Each runs as a separate Reddit search.
resultLimitintegeroptionalMax posts per keyword (1-1000).
sortstringoptionalHow to sort the search results.
subredditFilterarrayoptionalOnly emit posts from these subreddits (without `r/` prefix). Empty = all.
subredditBlocklistarrayoptionalDrop posts from these subreddits.
minScoreintegeroptionalDrop posts with score below this number.
maxAgeDaysintegeroptionalDrop posts older than N days.
excludeNsfwbooleanoptionalDrop NSFW posts.
authorBlocklistarrayoptionalDrop posts by these usernames (case-insensitive).
keywordRequireAllbooleanoptionalWhen multiple keywords given, also dedupe & only emit posts whose title/content contains ALL of them. Default: each keyword runs independently (OR).
dateFromstringoptionalDrop posts with `created_at` before this date (inclusive). Format: YYYY-MM-DD.
dateTostringoptionalDrop posts with `created_at` after this date (inclusive end-of-day). Format: YYYY-MM-DD.

Download the published input schema

View complete JSON
{
  "description": "Search Reddit by keywords with advanced filters. Pro adds: subreddit filter/blocklist, dateFrom/dateTo, minScore, maxAgeDays, excludeNsfw, authorBlocklist, keywordRequireAll.",
  "properties": {
    "authorBlocklist": {
      "default": [],
      "description": "Drop posts by these usernames (case-insensitive).",
      "editor": "stringList",
      "title": "Author blocklist",
      "type": "array"
    },
    "dateFrom": {
      "description": "Drop posts with `created_at` before this date (inclusive). Format: YYYY-MM-DD.",
      "editor": "textfield",
      "title": "Date from (YYYY-MM-DD)",
      "type": "string"
    },
    "dateTo": {
      "description": "Drop posts with `created_at` after this date (inclusive end-of-day). Format: YYYY-MM-DD.",
      "editor": "textfield",
      "title": "Date to (YYYY-MM-DD)",
      "type": "string"
    },
    "excludeNsfw": {
      "default": false,
      "description": "Drop NSFW posts.",
      "title": "Exclude NSFW",
      "type": "boolean"
    },
    "keywordRequireAll": {
      "default": false,
      "description": "When multiple keywords given, also dedupe & only emit posts whose title/content contains ALL of them. Default: each keyword runs independently (OR).",
      "title": "Require all keywords (AND)",
      "type": "boolean"
    },
    "keywords": {
      "description": "List of keywords to search. Each runs as a separate Reddit search.",
      "editor": "stringList",
      "minItems": 1,
      "prefill": [
        "python programming"
      ],
      "title": "Keywords",
      "type": "array"
    },
    "maxAgeDays": {
      "description": "Drop posts older than N days.",
      "maximum": 36500,
      "minimum": 1,
      "title": "Max post age in days (filter)",
      "type": "integer"
    },
    "minScore": {
      "description": "Drop posts with score below this number.",
      "maximum": 10000000,
      "minimum": -10000,
      "title": "Min score (filter)",
      "type": "integer"
    },
    "resultLimit": {
      "default": 500,
      "description": "Max posts per keyword (1-1000).",
      "maximum": 1000,
      "minimum": 1,
      "title": "Result limit per keyword",
      "type": "integer"
    },
    "sort": {
      "default": "relevance",
      "description": "How to sort the search results.",
      "enum": [
        "relevance",
        "hot",
        "top",
        "new",
        "comments"
      ],
      "enumTitles": [
        "Relevance",
        "Hot",
        "Top",
        "New",
        "Comments"
      ],
      "title": "Sort by",
      "type": "string"
    },
    "subredditBlocklist": {
      "default": [],
      "description": "Drop posts from these subreddits.",
      "editor": "stringList",
      "title": "Subreddit blocklist",
      "type": "array"
    },
    "subredditFilter": {
      "default": [],
      "description": "Only emit posts from these subreddits (without `r/` prefix). Empty = all.",
      "editor": "stringList",
      "title": "Subreddit filter (allowlist)",
      "type": "array"
    }
  },
  "required": [
    "keywords"
  ],
  "schemaVersion": 1,
  "title": "Reddit Keywords Pro Input",
  "type": "object"
}

Output schema

Published result links and storage locations. This schema is not an exhaustive contract for every field in a dataset record.

FieldTypeRequiredDescription
postsstringoptionalDataset containing all scraped Reddit posts.

Download the published output schema

View complete JSON
{
  "actorOutputSchemaVersion": 1,
  "description": "Reddit posts matching your keywords, with score, subreddit, author, and timestamps, after subreddit/score/date/NSFW/author filtering.",
  "properties": {
    "posts": {
      "description": "Dataset containing all scraped Reddit posts.",
      "template": "{{links.apiDefaultDatasetUrl}}/items",
      "title": "Reddit posts",
      "type": "string"
    }
  },
  "title": "Reddit Keyword Search with Advanced Filters Output"
}

Dataset schema

Published dataset views and any declared field definitions. A view can select only a subset of the returned record fields.

Download the published dataset schema

View complete JSON
{
  "actorSpecification": 1,
  "views": {
    "overview": {
      "display": {
        "component": "table",
        "properties": {}
      },
      "title": "Keyword Search Results",
      "transformation": {
        "fields": [
          "keyword",
          "title",
          "author",
          "subreddit_prefixed",
          "score",
          "num_comments",
          "url",
          "created_at",
          "link_flair"
        ]
      }
    }
  }
}

Key-value schema

Published key-value store definitions, when provided by this build.

This definition is not present in the default published build. See the published README for available documentation.

Published README

Read the full published documentation

Reddit Keyword Search with Advanced Filters

Search Reddit for one or more keywords and get back matching posts, narrowed down with subreddit allow/block lists, a minimum score, a date range, an NSFW toggle, and an author blocklist — so the dataset you export only contains the posts that actually matter to you.

What this actor does

  • Runs a separate Reddit search for each keyword you provide and tags every post with the keyword that found it
  • Keeps or drops posts by subreddit (allowlist or blocklist), minimum score, maximum age in days, or an explicit date range
  • Can require that a post's title/content contain every keyword at once instead of matching any single one
  • Drops NSFW posts and posts from specific authors on request
  • Omits any field Reddit's listing didn't provide for a post rather than returning it empty

Output per post

  • keyword — the keyword that matched this post
  • post_id, post_name — Reddit's post ID and fullname (t3_...)
  • title, content — post title and self-text snippet, when the post has one
  • author, author_fullname
  • subreddit, subreddit_prefixed — e.g. r/geopolitics
  • score, num_comments, num_crossposts, gilded_count
  • url, permalink, external_url — external link target, only present when it differs from the Reddit permalink
  • thumbnail_url, link_flair
  • created_utc, created_at
  • is_self, is_stickied, is_nsfw, is_spoiler, is_promoted, is_original_content
  • post_hint — rough content type (self, image, gallery, link, hosted:video, rich:video)
  • title_word_count, post_age_seconds
  • crosspost_parent — the original post's ID, title, author, subreddit, score, and comment count, present only when this post is a crosspost

Output when nothing is returned

If keywords is empty, or every post the search found was rejected by your filters (or no posts were found at all), the actor emits a single recordType: "error" record instead of post records, with reason (no_keywords or all_filters_dropped_results), a human-readable message, and — for the filters case — the keywords searched and an appliedFilters summary of every filter value you set, so you can see why nothing came through.

Input

Field Type Default Description
keywords array – Keywords to search; each one runs as its own search (required)
resultLimit integer 500 Max posts to return per keyword (1-1000)
sort string (select) relevance relevance, hot, top, new, or comments
subredditFilter array [] Only keep posts from these subreddits (no r/ prefix); empty keeps all
subredditBlocklist array [] Drop posts from these subreddits
minScore integer – Drop posts with a score below this number
maxAgeDays integer – Drop posts older than this many days
excludeNsfw boolean false Drop posts marked NSFW
authorBlocklist array [] Drop posts from these usernames (case-insensitive)
keywordRequireAll boolean false With multiple keywords, keep only posts whose title/content contains all of them, instead of any one
dateFrom string – Drop posts created before this date (YYYY-MM-DD, inclusive)
dateTo string – Drop posts created after this date (YYYY-MM-DD, inclusive of the full day)

Example: single keyword, top posts of all time

{
  "keywords": ["machine learning"],
  "resultLimit": 100,
  "sort": "top"
}

Example: brand mentions, excluding NSFW and low-score noise

{
  "keywords": ["mybrand", "mybrand review"],
  "minScore": 5,
  "excludeNsfw": true,
  "subredditBlocklist": ["spam"],
  "resultLimit": 200
}

Example: posts from the last 30 days that mention two terms together

{
  "keywords": ["layoffs", "tech"],
  "keywordRequireAll": true,
  "maxAgeDays": 30,
  "sort": "new"
}

Use cases

  • Brand and product monitoring — track mentions while filtering out low-score or NSFW noise
  • Lead and sentiment research — pull threads matching two or more terms at once with keywordRequireAll
  • Subreddit-scoped research — restrict a broad keyword search to a hand-picked set of communities
  • Trend tracking — compare new vs top results for the same keyword over a rolling date window
  • Moderation or spam review — drop known problem authors or subreddits before they reach your dataset

FAQ

How is this different from a plain keyword search? Every filter here (subreddit allow/block, score floor, date range, NSFW exclusion, author blocklist, multi-keyword AND matching) is applied after the search, so the dataset you get already reflects your criteria instead of needing to be cleaned up afterward.

What happens when I give several keywords? By default each keyword runs as an independent search and results are combined (OR). Set keywordRequireAll to true to instead keep only posts whose title or content contains every keyword you listed.

Why do some posts have no content? Link posts and posts without a text body don't have self-text; content is only present for text (self) posts that have one.

What does external_url mean, and why is it sometimes missing? It's the destination of a link post when that destination differs from the Reddit permalink. Self-posts, and link posts that just point back at Reddit, don't get this field.

Can I combine dateFrom/dateTo with maxAgeDays? Yes — both filters are applied together, so the post must satisfy whichever ones you set.

Does subredditFilter and subredditBlocklist work together? Yes. A post must pass both: it's dropped if it's in the blocklist, and dropped if an allowlist is set and the post's subreddit isn't in it.

Do I need a Reddit account or API credentials? No — this actor reads Reddit's public search results directly, without a login.

Is this affiliated with Reddit? No. This is an independent actor that reads Reddit's publicly available search pages.

Python quickstart

Use a schema-derived input and the Python standard library to start a run. An Apify account and token are required for execution.

Open the step-by-step Python guide →

Source build h7QrhQVhzxY2jSbRi. Documentation is regenerated from the default published build; private drafts are not included.