{
  "openapi": "3.0.1",
  "info": {
    "title": "Patreon Scraper By Patron & Earnings Filters",
    "description": "Patreon Scraper by Patron & Earnings Filters extracts public creator and patron data, including creator profiles, patron counts, membership tiers, earnings estimates, posts, and engagement. Filter Patreon creators by patrons or earnings for market research and prospecting.",
    "version": "0.1",
    "x-build-id": "MBxORj8xfjaOLBdOu"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/simpleapi~patreon-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-simpleapi-patreon-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/acts/simpleapi~patreon-scraper/runs": {
      "post": {
        "operationId": "runs-sync-simpleapi-patreon-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor and returns information about the initiated run in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/runsResponseSchema"
                }
              }
            }
          }
        }
      }
    },
    "/acts/simpleapi~patreon-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-simpleapi-patreon-scraper",
        "x-openai-isConsequential": false,
        "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
        "tags": [
          "Run Actor"
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/inputSchema"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "token",
            "in": "query",
            "required": true,
            "schema": {
              "type": "string"
            },
            "description": "Enter your Apify token here"
          }
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "inputSchema": {
        "type": "object",
        "required": [
          "startUrls"
        ],
        "properties": {
          "startUrls": {
            "title": "🎯 Keywords, Patreon URLs or usernames to qualify",
            "type": "array",
            "description": "One entry per line. An entry containing patreon.com/ (e.g. https://www.patreon.com/GreenRoomPythons) is qualified directly as that creator's campaign. Anything else - including a bare username - is run through Patreon's own creator search and every result is qualified against your thresholds below.",
            "items": {
              "type": "string"
            }
          },
          "maxData": {
            "title": "✅ Qualified campaigns to return per keyword",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "How many campaigns that PASS your thresholds to return per search keyword (default 10, maximum 500). Rejected campaigns do not count against this number - the run keeps walking Patreon's search pages until the quota is filled or the keyword's result set is exhausted. Patreon's own search is the real ceiling: it returned 44-174 results per keyword when measured on 2026-08-10. Direct profile URLs are always all qualified and are not capped by this number.",
            "default": 10
          },
          "minPaidMembers": {
            "title": "👥 Minimum paying members",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only campaigns with at least this many PAYING members (Patreon's paid_member_count). 0 = do not filter on paying members. Measured 2026-08-10 on 23 logged-out campaigns: paying-member counts ran 5-1034, and 4 of 23 creators had switched their member counts off entirely.",
            "default": 0
          },
          "minPatronCount": {
            "title": "🧑‍🤝‍🧑 Minimum total members",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only campaigns with at least this many members in total, free and paid (Patreon's patron_count). 0 = do not filter on total members. Note this is a bigger number than paying members - measured range 12-5482 on the same 23 campaigns.",
            "default": 0
          },
          "minEarningsPerMonth": {
            "title": "💰 Minimum published monthly earnings",
            "minimum": 0,
            "type": "number",
            "description": "Keep only campaigns publishing at least this much per month, in the campaign's own currency (see the earnings_currency column - both USD and EUR were returned in testing). 0 = do not filter on earnings. IMPORTANT: only about a quarter of creators publish an earnings figure at all (6 of 23 measured on 2026-08-10). The rest come back as earnings_per_month: null with earnings_hidden: true, and what happens to them is decided by the switch below - they are never treated as earning 0.",
            "default": 0
          },
          "minPostCount": {
            "title": "📝 Minimum published posts",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only campaigns that have actually published this many posts - the cut between a running membership and an abandoned page. 0 = do not filter on posts. Measured range 1-2066 posts across 23 campaigns.",
            "default": 0
          },
          "minCheapestTierPrice": {
            "title": "🎟️ Minimum entry price (cheapest paid tier)",
            "minimum": 0,
            "type": "number",
            "description": "Keep only campaigns whose CHEAPEST paid membership tier costs at least this much, in that tier's own currency. 0 = do not filter on price. A campaign that publishes no paid tier at all (3 of 23 measured) has no entry price and is dropped when this is set - it is not treated as costing 0.",
            "default": 0
          },
          "excludeNsfw": {
            "title": "🔞 Drop adult campaigns",
            "type": "boolean",
            "description": "Drop campaigns Patreon flags as adult content. Honest caveat: Patreon does not serve adult campaigns to logged-out requests - is_nsfw came back false on 130 of 130 search results across 9 adult-leaning keywords on 2026-08-10, and Patreon's own search reports is_nsfw_hidden. This switch is wired to the published flag and will drop a campaign if one ever comes through, but it has never been observed to remove a row.",
            "default": true
          },
          "keepCreatorsHidingNumbers": {
            "title": "🙈 Keep creators who hide their numbers",
            "type": "boolean",
            "description": "Patreon lets a creator switch off their member counts or their earnings, and a hidden number is genuinely absent - not zero. When you set a threshold on a number a creator hides, this decides what happens: ON keeps the campaign (flagged, so you can review it by hand), OFF drops it because it cannot be qualified. This switch does nothing when you set no thresholds.",
            "default": false
          },
          "includeRejectedCampaigns": {
            "title": "🧾 Also return the campaigns that were dropped",
            "type": "boolean",
            "description": "Write the rejected campaigns to the dataset too, with passed_creator_filter: false and filter_reasons listing exactly which threshold each one failed. Rejected rows are NOT charged. Off by default so the export is the shortlist.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "🌐 Proxy",
            "type": "object",
            "description": "Apify proxy groups, or your own proxy URLs when the section is expanded."
          }
        }
      },
      "runsResponseSchema": {
        "type": "object",
        "properties": {
          "data": {
            "type": "object",
            "properties": {
              "id": {
                "type": "string"
              },
              "actId": {
                "type": "string"
              },
              "userId": {
                "type": "string"
              },
              "startedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "finishedAt": {
                "type": "string",
                "format": "date-time",
                "example": "2025-01-08T00:00:00.000Z"
              },
              "status": {
                "type": "string",
                "example": "READY"
              },
              "meta": {
                "type": "object",
                "properties": {
                  "origin": {
                    "type": "string",
                    "example": "API"
                  },
                  "userAgent": {
                    "type": "string"
                  }
                }
              },
              "stats": {
                "type": "object",
                "properties": {
                  "inputBodyLen": {
                    "type": "integer",
                    "example": 2000
                  },
                  "rebootCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "restartCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "resurrectCount": {
                    "type": "integer",
                    "example": 0
                  },
                  "computeUnits": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "options": {
                "type": "object",
                "properties": {
                  "build": {
                    "type": "string",
                    "example": "latest"
                  },
                  "timeoutSecs": {
                    "type": "integer",
                    "example": 300
                  },
                  "memoryMbytes": {
                    "type": "integer",
                    "example": 1024
                  },
                  "diskMbytes": {
                    "type": "integer",
                    "example": 2048
                  }
                }
              },
              "buildId": {
                "type": "string"
              },
              "defaultKeyValueStoreId": {
                "type": "string"
              },
              "defaultDatasetId": {
                "type": "string"
              },
              "defaultRequestQueueId": {
                "type": "string"
              },
              "buildNumber": {
                "type": "string",
                "example": "1.0.0"
              },
              "containerUrl": {
                "type": "string"
              },
              "usage": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "integer",
                    "example": 1
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              },
              "usageTotalUsd": {
                "type": "number",
                "example": 0.00005
              },
              "usageUsd": {
                "type": "object",
                "properties": {
                  "ACTOR_COMPUTE_UNITS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATASET_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "KEY_VALUE_STORE_WRITES": {
                    "type": "number",
                    "example": 0.00005
                  },
                  "KEY_VALUE_STORE_LISTS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_READS": {
                    "type": "integer",
                    "example": 0
                  },
                  "REQUEST_QUEUE_WRITES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_INTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "DATA_TRANSFER_EXTERNAL_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                    "type": "integer",
                    "example": 0
                  },
                  "PROXY_SERPS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}