{
  "openapi": "3.0.1",
  "info": {
    "title": "Instagram Reels Transcript Scraper 💰$7.5/1K — TikTok & Shorts",
    "description": "Instagram Reels, TikTok and YouTube Shorts to text: speech-to-text transcript with timestamps, burned-in captions, the 3-second hook, likes, views and a viral score vs the author's usual. No login. Watch creators on a schedule and pay only for new videos. Failed and private videos are free.",
    "version": "0.1",
    "x-build-id": "84Iq5okWeKaDrkTl8"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/lergassy~instagram-reels-transcript-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-lergassy-instagram-reels-transcript-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/lergassy~instagram-reels-transcript-scraper/runs": {
      "post": {
        "operationId": "runs-sync-lergassy-instagram-reels-transcript-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/lergassy~instagram-reels-transcript-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-lergassy-instagram-reels-transcript-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": {
          "videoUrls": {
            "title": "🔗 Instagram Reel URLs",
            "type": "array",
            "description": "Add one or more public Reel links (instagram.com/reel/...). No login or cookies needed. TikTok and YouTube Shorts links also work, if you happen to have them in the same list.",
            "items": {
              "type": "string"
            }
          },
          "compareWithAuthor": {
            "title": "📈 Find viral videos (compare with the author's usual)",
            "type": "boolean",
            "description": "Adds author, views, likes, comments, caption and publish date to every video, and when you send 4 or more videos from the same author it compares each one with that author's median (vsAuthorMedian: 5 means five times the author's usual). Videos at 3× or more are flagged isOutlier — the ones that went viral for that account. TikTok is compared on views; Instagram on likes, because Instagram hides view counts from logged-out visitors. Free: no extra charge.",
            "default": true
          },
          "profiles": {
            "title": "👤 Instagram, TikTok or YouTube profiles",
            "type": "array",
            "description": "An Instagram profile link (https://www.instagram.com/natgeo/) or username (natgeo), a TikTok handle with @ (@duolingo) or a YouTube channel. Instagram shows logged-out visitors only the 12 newest Reels of a profile, so that is the most an Instagram profile gives; TikTok and YouTube go up to the limit below. A private or unknown profile returns one free error row.",
            "items": {
              "type": "string"
            }
          },
          "resultsLimitPerProfile": {
            "title": "🔢 Videos per profile",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many of the newest videos to take from each profile. Instagram profiles give at most 12 (all Instagram shows without a login).",
            "default": 10
          },
          "onlyPostsNewerThan": {
            "title": "📅 Only videos newer than",
            "type": "string",
            "description": "Skip anything published before this date. Leave empty to take the newest videos whatever their date."
          },
          "onlyNewVideos": {
            "title": "🆕 Only videos not processed before (pay only for new ones)",
            "type": "boolean",
            "description": "For scheduled runs: remembers the videos this account has already transcribed and skips them free of charge, so a daily watch on a creator only pays for what was published since the last run. The memory lives in your own key-value store 'reels-transcript-seen' — clear it there to start over.",
            "default": false
          },
          "maxVideos": {
            "title": "🔢 Maximum videos in this run (all inputs together)",
            "minimum": 1,
            "type": "integer",
            "description": "A hard ceiling for the whole run, across links and profiles together. Useful when you paste a long list or several profiles and want a predictable bill. Leave empty for no ceiling; the per-profile limit still applies."
          },
          "includeRunSummary": {
            "title": "🧾 Add a free summary row at the end of the run",
            "type": "boolean",
            "description": "One extra free row with the run's totals: how many videos were asked for, transcribed, skipped as already processed, skipped by the ceiling, and how many failed with the reason counts. Handy for scheduled runs and dashboards.",
            "default": false
          },
          "watchlistName": {
            "title": "🗂️ Name of the watch list (with “only new videos”)",
            "type": "string",
            "description": "Keeps separate memories of what was already processed. Give each scheduled task its own name — for example 'competitors' and 'my-brand' — and they will not skip each other's videos. Empty means one shared list."
          },
          "maxRunSeconds": {
            "title": "⏲️ Stop the run after N seconds",
            "minimum": 30,
            "type": "integer",
            "description": "A soft deadline: when it passes, no new video is taken, everything already transcribed is delivered and the run ends green with an explanation. Nothing is charged for videos that were not taken."
          },
          "fromDatasetId": {
            "title": "🔗 Take video links from another run's dataset",
            "type": "string",
            "description": "Dataset of a previous run (yours or another Actor's). Every row is scanned for an Instagram, TikTok or YouTube link in the usual fields (url, postUrl, videoUrl, link, shortCode) and those videos are transcribed. Lets you chain a scraper to this Actor without writing code."
          },
          "datasetItems": {
            "title": "📋 Or paste the rows themselves",
            "type": "array",
            "description": "Rows from another Actor as JSON, when you do not want to share a dataset. The same fields are scanned for video links. Works together with the dataset field above."
          },
          "transcriptionMode": {
            "title": "🎧 Transcription strategy",
            "enum": [
              "ai-only",
              "captions-first",
              "captions-only"
            ],
            "type": "string",
            "description": "Instagram Reels never carry captions of their own, so on this Actor the transcript almost always comes from speech recognition. <b>Captions first</b> is the default and the right choice here: it looks for captions, finds none on a Reel, and recognises the speech. <b>Speech recognition only</b> does the same while skipping the lookup. <b>Captions only</b> returns nothing for Instagram Reels — it is kept for links from other platforms, where captions do exist.",
            "default": "captions-first"
          },
          "includeOnScreenText": {
            "title": "🖼️ Read on-screen text",
            "type": "boolean",
            "description": "Read the text burned into the picture — caption cards, title cards, hard subtitles — and split it from what the author actually says. No other Actor does this. It downloads the video and reads it frame by frame, so it is billed separately and takes several minutes per video. Off by default.",
            "default": false
          },
          "quality": {
            "title": "🎯 Speech recognition quality",
            "enum": [
              "fast",
              "balanced",
              "accurate"
            ],
            "type": "string",
            "description": "Only used when a video has no captions of its own. Fast is enough for clear speech in short video; accurate helps with noise, accents and music.",
            "default": "fast"
          },
          "language": {
            "title": "🗣️ Spoken language",
            "enum": [
              "auto",
              "en",
              "es",
              "pt",
              "fr",
              "de",
              "it",
              "nl",
              "hi",
              "ar",
              "ja",
              "ko",
              "zh",
              "ru",
              "tr",
              "id",
              "vi",
              "th",
              "pl",
              "uk"
            ],
            "type": "string",
            "description": "Leave on Auto unless the video is short and the language is being guessed wrong.",
            "default": "auto"
          },
          "maximumVideoDurationSeconds": {
            "title": "⏳ Maximum video duration, seconds",
            "minimum": 0,
            "maximum": 36000,
            "type": "integer",
            "description": "Videos longer than this are skipped with a free error row, before anything is downloaded. 0 means no limit. Useful when a profile mixes Shorts with hour-long uploads.",
            "default": 0
          },
          "ocrFps": {
            "title": "🖼️ On-screen text sampling",
            "enum": [
              "1",
              "1.5",
              "2",
              "3"
            ],
            "type": "string",
            "description": "How often frames are read when “Read on-screen text” is on. On our labelled test video 1.5 frames per second found every caption card, while 1 lost three of six. Higher values cost more time, not more accuracy.",
            "default": "1.5"
          },
          "includeTranscriptSegments": {
            "title": "⏱️ Include timestamped segments",
            "type": "boolean",
            "description": "Return the transcript as timestamped segments in addition to the plain text. Turn off for a flatter table.",
            "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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}