# App Store Price & Rating Monitor (`praise-most-high/app-store-intelligence`) Actor

Apple App Store Monitor that returns price, star rating, rating count and version. Up to 26 typed fields per record. Watch a competitor's price on a schedule. Export to JSON, CSV or Excel, run it on a schedule, or call it from the Apify API.

- **URL**: https://apify.com/praise-most-high/app-store-intelligence.md
- **Developed by:** [angel nguyen](https://apify.com/praise-most-high) (community)
- **Categories:** E-commerce, Automation, Developer tools
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.04 / 1,000 app records

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### What this Actor does

Apple App Store data you can query on a schedule: give this Actor a list of App IDs and get back price, star rating, rating count and version as one typed row per app. It reads Apple's own public iTunes Lookup API directly, so there is no account to create, no API key to hold and no browser to drive.

![Actor icon](https://apify-image-uploads-prod.s3.us-east-1.amazonaws.com/0ezaunoiVKF5LFUup-actor-5iSXzkEqveFgNSr5V-sjdw5ash0U-app-store-intelligence.png)

The point of it is the *diff*. Turn on `changesOnly` and the Actor compares each app against the snapshot it kept from your previous run and emits a row **only** when a field you are watching actually moved — so a daily schedule over fifty competitor apps produces a handful of rows on a normal day and a loud one on the day somebody drops their price to free.

### Key features

- **Three ways in.** Numeric App IDs, reverse-DNS bundle IDs, or a free-text search term. IDs and bundle IDs resolve through Apple's `/lookup` endpoint; search is opt-in and off by default.
- **26 fields per record**, counted from a real run — price and currency, aggregate rating and rating count, version and release notes, developer, category, content rating, size, languages, screenshots, icon and store URL.
- **Change detection built in.** `changesOnly` emits a row only when a watched field differs from the previous run, and attaches `changedFields`, `previous` and `previousSeenAt` so the row explains itself.
- **You choose what counts as a change.** `watchFields` defaults to `price`, `rating` and `version`; any output field is fair game.
- **Any storefront.** `country` takes an ISO-2 code, and prices and availability genuinely differ between Apple's storefronts.
- **Aggregates only, never people.** Apple's published rating and rating count. No individual review text, no user names, no device identifiers.
- **Polite by construction.** The disallowed search path is capped at one request per second regardless of `maxConcurrency`, and the Actor backs off on 403 and 429 rather than retrying hard.

### How it works

1. You supply App IDs, bundle IDs or search terms, plus a storefront.
2. Search terms (if you used any) are resolved to App IDs at no more than one request per second, because `/search*` is disallowed by Apple's robots.txt.
3. Every resolved ID is fetched from `/lookup`, which robots.txt allows, and mapped to a flat typed record.
4. If `changesOnly` is off, every record is pushed to the dataset.
5. If `changesOnly` is on, each record is compared field-by-field against the previous run's snapshot — held in the Actor's own key-value store, keyed by App ID and storefront — and only genuine movements are pushed.
6. The snapshot is rewritten, so the next run diffs against this one.

The first run in `changesOnly` mode has no baseline to compare against, so it emits everything and says so in the log. That is deliberate: a silent empty first run looks identical to a broken one.

### Input

At least one of `appIds`, `bundleIds` or `searchTerms` must be non-empty. If all three are blank the Actor stops with a clear message instead of writing an empty dataset.

#### Input fields

| Field | Type | Default | What it does |
|---|---|---|---|
| `appIds` | array | `["284882215","310633997"]` (prefilled) | Apple numeric track IDs, e.g. 284882215 (Facebook). The fastest and most reliable input — resolved via Apple's /lookup endpoint. |
| `bundleIds` | array | `[]` | Reverse-DNS bundle identifiers, e.g. com.facebook.Facebook. Also resolved via /lookup. |
| `searchTerms` | array | `[]` | Free-text app search. Optional and off by default: itunes.apple.com/robots.txt disallows /search\*, so this actor keeps search opt-in, rate-limits it to 1 request/second, and uses it only to resolve terms to app IDs. Prefer App IDs or Bundle IDs where you can. |
| `country` | string | `"us"` | ISO-2 storefront code. Apple operates 175 storefronts; prices and availability differ between them. |
| `limit` | integer | `20` | Max apps returned per search term. Ignored for App ID / Bundle ID lookups. |
| `includeRatings` | boolean | `true` | Include Apple's published aggregate rating and rating count. These are aggregates only — no individual user reviews are collected. |
| `changesOnly` | boolean | `false` | Compare each app against the previous run's snapshot and emit a row ONLY when a watched field changed. The first run has no baseline, so it emits everything and logs that it did. |
| `watchFields` | array | `["price","rating","version"]` | Fields compared when 'Emit changes only' is on. |
| `maxConcurrency` | integer | `5` | Concurrent requests to Apple. Deliberately conservative. The search path is separately capped at 1 request/second regardless of this value. |

#### Example input

Two real App IDs — 284882215 is Facebook, 310633997 is WhatsApp Messenger — in the US storefront, with ratings on.

```json
{
  "appIds": [
    "284882215",
    "310633997"
  ],
  "country": "us",
  "includeRatings": true
}
```

### Output

One dataset item per app per run. The record below is a real row from a real run of this Actor, copied unedited.

#### Example output

```json
{
  "appId": 284882215,
  "appName": "Facebook",
  "bundleId": "com.facebook.Facebook",
  "developer": "Meta Platforms, Inc.",
  "developerId": 284882218,
  "category": "Social Networking",
  "genres": [
    "Social Networking"
  ],
  "price": 0,
  "currency": "USD",
  "formattedPrice": "Free",
  "version": "575.0.0",
  "releaseDate": "2019-02-05T08:00:00Z",
  "lastUpdated": "2026-08-18T23:16:40Z",
  "releaseNotes": "Our teams have solved many crashes, fixed issues you’ve reported and made the app faster.",
  "description": "Where real people propel your curiosity. Whether you’re thrifting gear, showing reels to that group who gets it, or sharing laughs over fun images reimagined by AI, Facebook helps you make things happen like no other social network.\n\nExplore and expand your interests: \n* Shop Marketplace for hidden gems and take your hobbies to the next level\n* Personalize your Feed to see more of what you like, less of what you don’t\n* Ask Meta AI for information and get answers instantly\n* Drive into reels that reflect the things you're interested in\n* Search Facebook on any topic and get more interactive results\n\nConnect with people and communities:\n* Join groups to learn tips from real people who’ve been there, done that\n* Get inspired by creators, or catch up with Friends\n* Add new Friends to your world, but also decide how closely to keep up with them\n* Privately message relatable posts that only your BFF will get or that reels trend everyone’s talking about\n\nShare your world:\n* Use generative AI to create custom stickers and images to delight friends\n* Customize your profile to choose how you show up and who sees your posts\n* Effortlessly create reels from trending templates, or showcase your creativity with a full suite of editing tools\n* Capture moments on the fly with stories\n\nSome features may not be available in your country or region. \n\nTerms & Policies: https://www.facebook.com/policies_center\nPrivacy Policy: https://www.facebook.com/privacy\n\nLearn how we're working to help keep our communities safe across Meta technologies at the Meta Safety Center: https://about.meta.com/actions/safety",
  "contentRating": "12+",
  "size": 491387904,
  "languages": [
    "AR",
    "HR",
    "CS",
    "DA",
    "NL",
    "EN",
    "FI",
    "FR",
    "DE",
    "EL",
    "HE",
    "HI",
    "HU",
    "ID",
    "IT",
    "JA",
    "KO",
    "MS",
    "NB",
    "PL",
    "PT",
    "RO",
    "RU",
    "ZH",
    "SK",
    "ES",
    "SV",
    "TH",
    "ZH",
    "TR",
    "UK",
    "VI"
  ],
  "screenshots": [
    "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/e2/c0/fa/e2c0faf7-2613-0ead-3c3a-193d992e3930/f254967c-6ef9-4cc6-b4bf-e89cf016337c_1-iOS-5.5-Home.png/392x696bb.png",
    "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/6a/d9/9b/6ad99bf8-e769-1fd2-0ac7-f9f0553978a2/c795c58d-ec37-463c-9ab9-ba0b8bc00ddd_2-iOS-5.5-Reels.png/392x696bb.png",
    "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/f4/96/e9/f496e921-c05e-ade9-ef3c-c37949d0e6aa/0130e841-7bad-4f8c-83c9-61ea0bac7d7b_3-iOS-5.5-Stories.png/392x696bb.png",
    "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/a5/c9/20/a5c9207f-2eb4-ccf1-6573-bda3c3e089cb/9b761f68-4cd1-4c66-b5f2-76de4f58005f_4-iOS-5.5-Groups.png/392x696bb.png",
    "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/e9/40/05/e9400518-1876-dbdd-89aa-a2f88916f117/68c29824-a52c-4766-8aea-0a70c7a2f86f_5-iOS-5.5-Profile.png/392x696bb.png",
    "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/40/b2/5c/40b25ca0-8eee-0e9c-b068-08ec6741908b/28ff37e9-d855-4e6e-a8b4-fb2d585bb9ca_6-iOS-5.5-Marketplace.png/392x696bb.png",
    "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/df/a0/d6/dfa0d6c7-a1a2-873f-953c-4997aab4acbb/691c88f4-f976-46bb-92e1-5f088e8aa47f_7-iOS-5.5-Share.png/392x696bb.png",
    "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/32/50/41/325041cd-f718-ba5b-5c05-3c930a8af80c/d49c0719-9500-4504-8a4c-3124b914bafa_8-iOS-5.5-Search_with_AI.png/392x696bb.png",
    "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource211/v4/02/29/3e/02293e8a-d565-25b2-2405-31389c8a6e6e/ee650e7b-1eaa-4de6-81a2-0b35dac16446_9-iOS-5.5-Write_with_AI.png/392x696bb.png",
    "https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/f6/b2/32/f6b2327b-e56b-7c4c-b41b-2ee19340e8d5/89fe27f2-ff0a-4a61-a502-73c2bd05da89_10-iOS-5.5-Notifications.png/392x696bb.png"
  ],
  "icon": "https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/c4/f1/cb/c4f1cb18-b290-388f-2a08-dc590d5fd457/Icon-Production-0-0-1x_U007epad-0-1-0-sRGB-85-220.png/512x512bb.jpg",
  "storeUrl": "https://apps.apple.com/us/app/facebook/id284882215?uo=4",
  "country": "us",
  "scrapedAt": "2026-08-22T07:33:37.025Z",
  "rating": 4.52508,
  "ratingsCount": 27932348,
  "currentVersionRating": 4.52508
}
```

#### Output fields

Every field below is taken from that same real record. Values are truncated for width, never invented.

| Field | Type | Value from a real run |
|---|---|---|
| `appId` | number | `284882215` |
| `appName` | string | `Facebook` |
| `bundleId` | string | `com.facebook.Facebook` |
| `developer` | string | `Meta Platforms, Inc.` |
| `developerId` | number | `284882218` |
| `category` | string | `Social Networking` |
| `genres` | array | `["Social Networking"]` |
| `price` | number | `0` |
| `currency` | string | `USD` |
| `formattedPrice` | string | `Free` |
| `version` | string | `575.0.0` |
| `releaseDate` | string | `2019-02-05T08:00:00Z` |
| `lastUpdated` | string | `2026-08-18T23:16:40Z` |
| `releaseNotes` | string | `Our teams have solved many crashes, fixed issues you’ve reporte…` |
| `description` | string | `Where real people propel your curiosity. Whether you’re thrifti…` |
| `contentRating` | string | `12+` |
| `size` | number | `491387904` |
| `languages` | array | `["AR","HR","CS","DA","NL","EN","FI","FR","DE","EL","HE","HI","H…` |
| `screenshots` | array | `["https://is1-ssl.mzstatic.com/image/thumb/PurpleSource221/v4/e%E2%80%A6%60%20||%20%60icon%60%20|%20string%20|%20%60https://is1-ssl.mzstatic.com/image/thumb/Purple211/v4/c4/f1/cb/%E2%80%A6%60%20||%20%60storeUrl%60%20|%20string%20|%20%60https://apps.apple.com/us/app/facebook/id284882215?uo=4`%20||%20`country`%20|%20string%20|%20`us`%20||%20`scrapedAt`%20|%20string%20|%20`2026-08-22T07:33:37.025Z`%20||%20`rating`%20|%20number%20|%20`4.52508`%20||%20`ratingsCount`%20|%20number%20|%20`27932348`%20||%20`currentVersionRating`%20|%20number%20|%20`4.52508`%20|When%20`changesOnly`%20is%20on,%20three%20more%20fields%20ride%20along%20on%20every%20emitted%20row:%20`changedFields`%20(the%20names%20that%20moved),%20`previous`%20(their%20prior%20values)%20and%20`previousSeenAt`%20(when%20that%20baseline%20was%20taken).###%20PricingPay-per-event.%20You%20are%20charged%20for%20what%20a%20run%20delivers,%20not%20for%20how%20long%20it%20takes,%20and%20platform%20compute%20is%20not%20billed%20on%20top.|%20Event%20|%20Price%20|%20Charged%20when%20||---|---|---||%20App%20record%20|%20$0.0011%20|%20One%20typed%20App%20Store%20record%20-%20price,%20rating,%20version,%20developer,%2030%20fields%20-%20resolved%20live%20from%20Apple.%20||%20Actor%20start%20|%20$0.00001%20|%20Starting%20a%20run%20is%20charged%20at%20the%20platform%20minimum%20of%20$0.00001%20-%20effectively%20free.%20You%20pay%20for%20what%20the%20run%20actually%20delivers.%20||%20Change%20detected%20|%20$0.004%20|%20Fires%20in%20changesOnly%20mode%20when%20a%20watched%20field%20on%20an%20app%20you%20monitor%20actually%20moved.%20You%20pay%20for%20the%20signal,%20not%20the%20polling.%20|####%20What%20a%20run%20actually%20costsWorked%20from%20the%20prices%20in%20the%20table%20above:-%20**50%20apps,%20once%20a%20day,%20full%20snapshot.**%2050%20records%20x%20$0.0011%20=%20**$0.055%20per%20run**,%20about%20**$1.65%20a%20month**%20on%20a%20daily%20schedule.-%20**50%20apps,%20once%20a%20day,%20%60changesOnly%60.**%20You%20still%20pay%20per%20record%20delivered,%20and%20on%20a%20quiet%20day%20almost%20nothing%20is%20delivered.%20A%20day%20on%20which%20three%20apps%20move%20costs%203%20x%20$0.0011%20in%20records%20plus%203%20x%20$0.004%20for%20the%20change%20events%20=%20**$0.0153**.-%20**A%20single%20lookup.**%20One%20app,%20one%20run:%20$0.00001%20to%20start%20plus%20$0.0011%20for%20the%20record%20=%20**$0.00111**.The%20Actor-start%20charge%20is%20the%20platform%20minimum%20of%20$0.00001%20%E2%80%94%20a%20run%20that%20resolves%20nothing%20costs%20a%20hundredth%20of%20a%20cent.###%20FAQ**Do%20I%20need%20an%20Apple%20developer%20account%20or%20an%20API%20key?**No.%20The%20Actor%20calls%20Apple's public iTunes Lookup and Search endpoints over plain HTTPS. There is no account, no key, no session cookie and no CAPTCHA in the path.

**Does it read user reviews?**

No. It returns Apple's published aggregate `rating` and `ratingsCount`, and the aggregate for the current version. Individual review text and reviewer identities are never collected.

**Why is search off by default?**

`itunes.apple.com/robots.txt` allows `/lookup?id=` and disallows `/search*`. So search is opt-in, capped at one request per second regardless of `maxConcurrency`, and used only to turn a term into App IDs — the record itself still comes from `/lookup`.

**How do I get alerts instead of a table?**

Turn on `changesOnly`, schedule the Actor, and attach a webhook or a Slack/Zapier/Make integration to the run. On a normal day the dataset is empty and nothing fires; on the day a price moves you get the row.

**What happens on the very first `changesOnly` run?**

It emits every app, because there is no previous snapshot to diff against, and it logs that this is why. From the second run on it emits only movements.

**Can I watch a non-US storefront?**

Yes — set `country` to any ISO-2 storefront code. Price, currency and availability genuinely differ between storefronts, so a competitor can be free in one and paid in another.

**Is this affiliated with Apple?**

No. See "Legal and responsible use" below.

### Limits and error handling

- `limit` caps results per search term at 200; it is ignored for App ID and bundle ID lookups, which return one record each.
- `maxConcurrency` is capped at 20 and defaults to 5. The search path ignores it and stays at one request per second.
- The Actor backs off exponentially on 403 and 429 rather than retrying hard.
- If every identifier fails to resolve, the run finishes with an empty dataset and says so in the log rather than failing silently.
- Snapshots for `changesOnly` live in the Actor's own named key-value store, so they survive between runs but are per-Actor, not shared across accounts.

### Integrations and API

Everything below works on any Apify account, including the free tier.

#### Run it from the Apify API

Start a run and wait for the dataset in one call. Replace `<YOUR_TOKEN>` with your own Apify API token.

```bash
curl -X POST "https://api.apify.com/v2/acts/praise-most-high~app-store-intelligence/run-sync-get-dataset-items?token=%3CYOUR_TOKEN%3E" \
  -H "Content-Type: application/json" \
  -d '{"appIds":["284882215","310633997"],"country":"us","includeRatings":true}'
```

#### Use it from JavaScript or Python

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: '<YOUR_TOKEN>' });
const run = await client.actor('praise-most-high/app-store-intelligence').call({"appIds":["284882215","310633997"],"country":"us","includeRatings":true});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
```

#### Schedules, webhooks and integrations

Run it on a [schedule](https://docs.apify.com/platform/schedules) — hourly, daily, or a cron expression — and have the output pushed where you already work. Apify ships first-party [integrations](https://docs.apify.com/platform/integrations) for Zapier, Make, n8n, Slack, Google Drive, GitHub and generic webhooks, and any run can fire a webhook on success or failure. The dataset is also readable directly as JSON, CSV, XLSX, XML or RSS from its own URL, so a spreadsheet or a BI tool can point straight at it.

### Where the data comes from

Apple's own public **iTunes Lookup and Search API** (`itunes.apple.com/lookup` and `/search`), read live on every run. Nothing is cached between runs, so a record is as fresh as the moment the run made the request.

The Actor does not scrape the App Store website, does not drive a headless browser, does not rotate proxies and does not bypass anything. `robots.txt` was checked live: `/lookup?id=` is allowed, `/search*` is disallowed, and the Actor's default path (`appIds` / `bundleIds`) never touches `/search` at all.

### Legal and responsible use

**Unofficial.** This Actor is **not affiliated with, endorsed by, or sponsored by Apple Inc.** "Apple", "App Store" and "iTunes" are trademarks of Apple Inc., used here only to describe the public data source this Actor reads.

**No personal data.** No user names, no individual review text, no device identifiers, no purchase history. The rating fields are Apple's published aggregates, never per-person records.

**Your obligations.** App descriptions, screenshots and icons are copyrighted by their developers, and the aggregate ratings are Apple's. This is a research and monitoring tool, not a redistribution pipeline — do not republish that material as your own content.

### Support and feedback

Found a bug, a wrong field, or a source that changed shape? Open an issue on the [Issues tab](https://apify.com/praise-most-high/app-store-intelligence/issues) of this Actor and it goes straight to the maintainer. Feature requests are welcome on the same tab. If a run failed, include the run ID — the log is what makes it fixable.

# Actor input Schema

## `appIds` (type: `array`):

Apple numeric track IDs, e.g. 284882215 (Facebook). The fastest and most reliable input — resolved via Apple's /lookup endpoint.

## `bundleIds` (type: `array`):

Reverse-DNS bundle identifiers, e.g. com.facebook.Facebook. Also resolved via /lookup.

## `searchTerms` (type: `array`):

Free-text app search. Optional and off by default: itunes.apple.com/robots.txt disallows /search\*, so this actor keeps search opt-in, rate-limits it to 1 request/second, and uses it only to resolve terms to app IDs. Prefer App IDs or Bundle IDs where you can.

## `country` (type: `string`):

ISO-2 storefront code. Apple operates 175 storefronts; prices and availability differ between them.

## `limit` (type: `integer`):

Max apps returned per search term. Ignored for App ID / Bundle ID lookups.

## `includeRatings` (type: `boolean`):

Include Apple's published aggregate rating and rating count. These are aggregates only — no individual user reviews are collected.

## `changesOnly` (type: `boolean`):

Compare each app against the previous run's snapshot and emit a row ONLY when a watched field changed. The first run has no baseline, so it emits everything and logs that it did.

## `watchFields` (type: `array`):

Fields compared when 'Emit changes only' is on.

## `maxConcurrency` (type: `integer`):

Concurrent requests to Apple. Deliberately conservative. The search path is separately capped at 1 request/second regardless of this value.

## Actor input object example

```json
{
  "appIds": [
    "284882215",
    "310633997"
  ],
  "bundleIds": [],
  "searchTerms": [],
  "country": "gb",
  "limit": 20,
  "includeRatings": true,
  "changesOnly": false,
  "watchFields": [
    "price",
    "rating",
    "version"
  ],
  "maxConcurrency": 5
}
```

# Actor output Schema

## `records` (type: `string`):

No description

## `csv` (type: `string`):

No description

## `datasetView` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "appIds": [
        "284882215",
        "310633997"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("praise-most-high/app-store-intelligence").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "appIds": [
        "284882215",
        "310633997",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("praise-most-high/app-store-intelligence").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "appIds": [
    "284882215",
    "310633997"
  ]
}' |
apify call praise-most-high/app-store-intelligence --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,praise-most-high/app-store-intelligence"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/5iSXzkEqveFgNSr5V/builds/LMj9lm3EuUrfIyGJ9/openapi.json
