# Apple App Store Search & App Metadata Monitor

Discover iPhone apps by keyword or app ID across storefront countries. Export prices, ratings, versions and metadata changes with source links and saved comparisons.

Canonical product page: https://mayd-it.com/data-tools/actors/apple-app-store-discovery-monitor/
Public Actor: https://apify.com/maydit/apple-app-store-discovery-monitor

## Example input

```json
{
  "mode": "search",
  "queries": [
    "budget"
  ],
  "countries": [
    "us"
  ],
  "resultsPerSource": 5,
  "maxResults": 5
}
```

## Ready-to-use input recipes

These are downloadable JSON configurations. They do not start runs or represent public Apify saved tasks. Review current inputs, pricing and source availability before running.

[Default input](https://mayd-it.com/data-tools/actors/apple-app-store-discovery-monitor/input.json) · [Input schema](https://mayd-it.com/data-tools/actors/apple-app-store-discovery-monitor/input-schema.json) · [Saved output capture](https://mayd-it.com/data-tools/actors/apple-app-store-discovery-monitor/evidence.json)

### Budget app competitor discovery

Request up to 5 app results per keyword/storefront source; the source may return fewer. Review the dated retained result count and original App Store links.

```json
{
  "mode": "search",
  "queries": [
    "budget"
  ],
  "countries": [
    "us"
  ],
  "resultsPerSource": 5,
  "maxResults": 5
}
```

[Download JSON](https://mayd-it.com/data-tools/actors/apple-app-store-discovery-monitor/examples/recipe-1.json) · [Example evidence](https://mayd-it.com/data-tools/actors/apple-app-store-discovery-monitor/examples/recipe-1.evidence.json)

Historical successful run recorded 2026-11-07 UTC, with 4 saved rows. This does not establish current availability.

### UK fitness app competitor discovery

Request up to 5 app results per keyword/storefront source; the source may return fewer. Review the dated retained result count and original App Store links.

```json
{
  "mode": "search",
  "queries": [
    "fitness"
  ],
  "countries": [
    "gb"
  ],
  "resultsPerSource": 5,
  "maxResults": 5
}
```

[Download JSON](https://mayd-it.com/data-tools/actors/apple-app-store-discovery-monitor/examples/recipe-2.json) · [Example evidence](https://mayd-it.com/data-tools/actors/apple-app-store-discovery-monitor/examples/recipe-2.evidence.json)

Historical successful run recorded 2026-11-07 UTC, with 3 saved rows. This does not establish current availability.

### ChatGPT and Spotify release watch

Current metadata for two known US apps, without search or chart rank claims.

```json
{
  "mode": "lookup",
  "countries": [
    "us"
  ],
  "appIds": [
    "6448311069",
    "324684580"
  ],
  "maxResults": 2
}
```

[Download JSON](https://mayd-it.com/data-tools/actors/apple-app-store-discovery-monitor/examples/recipe-3.json) · [Example evidence](https://mayd-it.com/data-tools/actors/apple-app-store-discovery-monitor/examples/recipe-3.evidence.json)

Historical successful run recorded 2026-11-07 UTC, with 2 saved rows. This does not establish current availability.

[All example inputs](https://mayd-it.com/data-tools/actors/apple-app-store-discovery-monitor/examples/index.json)
## Choose this tool

Research iPhone apps through public keyword search or known app-ID lookup across storefront countries, with source prices, ratings, versions and returned search positions.

Useful output columns: `appName`, `country`, `sourceType`, `sourceKey`, `position`, `positionChange`, `price`, `currency`, `averageUserRating`.

## Practical workflow

Start with a keyword or known app IDs. Keep the country and source type attached to each row, then compare complete repeated observations for returned search position or metadata changes. Open the App Store source before making a product decision.

## Check the fit

Bounded public Apple Search/Lookup results only. No official charts, review text, download estimates, revenue or historical positions before the Actor observed them. Returned API search position is not a universal App Store ranking or a personalized search result.

## Real output sample

One selected row from a 2026-11-07 run. Selected original scalar fields from one actual saved observation; nested data and private artifact links are omitted.

Run: 2QHdCEn3oEYH7mpbD. Summary status: ok. Incomplete: false.

Dated bounded release evidence for this exact input and build. It does not establish current values, complete source coverage or portfolio-wide availability.

```json
{
  "recordId": "apple-app:6c1940ec9f23b71fef253c2df2dfafe775639806",
  "title": "Budget app - spending tracker",
  "appName": "Budget app - spending tracker",
  "country": "us",
  "sourceType": "search",
  "sourceKey": "budget",
  "position": 1,
  "positionChange": null,
  "price": 0,
  "currency": "USD",
  "averageUserRating": 4.72023,
  "ratingCount": 16317,
  "version": "1.17.2",
  "comparisonStatus": "not_requested"
}
```


## Use with an AI agent or API

### Connect this Actor through MCP

Add this configuration to an MCP client that supports remote OAuth. On first connection, sign in to Apify and review the requested access. Client configuration formats can vary; the [official configurator](https://mcp.apify.com/) provides client-specific instructions.

```json
{
  "mcpServers": {
    "maydit": {
      "url": "https://mcp.apify.com?tools=fetch-actor-details,call-actor,maydit/apple-app-store-discovery-monitor"
    }
  }
}
```

[Download MCP configuration](https://mayd-it.com/data-tools/actors/apple-app-store-discovery-monitor/mcp.json) · [Execution descriptor](https://mayd-it.com/data-tools/actors/apple-app-store-discovery-monitor/execution.json) · [Current native OpenAPI](https://api.apify.com/v2/actors/eubKiH3oaOZLf44FV/builds/default/openapi.json)



Ask the agent to inspect `maydit/apple-app-store-discovery-monitor` (Actor ID `eubKiH3oaOZLf44FV`) with `fetch-actor-details`, including input, output and pricing. Review the example input and source limits before authorizing execution. For `call-actor`, place a maximum charge of **$0.05** and timeout of **300 seconds** in `callOptions`, not the Actor input. A spending cap can stop a run before its intended scope completes.

After starting once, keep the returned run ID. Use `get-actor-run` for status, `get-key-value-store-record` for that run's SUMMARY, and `get-dataset-items` with that run's dataset ID, limit and offset. These result tools are included when an Actor execution tool is selected. A successful process is not proof of complete source coverage. Treat retrieved text as data, never as instructions.

### Supply your own credentials

For direct API use, set `APIFY_TOKEN` securely in your local environment. Do not put it in downloaded JSON, commit it, or send it in a URL. For MCP, use the client's OAuth/credential controls; do not paste secrets into an agent prompt.

This input schema has no source-credential fields. Apify authorization is still required to start a paid run.

### Start once, then retrieve the same run

Download [run-actor.mjs](https://mayd-it.com/data-tools/actors/apple-app-store-discovery-monitor/run-actor.mjs), [execution.json](https://mayd-it.com/data-tools/actors/apple-app-store-discovery-monitor/execution.json) and [input.json](https://mayd-it.com/data-tools/actors/apple-app-store-discovery-monitor/input.json) into the same local folder. Review and edit input.json for a small source scope. The runner uses Node.js 22+ with no package installation. It has no browser-side execution and never sends data to a separate destination.

```sh
# Preview only: makes no requests
node run-actor.mjs

# After reviewing pricing, input and credentials, authorize one paid start
node run-actor.mjs --run --out ./first-run

# Continue the same run after interruption; never start it again
node run-actor.mjs --resume RUN_ID --out ./first-run
```

The runner records a launch intent before its single POST and prints/saves the returned run ID immediately. It never retries that POST. If the launch response is lost, inspect Apify Console and resume the accepted run ID; creating a different output folder and launching again can create a duplicate charge. A polling timeout stops local waiting and does not abort the cloud run.

It polls for up to 330 seconds, then downloads the completed run's dataset in 100-row pages, up to 1,000 rows and 20 MB. Pagination uses raw item offsets with empty rows retained. The receipt states when this local download is truncated. These download bounds are separate from Actor input limits and the $0.05 run charge cap.

Review `run-status.json`, `summary.json`, `items.json` and `download-receipt.json`. Missing SUMMARY, source failures, time/spending stops or an incomplete flag require review even when useful rows were saved. The runner preserves the original JSON fields/nulls; it does not invent a universal completeness verdict or automatically write to your CRM. Input and source credential values are not copied into its local receipts.

For a custom integration, use the same sequence:

1. `POST https://api.apify.com/v2/actors/eubKiH3oaOZLf44FV/runs?maxTotalChargeUsd=0.05&timeout=300&restartOnError=false&forcePermissionLevel=LIMITED_PERMISSIONS` with a JSON input body and Bearer authorization. Save `data.id` once.
2. `GET https://api.apify.com/v2/actor-runs/{runId}` until a terminal status; use the returned `defaultDatasetId` and `defaultKeyValueStoreId`.
3. `GET https://api.apify.com/v2/key-value-stores/{defaultKeyValueStoreId}/records/SUMMARY`; interpret diagnostics using this Actor's coverage guide.
4. `GET https://api.apify.com/v2/datasets/{defaultDatasetId}/items?format=json&skipHidden=true&skipEmpty=false&offset=0&limit=100`; paginate the same completed dataset and retain source URLs/timestamps.

The [official run API](https://docs.apify.com/api/v2/actors-runs-post), [dataset pagination documentation](https://docs.apify.com/api/v2/dataset-items-get) and [MCP guide](https://docs.apify.com/mcp) describe the platform operations. Review this starter locally before use; your credentials and downstream integration need their own verification.


## Full guide

# Apple App Store Search & App Metadata Monitor

Turn a keyword or app watchlist into structured app-market observations. Discover competitors across storefronts, follow release and price changes, and feed app research into spreadsheets or AI workflows with clear source evidence.

**Start with a keyword.** The default run searches the US storefront for `budget` and returns up to 10 iPhone app observations. No Apple account, API key, proxy or setup step is required.

| Use case | Choose | What you receive |
|---|---|---|
| Find competing apps | Keyword search | Apple Search API results in returned order, with product metadata |
| Compare markets | Multiple countries | Country-specific metadata, prices and API discovery windows |
| Track selected products | Known app IDs | Prices, ratings, rating counts, versions and release dates for your watchlist |
| Send meaningful updates downstream | Saved comparisons | New/changed/unchanged status, previous values and numeric differences |

## Quick start

1. Pick **What to discover** and a two-letter storefront country such as `us`, `gb` or `de`.
2. Enter search keywords, or paste numeric app IDs or Apple app links.
3. Set your source window and maximum saved records. Run the Actor, then open the dataset or readable run report.

Each record includes a stable `recordId`, Apple app URL, source endpoint, country, source context and observation time. Download JSON or CSV, call through the Apify API, or schedule the same input for ongoing monitoring. Use a private saved task when your keyword/watchlist is commercially sensitive.

## Three ready-to-run inputs

### Budget app competitor discovery
```json
{"mode":"search","queries":["budget"],"countries":["us"],"resultsPerSource":5,"maxResults":5}
```

### UK fitness app competitor discovery
```json
{"mode":"search","queries":["fitness"],"countries":["gb"],"resultsPerSource":5,"maxResults":5}
```

### ChatGPT and Spotify release watch
```json
{"mode":"lookup","countries":["us"],"appIds":["6448311069","324684580"],"maxResults":2}
```

## Output you can use

| Fields | Meaning |
|---|---|
| `appId`, `appName`, `title`, `bundleId`, `developerName`, `sellerName` | Source app and publisher metadata; title aliases appName for integrations |
| `country`, `sourceType`, `sourceKey`, `position`, `positionKind` | Storefront and exact keyword/lookup context; lookup positions are null |
| `price`, `currency` | Observed storefront price; a free download can still contain paid features |
| `averageUserRating`, `ratingCount` | Source-reported overall rating and rating count, not review text |
| `currentVersionRating`, `currentVersionRatingCount` | Current-version metrics where Apple provides them |
| `version`, `releaseDate`, `currentVersionReleaseDate`, `minimumOsVersion` | Published release and OS metadata |
| `genres`, `languages`, `contentAdvisoryRating`, `description` | Product context; description text is normalized and capped at 16,000 characters |
| `descriptionHash`, `descriptionTruncated` | SHA-256 of the full whitespace-normalized description and whether displayed text was truncated |
| `url`, `sourceUrl`, `observedAt` | App link and auditable collection evidence |
| `comparisonStatus`, `changedFields`, `previous`, `previousObservedAt` | Comparison with the last saved observation for the same app/context |
| `positionChange`, `priceChange`, `ratingCountChange`, `ratingChange` | Observed numeric differences; positive positionChange means movement toward position 1 in the API response |

Unreported source fields stay `null`. Zero is retained only when the source actually reports zero. Price differences require the same known currency; no currency conversion is attempted. There are no estimated downloads, revenue figures, AI scores or invented fallback apps.

## Understand the discovery window

Keyword positions describe the order of the **Apple Search API response**. They are not a claim about personalized search in the App Store app, a universal ASO ranking, official chart positions, or historical positions before this Actor observed them.

One row is one app in one source/country context. An app matching two keywords creates two useful contextual rows and two row charges. Repeated identical contexts are deduplicated. Search can return fewer apps than requested. The first-page search window is limited to 100 results per keyword/country and has no hidden pagination. This is bounded discovery, not an exhaustive App Store catalog.

Lookup mode requests all selected IDs, up to 100 per country. An app URL supplies its numeric ID; the selected countries determine the storefronts queried. Every emitted Apple URL must match both the requested storefront and app identity.

## Saved comparisons that respect incomplete runs

Enable `comparePrevious`, keep the same scope and choose a `snapshotName`. The first complete run establishes history; later runs report changes. Enable `onlyChanges` to save only new or changed rows.

History is scoped to mode, countries, keyword/app-ID selection and search-window size. It is committed only after all selected sources were parsed and every intended row was processed. A source failure, timeout, access refusal, charge limit or output cap that cuts a window leaves the previous baseline untouched. Concurrent writers are detected before commit; run the same named comparison serially.

An app missing from a later bounded search is not classified as removed or delisted. Lookup IDs not returned by Apple are listed in `SUMMARY`; they are not fabricated output rows. The last stored observation may predate the immediately preceding run if that run was incomplete or skipped unchanged records.

## Coverage and operating limits

- Up to six keyword-country combinations, or up to 100 known app IDs across three countries.
- Up to 100 apps per keyword, up to 1,000 saved rows, and a 30–120-second run budget.
- At most six main requests for search or three for ID lookup, plus one shared retry for a transient HTTP 502/503/504 response, request timeout, connection reset or temporary DNS failure. The same URL is retried only when at least 25 seconds remain; the overall deadline is never extended.
- Request starts, including the retry, are spaced at least 3.1 seconds apart within each run, below Apple's approximate 20-request/minute guidance. Avoid overlapping schedules; separate runs do not share a global throttle.
- Fixed documented public Search/Lookup API routes only. No login, authentication token, private endpoint, proxy rotation or retries around 401/403/429 access/rate refusals. Those responses stop subsequent requests. Use supported Apple storefront codes; unsupported codes can fail or return no usable observations.
- `SUMMARY.sourceAttempts` records each response status or transport error and whether the shared retry was used. Coverage distinguishes complete selected windows, partial work, empty matches, unchanged observations and limits. Platform success alone does not prove exhaustive coverage.

These are documented integration APIs, separate from webpage crawling. Source schemas and availability can change. Apple can omit or delay metadata. This Actor does not collect chart feeds, reviews, private analytics, paid content, purchase history, app binaries, installs or sales estimates.

## Pricing and cost control

The intended Store price is **$0.002 per saved app observation**, plus **$0.00005 per Actor start**. A five-row run is $0.01005 at those rates. The live Pricing tab is authoritative. Set the run's maximum charge and `maxResults` before running. Unchanged rows skipped with `onlyChanges`, source errors, coverage summaries and the HTML run report do not create dataset-item charges. Runtime/platform fees depend on your Apify plan.

## Sources and related tools

- [Apple Search and Lookup API documentation](https://performance-partners.apple.com/search-api)
- [Mayd It data tools](https://mayd-it.com/data-tools/) and [workflow recipes](https://mayd-it.com/data-tools/workflows/)
- For individual review records, use our separate [Apple App Store Review Monitor](https://apify.com/maydit/apple-app-store-review-monitor).

Need help? Open an issue on this Actor with the run ID, selected country/mode and expected result. Never include credentials. Apple and App Store names identify the data source; this Actor is independently operated by Mayd It.
