# Apple App Store API

> Apple App Store returns app listings, reviews, chart rankings, and search results as a workflow and API.

Apple App Store returns public app details, ratings, and purchases; Get app needs an app name or listing link. Get app reviews returns customer feedback for an app name or link, with reviews from the selected country. List top charts returns ranked apps by chart, device, category, and country; Search apps finds keyword matches by country.

- Page: https://fous.com/workflows/apple-app-store
- Handle: `@apple-app-store`
- Category: [Marketing](https://fous.com/workflows/category/marketing)
- Source website: https://apps.apple.com
- Last verified: Sep 28, 2026
- Fous is not affiliated with Apple App Store.

## Methods

### Get app

Operation `get_app`, version 1. 1 credit per call.

Get an iPhone or iPad app’s public App Store listing by name or link, optionally narrowed by developer and country. In-app purchases are included when listed on its page.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `app` | string | yes | `"https://apps.apple.com/gb/app/duolingo-language-chess/id570060128"` | App name or App Store app link, for example Duolingo or https://apps.apple.com/us/app/id570060128. |
| `country` | string | no | `"France"` | Country name or two-letter code, for example United States or GB. Defaults to United States; links use their storefront when none is given. |
| `developer` | string | no | `"Duolingo"` | Developer name to identify the right app, for example Duolingo. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "app"
  ],
  "properties": {
    "app": {
      "type": "string",
      "description": "App name or App Store app link, for example Duolingo or https://apps.apple.com/us/app/id570060128.",
      "examples": [
        "https://apps.apple.com/gb/app/duolingo-language-chess/id570060128",
        "Duolingo"
      ]
    },
    "country": {
      "type": "string",
      "default": "United States",
      "description": "Country name or two-letter code, for example United States or GB. Defaults to United States; links use their storefront when none is given.",
      "examples": [
        "France"
      ]
    },
    "developer": {
      "type": "string",
      "default": "",
      "description": "Developer name to identify the right app, for example Duolingo.",
      "examples": [
        "Duolingo"
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "app": "https://apps.apple.com/gb/app/duolingo-language-chess/id570060128",
      "developer": "Duolingo"
    },
    {
      "app": "Duolingo"
    },
    {
      "app": "Duolingo",
      "country": "France",
      "developer": "Duolingo"
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `name` | string or null | `"Duolingo: Language & Chess"` | App name. |
| `price` | number or null | `0` | App price, or 0 if free. |
| `size_mb` | number or null | `515.19` | Download size in decimal megabytes. |
| `category` | string or null | `"Education"` | Main app category. |
| `currency` | string or null | `"GBP"` | ISO currency code for prices. |
| `bundle_id` | string or null | `"com.duolingo.DuolingoMobile"` | iOS bundle ID. |
| `developer` | string or null | `"Duolingo"` | App developer. |
| `languages` | array |  | Supported language names. |
| `age_rating` | string or null | `"4+"` | App age rating. |
| `description` | string or null |  | App description. |
| `matched_app` | string | `"Duolingo: Language & Chess — Duolingo"` | Name and developer of the matched app. |
| `last_updated` | string or null | `"2026-09-28"` | Last updated date, YYYY-MM-DD. |
| `rating_count` | integer or null | `981876` | Number of user ratings. |
| `release_notes` | string or null | `"Our mascot owl, Duo, is trading in his usual diet of mice for bugs this week. Yup, we’re squashing those pesky bugs to ` | Latest release notes. |
| `app_store_link` | string | `"https://apps.apple.com/gb/app/duolingo-language-chess/id570060128?uo=4"` | App listing link. |
| `average_rating` | number or null | `4.69632` | Average user rating out of 5. |
| `current_version` | string or null | `"7.142.0"` | Current version. |
| `app_store_app_id` | string | `"570060128"` | App Store app ID. |
| `in_app_purchases` | array |  | In-app purchase names and prices shown on the listing. |
| `in_app_purchases[].name` | string | `"Super Duolingo"` | In-app purchase name. |
| `in_app_purchases[].price` | number or null | `59.99` | Purchase price. |
| `in_app_purchases[].currency` | string or null | `"GBP"` | ISO currency code. |
| `minimum_ios_version` | string or null | `"17.0"` | Minimum iOS version. |

**Example input**

```json
{
  "app": "https://apps.apple.com/gb/app/duolingo-language-chess/id570060128",
  "developer": "Duolingo"
}
```

**Example output**

```json
{
  "name": "Duolingo: Language & Chess",
  "price": 0,
  "size_mb": 515.19,
  "category": "Education",
  "currency": "GBP",
  "bundle_id": "com.duolingo.DuolingoMobile",
  "developer": "Duolingo",
  "languages": [
    "Arabic",
    "Bengali",
    "Czech"
  ],
  "age_rating": "4+",
  "description": "Learn a new language, chess & more with the world's most downloaded education app! Duolingo is the fun, free app for learning 40+ languages through quick, bite-sized lessons. Practice speaking, readin…",
  "matched_app": "Duolingo: Language & Chess — Duolingo",
  "last_updated": "2026-09-28",
  "rating_count": 981876,
  "release_notes": "Our mascot owl, Duo, is trading in his usual diet of mice for bugs this week. Yup, we’re squashing those pesky bugs to make the experience better for all of you.\n\nFor more Duolingo news, contests and …",
  "app_store_link": "https://apps.apple.com/gb/app/duolingo-language-chess/id570060128?uo=4",
  "average_rating": 4.69632,
  "current_version": "7.142.0",
  "app_store_app_id": "570060128",
  "in_app_purchases": [
    {
      "name": "Super Duolingo",
      "price": 59.99,
      "currency": "GBP"
    },
    {
      "name": "Super Duolingo",
      "price": 8.99,
      "currency": "GBP"
    },
    {
      "name": "Super Duolingo",
      "price": 86.99,
      "currency": "GBP"
    }
  ],
  "minimum_ios_version": "17.0"
}
```

### Get app reviews

Operation `get_app_reviews`, version 1. 1 credit per call.

Get customer reviews for an iPhone or iPad app by name or App Store link, with ratings, text, version, and developer replies when visible. Reviews come from the selected country; replies may not appear in the public feed.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `app` | string | yes | `"Uber"` | App name or App Store link, for example Uber. |
| `sort` | string | no | `"most_helpful"` | Review order, for example most_recent. |
| `country` | string | no | `"United Kingdom"` | Country name or two-letter code, for example United States or GB. |
| `max_results` | integer | no | `55` | Maximum number of reviews, for example 50. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "app"
  ],
  "properties": {
    "app": {
      "type": "string",
      "minLength": 1,
      "description": "App name or App Store link, for example Uber.",
      "examples": [
        "Uber",
        "https://apps.apple.com/us/app/uber-rides-eats-hotels/id368677368"
      ]
    },
    "sort": {
      "enum": [
        "most_recent",
        "most_helpful"
      ],
      "type": "string",
      "default": "most_recent",
      "description": "Review order, for example most_recent.",
      "examples": [
        "most_helpful"
      ]
    },
    "country": {
      "type": "string",
      "default": "United States",
      "description": "Country name or two-letter code, for example United States or GB.",
      "examples": [
        "United Kingdom"
      ]
    },
    "max_results": {
      "type": "integer",
      "default": 50,
      "maximum": 500,
      "minimum": 1,
      "description": "Maximum number of reviews, for example 50.",
      "x-fous-developer": true,
      "examples": [
        55
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "app": "Uber"
    },
    {
      "app": "https://apps.apple.com/us/app/uber-rides-eats-hotels/id368677368",
      "sort": "most_helpful",
      "country": "United Kingdom",
      "max_results": 55
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `reviews` | array |  |  |
| `reviews[].date` | string or null |  |  |
| `reviews[].stars` | integer |  |  |
| `reviews[].title` | string or null |  |  |
| `reviews[].page_link` | string |  |  |
| `reviews[].review_id` | string |  |  |
| `reviews[].review_text` | string or null |  |  |
| `reviews[].reviewer_name` | string or null |  |  |
| `reviews[].developer_response` | string or null |  |  |
| `reviews[].app_version_reviewed` | string or null |  |  |
| `app_link` | string |  | App Store page for the matching app. |
| `app_name` | string |  | Name of the matching app. |

### List top charts

Operation `list_top_charts`, version 1. 1 credit per call.

List ranked iPhone or iPad apps from the public App Store charts for a chart, category, and country. Up to 200 ranked positions are available; unavailable app listings and app bundles are omitted.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `chart` | string | no | `"top_paid"` | Chart to list, for example top_free. |
| `device` | string | no | `"ipad"` | Device chart, for example iphone. |
| `country` | string | no | `"United Kingdom"` | Country name or two-letter country code, for example United States or gb. |
| `category` | string | no | `"business"` | Chart category in words, for example games, business, or health and fitness. Defaults to all apps. |
| `max_results` | integer | no | `30` | Maximum number of ranked positions to read, for example 50 (up to 200). |

**Input schema**

```json
{
  "type": "object",
  "properties": {
    "chart": {
      "enum": [
        "top_free",
        "top_paid"
      ],
      "type": "string",
      "default": "top_free",
      "description": "Chart to list, for example top_free.",
      "examples": [
        "top_paid",
        "top_free"
      ]
    },
    "device": {
      "enum": [
        "iphone",
        "ipad"
      ],
      "type": "string",
      "default": "iphone",
      "description": "Device chart, for example iphone.",
      "examples": [
        "ipad",
        "iphone"
      ]
    },
    "country": {
      "type": "string",
      "default": "United States",
      "description": "Country name or two-letter country code, for example United States or gb.",
      "examples": [
        "United Kingdom",
        "United States",
        "us"
      ]
    },
    "category": {
      "type": "string",
      "default": "all apps",
      "description": "Chart category in words, for example games, business, or health and fitness. Defaults to all apps.",
      "examples": [
        "business",
        "all apps",
        "games"
      ]
    },
    "max_results": {
      "type": "integer",
      "default": 50,
      "maximum": 200,
      "minimum": 1,
      "description": "Maximum number of ranked positions to read, for example 50 (up to 200).",
      "x-fous-developer": true,
      "examples": [
        30,
        50,
        75
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "chart": "top_paid",
      "device": "ipad",
      "country": "United Kingdom",
      "category": "business",
      "max_results": 30
    },
    {
      "chart": "top_free",
      "device": "iphone",
      "country": "United States",
      "category": "all apps",
      "max_results": 50
    },
    {
      "chart": "top_free",
      "device": "iphone",
      "country": "us",
      "category": "games",
      "max_results": 75
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `apps` | array |  |  |
| `apps[].rank` | integer | `1` |  |
| `apps[].price` | number or null | `14.99` |  |
| `apps[].app_id` | string | `"364876095"` |  |
| `apps[].app_name` | string | `"Jump Desktop (RDP, VNC, Fluid)"` |  |
| `apps[].category` | string or null | `"Business"` |  |
| `apps[].currency` | string or null | `"GBP"` |  |
| `apps[].developer` | string or null | `"Phase Five Systems"` |  |
| `apps[].app_store_link` | string | `"https://apps.apple.com/gb/app/jump-desktop-rdp-vnc-fluid/id364876095"` |  |
| `chart` | string | `"top_paid"` |  |
| `country` | string | `"United Kingdom"` |  |
| `category` | string | `"business"` |  |

**Example input**

```json
{
  "chart": "top_paid",
  "device": "ipad",
  "country": "United Kingdom",
  "category": "business",
  "max_results": 30
}
```

**Example output**

```json
{
  "apps": [
    {
      "rank": 1,
      "price": 14.99,
      "app_id": "364876095",
      "app_name": "Jump Desktop (RDP, VNC, Fluid)",
      "category": "Business",
      "currency": "GBP",
      "developer": "Phase Five Systems",
      "app_store_link": "https://apps.apple.com/gb/app/jump-desktop-rdp-vnc-fluid/id364876095"
    },
    {
      "rank": 2,
      "price": 0.99,
      "app_id": "338550388",
      "app_name": "Audio Memos",
      "category": "Business",
      "currency": "GBP",
      "developer": "Imesart S.a.r.l.",
      "app_store_link": "https://apps.apple.com/gb/app/audio-memos/id338550388"
    },
    {
      "rank": 3,
      "price": 24.99,
      "app_id": "441743366",
      "app_name": "SalesPresenter",
      "category": "Business",
      "currency": "GBP",
      "developer": "Blue Alligator Company Limited",
      "app_store_link": "https://apps.apple.com/gb/app/salespresenter/id441743366"
    }
  ],
  "chart": "top_paid",
  "country": "United Kingdom",
  "category": "business"
}
```

### Search apps

Operation `search_apps`, version 1. 1 credit per call.

Find iPhone and iPad apps by keywords in a chosen country, with ratings, prices, categories, and App Store links. Results reflect the selected country’s public listings.

**Input**

| Field | Type | Required | Example | Description |
|---|---|---|---|---|
| `query` | string | yes | `"weather"` | Keywords to search for, such as budget tracker. |
| `country` | string | no | `"United Kingdom"` | Country name or two-letter country code, such as United States or GB. |
| `max_results` | integer | no | `5` | Maximum number of apps to return, such as 20. |

**Input schema**

```json
{
  "type": "object",
  "required": [
    "query"
  ],
  "properties": {
    "query": {
      "type": "string",
      "minLength": 1,
      "description": "Keywords to search for, such as budget tracker.",
      "examples": [
        "weather",
        "budget tracker",
        "nonexistentlkmwccfhprtzjz"
      ]
    },
    "country": {
      "type": "string",
      "default": "United States",
      "description": "Country name or two-letter country code, such as United States or GB.",
      "examples": [
        "United Kingdom",
        "US"
      ]
    },
    "max_results": {
      "type": "integer",
      "default": 20,
      "maximum": 200,
      "minimum": 1,
      "description": "Maximum number of apps to return, such as 20.",
      "x-fous-developer": true,
      "examples": [
        5
      ]
    }
  },
  "additionalProperties": false,
  "examples": [
    {
      "query": "weather",
      "country": "United Kingdom",
      "max_results": 5
    },
    {
      "query": "budget tracker"
    },
    {
      "query": "nonexistentlkmwccfhprtzjz",
      "country": "US",
      "max_results": 5
    }
  ]
}
```

**Output**

| Field | Type | Example | Description |
|---|---|---|---|
| `apps` | array |  | Apps in App Store search order. |
| `apps[].price` | number or null | `0` | App price, 0 when free. |
| `apps[].app_id` | integer or null | `1069513131` | Apple App Store ID. |
| `apps[].app_name` | string or null | `"Weather"` | App name. |
| `apps[].category` | string or null | `"Weather"` | App category. |
| `apps[].currency` | string or null | `"GBP"` | Currency code for the price. |
| `apps[].developer` | string or null | `"Apple"` | Developer name. |
| `apps[].rating_count` | integer or null | `210641` | Number of user ratings. |
| `apps[].app_store_link` | string or null | `"https://apps.apple.com/gb/app/weather/id1069513131?uo=4"` | Link to the app’s App Store page. |
| `apps[].average_rating` | number or null | `4.78167` | Average user rating out of 5. |

**Example input**

```json
{
  "query": "weather",
  "country": "United Kingdom",
  "max_results": 5
}
```

**Example output**

```json
{
  "apps": [
    {
      "price": 0,
      "app_id": 1069513131,
      "app_name": "Weather",
      "category": "Weather",
      "currency": "GBP",
      "developer": "Apple",
      "rating_count": 210641,
      "app_store_link": "https://apps.apple.com/gb/app/weather/id1069513131?uo=4",
      "average_rating": 4.78167
    },
    {
      "price": 0,
      "app_id": 1068146838,
      "app_name": "Met Office Weather Forecast",
      "category": "Weather",
      "currency": "GBP",
      "developer": "Met Office",
      "rating_count": 637225,
      "app_store_link": "https://apps.apple.com/gb/app/met-office-weather-forecast/id1068146838?uo=4",
      "average_rating": 4.64616
    },
    {
      "price": 0,
      "app_id": 649420946,
      "app_name": "BBC Weather",
      "category": "Weather",
      "currency": "GBP",
      "developer": "BBC Media Applications Technologies Limited",
      "rating_count": 1243841,
      "app_store_link": "https://apps.apple.com/gb/app/bbc-weather/id649420946?uo=4",
      "average_rating": 4.62746
    }
  ]
}
```

## Quick start

Call the API with a Fous API key (`FOUS_API_KEY`). To create one, turn on Developer mode in Fous Studio, then open Keys & connections → API keys (https://app.fous.com/keys).

```bash
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
: "${FOUS_API_KEY:?Set FOUS_API_KEY before running this example}"

curl 'https://api.fous.com/v1/query' \
  --fail-with-body --silent --show-error --max-time 120 \
  -H "Authorization: Bearer $FOUS_API_KEY" \
  -H 'Content-Type: application/json' \
  --data-raw '{
  "api": "@apple-app-store",
  "visibility": "public",
  "operation": "get_app",
  "version": 1,
  "input": {
    "app": "https://apps.apple.com/gb/app/duolingo-language-chess/id570060128",
    "developer": "Duolingo"
  },
  "response": {
    "format": "json"
  }
}'
```

```python
# Save as fous.py and run with python3 fous.py. No packages needed.
# First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
import json
import os
import urllib.error
import urllib.request

api_key = os.environ.get("FOUS_API_KEY")
if not api_key:
    raise RuntimeError("Set FOUS_API_KEY before running this example")

body = json.loads("{\n  \"api\": \"@apple-app-store\",\n  \"visibility\": \"public\",\n  \"operation\": \"get_app\",\n  \"version\": 1,\n  \"input\": {\n    \"app\": \"https://apps.apple.com/gb/app/duolingo-language-chess/id570060128\",\n    \"developer\": \"Duolingo\"\n  },\n  \"response\": {\n    \"format\": \"json\"\n  }\n}")
request = urllib.request.Request(
    "https://api.fous.com/v1/query",
    data=json.dumps(body).encode("utf-8"),
    headers={
        "Authorization": f"Bearer {api_key}",
        "Content-Type": "application/json",
    },
    method="POST",
)
try:
    with urllib.request.urlopen(request, timeout=120) as response:
        result = json.load(response)
except urllib.error.HTTPError as error:
    raise RuntimeError(f"HTTP {error.code}: {error.read().decode('utf-8', errors='replace')}") from error
if result.get("success") is False:
    raise RuntimeError(result.get("error", {}).get("message", "Request failed"))
print(json.dumps(result["data"]["output"], indent=2))
```

```typescript
// Save as fous.mts and run with npx tsx fous.mts.
// First set your key: export FOUS_API_KEY='YOUR_FOUS_API_KEY'
const apiKey = process.env.FOUS_API_KEY;
if (!apiKey) throw new Error("Set FOUS_API_KEY before running this example");

const response = await fetch("https://api.fous.com/v1/query", {
  method: "POST",
  headers: {
    "Authorization": `Bearer ${apiKey}`,
    "Content-Type": "application/json",
  },
  signal: AbortSignal.timeout(120_000),
  body: JSON.stringify({
  "api": "@apple-app-store",
  "visibility": "public",
  "operation": "get_app",
  "version": 1,
  "input": {
    "app": "https://apps.apple.com/gb/app/duolingo-language-chess/id570060128",
    "developer": "Duolingo"
  },
  "response": {
    "format": "json"
  }
}),
});
type ApiResult = { success: boolean; data?: { output: unknown }; error?: { message: string } };
const result: ApiResult = await response.json();
if (!response.ok || result.success === false) {
  throw new Error(result.error?.message ?? `HTTP ${response.status}`);
}
if (!result.data) throw new Error("Missing API response data");
console.log(result.data.output);
```

Or describe the data in plain language: send `{"api":"@apple-app-store","prompt":"Describe the data you need, with every detail"}` to the same URL. Fous fills in the input, runs the method that fits and returns only the fields you asked for; `data.route.calls[].request` is the exact call it made. Routing is free; the run costs the same.

## Use cases

- Compare app prices, ratings, and categories in search results
- Track ranked apps across chart categories and countries
- Review customer feedback and visible developer replies
- Check app descriptions, versions, and supported languages
- Compare listed in-app purchases and prices

## FAQ

### Is Fous affiliated with Apple App Store?

No. Fous is not affiliated with Apple App Store. This workflow reads the public apps.apple.com website and returns its data.

### How much does it cost?

Each run costs 1 credit. With pay-as-you-go, a credit costs 1¢; monthly plans cost less per credit.

### Do I need a Apple App Store account?

No. You only need a Fous account.

### How current is the data?

Fous gets the data from apps.apple.com when you run it; repeating the same request within a day may return the saved result. Fous checks this workflow automatically; it last passed a check on Sep 28, 2026.

### What does an app cost?

Get app returns the listed price and currency for an app name or listing link.

### What are customers saying about an app?

Get app reviews returns customer ratings and review text, plus developer replies when visible.

### Which apps rank highest in a chart?

List top charts returns ranked apps for a selected chart, device, category, and country.

## Related

- [Google Play API](https://fous.com/workflows/google-play.md): Google Play helps people discover Android apps and games, view public listings and search results, read reviews when available by app and region, and see country-specific top charts.
- [Microsoft Store API](https://fous.com/workflows/microsoft-store.md): Microsoft Store returns app and game listings, country-specific searches, and ranked charts; update notes, purchase prices, and exact rating counts may be unavailable.
- [Apple Podcasts API](https://fous.com/workflows/apple-podcasts.md): Apple Podcasts returns chart listings, relevant show search results, show details with newest available episodes, and country-specific ratings and reviews; results are capped, and older or subscription episodes may be unavailable.
- [Apple Music API](https://fous.com/workflows/apple-music.md): Apple Music returns albums, tracks, artist profiles, latest releases, top music, matching songs, and current charts; prices, previews, and older albums may be unavailable.
- [Apple Store API](https://fous.com/workflows/apple-store.md): Apple Store shows current public-store prices and configurations, compares prices across up to 15 countries at latest ECB rates, checks local pickup without reservations, and lists currently shown refurbished products.
- [Shazam API](https://fous.com/workflows/shazam.md): Shazam helps discover music and explore trending songs, returning current top charts and country-specific lists of up to 10 rapidly rising Discovery songs where available.
- [Amazon API](https://fous.com/workflows/amazon.md): Amazon returns publicly shown product listings, prices, details, ratings, reviews, current best sellers, and Today's Deals; availability and content vary by store, location, and access.
- [Spotify API](https://fous.com/workflows/spotify.md): Spotify returns public artist profiles, album credits and ordered tracks, song details and play counts, up to 500 playlist songs, keyword results, and country-based podcast charts; dates and regional options vary.
- [All Marketing workflows](https://fous.com/workflows/category/marketing)
