May’d It

DATA TOOLS / commerce

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.

JSON / CSV outputLimited permissionsSource: maydit/apple-app-store-discovery-monitor

FROM SOURCE TO A USEFUL RESULT

A practical workflow

Choose this tool when…

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

appNamecountrysourceTypesourceKeypositionpositionChangepricecurrencyaverageUserRating

Discover mobile apps and compare a focused app watchlist

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 and source limits

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.

Download this workflow as Markdown · Configure a small first run

REAL RUN · DATED EVIDENCE

See an actual saved result

Captured 2026-11-07. Selected columns from one saved row. Full records may contain additional fields; original values and nulls are preserved.

{
  "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"
}

Dated bounded release evidence for this exact input and build. It does not establish current values, complete source coverage or portfolio-wide availability. Run reference: 2QHdCEn3oEYH7mpbD. Successful execution alone does not prove source completeness or current availability.

START SMALL

Example input

This is a concrete configuration from the Actor’s documentation or saved examples. Adjust its targets and dates for your use case. Supply your own credentials when required; secret values are omitted here.

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

CHOOSE A STARTING POINT

3 ready-to-use inputs

Pick a focused example, copy or download its JSON, then review the inputs and current pricing in your own Apify account. Downloading a configuration does not start a run.

Default input · Input schema · Saved output capture

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.

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

Saved run evidence: 2026-11-07 UTC · 4 saved rows. This is a historical check, not live data or a guarantee that every query will succeed today.

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.

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

Saved run evidence: 2026-11-07 UTC · 3 saved rows. This is a historical check, not live data or a guarantee that every query will succeed today.

ChatGPT and Spotify release watch

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

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

Saved run evidence: 2026-11-07 UTC · 2 saved rows. This is a historical check, not live data or a guarantee that every query will succeed today.

Download all example inputs and evidence references

A CLEAR DATA CONTRACT

Inputs you can configure

FieldTypeMeaning
modestring

Search returns Apple API relevance order. Lookup returns known app metadata without a rank.

queriesarray

Up to six phrases, each at most 100 characters. Used only in search mode; empty uses budget.

countriesarray

Up to three two-letter Apple storefront country codes. Examples: us, gb, ca, de, jp. At most six keyword-country combinations per run.

appIdsarray

Up to 100 numeric IDs or https://apps.apple.com/.../id... links. Used only in lookup mode. Empty lookup uses ChatGPT and Spotify.

resultsPerSourceinteger

A deliberate first-page window per keyword and country. Search may return fewer. No hidden pagination; lookup observes all selected IDs.

maxResultsinteger

Total billable row cap. A row represents one app in one source/country context. A cap that cuts a selected window prevents any history commit.

comparePreviousboolean

Save observations after every requested source window finishes. Compare price, rating, rating count, version and rank against the same named scope.

onlyChangesboolean

Enables comparison and skips unchanged rows without dataset-item charges. First complete run establishes the baseline.

snapshotNamestring

1–80 letters, numbers, underscores or hyphens. History is scoped to mode, countries, keyword/ID selection and search window.

maxRunSecondsinteger

Shared deadline. All Apple request starts are spaced by at least 3.1 seconds within this run; 403/429 stops subsequent requests.

Output fields

appNamecountrysourceTypesourceKeypositionpositionChangepricecurrencyaverageUserRatingratingCountversioncomparisonStatusurl

These are the columns in the default dataset view. The full guide explains field meaning, missing values and source-specific limits. JSON preserves nested data; CSV is useful for flat columns.

Input schema JSON

KNOW THE COST

Event pricing

Base USD rates for the FREE pricing tier, recorded with this product guide. Plan discounts and future pricing changes may apply. Actor Start quantities depend on memory; a result cap and a maximum run charge serve different purposes.

EventUSD per eventWhat is charged
Actor Start$0.00005Charged when the Actor starts running. Number of events charged depends on Actor memory (one event per GB, minimum one event).
Saved observation$0.002One validated observation confirmed saved to the dataset.

Check current Apify pricing ↗ before running.

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 provides client-specific instructions.

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

Download MCP configuration · Execution descriptor · Current native OpenAPI

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, execution.json and 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.

# 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, dataset pagination documentation and MCP guide describe the platform operations. Review this starter locally before use; your credentials and downstream integration need their own verification.

SOURCE COVERAGE & PRACTICAL LIMITS

Full product guide

Documentation captured from build 1.0.2. Example outputs retain their original sample context; they are not live results.

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

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

UK fitness app competitor discovery

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

ChatGPT and Spotify release watch

{"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.

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.