{
  "openapi": "3.0.1",
  "info": {
    "title": "Snapchat Profile Scraper & Subscriber Monitor",
    "description": "Scrape public Snapchat profiles: subscriber count, bio, category, website and Spotlight videos with views. Turn monitoring on and a run returns a profile only when its subscriber count or Spotlight changes, for a small fee per profile checked.",
    "version": "0.1",
    "x-build-id": "w9gbkMv1UE6xWD9zV"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/neverempty~snapchat-profile-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-neverempty-snapchat-profile-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/neverempty~snapchat-profile-scraper/runs": {
      "post": {
        "operationId": "runs-sync-neverempty-snapchat-profile-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/neverempty~snapchat-profile-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-neverempty-snapchat-profile-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": {
          "usernames": {
            "title": "Snapchat usernames or profile URLs",
            "type": "array",
            "description": "Public profiles to read: @name, name, https://www.snapchat.com/@name or https://www.snapchat.com/add/name (with or without the scheme, share links with ?share_id= work). Names are sent in lower case, as Snapchat redirects capitals to the lower-case name, and duplicates are read once. Up to 1,000 per run. If you leave this empty with monitoring off, the example profiles @fcbarcelona and @nasa are read and charged as normal rows, and a free example-input row says so; in monitoring mode an empty list checks and charges nothing.",
            "items": {
              "type": "string"
            }
          },
          "maxProfiles": {
            "title": "Maximum profiles to return",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many charged profile rows to return when monitoring is off: reading stops once this many public profiles have been read, and a free row says how many entries at the end of the list were not checked. Names that do not exist and accounts without a public profile do not count. In monitoring mode it does not limit the changes returned - every changed profile among those read comes back.",
            "default": 100
          },
          "includeRecentSpotlights": {
            "title": "Include recent Spotlight videos",
            "type": "boolean",
            "description": "Return the Spotlight videos Snapchat puts on the profile page (the most recent ones, not the full history) with upload time, duration, view, share and comment counts and the Spotlight URL. The counts spotlightsOnPage and latestSpotlightAt are returned either way.",
            "default": true
          },
          "monitoringMode": {
            "title": "Monitoring mode: return a profile only when it changes",
            "type": "boolean",
            "description": "Off = every profile you listed comes back, charged per row. On = the Actor remembers each profile and, on later runs, returns it only when something changed, with the previous value (subscriberDelta, previousSubscriberCount, previousLatestSpotlightAt). The first run returns every profile once to set the baseline. **In monitoring mode every public profile checked costs $0.30 per 1,000 checks, changed or not** (names that do not exist, accounts without a public profile and bot checks are free), plus the row price for the rows returned. Example: 50 profiles checked every hour = 36,000 checks a month = $10.80. The Actor reads only as many profiles as the run's maximum total charge can pay for with a check and a change row each. Profiles are remembered per username; do not put the same profile in two schedules that can run at the same time.",
            "default": false
          },
          "monitorMode": {
            "title": "What counts as a change",
            "enum": [
              "any-change",
              "subscriber-change"
            ],
            "type": "string",
            "description": "Any change = the displayed subscriber count moved (including a profile starting or stopping to show it), or a newer Spotlight appeared on the profile page. Stories are not watched, because the story part of the page changes from one read to the next. Subscriber change only = only the displayed subscriber count. Snapchat shows subscriber counts in hundreds, so a change smaller than that is not visible.",
            "default": "any-change"
          },
          "resetMonitoringState": {
            "title": "Forget what was remembered and start over",
            "type": "boolean",
            "description": "Clears every remembered profile for this Actor in your account, so the next monitoring run returns each profile once again. This affects all your monitoring runs, because profiles are stored per username rather than per list.",
            "default": false
          },
          "useProxy": {
            "title": "Use a proxy if Snapchat answers with a bot check",
            "type": "boolean",
            "description": "Every profile is requested directly first, which worked from Apify on every attempt measured on 2026-09-14. If Snapchat answers with a bot check or an empty response, this switches to a proxy session and tries again. With it off, that answer is returned as a free 'blocked' row and no proxy is paid for.",
            "default": true
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}