{
  "openapi": "3.0.1",
  "info": {
    "title": "TikTok Outlier Finder: Viral Videos, Reels & YouTube Breakouts",
    "description": "Finds TikTok, Instagram Reels and YouTube videos that beat their own creator's normal: outlier score (views vs the creator's median), pace, engagement, breakout level, hook and hashtags, from any scraper dataset, CSV or Sheet. No scraping or login. Charged per video scored. Agent-ready: MCP, x402.",
    "version": "0.1",
    "x-build-id": "kGPldbwRMXBIhVtuo"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/nerolabs~viral-outlier-finder/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-nerolabs-viral-outlier-finder",
        "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/nerolabs~viral-outlier-finder/runs": {
      "post": {
        "operationId": "runs-sync-nerolabs-viral-outlier-finder",
        "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/nerolabs~viral-outlier-finder/run-sync": {
      "post": {
        "operationId": "run-sync-nerolabs-viral-outlier-finder",
        "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": {
          "datasetIds": {
            "title": "Datasets",
            "type": "array",
            "description": "One or more scraper datasets: TikTok scrapers (clockworks/tiktok-scraper and look-alikes), Instagram Reel, post or profile scrapers, YouTube scrapers. Scrape 10 to 30 videos per creator so their normal can be worked out. Every video column is kept. In an integration set it to [\"{{resource.defaultDatasetId}}\"]."
          },
          "fileUrl": {
            "title": "File or Google Sheet URL",
            "type": "string",
            "description": "A public link to a CSV, Excel, JSON or JSON Lines file: scraper rows, or your own sheet with a creator (username) and views column, plus likes, comments, shares, date, url and caption if you have them. A normal Google Sheets link works when shared as 'Anyone with the link can view'."
          },
          "fileFormat": {
            "title": "File format",
            "enum": [
              "auto",
              "csv",
              "tsv",
              "json",
              "jsonl",
              "xlsx"
            ],
            "type": "string",
            "description": "Leave on 'Detect automatically' unless the link has no file extension.",
            "default": "auto"
          },
          "sheetName": {
            "title": "Excel sheet name",
            "type": "string",
            "description": "Which sheet to read from an Excel workbook. Defaults to the first sheet."
          },
          "data": {
            "title": "Video rows",
            "type": "array",
            "description": "Rows as JSON objects, for a quick run or an AI agent call, e.g. [{\"creator\": \"...\", \"platform\": \"tiktok\", \"views\": 120000, \"likes\": 9000, \"date\": \"2026-10-20\", \"url\": \"...\", \"caption\": \"...\"}] or raw scraper rows."
          },
          "minOutlierScore": {
            "title": "Outlier threshold (x the creator's median)",
            "minimum": 1.1,
            "maximum": 1000,
            "type": "number",
            "description": "A video counts as an outlier when its views are at least this many times the creator's median views. 2 = twice their normal. 5 and 10 mark strong and viral.",
            "default": 2
          },
          "minVideosPerCreator": {
            "title": "Videos needed per creator",
            "minimum": 3,
            "maximum": 500,
            "type": "integer",
            "description": "A creator's normal is only worked out when at least this many of their videos have views (minimum 3). Creators with fewer are written with the reason and not charged.",
            "default": 5
          },
          "lookbackDays": {
            "title": "Only videos from the last (days)",
            "minimum": 0,
            "maximum": 3650,
            "type": "integer",
            "description": "Score and compare only videos posted in this many days. 0 = every video given.",
            "default": 0
          },
          "excludePinned": {
            "title": "Leave pinned videos out of the normal",
            "type": "boolean",
            "description": "Pinned videos are usually old hits kept on top of the profile; leaving them out of the median keeps each creator's normal honest. They are still scored.",
            "default": true
          },
          "groupBy": {
            "title": "Group videos by",
            "enum": [
              "auto",
              "owner"
            ],
            "type": "string",
            "description": "'The profile that was scraped' puts collab reels and videos that appear on a profile with that profile (what you asked the scraper for). 'The account that posted it' groups by the real owner instead.",
            "default": "auto"
          },
          "minViews": {
            "title": "Minimum views",
            "minimum": 0,
            "type": "integer",
            "description": "Leave out videos below this view count (not charged). 0 = no minimum.",
            "default": 0
          },
          "keep": {
            "title": "Rows to keep",
            "enum": [
              "all",
              "scored",
              "outliers_and_rising",
              "outliers"
            ],
            "type": "string",
            "description": "Which videos to write (only written videos with a score are charged). 'All' also writes videos that could not be scored with the reason.",
            "default": "all"
          },
          "keepOriginalFields": {
            "title": "Keep original columns",
            "type": "boolean",
            "description": "Keep your scraper's own columns (light ones, not media or nested lists) next to the new ones.",
            "default": true
          },
          "exportFormats": {
            "title": "Also save as a file",
            "type": "array",
            "description": "Also save the results as CSV or Excel in the run's key-value store (charged once per file).",
            "items": {
              "type": "string",
              "enum": [
                "csv",
                "xlsx"
              ],
              "enumTitles": [
                "CSV",
                "Excel (xlsx)"
              ]
            }
          },
          "outputDatasetName": {
            "title": "Also append to a named dataset",
            "type": "string",
            "description": "Name of a dataset to append the results to, to keep a running list of outlier videos across runs."
          },
          "maxItems": {
            "title": "Max input rows",
            "minimum": 1,
            "maximum": 200000,
            "type": "integer",
            "description": "Stop reading after this many input rows.",
            "default": 200000
          }
        }
      },
      "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "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
                  },
                  "PROXY_UNBLOCKER_UNITS": {
                    "type": "integer",
                    "example": 0
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}