App Store Reviews Scraper | Translation & All Countries avatar
App Store Reviews Scraper | Translation & All Countries

Pricing

Pay per event

Go to Apify Store
App Store Reviews Scraper | Translation & All Countries

App Store Reviews Scraper | Translation & All Countries

Pull Apple App Store reviews across 160+ country storefront with auto-translation. Get ratings, title/body, versions, authors, timestamps, helpful votes, and country codes in clean JSON/CSV. Ideal for sentiment tracking, localization QA, and competitor monitoring.

Pricing

Pay per event

Rating

5.0

(1)

Developer

Fatih Tahta

Fatih Tahta

Maintained by Community

Actor stats

1

Bookmarked

2

Total users

1

Monthly active users

6 hours ago

Last modified

Share

Slug: fatihtahta/app-store-global-reviews-scraper

Overview

App Store Reviews Scraper collects customer review records from Apple App Store listings, including ratings, review titles and content, author details, country storefront, version, timestamps, and optional translations. The actor targets review data across multiple storefronts so you can compare sentiment and quality signals by region. Reviews come from https://apps.apple.com, the official Apple App Store website, which makes this data valuable for product feedback, localization insights, and competitive analysis. Runs are automated and consistent, saving time versus manual collection and cleanup.

Translation behavior

When translation = true:

  • The actor automatically detects the review’s language and translates title + content to your selected translateTo.
  • If lingoKey is provided, the actor uses that key for translation. Otherwise, it uses the actor’s default translation credentials.
  • Translations are stored in:
    • review_title_translated
    • content_translated
    • along with source_locale, target_locale, and translation_skipped If lingoKey is provided, translated-word charges do not apply.

Cost-saving skips

Translation is automatically skipped when it would be a no-op — for example, when the detected source language already matches the target language. In those cases:

  • translation_skipped = true
  • translated fields may be omitted or equal to the original text (depending on configuration), but no translation work is performed.

Translation provider

Translation uses Lingo.dev: https://lingo.dev/


Deduplication

The actor deduplicates reviews so the same review isn’t saved repeatedly (even across multiple storefronts or overlapping runs).
For downstream systems, you can treat review_id as the stable unique identifier (with review_url as a secondary identifier).


Where You Can Use This Actor

  • Market research / analytics: Benchmark ratings and review trends across countries to identify regional opportunities and risks.
  • Product & content teams: Track feedback themes, localization quality, and version-specific issues for release planning.
  • Developers / data engineering pipelines: Feed structured review data into dashboards, warehouses, and alerting workflows.
  • Lead gen / enrichment: Enrich company or app profiles with recent review sentiment and market presence signals.
  • Monitoring / competitive tracking: Compare review velocity and sentiment changes across competitor apps and storefronts.

Input Parameters

Provide any combination of URLs, queries, and filters…

ParameterTypeDescriptionDefault
startUrlsstring[]App Store app URLs (apps.apple.com) or numeric App IDs. Use when you already know the exact apps to collect reviews for.
countriesstring[]Storefronts to include. Allowed values: __all__ (Every country), or any of: af, al, dz, ao, ai, ag, ar, am, au, at, az, bs, bh, bd, bb, by, be, bz, bm, bo, bw, br, vg, bn, bg, kh, cm, ca, cv, ky, cl, cn, co, cr, hr, cy, cz, dk, dm, do, ec, eg, sv, ee, sz, fj, fi, fr, ga, gm, ge, de, gh, gr, gd, gt, gw, gy, hn, hk, hu, is, in, id, ie, il, it, jm, jp, jo, kz, ke, kw, kg, la, lv, lb, lr, li, lt, lu, mo, mg, mw, my, mv, ml, mt, mr, mu, mx, md, mn, ms, ma, mz, mm, na, np, nl, nz, ni, ne, ng, mk, no, om, pk, pa, pg, py, pe, ph, pl, pt, qa, ro, ru, rw, sa, sn, rs, sc, sl, sg, sk, si, sb, za, kr, es, lk, kn, lc, vc, sr, se, ch, st, tw, tj, tz, th, tt, tn, tr, tm, tc, ug, ua, ae, gb, us, uy, uz, ve, vn, ye, zm, zw.__all__
sortBystringReview sorting: mostrecent or mosthelpful.mostrecent
limitintegerMaximum reviews to save per app. Minimum: 10.50000
translationbooleanWhen enabled, adds language detection and translated title/content.false
translateTostringTarget locale for translations. Allowed values: en-US, en-GB, en-CA, en-AU, en-NZ, en-IE, en-ZA, en-IN, en-SG, es-ES, es-419, es-MX, es-AR, es-CO, es-CL, es-PE, es-US, pt-BR, pt-PT, fr-FR, fr-CA, fr-BE, fr-CH, fr-LU, de-DE, de-AT, de-CH, zh-Hans, zh-Hant, zh-CN, zh-TW, zh-HK, ar, ar-SA, ar-EG, ar-AE, it-IT, nl-NL, sv-SE, no-NO, da-DK, fi-FI, pl-PL, cs-CZ, sk-SK, hu-HU, ro-RO, el-GR, bg-BG, hr-HR, sl-SI, sr, uk-UA, ru-RU, lt-LT, lv-LV, et-EE, is-IS, ga-IE, tr-TR, he-IL, fa-IR, hi-IN, bn-BD, ta-IN, te-IN, mr-IN, ur-PK, id-ID, ms-MY, th-TH, vi-VN, fil-PH, ja-JP, ko-KR, sw-KE, sw-TZ, am-ET, ha-NG, yo-NG, ig-NG, zu-ZA, af-ZA.en-US
lingoKeystringOptional secret Lingo.dev API key used for translation. If provided, translated-word charges do not apply.

Example Input

{
"startUrls": ["https://apps.apple.com/app/id1221965482"],
"countries": ["us", "gb", "de"],
"sortBy": "mostrecent",
"limit": 2500,
"translation": true,
"translateTo": "en-GB"
}

Output

6.1 Output destination

The actor writes results to an Apify dataset as JSON records. And the dataset is designed for direct consumption by analytics tools, ETL pipelines, and downstream APIs without post-processing.

6.2 Record envelope (all items)

Every record includes the following stable identifiers:

  • type (string, required)
  • id (number, required)
  • url (string, required)

Recommended idempotency key: type + ":" + id
Use this key to deduplicate or upsert records when multiple runs overlap.

6.3 Examples

Example: review (type = "review")

{
"type": "review",
"id": 13398513795,
"url": "https://itunes.apple.com/us/review?id=1221965482&type=Purple+Software",
"review_id": "13398513795",
"review_url": "https://itunes.apple.com/us/review?id=1221965482&type=Purple+Software",
"review_title": "Water, Water, Water",
"reviews_feed_url": "https://itunes.apple.com/us/rss/customerreviews/page=1/id=1221965482/sortby=mostrecent/json",
"input_type": "url",
"input_value": "https://apps.apple.com/app/id1221965482",
"country_code": "US",
"country": "United States 🇺🇸",
"fetched_at": "2025-12-28T12:16:19.181928+00:00",
"app_id": "1221965482",
"rating": "1",
"version": "1.9.29",
"author_name": "OldManWaterLover",
"author_url": "https://itunes.apple.com/us/reviews/id1166070510",
"updated": "2025-11-14T15:18:03-07:00",
"content": "If all you want to track is water, the free app works. If you drink coffee, tea, juice, or any other beverage, you will need to pay for the privilege",
"vote_sum": "0",
"vote_count": "0",
"source_locale": "en",
"translation_provider": "lingo.dev",
"review_title_translated": "只记录水",
"content_translated": "如果你只想记录喝水,免费版就够了。如果你还喝咖啡、茶、果汁或其他饮料,就需要付费才能记录",
"target_locale": "zh-Hans",
"translation_skipped": false
}

Example: review (type = "review")

{
"type": "review",
"id": 6161426293,
"url": "https://itunes.apple.com/pa/review?id=1221965482&type=Purple+Software",
"review_id": "6161426293",
"review_url": "https://itunes.apple.com/pa/review?id=1221965482&type=Purple+Software",
"review_title": "No funciona",
"reviews_feed_url": "https://itunes.apple.com/pa/rss/customerreviews/page=1/id=1221965482/sortby=mostrecent/json",
"input_type": "url",
"input_value": "https://apps.apple.com/app/id1221965482",
"country_code": "PA",
"country": "Panama 🇵🇦",
"fetched_at": "2025-12-28T12:26:52.949505+00:00",
"app_id": "1221965482",
"rating": "1",
"version": "1.7.9",
"author_name": "idalbys",
"author_url": "https://itunes.apple.com/pa/reviews/id1186767356",
"updated": "2020-07-05T12:47:27-07:00",
"content": "24 horas y solo una vez mandó el aviso",
"vote_sum": "0",
"vote_count": "0",
"source_locale": "es",
"translation_provider": "lingo.dev",
"review_title_translated": "Doesn't work",
"content_translated": "24 hours and it only sent the notification once",
"target_locale": "en-SG",
"review_title_en": "Doesn't work",
"content_en": "24 hours and it only sent the notification once",
"translation_skipped": false
}

Field reference

Review fields (type = "review")

  • type (string, required): Record type identifier.
  • id (number, required): Stable numeric identifier for the review.
  • url (string, required): Canonical review URL.
  • review_id (string, required): Review identifier.
  • review_url (string, required): Direct link to the review.
  • review_title (string, optional): Review title.
  • reviews_feed_url (string, optional): Review feed URL used for discovery.
  • input_type (string, optional): Input origin type (e.g., URL or ID).
  • input_value (string, optional): Original input value.
  • country_code (string, required): Storefront country code.
  • country (string, optional): Storefront name.
  • fetched_at (string, required): ISO timestamp of extraction.
  • app_id (string, required): App identifier.
  • rating (string, required): Star rating value.
  • version (string, optional): App version associated with the review.
  • author_name (string, optional): Reviewer display name.
  • author_url (string, optional): Reviewer profile URL.
  • updated (string, optional): Review update timestamp.
  • content (string, optional): Review body text.
  • vote_sum (string, optional): Helpful vote sum as provided.
  • vote_count (string, optional): Helpful vote count as provided.
  • source_locale (string, optional): Detected source language.
  • translation_provider (string, optional): Translation provider name.
  • review_title_translated (string, optional): Translated review title.
  • content_translated (string, optional): Translated review body.
  • target_locale (string, optional): Translation target locale.
  • review_title_en (string, optional): English translation of title when available.
  • content_en (string, optional): English translation of content when available.
  • translation_skipped (boolean, optional): Indicates if translation was skipped.

Data guarantees & handling

  • Best-effort extraction: fields may vary by region/session/availability/UI experiments.
  • Optional fields: null-check in downstream code.
  • Deduplication: recommend type + ":" + id.

Pricing

This actor uses pay-per-event pricing with two billable events:

  1. Per output saved Charged once per dataset item saved.

  2. Per translated word Charged once per source word successfully translated (only when translation = true).

Notes:

  • If translation is disabled, there is no translated-word charge.
  • If translation is skipped because source and target languages match, there is no translated-word charge.
  • If a translation attempt fails and no translation is produced, translated-word charging should not apply for that text.
  • If lingoKey is provided, translated-word charging does not apply (only output-record charging applies).

Notes & Limitations

  • Respect Apple’s terms of service and applicable laws.
  • Avoid excessive request frequency to maintain normal site usage.
  • Pricing or availability fields (if present) can vary by region, time, or session.
  • Validate data for compliance with internal policies and local regulations.

Support

For help, open an issue on the actor’s Issues tab or reach out via the actor page. Include the input used (redacted as needed), the run ID, expected vs actual behavior, and an optional small output sample.