App Discovery Radar
Pricing
$0.25 / completed report
App Discovery Radar
Find iOS apps for niche research, track competitor metadata, and compare country listings. For app makers, ASO teams and publishers. Includes readable reports, CSV, saved comparisons and Apple source links. Bounded sample. $0.25 per completed report, including zero matches.
Pricing
$0.25 / completed report
Rating
0.0
(0)
Developer
KamnevApps
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
34 minutes ago
Last modified
Categories
Share
Find iOS apps in a niche, follow a competitor watchlist, or compare the same apps across countries. Each run gives you a readable report, CSV exports and the source evidence behind every match.
For independent app makers preparing a shortlist, ASO teams reviewing competitors, and publishers checking country listings. Start from a ready-made task and take the report into your existing research workflow.
Keep the same saved search to see what changed since its previous successful run. The first run records your starting point; later runs separate new matches, metadata changes and gaps in the source.
Launch price: $0.25 per completed report, with no additional Actor start, per-row or run-usage fee. Four reports cost $1; 30 reports cost $7.50. A completed report with no matches also costs $0.25. Check the live Pricing tab before running.
Choose a starting point
| Your task | Ready-made example | What to change |
|---|---|---|
| Research a niche before you build | Find travel apps with fewer than 2,000 ratings | Two travel queries, US and UK, Travel category, fewer than 2,000 ratings per storefront. Replace the queries and filters for your niche. |
| Prepare a competitor review | Track changes in a productivity app watchlist | Todoist, TickTick and Things 3 in the US. Replace their Apple app IDs with your own IDs or App Store links. |
| Review listings across countries | Compare apps across three App Store countries | The same three apps in the US, UK and Spain, with separate prices, ratings and source records. |
Each example copies into your account. Your runs and history remain private. These are starting configurations, not a subscription or an active schedule. The example apps are independent products; their inclusion does not imply endorsement.
See a finished report before running: niche shortlist, app watchlist, or country comparison. These completed samples from 27 October 2026 are free to view and download; opening them does not start a run.
Coverage is a bounded, ranked sample from Apple's iTunes Search/Lookup API. It is not a complete App Store index. The source has no documented search pagination; a recent-release filter does not discover every recent release.
Bring your own apps
Paste numeric Apple IDs or HTTPS apps.apple.com app links directly into App IDs or App Store links. For example, 572688855 and https://apps.apple.com/us/app/todoist/id572688855?platform=iphone select the same app. Links with or without a two-letter country prefix are accepted; query strings and fragments are ignored. Radar extracts the ID without opening the supplied URL. Your selected countries control which storefronts are checked; a link's country does not change them. Replacing an ID with its equivalent link preserves the same search criteria and history.
For a ready-to-copy configuration, the free input helper turns 1–3 HTTPS App Store links or numeric Apple app IDs into Actor input. Choose any of US, UK and Spain, then copy the JSON or download INPUT.json. It works locally in your browser without looking up apps, uploading entries or starting a run. Its three-app limit applies only to the helper; this Actor accepts up to 100 IDs or links.
Paste the JSON into the Actor's Input tab in JSON mode and save a new task. Keep the same history name (savedSearchId) for later comparisons. The helper omits requestId, so rerunning the task collects a fresh observation.
Quick start
- Choose an example above, or enter your own keywords, Apple app IDs or App Store links.
- Pick 1–3 countries and a limit on app-country checks. Add filters only when you need them.
- Run, then open Report in the Output tab. Use the report's local search and filters to inspect the shortlist. They do not start another run or add another report charge.
- Keep the same
savedSearchIdfor the next observation. LeaverequestIdempty for a fresh check.
For example, this input builds the travel shortlist above:
{"queries": ["travel planner", "trip itinerary"],"appIds": [],"countries": ["US", "GB"],"categoryIds": ["6003"],"maxRatingCount": 1999,"maxApps": 160,"resultsPerQuery": 100,"savedSearchId": "travel-niche-shortlist"}
maxApps counts app-country checks, not unique apps. This example permits at most 80 candidate apps across two countries. Filters narrow the returned sample; they do not expand source coverage. For a watchlist without keyword discovery, set queries to [] and supply appIds.
Input
| Field | Meaning and limits |
|---|---|
queries | Up to 5 nonempty phrases, at most 120 characters each. Provide queries, appIds, or both. |
appIds | Up to 100 positive Apple app IDs (at most 15 digits) or HTTPS apps.apple.com app links. Links become numeric IDs before deduplication and comparison; their query strings and fragments are ignored. Explicit seeds are selected first. |
countries | 1–3 of US, GB, ES, DE, FR, CA, AU, IT, NL, JP. Default US. These storefront selections take precedence over any country in an app link. |
categoryIds | Up to 20 Apple genre IDs, each 4–5 digits. Any listed genre may match. Travel is 6003. |
languages | Up to 10 supported app language codes of 2–3 letters reported by Apple in languageCodesISO2A, such as EN or ES. All listed codes must match. These are not App Store listing localizations or the language of a listing title. |
releaseDateFrom, releaseDateTo | Inclusive source-reported initial-release date bounds in YYYY-MM-DD. |
updatedDateFrom, updatedDateTo | Inclusive current-version release date bounds in YYYY-MM-DD. |
minRatingCount, maxRatingCount | Inclusive nonnegative safe-integer storefront rating-count bounds. |
minRating, maxRating | Inclusive average-rating bounds from 0 to 5. |
minPrice, maxPrice | Inclusive bounds from 0 to 10,000 in each storefront's currency. No currency conversion. |
requireAllCountries | Require the app to be returned by lookup in every selected country. Other metadata filters still apply to each storefront record. Default false. |
maxApps | Integer from the number of selected countries to 500. Must cover every seed-country pair. Default 500. |
resultsPerQuery | 1–200 requested ranked results per query-country pair. Default 50. |
savedSearchId | History identifier of up to 64 letters, digits, underscores or dashes. Default default. |
requestId | Optional same-operation retry identifier of up to 100 letters, digits, underscores or dashes. Omit for recurring observations. |
The unique-candidate cap is floor(maxApps / countries.length). After reserving explicit seeds, selection interleaves ranks across query-country result lists in round-robin order. Duplicate app IDs share one candidate slot. Coverage records show selected and excluded candidates; round-robin selection does not make the sample exhaustive.
Source access is sequential, paced at least 3.5 seconds apart, and limited to 60 HTTP attempts including retries. Eligible failures receive at most two retries. Each request has a 15-second timeout, responses are capped at 10 MiB, and source collection has a 10-minute deadline. Required metadata that is missing cannot pass its filter; the report records the reason.
Output
The default dataset contains matching app-country records. One app can produce several storefront rows. The HTML report groups them by app and supports local search, filters, sorting and export of the visible shortlist without another source request. All evidence remains readable when JavaScript is disabled. The downloaded HTML also embeds downloads of the other six report files, so those downloads do not depend on access to sibling storage URLs.
The run's key-value store contains seven artifacts:
| Artifact | Contents |
|---|---|
RESULTS.json | Criteria, coverage, observations including rejected records, matches, availability evidence, changes, source statistics and billing state. |
MATCHES.csv | All matching app-country records with source fields and filter explanations. |
REPORT.html | Readable report, storefront register, local filters and expandable source evidence. |
REPORT.md | Concise text report. |
CHANGES.csv | Change records with reasons and before/after values where available. |
ALERT.json | Default notification decision, stable event ID and eligible change evidence. |
INPUT.json | Rerunnable criteria without the previous requestId. |
Download the report through the API
The generated API examples return a run and its dataset. The HTML report and CSV are in that run’s key-value store, including when a completed report has zero matches. Use the same authenticated client to access your private output:
import { writeFile } from 'node:fs/promises';// Continue after the Apify API example has returned `run` and `client`.if (run.status !== 'SUCCEEDED') throw new Error(`Run ${run.id}: ${run.status}`);const store = client.keyValueStore(run.defaultKeyValueStoreId);for (const name of ['REPORT.html', 'MATCHES.csv']) {const record = await store.getRecord(name, { buffer: true });if (!record) throw new Error(`Missing artifact: ${name}`);await writeFile(name, record.value);}
This downloads an existing report; it does not start another run or create another report charge. Keep savedSearchId stable and omit requestId when you want a fresh observation.
releaseDate is the source's app release date. updatedAt is its current-version release date. firstSeenAt is the first observation by this saved search, not a launch date. Rating counts are storefront ratings, not text-review counts, downloads or revenue. Missing scalar values are null with an explanation in missingReasons. Review text, artwork, download/revenue estimates and in-app purchase catalogs are not collected.
History and change evidence
Keep the same savedSearchId and criteria to compare with the previous successfully completed observation. The first observation establishes a baseline. Changing criteria starts a new comparison baseline while retaining first-seen history.
Change evidence separates newly passing records, substantive metadata changes, routine rating movement, missing/recovered source fields, records that no longer pass filters, and known apps returning to the sample. Inspect each change's reason: source-data recovery is different from a newly discovered app.
A successful lookup that returns no record is a lookup gap, not confirmed delisting. An app absent from the bounded candidate sample has unknown current availability. Network failures, exhausted retries and invalid source responses fail collection; they do not become availability claims, replace the previous successful baseline, or trigger a completed-report charge.
History is scoped by trusted platform user and Actor identity, then savedSearchId. Runs for the same user and Actor are serialized across their searches; an overlap can fail with SEARCH_BUSY. Keep schedules non-overlapping. Each saved search is limited to 1,000 logical reports and 10,000 observed app-country identities. At a limit, export the history and use a new savedSearchId; history is not silently evicted.
Tasks, schedules and notifications
Save the input as an Apify task and attach a schedule. Use a stable savedSearchId and omit requestId for fresh recurring observations. A fixed requestId replays the original logical report without fresh collection or a new charge attempt. Reusing it with different criteria is rejected.
To receive change notifications, configure a native ACTOR.RUN.SUCCEEDED webhook to your own consumer. That consumer reads the run's ALERT.json, sends a notification only when shouldNotify is true, and deduplicates eventId within the customer account and Actor scope. Success webhooks can also arrive for unchanged reports, zero matches and replays.
The default signal excludes baselines, criteria resets, replays, routine rating movement, known apps returning and source-data recovery. The Actor itself does not send email or chat messages. Your consumer controls delivery and can inspect RESULTS.json for different rules.
Pricing
You pay for one completed bounded report, including a valid zero-match report. Technical collection failures do not trigger a completed-report charge. Replaying the same logical operation returns its saved report without a new charge attempt or source check. A fresh observation is a new report, even when nothing changed.
The report and exports are saved before billing. The live Pricing tab shows the current event price. Apify account charges or separate services you configure are governed by their own terms.
Reports use metadata from Apple's iTunes Search/Lookup API. No artwork, previews or review text are collected, and no Apple affiliation or endorsement is implied. This product does not use or resell AppFigures API data.