{
  "openapi": "3.0.1",
  "info": {
    "title": "App Store Scraper: Developer Links & EU Availability",
    "description": "Audits App Store listings for what the store never rechecks. Finds developer links that lead nowhere, domains behind them that lapsed or changed hands since the app was last updated, apps absent from every EU storefront while still selling elsewhere, and listings untouched for years.",
    "version": "0.1",
    "x-build-id": "Rfwl8fJKfPCv0QhF6"
  },
  "servers": [
    {
      "url": "https://api.apify.com/v2"
    }
  ],
  "paths": {
    "/acts/aiqlabs~app-store-audit/run-sync-get-dataset-items": {
      "post": {
        "operationId": "run-sync-get-dataset-items-aiqlabs-app-store-audit",
        "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/aiqlabs~app-store-audit/runs": {
      "post": {
        "operationId": "runs-sync-aiqlabs-app-store-audit",
        "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/aiqlabs~app-store-audit/run-sync": {
      "post": {
        "operationId": "run-sync-aiqlabs-app-store-audit",
        "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": {
          "apps": {
            "title": "Apps",
            "type": "array",
            "description": "Apps to audit. Any of these work: a numeric App Store id (310633997), a store URL (https://apps.apple.com/us/app/whatsapp-messenger/id310633997), or a bundle id (net.whatsapp.WhatsApp).",
            "items": {
              "type": "string"
            }
          },
          "developers": {
            "title": "Developer ids",
            "type": "array",
            "description": "Audit every app published by these developers. Use the numeric id from a developer page URL, for example 310634000 from https://apps.apple.com/us/developer/whatsapp-inc/id310634000.",
            "items": {
              "type": "string"
            }
          },
          "charts": {
            "title": "App Store charts",
            "type": "array",
            "description": "Audit the apps currently on these public App Store charts, for surveying rather than auditing a known list. Names come from Apple's chart feeds: top-free, top-paid, top-grossing. Keyword search is deliberately not offered here because itunes.apple.com/robots.txt disallows the search endpoint.",
            "items": {
              "type": "string"
            }
          },
          "country": {
            "title": "Main storefront",
            "type": "string",
            "description": "Two-letter country code for the storefront the app details are read from. Prices, ratings and availability all differ by storefront.",
            "default": "us"
          },
          "checkAvailabilityIn": {
            "title": "Also check availability in",
            "type": "array",
            "description": "Storefronts to test each app against. An app on sale outside the EU but absent from every EU storefront checked is reported separately, so include at least two EU countries for that check to mean anything. Leave empty to skip availability entirely.",
            "default": [
              "us",
              "gb",
              "de",
              "fr",
              "es",
              "it",
              "jp"
            ],
            "items": {
              "type": "string"
            }
          },
          "checkDeveloperLinks": {
            "title": "Check developer links",
            "type": "boolean",
            "description": "Follow the developer URL shown on each listing and report where it ends up. One request per distinct URL, not per app.",
            "default": true
          },
          "checkDomainRegistration": {
            "title": "Check domain registration",
            "type": "boolean",
            "description": "Read the registry record (RDAP) for domains behind links that failed, and for apps past the staleness threshold. This is what distinguishes a broken page from an address anyone can now register.",
            "default": true
          },
          "staleAfterDays": {
            "title": "Call an app stale after (days)",
            "minimum": 30,
            "maximum": 7300,
            "type": "integer",
            "description": "How long without an update before it is worth reporting. Default is 1095 days (three years). For context, 18.4% of a 1,312-app sample measured in July 2026 were past that and still on sale, so this is a medium-severity note rather than an alarm.",
            "default": 1095
          },
          "chartLimit": {
            "title": "Apps per chart",
            "minimum": 1,
            "maximum": 200,
            "type": "integer",
            "description": "How many apps to take from each chart.",
            "default": 25
          },
          "onlyIssues": {
            "title": "Only output apps with findings",
            "type": "boolean",
            "description": "Drop the rows where nothing was found. The counts in SUMMARY still cover every app checked.",
            "default": false
          },
          "maxApps": {
            "title": "Maximum apps",
            "minimum": 1,
            "maximum": 2000,
            "type": "integer",
            "description": "Upper bound on how many apps are audited in one run, after developer ids and search terms are expanded.",
            "default": 200
          },
          "maxConcurrency": {
            "title": "Concurrency",
            "minimum": 1,
            "maximum": 10,
            "type": "integer",
            "description": "How many developer links to check at once. RDAP lookups are deliberately capped lower than this because registries run those servers as a public service.",
            "default": 5
          },
          "requestTimeoutSecs": {
            "title": "Request timeout (seconds)",
            "minimum": 5,
            "maximum": 180,
            "type": "integer",
            "description": "Per-request timeout for the App Store API, developer links and RDAP.",
            "default": 30
          }
        }
      },
      "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
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}