OneTwoApps App Ratings & ReviewsCompetitors

Optional · Competitors · Apple only · step by step

You see what your users say. Now also what they say about the others.

For every app Apple publishes a feed with the newest reviews and a rating summary, both without sign-in. The script reads them for the apps you list as competitors, stores them apart from your own and puts them next to yours in the report: store rating, reviews, the same traffic light, the same topics, the same AI. Without entries nothing in the report changes.

0credentials needed
500newest reviews per country and app
1block in config.json
Appleonly, Google has no public source
Example

How it looks in the report

Competitors
● VitaKasse App [Competitor]  VitaKasse Store 4.4  188 new   avg 1.84   79 % 1–2 ★
● Medivo Kasse  [Competitor]  Medivo   Store 3.8  120 new   avg 2.10   70 % 1–2 ★

Own apps for comparison
● Kasse Nord App    own app      Store 4.5   13 new   avg 3.62   31 % 1–2 ★
● Kasse Nord Bonus  own app      Store 4.0   10 new   avg 4.60   10 % 1–2 ★

What users say (AI)
VitaKasse App Praise: sick note uploaded in seconds.
              Criticism: login failing since the update.
Source: Apple’s public feed, newest 500 per country · traffic light by the same rules

Why

A rating on its own says little. Next to the competition it says a lot.

Whether 3.6 stars is good or bad depends on what the other apps in the same sector get. And whether a complaint is about your app or about the matter itself shows when the other apps’ users write the same thing.

1Public and official

Apple itself provides the customer review feed and the rating summary, for every app, for every visitor. The script reads only that. No scraping of web pages, no circumventing of protections, no access to other people’s accounts.

2The same yardsticks

Competitors go through the same analysis as your apps: traffic light by the same rules, topics from the same word lists, summary by the same AI. The comparison is as fair as the data allows.

3Separate, never mixed

Third-party reviews live in their own folder, are not in the app filter and never enter your figures: overview, traffic light, key figures and charts show your apps only. They never trigger a notification. Without entries in the configuration there is no tab.

For Google Play this is deliberately left out. The Play Developer API returns reviews of your own apps only, and scraping the store website violates its terms of use. The script therefore rejects a Google entry under competitors.

Set up · steps 1 to 3

One app ID from the store link, one block per customer, one command.

The template is in config/config.example.json. You need no credentials; the feed is public.

1

Find the app ID

Open the app in the App Store and copy the link. The number after id is the app ID. For every country you care about you need the two-letter code (DE, AT, CH); the feed delivers reviews per country.

https://apps.apple.com/de/app/meine-barmer/id956752981
                                                  app ID
2

Enter the block

Easiest in the setup in the browser, step competitors. By hand in config/config.json, next to apps of the customer, a list competitors. The id is yours to choose and becomes the folder name; vendor is the vendor shown in the table. countries is required.

"competitors": [
  { "id": "barmer", "name": "Meine BARMER", "enabled": true,
    "vendor": "BARMER",
    "apple": { "appId": "956752981", "countries": ["DE", "AT", "CH"] } },
  { "id": "tk-app", "name": "TK-App", "enabled": true,
    "vendor": "Techniker Krankenkasse",
    "apple": { "appId": "1163694230", "countries": ["DE"] } }
]
3

Fetch

The first run fetches up to 500 reviews per country and the store rating. After that the fetch is part of all and daily; it stops as soon as a page contains nothing new. In the menu: “Fetch data” → “Fetch competitors”.

./ratings.sh competitors --dry-run   # check, save nothing
./ratings.sh competitors             # fetch
./ratings.sh report                  # “Competitors” tab
  ✔ Meine BARMER · Competitors: 503 new · 15 requests · 1.5 s
  ✔ TK-App       · Competitors: 506 new · 15 requests · 1.8 s

In the report

A tab of its own. Nothing else changes.

Everything about competitors appears only once some are configured and fetched. Your existing views stay as they are.

“Competitors” tabnext to Charts

Two tables: the competitors on top, below them “Own apps for comparison” (your Apple apps). Per row traffic light, vendor, store rating with number of ratings, reviews and average of the last 90 days, share of 1–2 ★, current version and the traffic-light reason. Sortable. The filter is hidden on this tab so the comparison is always complete.

What users saywith AI

One card per app with praise, criticism and the three-sentence summary, your apps and the competition side by side. Every card carries the “AI” mark with provider, model and date.

All figures of one appclick on a row

A window for this app only: key figures, star distribution of the text reviews, store rating history, per version, per country, topics, AI praise and criticism, the newest 1–2-★ reviews with the store’s “helpful” votes. Plus the profile from the iTunes Lookup: vendor, genre, price, in the store since, version with date, size, minimum iOS, age rating, languages, what’s new, description, link to the App Store. Comparing happens in the table, not in the window.

Not in the app filterby design

Competitors cannot be selected in the filter. That way they can never distort a total, an average or a traffic light of your own apps. Everything about a third-party app is in the window on the “Competitors” tab.

Markdown overview00-uebersicht.md

A “Wettbewerber” section at the end of the overview, one row per third-party app. No separate file per competitor.

No notificationby design

New 1–2-★ reviews of third-party apps and their traffic light never trigger a message. Notifications stay with your apps.

Limits

What the public feed provides, and what it does not.

The report also lists these limits under “How complete is the data?”. They apply to everyone reading the same feed; there is no way around them.

What there is
  • the newest 500 reviews per country with stars, title, text, date and app version
  • official store rating and number of ratings per country, with history from the first fetch
  • profile: name, vendor, genre, price, first release, version, size, minimum iOS, age rating, languages, description
  • “helpful” votes of other users on a review, as far as Apple delivers them
  • traffic light, topics, sentiment and summary like for your own apps
What there is not
  • reviews older than the newest 500 per country; the archive grows only through regular runs
  • developer replies, language, device, operating system
  • crashes, sessions, downloads, installs (only the owner sees those)
  • Google Play (no public source)

To try it out. The debug menu (./debugmenu.sh) creates five invented insurer apps as competitors along with the test data and fetches nothing from Apple. The report then shows the badge “Demo data · invented” at the top.

Compare fairly. The reviews of an app with millions of users are not the same as those of an app with ten thousand. The 90-day average is a hint, not a verdict; the official store rating with its number of ratings is the more robust figure. And a topic that shows up across all apps of the sector is more likely about the matter than about one app.

Settings

Five fields per competitor. Plus one switch for the AI.

The table is also in README.md (configuration section) and in API-APPLE.md, section 4a.

FieldMeaningRequired
competitors[].idyour own identifier, becomes the folder name; unique, also against appsyes
namedisplay name in the reportyes
enabledentry on or offno, default true
vendorvendor for the table column; if missing the report uses the store nameno
audiencesize of the target group, as for own appsno
apple.appIdnumeric app ID from the store linkyes
countries (on the customer)countries, two letters; applies to everything country-bound; the feed delivers per country, each country costs up to eleven requests per runyes
ai.analyzeCompetitorsanalyse competitors too when an AI provider is active; never reply drafts or measures for third-party appsno, default true

Which data flows

From Apple to you. Nowhere else, unless you enable the AI.

The fetch talks only to itunes.apple.com, the same address that already delivers the store rating of your own apps. There is no intermediate step via us.

What is stored
  • stars, title, text, date, country, app version of each review
  • store rating and number of ratings per country, profile of the app
  • separately under data/customers/<customer>/competitors/, readable by you alone
Never
  • user names and profile addresses of reviewers; the feed delivers them, the script discards them before saving
  • credentials of any kind; the feed needs none
  • a message to the notification channels

With AI. If a provider is active and analyzeCompetitors is not switched off, the competitors’ reviews go to the same provider as your own, with the same fields (see Set up AI). That costs tokens per app; the first run with six competitors and 500 reviews each is the most expensive, after that only new reviews are sent.

If something goes wrong

Usually a wrong number or a wrong country.

The log is in data/logs/collect.log. An error with one competitor does not stop the others.

“Keine Wettbewerber eingetragen”on competitors

The customer has no competitors list, or all entries are "enabled": false. In all and daily this is not an error; the step is skipped silently.

HTTP 400 or 404 with the hint “App-ID oder Ländercode prüfen”fetch

The app ID is wrong, or the app is not in the store of that country. Copy the link again, check the country. Whatever was fetched before the error stays stored (status “partial”).

“countries muss eine nicht leere Liste …”configuration

The feed delivers per country, so at least one code is required: ["DE"].

“google wird nicht unterstützt”configuration

Competitors exist for Apple only. Remove the google key from the entry.

Fewer than 500 reviewsnot an error

The app simply has no more in that country. Small apps often deliver only one or two pages.

“Competitors” tab missingreport

Nothing has been fetched yet, or the report is older than the fetch. ./ratings.sh competitors, then ./ratings.sh report.