Datasets API endpoint
Searches resolved iOS App Store and Google Play apps stored in a search index. Store enum: `ios`, `android`, `both`. Platform enum: `phone`, `pad`, `tablet`, `mac`, `tv`, `chromebook`, `watch`, `vision`, `xr`, `car`, `windows` (iOS device values: phone, pad, mac, tv, watch, vision; Android values: phone, tablet, tv, chromebook, watch, xr, car, windows). Sort enum: `relevance`, `rating_desc`, `reviews_desc`, `installs_desc`, `updated_at_desc`, `popularity_desc`. Billing: this search costs 1 credit per record returned, with a minimum of 2 (an empty result costs 2, a full page of 100 costs 100).
/datasets/apps/searchSearches resolved iOS App Store and Google Play apps stored in a search index. Returns structured app records (title, developer, category, rating, ratings count, price, Android installs) without triggering live scraping.
Dataset id enum:
appsStore enum:
iosandroidbothQuery parameters:
q: optional full-text query over title, developer and category, max 256 characters.store: optional store enum: ios, android, both.platforms: optional repeatable platform filter; matches records confirmed on AT LEAST ONE of the given values, e.g. platforms=mac&platforms=tv. See platform enum above. Platform coverage is still being backfilled, so omitting this returns the full corpus regardless of platform.category: optional exact app-store category filter, max 128 characters.country: optional exact storefront country filter, max 128 characters.developer: optional exact developer/publisher name filter, max 128 characters.free: optional price filter; true keeps only free apps, false only paid.min_rating: optional minimum store rating from 0 through 5.min_reviews: optional minimum ratings/review count.sort: optional sort enum: relevance, rating_desc, reviews_desc, installs_desc, updated_at_desc, popularity_desc. popularity_desc ranks by popularity (ratings count times average stars).page: optional page number, defaults to 1.page_size: optional page size, defaults to 20 and maxes at 100.Response behavior:
relevance sort when q is supplied.reviews_desc sort when no q is supplied.10000; page * page_size must not exceed 10000.items list rather than an error.android_max_installs is populated for Google Play records only.platforms is populated as data is crawled: iOS records use Apple's phone/pad/mac/tv/watch/vision compatibility values; Android records use Google Play source values such as phone, tablet, tv, chromebook, watch, xr, car, and windows where public source lists identify them. Absent/empty platforms means "not yet classified", not platform-incompatible.1 credit per record returned, minimum 2. A search that returns 20 records costs 20 credits, a full page of 100 costs 100, and an empty or one-record result costs 2. You are charged for what comes back, not for the page_size you ask for, but your balance must cover the requested page_size for the call to be accepted. The response header x-credit-cost shows what a call was charged.
| Field | Filled in, of 10 checked | Values in the sample |
|---|---|---|
| app_uid | 10 | |
| store | 10 | |
| ios_app_id | 10 | |
| ios_bundle_id | 9 | |
| title | 10 | |
| developer | 10 | |
| developer_id | 10 | |
| category | 10 | |
| country | 10 | |
| free | 10 | true in 9 of 10 |
| price_cents | 10 | 0 to 899, median 0 |
| currency | 10 | |
| score | 10 | 0 to 4.83, median 0 |
| ratings_count | 10 | 0 to 11,230,660, median 0 |
| popularity | 10 | 0 to 54,199,839, median 0 |
| version | 9 | |
| icon_url | 10 | is1-ssl.mzstatic.com |
| url | 10 | apps.apple.com and 1 other host |
| released_at | 10 | 2023-02-12 to 2026-05-04 |
| updated_at | 10 | 2023-02-12 to 2026-10-06 |
| first_seen | 10 | 2026-07-20 to 2026-07-26 |
| last_crawled | 10 | 2026-07-20 to 2026-10-13 |
| countries_available | 10 | median 24 entries |
| platforms | 8 | median 1 entry |
| discovery_sources | 8 | median 1 entry |
| Parameter | Type | Required | Default | Description | Example |
|---|---|---|---|---|---|
| q | string | No | Full-text query over title, developer and category, max 256 characters | ||
| store | string | No | Store enum: ios, android, both Allowed values: ios, android, both. | ||
| platforms | array<string> | No | Repeatable device-platform filter (OR); iOS and Android use the values described above Allowed values: phone, pad, tablet, mac, tv, chromebook, watch, vision, xr, car, windows. | ||
| category | string | No | Exact app-store category filter, max 128 characters | ||
| country | string | No | Exact storefront country filter, max 128 characters | ||
| developer | string | No | Exact developer/publisher name filter, max 128 characters | ||
| free | boolean | No | Filter by price; true keeps only free apps, false only paid | ||
| min_rating | number | No | Minimum store rating, 0 through 5 | ||
| min_reviews | integer | No | Minimum ratings/review count | ||
| sort | string | No | Sort enum: relevance, rating_desc, reviews_desc, installs_desc, updated_at_desc, popularity_desc Allowed values: relevance, rating_desc, reviews_desc, installs_desc, updated_at_desc, popularity_desc. | ||
| page | integer | No | 1 | Page number, defaults to 1 | |
| page_size | integer | No | 20 and maxes at 100 | Page size, defaults to 20 and maxes at 100; page * page_size must be <= 10000 | |
| x-api-key (header) | string | Yes | API key required |
curl -X GET "https://api.crawlora.net/api/v1/datasets/apps/search?q=coffee&store=ios&platforms=phone&country=us&free=true&sort=relevance&page=1" \ -H "x-api-key: $CRAWLORA_API_KEY"
{
"code": 200,
"msg": "OK",
"data": {
"dataset": "apps",
"items": [
{
"app_uid": "ios:6448311069",
"store": "ios",
"ios_app_id": "6448311069",
"title": "ChatGPT",
"developer": "OpenAI",
"category": "Productivity",
"country": "us",
"free": true,
"score": 4.9,
"ratings_count": 7976038,
"url": "https://apps.apple.com/us/app/id6448311069"
}
],
"page": 1,
"page_size": 20,
"total": 1,
"sort": "reviews_desc"
}
}Request schema
No body schema
Response schema
#/definitions/datasets.appsSearchResponseDoc
| Field | Type | Required | Enum | Bounds | Example | Description |
|---|---|---|---|---|---|---|
| code | integer | No | 200 | |||
| data | datasets.AppsSearchResponse | No | ||||
| data.dataset | string | No | ||||
| data.items | array | No | AppRecord record, 27 fields: android_max_installs, android_package, app_uid, category, countries_available, country, currency, developer, developer_id, discovery_sources, first_seen, free and 15 more. Described under Get a mobile app dataset record API. | |||
| data.page | integer | No | ||||
| data.page_size | integer | No | ||||
| data.sort | string | No | ||||
| data.total | integer | No | ||||
| msg | string | No | OK |
| Status | Description | Schema |
|---|---|---|
| 400 | Bad Request | #/definitions/app.Response |
| 429 | Too Many Requests | #/definitions/app.Response |
| 500 | Internal Server Error | #/definitions/app.Response |
Use environment variables for secrets and keep Crawlora API keys server-side.
curl -X GET "https://api.crawlora.net/api/v1/datasets/apps/search?q=coffee&store=ios&platforms=phone&country=us&free=true&sort=relevance&page=1" \
-H "x-api-key: $CRAWLORA_API_KEY"