{
  "openapi": "3.0.1",
  "info": {
    "title": "Buy Me a Coffee Scraper",
    "description": "Read any public Buy Me a Coffee creator: every individual payment with its date and size, membership levels and prices, follower count, posts with view counts — plus alerts when new money comes in, a price moves, or a creator goes quiet.",
    "version": "0.1",
    "x-build-id": "oLf1xiBra8fgIqOBs"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/sashaebashu~buymeacoffee-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-sashaebashu-buymeacoffee-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/sashaebashu~buymeacoffee-scraper/runs": {
      "post": {
        "operationId": "runs-sync-sashaebashu-buymeacoffee-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/sashaebashu~buymeacoffee-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-sashaebashu-buymeacoffee-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",
        "properties": {
          "creators": {
            "title": "Creators",
            "type": "array",
            "description": "Buy Me a Coffee profile URLs or handles. Paste `https://buymeacoffee.com/sindresorhus`, a link to one of their posts, or just `sindresorhus`.",
            "items": {
              "type": "string"
            }
          },
          "discoverCreators": {
            "title": "Discover creators",
            "type": "boolean",
            "description": "Search the platform instead of naming creators yourself. Buy Me a Coffee publishes its own creator index, so this walks it and keeps whoever matches the filters below. Works alongside a named list — the named ones are read first.",
            "default": false
          },
          "maxCreatorsToScan": {
            "title": "Creators to scan",
            "minimum": 1,
            "maximum": 20000,
            "type": "integer",
            "description": "How many creators discovery may check. Checking one costs a single request, and most will not match your filters — so scan far more than you expect to keep.",
            "default": 1000
          },
          "minSupporters": {
            "title": "Minimum supporters",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only creators with at least this many supporters. Checked on the profile, before any history is read.",
            "default": 0
          },
          "minFollowers": {
            "title": "Minimum followers",
            "minimum": 0,
            "type": "integer",
            "description": "Keep only creators with at least this many followers.",
            "default": 0
          },
          "countries": {
            "title": "Countries",
            "type": "array",
            "description": "Two-letter country codes to keep, for example `US`, `GB`, `DE`. Leave empty for any country.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "requireMembership": {
            "title": "Only creators selling a membership",
            "type": "boolean",
            "description": "Keep only creators with a membership currently on sale.",
            "default": false
          },
          "activeWithinDays": {
            "title": "Paid within (days)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Keep only creators who took a payment this recently. Answered from the first page of the feed, so a creator who fails it costs one request rather than a full walk. 0 turns it off.",
            "default": 0
          },
          "includeSupports": {
            "title": "Read the support feed",
            "type": "boolean",
            "description": "Reads the creator's individual payments — who paid, how many coffees, what they wrote and when. This is what makes the earnings timeline possible; without it you only get the profile's own counters, which are stale.",
            "default": true
          },
          "maxSupportsPerCreator": {
            "title": "Supports to read per creator",
            "minimum": 0,
            "maximum": 5000,
            "type": "integer",
            "description": "How far back to read. The API serves 20 per request and offers no larger page, so 200 supports costs 10 requests. Set it high enough to cover the period you care about — the feed reaches back to the creator's very first payment.",
            "default": 200
          },
          "includeSupportList": {
            "title": "Include the individual supports",
            "type": "boolean",
            "description": "Adds every payment to the output — supporter, type, units, value, message and timestamp. Off by default because it makes rows large; the totals and averages are always included either way.",
            "default": false
          },
          "includeLevels": {
            "title": "Include membership levels",
            "type": "boolean",
            "description": "Every membership level with its monthly and yearly price and the benefits it promises. One extra request per creator.",
            "default": true
          },
          "includePosts": {
            "title": "Include posts",
            "type": "boolean",
            "description": "Reads the creator's posts — title, date, view and like counts, and whether each one is behind the membership paywall. Creators with no posts cost no extra request.",
            "default": true
          },
          "maxPostsPerCreator": {
            "title": "Posts to read per creator",
            "minimum": 0,
            "maximum": 1000,
            "type": "integer",
            "description": "How many posts to read, newest first.",
            "default": 50
          },
          "includePostList": {
            "title": "Include the individual posts",
            "type": "boolean",
            "description": "Adds every post read to the output rather than just the counts and averages.",
            "default": false
          },
          "includeShopAndGoals": {
            "title": "Include shop, funding goal and published income",
            "type": "boolean",
            "description": "Reads the creator page for what the JSON API does not serve: shop items with how many were sold, the funding goal and its progress, and — for creators who choose to publish it — their actual monthly membership income and subscriber count. One extra request per creator, and a heavier one, so switch it off when scanning thousands.",
            "default": true
          },
          "includeWishlist": {
            "title": "Include wishlist",
            "type": "boolean",
            "description": "Reads the creator's wishlist, if they publish one. One extra request per creator.",
            "default": false
          },
          "dormantAfterDays": {
            "title": "Treat as dormant after (days without a payment)",
            "minimum": 7,
            "maximum": 1825,
            "type": "integer",
            "description": "Days since the last support before a creator counts as dormant. Drives `isDormant` and the `went_quiet` alert.",
            "default": 90
          },
          "maxItems": {
            "title": "Maximum creators",
            "minimum": 1,
            "type": "integer",
            "description": "Stop after this many creators.",
            "default": 100
          },
          "maxConcurrency": {
            "title": "Parallel requests",
            "minimum": 1,
            "maximum": 8,
            "type": "integer",
            "description": "4 is comfortable. The API took 24 requests at 8 parallel without a single throttle, so raising this is safe if you are reading many creators.",
            "default": 4
          },
          "monitorMode": {
            "title": "Monitor mode",
            "type": "boolean",
            "description": "Compare against the last run and label what changed: new payments and what they were worth, a price rise, new posts, a creator going quiet or disappearing. The history is remembered per creator, so you can add and remove creators from the list without resetting it.",
            "default": false
          },
          "onlyChanges": {
            "title": "Output only changed creators",
            "type": "boolean",
            "description": "With monitor mode on, skip creators where nothing moved — an empty run then means nothing needs your attention.",
            "default": false
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Optional and off by default. This API answers without a proxy from every region tested; switch one on only if you get errors.",
            "default": {
              "useApifyProxy": false
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}