{
  "openapi": "3.0.1",
  "info": {
    "title": "Apple App Store Reviews Scraper",
    "description": "Extract App Store reviews for competitor analysis, sentiment tracking, and market research. \nGet app ratings, developer info, and user feedback from any country. \nNo limits on review count. Pay-per-result pricing.",
    "version": "1.0",
    "x-build-id": "5ZFJZbYZDr22VGtM3"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/jdtpnjtp~apple-app-store-scraper/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-jdtpnjtp-apple-app-store-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/jdtpnjtp~apple-app-store-scraper/runs": {
      "post": {
        "operationId": "runs-sync-jdtpnjtp-apple-app-store-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/jdtpnjtp~apple-app-store-scraper/run-sync": {
      "post": {
        "operationId": "run-sync-jdtpnjtp-apple-app-store-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": {
          "mode": {
            "title": "Operation Mode",
            "enum": [
              "lookup",
              "search"
            ],
            "type": "string",
            "description": "Select how you want to find apps to scrape:\n\n• **Lookup Mode**: Provide specific App Store URLs or numeric app IDs. Best for scraping known apps.\n\n• **Search Mode**: Enter keywords to discover apps matching your criteria. Returns apps from iTunes Search API.",
            "default": "lookup"
          },
          "appUrls": {
            "title": "App URLs or IDs",
            "type": "array",
            "description": "Enter App Store URLs or numeric app IDs to scrape. This field is used only in Lookup Mode.\n\n**Supported formats:**\n• Full URL: `https://apps.apple.com/us/app/instagram/id389801252`\n• Short URL: `https://apps.apple.com/app/id389801252`\n• Numeric ID only: `389801252`\n\n**Tips:**\n• You can mix URLs and IDs in the same list\n• The country in the URL determines which App Store region to scrape\n• Add multiple apps to scrape them all in one run",
            "items": {
              "type": "string"
            }
          },
          "searchKeywords": {
            "title": "Search Keywords",
            "type": "array",
            "description": "Enter keywords to search for apps in the App Store. This field is used only in Search Mode.\n\n**Examples:**\n• `fitness tracker` - finds fitness and health apps\n• `photo editor` - finds image editing apps\n• `weather app` - finds weather forecast apps\n\n**Tips:**\n• Use specific terms for better results\n• Each keyword runs a separate search\n• Results are deduplicated automatically",
            "items": {
              "type": "string"
            }
          },
          "maxSearchResults": {
            "title": "Maximum Search Results",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Maximum number of apps to return from each keyword search. Apple's iTunes Search API allows up to 200 results per query.\n\n**Recommendations:**\n• Use 10-25 for quick exploratory searches\n• Use 50-100 for comprehensive market research\n• Use 200 for maximum coverage\n\n**Note:** Higher values increase run time and costs if reviews are also scraped.",
            "default": 50
          },
          "mediaType": {
            "title": "Media Type (Search Mode)",
            "enum": [
              "software",
              "all",
              "movie",
              "podcast",
              "music",
              "musicVideo",
              "audiobook",
              "shortFilm",
              "tvShow",
              "ebook"
            ],
            "type": "string",
            "description": "Type of content to search for in the iTunes Store. Select 'Apps (Software)' for mobile applications.\n\n**Options explained:**\n• **Apps (Software)**: iPhone/iPad applications (most common)\n• **All Media**: Search across all iTunes content types\n• Other options search specific media catalogs",
            "default": "software"
          },
          "country": {
            "title": "Country / App Store Region",
            "enum": [
              "us",
              "gb",
              "ca",
              "au",
              "de",
              "fr",
              "jp",
              "kr",
              "cn",
              "br",
              "mx",
              "es",
              "it",
              "nl",
              "se",
              "no",
              "dk",
              "fi",
              "pl",
              "ru",
              "in",
              "sg",
              "hk",
              "tw",
              "th",
              "my",
              "id",
              "ph",
              "vn",
              "ae",
              "sa",
              "tr",
              "za",
              "ng",
              "eg",
              "il",
              "ar",
              "cl",
              "co",
              "pe",
              "nz",
              "ie",
              "at",
              "ch",
              "be",
              "pt",
              "gr",
              "cz",
              "hu",
              "ro",
              "ua",
              "all"
            ],
            "type": "string",
            "description": "Select the App Store country/region to scrape. Reviews and app data vary by region.\n\n**Important notes:**\n• Reviews are region-specific - US reviews differ from UK reviews\n• App availability and pricing may vary by country\n• Select **'All Countries (aggregated)'** to scrape from 40 major markets automatically\n\n**Format:** ISO 3166-1 alpha-2 country codes (e.g., 'us' for United States)",
            "default": "us"
          },
          "includeReviews": {
            "title": "Scrape Reviews",
            "type": "boolean",
            "description": "Enable to scrape user reviews for each app. Disable to only fetch app metadata (faster, lower cost).\n\n**When enabled:**\n• Extracts review text, rating, date, username\n• Includes developer responses when available\n• Uses amp-api for unlimited reviews (bypasses 500-review RSS limit)\n\n**Cost consideration:** Reviews are charged at $0.65 per 1,000 reviews.",
            "default": true
          },
          "maxReviews": {
            "title": "Maximum Reviews Per App",
            "minimum": 0,
            "maximum": 100000,
            "type": "integer",
            "description": "Maximum number of reviews to scrape for each app. Set to 0 for unlimited.\n\n**Recommendations:**\n• **100-500**: Quick sentiment analysis\n• **1,000-5,000**: Comprehensive review analysis\n• **10,000+**: Full historical data extraction\n• **0 (unlimited)**: Get all available reviews\n\n**Note:** Popular apps like Instagram have millions of reviews. Use limits to control costs and run time.",
            "default": 1000
          },
          "timePeriod": {
            "title": "Review Time Period Filter",
            "enum": [
              "all",
              "1d",
              "7d",
              "30d",
              "90d",
              "180d",
              "365d"
            ],
            "type": "string",
            "description": "Filter reviews by how recently they were posted. Useful for tracking recent feedback.\n\n**Options:**\n• **All Time**: No filtering, get all reviews up to maxReviews limit\n• **Last 24 Hours - Last Year**: Only include reviews from the selected period\n\n**Technical note:** Apple's API doesn't support date filtering, so this filter is applied after retrieval. The scraper fetches reviews until the time threshold is reached.",
            "default": "all"
          },
          "includeAppInfo": {
            "title": "Include App Metadata",
            "type": "boolean",
            "description": "Include full app details (ratings, description, screenshots, etc.)",
            "default": true
          },
          "proxyConfig": {
            "title": "Proxy Configuration",
            "type": "object",
            "description": "Configure proxy settings for making requests to Apple's servers.\n\n**Cost comparison:**\n• **Datacenter proxies** (default): ~$0.25 per 1000 requests - best value\n• **Residential proxies**: ~$12.50 per GB - use only if blocked\n• **No proxy**: Free but may get rate limited\n\n**Tip:** Start with datacenter. Switch to residential only if you see many failures.",
            "default": {
              "useApifyProxy": true,
              "apifyProxyGroups": [
                "SHADER"
              ]
            }
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}