{
  "openapi": "3.0.1",
  "info": {
    "title": "Instagram Transcript Scraper · Instagram Video Transcript, Hook",
    "description": "Instagram Reel transcript plus analysis in one run: spoken text via on-device Whisper, the 3-second hook, SRT/VTT subtitles and metadata, optional on-screen text, CTA, beats and an AI summary with chapters. Handle, URL or chained dataset. No login. Flat price, silent reels free.",
    "version": "0.0",
    "x-build-id": "duRhckax0Wpnq3knt"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/memo23~instagram-transcript-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-memo23-instagram-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/memo23~instagram-transcript-scraper/runs": {
      "post": {
        "operationId": "runs-sync-memo23-instagram-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/memo23~instagram-transcript-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-memo23-instagram-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": {
          "startUrls": {
            "title": "Instagram video URLs or creators",
            "type": "array",
            "description": "Paste Instagram <b>Reel</b>, <b>post</b> (/p/) or <b>IGTV</b> (/tv/) URLs, or a creator profile / @handle. A profile is expanded into that account's most recent reels (see Max reels per creator). Image-only posts are skipped.",
            "items": {
              "type": "object",
              "required": [
                "url"
              ],
              "properties": {
                "url": {
                  "type": "string",
                  "title": "URL of a web page",
                  "format": "uri"
                }
              }
            }
          },
          "handles": {
            "title": "Creator handles",
            "type": "array",
            "description": "Instagram usernames to walk — <code>nasa</code>, <code>@nasa</code>, or a profile URL. The actor lists each creator's most recent reels and transcribes them. No login. Example: <code>nasa</code>.",
            "items": {
              "type": "string"
            }
          },
          "videoUrls": {
            "title": "Direct video URLs",
            "type": "array",
            "description": "Instagram CDN or other direct <code>.mp4</code> / <code>.webm</code> links (the <code>videoUrl</code> field on another IG scraper's row), or record URLs of video files saved in an Apify key-value store (<code>https://api.apify.com/v2/key-value-stores/…/records/clip.mp4</code>). Transcribed the same as a reel URL. If the store is private, also select it under Key-value stores to read. Default: none.",
            "items": {
              "type": "string"
            }
          },
          "videoStoreIds": {
            "title": "Key-value stores to read",
            "type": "array",
            "description": "Key-value stores in your account that hold video or audio files, for example the store a downloader actor saved its videos into. This actor may read only the stores you select here, so a record URL from a private store needs its store selected. A selected store that none of your URLs point into is transcribed whole: every key ending in .mp4, .webm, .mov, .mp3, .m4a or similar, up to Max videos. Default: none."
          },
          "maxReelsPerHandle": {
            "title": "Max reels per creator",
            "minimum": 1,
            "maximum": 1000,
            "type": "integer",
            "description": "How many of each creator's most recent reels to transcribe. Newest first. Capped by Max videos below.",
            "default": 12
          },
          "datasetId": {
            "title": "Dataset ID (chain a scraper run)",
            "type": "string",
            "description": "Default dataset ID of a finished Instagram scraper run. The actor deep-scans each row for reel/post/IGTV URLs. Works with memo23/instagram-reel-scraper, instagram-post-scraper, and the official apify/instagram-scraper."
          },
          "datasetItems": {
            "title": "Dataset items (paste rows)",
            "type": "array",
            "description": "Paste rows from an Instagram scraper instead of chaining by ID. Any field that holds an instagram.com/reel, /p/ or /tv/ URL is picked up."
          },
          "watchlistId": {
            "title": "Watchlist ID",
            "type": "string",
            "description": "Named key-value store that remembers which shortcodes this run already transcribed. Use the same id on a schedule (e.g. <code>nasa-daily</code>) so later runs can skip old reels. Letters, numbers, hyphens, underscores. Example: <code>nasa-daily</code>. Default: none."
          },
          "newReelsOnly": {
            "title": "Only new reels",
            "type": "boolean",
            "description": "When enabled, skip reels already stored on the Watchlist ID. Requires <code>watchlistId</code>. Newest-first profile walks stop at the first seen reel. Empty incremental runs do not transcribe the sample reel. Default: false.",
            "default": false
          },
          "resumeUnfinished": {
            "title": "Resume an unfinished run",
            "type": "boolean",
            "description": "If an earlier run with exactly this input stopped before it finished (aborted, out of memory or timed out), skip the reels it already delivered and transcribe only the rest, without charging them again. A run that finished is never resumed, so re-running the same input gives a full run. Turned off when you set a Watchlist ID. Default: on.",
            "default": true
          },
          "whisperModel": {
            "title": "Whisper model",
            "enum": [
              "tiny",
              "base",
              "small"
            ],
            "type": "string",
            "description": "<b>tiny</b> (default) is ~5× faster and reliable on Apify's CPU. <b>base</b>/<b>small</b> are more accurate but slower and can time out on longer videos.",
            "default": "tiny"
          },
          "language": {
            "title": "Language",
            "type": "string",
            "description": "Spoken language of the videos as an ISO code (e.g. <code>en</code>, <code>es</code>, <code>ar</code>), or <code>auto</code> to let Whisper detect it per video. Setting the correct language is faster and more accurate than auto-detect.",
            "default": "auto"
          },
          "includeSegments": {
            "title": "Include timestamped segments",
            "type": "boolean",
            "description": "When enabled (default), each row includes a <code>segments</code> array of <code>{start, end, text}</code> chunks (subtitle-style timings) in addition to the full <code>transcript</code> string. Disable for a smaller, text-only output.",
            "default": true
          },
          "maxItems": {
            "title": "Max videos",
            "maximum": 1000,
            "type": "integer",
            "description": "Maximum number of videos to transcribe this run. Transcription is the slow/costly step, so start small.",
            "default": 25
          },
          "maxDurationSec": {
            "title": "Skip videos longer than (seconds)",
            "type": "integer",
            "description": "Videos longer than this are skipped (a guard so one very long video can't burn minutes of compute). Default 300 (5 min); set 0 to disable.",
            "default": 300
          },
          "maxConcurrency": {
            "title": "Max concurrency",
            "minimum": 1,
            "maximum": 4,
            "type": "integer",
            "description": "How many videos to transcribe in parallel. Each Whisper pass is CPU-heavy, so 1–2 is safest on standard Apify runners; higher can time out.",
            "default": 2
          },
          "proxy": {
            "title": "Proxy configuration",
            "type": "object",
            "description": "Paid runs use the house residential pool automatically, so this can be left alone. Set it only if you need a specific country or want to use your own proxies.",
            "default": {
              "useApifyProxy": true
            }
          },
          "analyzeReel": {
            "title": "Read on-screen text, hook and structure",
            "type": "boolean",
            "description": "Samples frames from each reel and reads what is written ON the video — caption cards, recipe quantities, prices, step numbers, URLs — plus the hook, the call to action and a beat-by-beat breakdown with timings. This is the half of the script that audio-only transcription cannot see, and on a silent or music-only reel it is the ENTIRE script. Costs one extra AI call per reel, so it is off by default. Paid Apify plans only.",
            "default": false
          },
          "analysisMaxFrames": {
            "title": "Frames sampled per reel",
            "minimum": 1,
            "maximum": 12,
            "type": "integer",
            "description": "How many frames are sampled from each reel and sent to the vision model. More frames catch more on-screen text but cost more — vision input is about 970 tokens per frame. 8 is the sweet spot, 12 the ceiling.",
            "default": 8
          },
          "summarize": {
            "title": "Summary, chapters and keywords (AI)",
            "type": "boolean",
            "description": "After transcribing, Claude Haiku 5.5 writes a short summary of the reel, a list of chapters with start times, and the keywords that matter most in it — each in the language the reel is spoken in. Reels with no speech are skipped, and a summary that fails to come back leaves the transcript untouched and says why in <code>summaryError</code>. Charged per summary delivered. Default: off. Paid Apify plans only.",
            "default": false
          },
          "aiBreakdown": {
            "title": "AI video breakdown (creative brief)",
            "type": "boolean",
            "description": "Turns each transcript into a structured <b>creative brief</b> — the breakdown other tools sell as a separate, pricier product, done in the same run. Adds <code>breakdownSummary</code>, <code>breakdownWhyItWorks</code> (why the reel holds attention), the hook read (<code>breakdownHookText</code>, <code>breakdownHookType</code>, <code>breakdownHookWhyItWorks</code>), <code>breakdownKeyPoints</code>, the call to action (<code>breakdownCtaText</code>, <code>breakdownCtaType</code>), <code>breakdownContentFormat</code>, <code>breakdownTone</code>, <code>breakdownAudience</code>, <code>breakdownTopics</code> and timestamped <code>breakdownSegments</code> — each in the reel's own language. Built for swipe files, competitor briefs and feeding into ChatGPT or Claude. Reels with no speech are skipped; a breakdown that fails leaves the transcript untouched and says why in <code>breakdownError</code>. Charged per breakdown delivered. Default: off. Paid Apify plans only.",
            "default": false
          },
          "cleanTranscript": {
            "title": "Clean transcript (AI-corrected)",
            "type": "boolean",
            "description": "Adds transcriptClean: the transcript with the words the fast speech model misheard corrected by Claude Haiku, using the post's caption for names and terms. Never paraphrased; the verbatim transcript, timings and subtitle files stay as they are. In a test on English reels it removed about a fifth of the word errors. Charged per reel it is delivered for ($0.003, the clean-transcript event). Paid Apify plans only.",
            "default": 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
                  },
                  "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}