{
  "openapi": "3.0.1",
  "info": {
    "title": "Apple Podcasts Search Scraper",
    "description": "Search the Apple Podcasts catalogue across any storefront and get back the show plus what Apple's directory leaves out: owner email, website, true episode count, latest episode date and publishing cadence, read from each show's own RSS feed.",
    "version": "0.1",
    "x-build-id": "NuzbdwtOU8B5CunZ3"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/cirkit~apple-podcasts-search-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-cirkit-apple-podcasts-search-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/cirkit~apple-podcasts-search-scraper/runs": {
      "post": {
        "operationId": "runs-sync-cirkit-apple-podcasts-search-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/cirkit~apple-podcasts-search-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-cirkit-apple-podcasts-search-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 keywords",
            "type": "array",
            "description": "Keywords to search the Apple Podcasts catalogue for. Apple caps every search at 100 shows and ignores paging, so add more keywords (and more storefronts below) rather than expecting one keyword to return thousands.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "countries": {
            "title": "Storefronts",
            "type": "array",
            "description": "Two-letter country codes for the Apple storefronts to search. Each storefront has its own catalogue and ranking, so searching us + gb + de returns roughly three times as many distinct shows as us alone. Duplicates are removed across storefronts before anything is charged.",
            "default": [
              "us"
            ],
            "items": {
              "type": "string"
            }
          },
          "podcastIds": {
            "title": "Podcast IDs or URLs",
            "type": "array",
            "description": "Look specific shows up directly. Accepts a numeric Apple Podcasts ID (1322200189) or a full show URL — the ID is read out of the URL for you.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "chartCountries": {
            "title": "Top-chart storefronts",
            "type": "array",
            "description": "Two-letter country codes to pull Apple's official Top Shows chart for. Every row from a chart carries its chartRank. Apple publishes charts per country only, not per genre.",
            "default": [],
            "items": {
              "type": "string"
            }
          },
          "chartLimit": {
            "title": "Chart size",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many ranked shows to take from each chart.",
            "default": 50
          },
          "maxItems": {
            "title": "Max shows",
            "minimum": 0,
            "type": "integer",
            "description": "Hard cap on how many shows this run returns, and therefore on what it costs. Duplicates are dropped before this cap applies.",
            "default": 100
          },
          "maxResultsPerTerm": {
            "title": "Shows per keyword",
            "minimum": 1,
            "maximum": 100,
            "type": "integer",
            "description": "How many shows to take from each keyword-and-storefront pair. Apple's own hard ceiling is 100 regardless of what is asked for here.",
            "default": 50
          },
          "genreId": {
            "title": "Genre filter",
            "type": "integer",
            "description": "Restrict results to one Apple Podcasts genre, for example 1489 News, 1488 True Crime, 1321 Business, 1303 Comedy, 1512 Health & Fitness, 1318 Technology. Leave empty to search every genre."
          },
          "searchAttribute": {
            "title": "Match on",
            "enum": [
              "any",
              "titleTerm",
              "artistTerm"
            ],
            "type": "string",
            "description": "Which field the keyword has to match. 'Show title' and 'Publisher' are much stricter than the default, which matches titles, publishers and descriptions.",
            "default": "any"
          },
          "enrichFromRss": {
            "title": "Read each show's RSS feed",
            "type": "boolean",
            "description": "Adds the fields Apple's own directory does not carry: owner email, owner name, show website, language, true episode count, date of the latest episode and how many episodes shipped in the last 90 days. Costs about a second per show. Switch off for a faster catalogue-only run.",
            "default": true
          },
          "onlyActive": {
            "title": "Only shows still publishing",
            "type": "boolean",
            "description": "Drop any show whose most recent episode is more than 90 days old. Needs the RSS read above.",
            "default": false
          },
          "includeEpisodes": {
            "title": "Include recent episodes",
            "type": "boolean",
            "description": "Attach recent episodes to each show row, with title, publish date, duration, episode and season number, and the direct audio URL. Episodes ride along inside the show row, so they cost nothing extra.",
            "default": false
          },
          "maxEpisodesPerShow": {
            "title": "Episodes per show",
            "minimum": 0,
            "maximum": 500,
            "type": "integer",
            "description": "How many recent episodes to attach when the option above is on.",
            "default": 10
          },
          "proxyConfiguration": {
            "title": "Proxy",
            "type": "object",
            "description": "Apple's endpoints are open and answer datacenter IPs, so the default proxy setting is all this Actor needs. Residential is available but buys nothing here.",
            "default": {
              "useApifyProxy": 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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}