{
  "openapi": "3.0.1",
  "info": {
    "title": "Podcast Transcript Scraper — Audio & Video to Text, RSS & SRT",
    "description": "Audio & video transcription: never charged for a link we can't reach, can't decode, or that has no speech. Any audio or video URL to text, SRT and VTT with timestamped segments — direct file links from any host, plus 14 tested sites for page links. About 90 languages, no API key of your own.",
    "version": "1.0",
    "x-build-id": "4jJ4zAaumIIvrpgaa"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/steadyfetch~media-transcriber/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-steadyfetch-media-transcriber",
        "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/steadyfetch~media-transcriber/runs": {
      "post": {
        "operationId": "runs-sync-steadyfetch-media-transcriber",
        "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/steadyfetch~media-transcriber/run-sync": {
      "post": {
        "operationId": "run-sync-steadyfetch-media-transcriber",
        "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",
        "required": [
          "urls"
        ],
        "properties": {
          "urls": {
            "title": "Media URLs",
            "type": "array",
            "description": "Any direct audio or video file link, from any host (.mp3, .m4a, .wav, .mp4, .mov, .webm …), for example https://example.com/episode.mp3, or a page link on one of the 14 tested sites named in the description above — including an X (Twitter) post link, x.com/<user>/status/<id>. Files over 256 MB come back as an uncharged row — send the audio-only version. YouTube, Instagram, LinkedIn ads, TikTok Creative Center, Google Ads Transparency Center and Facebook Ad Library links belong in their own steadyfetch actor and come back uncharged naming it. Long meeting and conference recordings are the ones that cross the size limit, and an audio-only version of the same session is usually far smaller. For your own media this field needs a real value — every other field accepts null, meaning \"use the default\". Leave it empty with nothing else set and the run transcribes a fixed 25-second public-domain sample clip (charged like any run: one audio minute) — the fastest way to see real output, and leaving it empty with only the options below set runs that same clip under them.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "podcastUrls": {
            "title": "Podcast feeds or show links",
            "type": "array",
            "description": "A whole podcast show per line: an RSS feed address such as https://example.com/feed.xml, or an Apple Podcasts SHOW link such as https://podcasts.apple.com/us/podcast/name/id1200361736 (the show page, not an episode — an episode link carries ?i= and belongs in \"Media URLs\"). The newest episodes are read from the feed and transcribed, newest first, as many as \"Episodes per show\" allows. Never charged: a feed we cannot reach, a link that is not a feed, a show Apple does not list, and any episode this account already had — each comes back as an uncharged row naming what was found. Leave it empty and nothing here runs; the actor's own field for single files and episode pages is \"Media URLs\" (`urls`).",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "maxEpisodesPerShow": {
            "title": "Episodes per show",
            "minimum": 1,
            "type": "integer",
            "description": "How many of each show's newest episodes to transcribe, for example 10 for the last ten. Never charged on its own — it only decides how many episodes the run plans, and a show with fewer episodes than this delivers all it has and says so. Applies to \"Podcast feeds or show links\" only; links in \"Media URLs\" are unaffected. One run goes up to 500 episodes per show, and asking for more continues at 500.",
            "default": 10
          },
          "datasetId": {
            "title": "Dataset ID (chain a scraper run)",
            "type": "string",
            "description": "The default dataset ID of a finished scraper run. With Apify's 'Connect actor' integration this is filled automatically — the cleanest way to chain. One media link per row is transcribed; a link that is already in \"Media URLs\" is never transcribed twice."
          },
          "datasetItems": {
            "title": "Dataset items (paste rows)",
            "type": "array",
            "description": "Paste rows from a scraper run instead of chaining by ID. The actor deep-scans each row for an audio or video link — works with any scraper's output shape, including nested posts. Thumbnails, covers and profile pictures are never mistaken for media."
          },
          "newItemsOnly": {
            "title": "New items only",
            "type": "boolean",
            "description": "OFF (default): every link runs as usual; an item your account already has comes back from the earlier run, not charged (`repeat: true`), so a re-run of the same list is a complete archive that only pays for what is new. ON: items already delivered to your account are left out of the dataset entirely — nothing fetched, nothing charged, and the run’s status line says how many were skipped — so a scheduled run hands your integration only the new episodes. Only an item this actor actually delivered a transcript for counts; an item that came back without one — unreachable, no speech, or stopped by a cap — does not, so the next run tries it again.",
            "default": false
          },
          "outputFormats": {
            "title": "Formats to return",
            "type": "array",
            "description": "All four are returned by default — plain text, timestamped segments and ready-made SRT and VTT subtitle files — at no extra cost. Trim the list if you only want some of them; plain text is always returned.",
            "items": {
              "type": "string",
              "enumSuggestedValues": [
                "text",
                "segments",
                "srt",
                "vtt"
              ],
              "enumTitles": [
                "Plain text",
                "Timestamped segments",
                "SRT subtitles",
                "VTT subtitles"
              ]
            },
            "default": [
              "text",
              "segments",
              "srt",
              "vtt"
            ]
          },
          "language": {
            "title": "Language hint",
            "type": "string",
            "description": "Leave as \"auto\" to detect the spoken language automatically (about 90 languages are supported). Otherwise give a two-letter ISO 639-1 code such as en, es, de, ja, ar. On a run with no links the sample clip is an English recording, so a hint naming another language is answered with an uncharged row rather than transcribed into words that are not in it.",
            "default": "auto"
          },
          "maxMinutesPerItem": {
            "title": "Max minutes per item",
            "minimum": 0,
            "type": "integer",
            "description": "Skip any single item longer than this many audio minutes. 0 means no per-item limit. Skipped items come back as uncharged rows saying how long they were. One run goes up to 100,000 minutes per item; ask for a bigger number and the run continues at that, and says so.",
            "default": 0
          },
          "maxTotalMinutes": {
            "title": "Max total minutes",
            "minimum": 0,
            "type": "integer",
            "description": "Stop the run once this many audio minutes have been charged in total. 0 means no limit. The run stops cleanly and the items it did not reach come back as uncharged rows. One run goes up to 1,000,000 minutes in total; ask for a bigger number and the run continues at that, and says so.",
            "default": 0
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}