Nimbryxo Studio

Use App Store Search, Lookup & Reviews Scraper with Python

Search the Apple App Store by keyword or look up apps by ID or URL, with pricing, ratings, screenshots, developer info, and optional customer reviews across any App Store country.

1. Choose the data you need

Review the published README for supported collection modes, examples, and limits. The recipe below uses the current published input definition.

2. Prepare a source-based input

This JSON contains published prefills and required-field defaults. Review every value for your task before running it; it is not a promise of successful collection.

{
  "chartType": "top-free",
  "country": "us",
  "includeDetails": false,
  "includeDeveloperResponses": false,
  "language": "en-US",
  "maxItems": 3,
  "maxReviewsPerApp": 20,
  "mode": "search",
  "reviewSort": "recent",
  "searchTerms": [
    "calculator"
  ]
}

Download input.example.json and save your reviewed copy as input.json.

FieldTypeRequiredDescription
modestringrequiredWhat to collect. Search finds apps by keyword, Lookup resolves IDs/URLs, Reviews collects customer feedback, Developer lists a publisher's apps, and Charts reads a top list.
searchTermsarrayoptionalKeywords to search for (mode=search). Each term returns up to 200 ranked apps, and results are de-duplicated across terms.
appIdsarrayoptionalApps to look up or review (mode=lookup/reviews). Accepts numeric App Store IDs, bundle IDs, app URLs, and developer URLs. Separate multiple values with commas or new lines.
startUrlsarrayoptionalPaste App Store app or developer URLs (mode=lookup/reviews). App URLs resolve to one app; developer URLs expand to that publisher's catalog.
developerIdstringoptionalApple artist ID or developer page URL (mode=developer). For example 281956209 or https://apps.apple.com/us/developer/google/id281956209. Comma-separated values are accepted.
developerNamestringoptionalPublisher name to resolve when you do not know the developer ID (mode=developer). The actor searches App Store listings and matches the publisher name.
countrystringoptionalTwo-letter App Store storefront. Changes pricing, availability, chart contents, and review language.
languagestringoptionalLanguage used for App Store metadata and reviews. Defaults to English (United States).
maxItemsintegeroptionalHard cap on rows pushed per run (1-5000). Applies to apps, chart rows, and reviews combined. For very large review corpora, raise this and set maxReviewsPerApp.
maxReviewsPerAppintegeroptionalReviews to collect for each app (1-50000). The deep review route returns 20 per request; RSS enrichment is available for the first 500 reviews when version or helpful-vote data exists.
reviewSortstringoptionalMost recent first, or Apple's most-helpful ordering (mode=reviews).
includeDeveloperResponsesbooleanoptionalKeep developer replies when Apple exposes them (mode=reviews). Replies are available only for apps where the developer actually responded.
includeDetailsbooleanoptionalAdd App Store detail fields such as privacy labels, version history, rating histogram, support URL, and subtitle (app-producing modes). Disable it for the fastest, cheapest search runs.
chartTypestringoptionalTop chart to read (mode=charts). Mac charts use the App Store Mac catalog.
proxyConfigurationobjectoptionalOptional. The actor works without a proxy. Add an Apify Proxy configuration only if your own network or a future Apple rate limit needs it.

3. Start an Actor run

Set APIFY_TOKEN in your environment. Python 3.10 or newer is sufficient; this recipe uses no third-party packages.

Execution may incur charges. Review current pricing on Apify. The request asks for a 120-second timeout and a charge limit; these settings are subject to Apify’s pricing and do not guarantee an all-inclusive spending cap.

import json
import os
import urllib.request

# Save the schema-derived example as input.json; review and edit it first.
with open("input.json", encoding="utf-8") as stream:
    actor_input = json.load(stream)

token = os.environ["APIFY_TOKEN"]
request = urllib.request.Request(
    "https://api.apify.com/v2/acts/JQPGqizffRzaBsE3E/runs?timeout=120&maxTotalChargeUsd=0.50",
    data=json.dumps(actor_input).encode("utf-8"),
    headers={"Authorization": "Bearer " + token, "Content-Type": "application/json"},
    method="POST",
)
# This starts a potentially billable run. Do not automatically retry this POST.
with urllib.request.urlopen(request, timeout=40) as response:
    run = json.load(response)["data"]
print("Run ID:", run["id"])
print("Status:", run["status"])
# Inspect and download results in Apify Console once the run succeeds.

4. Inspect the actual results

Open the run in Apify Console and wait for a successful completion. Use the published output schema to locate results and the dataset schema to understand declared views. Missing or optional record fields must not be treated as guaranteed values.

App metadata, chart rankings, and customer reviews from the iOS App Store, including privacy labels, version history, and developer responses when Apple exposes them.

Questions before you run

Which inputs are required?

The published required fields are mode

What does this guide verify?

The fields, prefills, and schema links are rendered from the published build. This is a usage recipe, not a paid live extraction test. Source availability and collection results can vary.

What if the run request times out?

Check Apify Console before retrying. The first request may already have created a run. Do not automatically repeat a run-creation POST.

Generated from source build hrVxgbaRBHSBQLh8E and its README and schemas. Source changes regenerate this guide; no third-party editorial claims are inferred.