Raw schema
{
"type": "object",
"properties": {
"store": {
"anyOf": [
{
"enum": [
"apple",
"google"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Limit results to one store: 'apple' (App Store) or 'google' (Google Play). Omit to search both.",
"title": "Store"
},
"category": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Store category name to filter by, e.g. 'Health & Fitness', 'Productivity', 'Games'. Use 'categories' to include several at once.",
"title": "Category"
},
"categories": {
"anyOf": [
{
"items": {
"type": "string"
},
"maxItems": 20,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Several category names to include, e.g. ['Health & Fitness', 'Lifestyle']. Takes precedence over 'category'.",
"title": "Categories"
},
"search": {
"anyOf": [
{
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Free-text query matched against app title and developer name, e.g. 'calorie tracker'.",
"title": "Search"
},
"search_in": {
"anyOf": [
{
"enum": [
"all",
"title",
"developer"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Which field 'search' matches: 'title', 'developer', or 'all' (default). Use 'developer' to list a publisher's portfolio.",
"title": "Search In"
},
"language": {
"anyOf": [
{
"maxLength": 5,
"minLength": 2,
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Single app-language code the listing supports, e.g. 'en', 'de', 'pt-BR'.",
"title": "Language"
},
"languages": {
"anyOf": [
{
"items": {
"type": "string"
},
"maxItems": 20,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"description": "Several app-language codes to include, e.g. ['en', 'es'].",
"title": "Languages"
},
"price_model": {
"anyOf": [
{
"enum": [
"Free",
"Freemium",
"Paid"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Monetisation model: 'Free', 'Freemium' or 'Paid'. Case-insensitive on input.",
"title": "Price Model"
},
"min_rating": {
"anyOf": [
{
"maximum": 5,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Lowest average star rating to include, 0-5, e.g. 4.",
"title": "Min Rating"
},
"max_rating": {
"anyOf": [
{
"maximum": 5,
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Highest average star rating to include, 0-5; use to find weak incumbents.",
"title": "Max Rating"
},
"min_reviews": {
"anyOf": [
{
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Lowest lifetime review count, e.g. 1000.",
"title": "Min Reviews"
},
"max_reviews": {
"anyOf": [
{
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Highest lifetime review count, e.g. 1000 to exclude entrenched giants.",
"title": "Max Reviews"
},
"min_downloads": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Lowest estimated monthly downloads, e.g. 10000.",
"title": "Min Downloads"
},
"max_downloads": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Highest estimated monthly downloads.",
"title": "Max Downloads"
},
"min_revenue": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Lowest estimated monthly revenue in USD, e.g. 10000 for $10K/month.",
"title": "Min Revenue"
},
"max_revenue": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Highest estimated monthly revenue in USD, e.g. 50000 for $50K/month.",
"title": "Max Revenue"
},
"max_days_since_release": {
"anyOf": [
{
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Only apps first released within this many days, e.g. 90 for fresh launches.",
"title": "Max Days Since Release"
},
"max_days_since_update": {
"anyOf": [
{
"minimum": 0,
"type": "integer"
},
{
"type": "null"
}
],
"default": null,
"description": "Only apps updated within this many days, e.g. 30 for actively maintained apps.",
"title": "Max Days Since Update"
},
"released_after": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Only apps released on or after this date, 'YYYY-MM-DD'.",
"title": "Released After"
},
"released_before": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Only apps released on or before this date, 'YYYY-MM-DD'.",
"title": "Released Before"
},
"updated_after": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Only apps last updated on or after this date, 'YYYY-MM-DD'.",
"title": "Updated After"
},
"updated_before": {
"anyOf": [
{
"format": "date",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Only apps last updated on or before this date, 'YYYY-MM-DD'.",
"title": "Updated Before"
},
"growth_metric": {
"anyOf": [
{
"const": "reviews",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Metric the growth filter measures — currently only 'reviews'.",
"title": "Growth Metric"
},
"growth_period": {
"anyOf": [
{
"enum": [
"7d",
"14d",
"30d",
"60d",
"90d"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Window growth is measured over: '7d', '14d', '30d', '60d' or '90d'. Only '7d' covers Google Play; the longer windows are App Store data, so combining them with store='google' is rejected and leaving the store unset ranks App Store apps only.",
"title": "Growth Period"
},
"growth_direction": {
"anyOf": [
{
"enum": [
"up",
"down"
],
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "Keep only apps growing ('up') or declining ('down') over 'growth_period'.",
"title": "Growth Direction"
},
"min_growth_pct": {
"anyOf": [
{
"minimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Lowest absolute growth percentage over 'growth_period', e.g. 20 for at least ±20%.",
"title": "Min Growth Pct"
},
"sort_by": {
"$ref": "#/$defs/AppSortBy",
"default": "downloads",
"description": "Column to sort by: 'downloads' (default), 'revenue', 'growth', 'reviews', 'rating', 'title', 'released' or 'updated'."
},
"sort_dir": {
"$ref": "#/$defs/SortDirection",
"default": "desc",
"description": "Sort direction: 'desc' (default, highest first) or 'asc'."
},
"limit": {
"default": 10,
"description": "How many apps to return, 1-50 (default 10).",
"maximum": 50,
"minimum": 1,
"title": "Limit",
"type": "integer"
},
"offset": {
"default": 0,
"description": "How many apps to skip before returning results; use for paging.",
"minimum": 0,
"title": "Offset",
"type": "integer"
}
},
"$defs": {
"AppSortBy": {
"enum": [
"downloads",
"revenue",
"growth",
"reviews",
"rating",
"title",
"released",
"updated"
],
"title": "AppSortBy",
"type": "string"
},
"SortDirection": {
"enum": [
"asc",
"desc"
],
"title": "SortDirection",
"type": "string"
}
},
"description": "Explore-grade app search. Every filter is optional; supplied ones combine (AND)."
}