{
  "openapi": "3.0.1",
  "info": {
    "title": "Apple Podcasts Scraper — Episodes, Audio URLs & RSS Data",
    "description": "Apple Podcasts API alternative: scrape episodes, audio MP3 URLs and show metadata via iTunes API + RSS. Export podcast data to CSV/JSON. No login, no API key.",
    "version": "1.0",
    "x-build-id": "sdhkw44dqRPdVX13S"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/logiover~apple-podcasts-episode-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-logiover-apple-podcasts-episode-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/logiover~apple-podcasts-episode-scraper/runs": {
      "post": {
        "operationId": "runs-sync-logiover-apple-podcasts-episode-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/logiover~apple-podcasts-episode-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-logiover-apple-podcasts-episode-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": {
          "searchTerms": {
            "title": "Search Terms",
            "type": "array",
            "description": "Keyword queries to discover podcasts via the iTunes Search API. Each term returns up to 200 matching podcast shows; every matched show is then expanded into its episode list (subject to 'Max Episodes Per Podcast'). Examples: 'artificial intelligence', 'true crime', 'startup', 'football tactics', 'mindfulness'. LEAVE EVERYTHING EMPTY to automatically scrape the current top-charting podcasts on the selected storefront.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "podcastIds": {
            "title": "Podcast IDs (iTunes Collection IDs)",
            "type": "array",
            "description": "Direct iTunes collection IDs of specific podcasts to scrape. The collection ID is the numeric segment in an Apple Podcasts URL, e.g. for https://podcasts.apple.com/us/podcast/lex-fridman-podcast/id1434243584 the ID is '1434243584'. Faster and more predictable than search. Mix with 'Search Terms' if needed.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "rssFeeds": {
            "title": "RSS Feed URLs",
            "type": "array",
            "description": "Direct podcast RSS feed URLs to parse. Use this for podcasts not indexed in Apple, for full episode archives beyond the 200-episode iTunes lookup limit, or to get richer fields like episode numbers, season numbers, HTML show notes, chapter markers and transcript URLs. Example: 'https://lexfridman.com/feed/podcast/'.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "iTunes Storefront Country",
            "enum": [
              "us",
              "gb",
              "ca",
              "au",
              "de",
              "fr",
              "es",
              "it",
              "nl",
              "br",
              "mx",
              "jp",
              "kr",
              "in",
              "tr",
              "ru",
              "se",
              "no",
              "dk",
              "fi",
              "pl",
              "cz",
              "at",
              "ch",
              "be",
              "ie",
              "nz",
              "za",
              "ae",
              "sa"
            ],
            "type": "string",
            "description": "The Apple Podcasts storefront to query. Most catalogs are global, but some shows are region-restricted and rankings differ by storefront. Use 'us' for the largest catalog.",
            "default": "us"
          },
          "maxPodcastsPerSearch": {
            "title": "Max Podcasts Per Search Term",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Maximum number of podcast shows returned per search term. iTunes hard limit is 200. Lower this when you only want top-ranked results. The prefilled 30 keeps a first run comfortably inside a five-minute window while still returning thousands of episodes; raise it for a larger sweep and give the run a longer timeout.",
            "default": 50
          },
          "maxEpisodesPerPodcast": {
            "title": "Max Episodes Per Podcast",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Maximum episodes returned per podcast via the iTunes Lookup API. iTunes hard limit is ~200 most recent episodes. To go beyond, enable 'Use RSS Feed For Full Archive' or pass the show's RSS feed URL directly via 'RSS Feed URLs'.",
            "default": 100
          },
          "useRssForFullArchive": {
            "title": "Use RSS Feed For Full Archive",
            "type": "boolean",
            "description": "Read each podcast's own RSS feed as well as the Apple catalogue. This is what makes the export complete: Apple returns only the most recent episodes and omits the episode GUID, episode and season numbers, episode type, show notes and audio file size entirely. With this on a typical search returns tens of thousands of episodes instead of a few hundred, for a few seconds more. Turn it off only if you want the Apple catalogue view alone.",
            "default": true
          },
          "minReleaseDate": {
            "title": "Minimum Release Date (ISO)",
            "type": "string",
            "description": "Filter to episodes released on or after this date. ISO format (YYYY-MM-DD). Example: '2025-01-01' to skip everything older. Leave empty for no lower bound.",
            "default": null
          },
          "maxReleaseDate": {
            "title": "Maximum Release Date (ISO)",
            "type": "string",
            "description": "Filter to episodes released on or before this date. ISO format (YYYY-MM-DD). Leave empty for no upper bound.",
            "default": null
          },
          "explicit": {
            "title": "Explicit Content Filter",
            "enum": [
              "all",
              "clean",
              "explicit"
            ],
            "type": "string",
            "description": "Filter by content rating. 'all' returns everything (default), 'clean' excludes episodes flagged as explicit by Apple, 'explicit' returns only explicit content.",
            "default": "all"
          },
          "minDurationSeconds": {
            "title": "Min Duration (seconds)",
            "minimum": 0,
            "type": "integer",
            "description": "Drop episodes shorter than this. Useful for excluding trailers, ads or 1-minute teasers. Set 0 to disable.",
            "default": 0
          },
          "fetchShowMetadata": {
            "title": "Include Show Metadata",
            "type": "boolean",
            "description": "When enabled, every episode record is enriched with its parent show's fields (artist, genre list, total track count, show artwork, show description, etc.). Disable if you only need raw episode data and want smaller records.",
            "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}