{
  "openapi": "3.0.1",
  "info": {
    "title": "App Discovery Radar",
    "description": "Find iOS apps for niche research, track competitor metadata, and compare country listings. For app makers, ASO teams and publishers. Includes readable reports, CSV, saved comparisons and Apple source links. Bounded sample. $0.25 per completed report, including zero matches.",
    "version": "0.5",
    "x-build-id": "VQicHf6jhEfyRNHkS"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/kamnev.apps~app-discovery-radar/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-kamnev.apps-app-discovery-radar",
        "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/kamnev.apps~app-discovery-radar/runs": {
      "post": {
        "operationId": "runs-sync-kamnev.apps-app-discovery-radar",
        "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/kamnev.apps~app-discovery-radar/run-sync": {
      "post": {
        "operationId": "run-sync-kamnev.apps-app-discovery-radar",
        "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": {
          "queries": {
            "title": "Search queries",
            "maxItems": 5,
            "type": "array",
            "description": "Enter up to 5 phrases (120 characters each), or leave empty when tracking known app IDs. Keywords find candidates; your filters are checked after lookup.",
            "items": {
              "type": "string",
              "minLength": 1,
              "maxLength": 120
            }
          },
          "appIds": {
            "title": "App IDs or App Store links",
            "maxItems": 100,
            "type": "array",
            "description": "Optional watchlist of up to 100 positive Apple app IDs (up to 15 digits) or HTTPS apps.apple.com app links, such as https://apps.apple.com/us/app/id572688855. Links are converted to IDs without opening them; query strings and fragments are ignored. Selected App Store countries apply regardless of the country in a link. For watchlist-only research, leave Search queries empty. Unique app IDs multiplied by countries must fit the check limit.",
            "items": {
              "type": "string",
              "pattern": "^(?:[1-9]\\d{0,14}|[Hh][Tt][Tt][Pp][Ss]://.+)$"
            }
          },
          "countries": {
            "title": "App Store countries",
            "minItems": 1,
            "maxItems": 3,
            "type": "array",
            "description": "Choose 1–3 storefronts. These selections apply even when an app link contains a different country. Country describes storefront availability and rating/price observations, not app language.",
            "items": {
              "type": "string",
              "enum": [
                "US",
                "GB",
                "ES",
                "DE",
                "FR",
                "CA",
                "AU",
                "IT",
                "NL",
                "JP"
              ],
              "enumTitles": [
                "United States",
                "United Kingdom",
                "Spain",
                "Germany",
                "France",
                "Canada",
                "Australia",
                "Italy",
                "Netherlands",
                "Japan"
              ]
            },
            "default": [
              "US"
            ]
          },
          "maxApps": {
            "title": "Maximum app-country checks",
            "minimum": 1,
            "maximum": 500,
            "type": "integer",
            "description": "Total app-country budget, not unique app count: 120 checks across 3 countries permits at most 40 candidate apps. Must be at least country count; maximum 500. Seed apps consume this budget first.",
            "default": 500
          },
          "resultsPerQuery": {
            "title": "Results per query and country",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "Request 1–200 ranked results from each keyword/storefront search. This is a source limit, not a completeness guarantee or a pagination size. The combined candidate list is capped by maxApps.",
            "default": 50
          },
          "categoryIds": {
            "title": "Apple category IDs",
            "maxItems": 20,
            "type": "array",
            "description": "Optional OR filter across up to 20 Apple genre IDs, for example 6003 for Travel. Matches any app genre ID, not just its primary category. Missing category data fails this filter.",
            "items": {
              "type": "string",
              "pattern": "^\\d{4,5}$"
            }
          },
          "languages": {
            "title": "Supported app languages",
            "maxItems": 10,
            "type": "array",
            "description": "Optional AND filter for up to 10 two- or three-letter supported app language codes reported by Apple in languageCodesISO2A, such as EN or ES. These are not App Store listing localizations or the language of a listing title. Missing data does not pass this filter.",
            "items": {
              "type": "string",
              "pattern": "^[A-Za-z]{2,3}$"
            }
          },
          "releaseDateFrom": {
            "title": "Release date from",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Inclusive YYYY-MM-DD lower bound on the source-reported app release date. This is distinct from first discovery and current-version release. Missing data fails this filter."
          },
          "releaseDateTo": {
            "title": "Release date through",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Inclusive YYYY-MM-DD upper bound on source-reported app release date. Must be on or after releaseDateFrom."
          },
          "updatedDateFrom": {
            "title": "Version update date from",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Inclusive YYYY-MM-DD lower bound on currentVersionReleaseDate. Distinct from the initial app release date. Missing data fails this filter."
          },
          "updatedDateTo": {
            "title": "Version update date through",
            "pattern": "^\\d{4}-\\d{2}-\\d{2}$",
            "type": "string",
            "description": "Inclusive YYYY-MM-DD upper bound on current-version release date. Must be on or after updatedDateFrom."
          },
          "minRatingCount": {
            "title": "Minimum rating count",
            "minimum": 0,
            "maximum": 9007199254740991,
            "type": "integer",
            "description": "Inclusive storefront userRatingCount lower bound, a count of ratings rather than text reviews. Missing data fails this filter."
          },
          "maxRatingCount": {
            "title": "Maximum rating count",
            "minimum": 0,
            "maximum": 9007199254740991,
            "type": "integer",
            "description": "Inclusive storefront rating-count upper bound. Must be at least minRatingCount."
          },
          "minRating": {
            "title": "Minimum average rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Inclusive averageUserRating lower bound from 0 to 5. Missing data fails this filter."
          },
          "maxRating": {
            "title": "Maximum average rating",
            "minimum": 0,
            "maximum": 5,
            "type": "number",
            "description": "Inclusive averageUserRating upper bound from 0 to 5. Must be at least minRating."
          },
          "minPrice": {
            "title": "Minimum storefront price",
            "minimum": 0,
            "maximum": 10000,
            "type": "number",
            "description": "Inclusive price lower bound in each storefront's returned currency. No currency conversion; use a single country when comparing monetary amounts. Missing data fails this filter."
          },
          "maxPrice": {
            "title": "Maximum storefront price",
            "minimum": 0,
            "maximum": 10000,
            "type": "number",
            "description": "Inclusive price upper bound in each storefront's returned currency. Must be at least minPrice. In-app purchase and subscription prices are not provided."
          },
          "requireAllCountries": {
            "title": "Require lookup availability in every selected country",
            "type": "boolean",
            "description": "Only match apps returned by successful lookup in every requested storefront. A missing lookup result does not establish permanent delisting. Technical lookup failures fail the report.",
            "default": false
          },
          "savedSearchId": {
            "title": "Saved search ID",
            "pattern": "^[a-zA-Z0-9_-]+$",
            "maxLength": 64,
            "type": "string",
            "description": "Reuse to preserve first-seen history and compare successful runs. Changing criteria starts a comparison baseline; first-seen history remains. Use a new ID for an independent search. History is isolated by trusted platform user/Actor identity.",
            "default": "default"
          },
          "requestId": {
            "title": "Logical operation ID (optional)",
            "pattern": "^[a-zA-Z0-9_-]+$",
            "maxLength": 100,
            "type": "string",
            "description": "Use the same ID only when retrying the same logical report. Replays return the saved report without a new source check or charge attempt. Omit for recurring tasks/schedules so each run observes fresh data. Reuse with different criteria is rejected."
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}