Skip to content

Commit 5c6de67

Browse files
v1.0.0-beta.8
1 parent 50b4cc4 commit 5c6de67

4 files changed

Lines changed: 121 additions & 188 deletions

File tree

CHANGELOG.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,22 @@
11
# Changelog
22

3+
## [1.0.0-beta.8] — 2026-06-03
4+
5+
### Breaking
6+
7+
- **Reworked the Explorer commands with clearer names and more consistent output.**
8+
9+
### Added
10+
11+
- **Run the CLI as an MCP server** so assistants like Claude and Cursor can use it.
12+
- **Control the calendar granularity when aggregating date data in Explorer.**
13+
- **Focus review breakdowns on the dimensions and top results you care about.**
14+
15+
### Fixed
16+
17+
- **Improved handling of in-app purchases.**
18+
- **More reliable handling of tracked apps.**
19+
320
## [1.0.0-beta.7] — 2026-06-01
421

522
### Breaking

README.md

Lines changed: 31 additions & 115 deletions
Original file line numberDiff line numberDiff line change
@@ -90,19 +90,19 @@ Find apps and look up their identity. Other commands take the app IDs these retu
9090

9191
| Command | Description |
9292
| ------- | ----------- |
93-
| <a href="#command-apps-search"><code>af&nbsp;apps&nbsp;search</code></a> | Find apps by name or publisher. Returns one row per unified app. Default returns Apple and Google listings; pass `--all-stores` to include other storefronts. To filter apps by estimate values (e.g. apps with >100k downloads last month) use [`explorer query`](#command-explorer-query). For estimates broken down by time, country, or storefront, use [`metrics query`](#command-metrics-query) with datasets estimates.sales or estimates.revenue. |
93+
| <a href="#command-apps-search"><code>af&nbsp;apps&nbsp;search</code></a> | Find apps by name or publisher. Returns one row per unified app. Default returns Apple and Google listings; pass `--all-stores` to include other storefronts. To filter apps by estimate values (e.g. apps with >100k downloads last month) use [`explorer list-products`](#command-explorer-list-products). For estimates broken down by time, country, or storefront, use [`metrics query`](#command-metrics-query) with datasets estimates.sales or estimates.revenue. |
9494
| <a href="#command-apps-tracked"><code>af&nbsp;apps&nbsp;tracked</code></a> | List the apps your Appfigures account tracks. |
9595
| <a href="#command-apps-get"><code>af&nbsp;apps&nbsp;get</code></a> | Get an app's record: basic metadata (name, developer, etc) and, if the user tracks it, what data they can access. Pass a product ID for one storefront; unified app ID for all storefronts together. |
9696

9797
### Explorer
9898

99-
Search and analyze the app catalog: 3M+ apps and 120+ fields spanning identity, storefront and country availability, categories, ratings, release dates, chart ranks, download and revenue estimates, SDK presence, demographics, and related apps.
99+
Search and analyze the full app catalog: millions of products across Apple, Google Play, Amazon, and other major stores, with 120+ fields spanning identity, storefront and country availability, categories, ratings, release dates, chart ranks, download and revenue estimates, SDK presence, demographics, and related apps.
100100

101101
| Command | Description |
102102
| ------- | ----------- |
103-
| <a href="#command-explorer-query"><code>af&nbsp;explorer&nbsp;query</code></a> | Read catalog fields for one app or many. Fields referenced by `query` or `sort` come back automatically; pass `--extra-fields` for more. Use `["match","product_id",<id>]` for a single app, or combine filters for population queries (e.g. iOS apps using Firebase with $1M+ US revenue). The 120+ fields span ranks, ratings, download and revenue estimates, SDKs, demographics, and more; query grammar and field list in [`docs get catalog_playbook`](#command-docs-get). |
104-
| <a href="#command-explorer-aggregate"><code>af&nbsp;explorer&nbsp;aggregate</code></a> | Aggregate across the 3M-app catalog: counts, averages, min/max, and histograms over any set of matching apps. Uses the same bespoke JSON query grammar as [`explorer query`](#command-explorer-query); returns aggregates, not app records. For market sizing, benchmarking, and segment analysis. |
105-
| <a href="#command-explorer-fields"><code>af&nbsp;explorer&nbsp;fields</code></a> | List the catalog fields and the current user's access level for each. Same field set [`explorer query`](#command-explorer-query) and [`explorer aggregate`](#command-explorer-aggregate) accept. Pass `--q` to search the catalog by keyword. |
103+
| <a href="#command-explorer-list-products"><code>af&nbsp;explorer&nbsp;list&#8209;products</code></a> | Read catalog fields for one app or many. Fields referenced by `query` or `sort` come back automatically; pass `--extra-fields` for more. Use `["match","product_id",<id>]` for a single app, or combine filters for population queries (e.g. iOS apps using Firebase with $1M+ US revenue). The 120+ fields span ranks, ratings, download and revenue estimates, SDKs, demographics, and more; query grammar and field list in [`docs get catalog_playbook`](#command-docs-get). |
104+
| <a href="#command-explorer-aggregate-products"><code>af&nbsp;explorer&nbsp;aggregate&#8209;products</code></a> | Aggregate across the full catalog of millions of products across Apple, Google Play, Amazon, and other major stores: counts, averages, min/max, and histograms over any set of matching products. Uses the same query grammar as [`explorer list-products`](#command-explorer-list-products); returns aggregates, not product records. For market sizing, benchmarking, and segment analysis. |
105+
| <a href="#command-explorer-describe-fields"><code>af&nbsp;explorer&nbsp;describe&#8209;fields</code></a> | List the catalog fields and the current user's access level for each. Same field set [`explorer list-products`](#command-explorer-list-products) and [`explorer aggregate-products`](#command-explorer-aggregate-products) accept. Pass `--q` to search the catalog by keyword. |
106106

107107
### Metrics
108108

@@ -142,25 +142,14 @@ Organic keyword visibility and tracking.
142142
| ------- | ----------- |
143143
| <a href="#command-keywords-list"><code>af&nbsp;keywords&nbsp;list</code></a> | List tracked keywords with their opaque IDs. |
144144
| <a href="#command-keywords-rankings"><code>af&nbsp;keywords&nbsp;rankings</code></a> | Check the organic keywords one or more apps rank for, with position, popularity, and competitiveness. |
145-
| <a href="#command-keywords-results"><code>af&nbsp;keywords&nbsp;results</code></a> | List the apps ranking for a specific keyword in organic search, plus the keyword's own popularity and competitiveness scores. |
146-
| <a href="#command-keywords-related"><code>af&nbsp;keywords&nbsp;related</code></a> | Find keywords related to a seed term for ASO research. Useful for finding alternatives with a similar audience that are more popular or less competitive. |
147-
148-
### Apple Ads
149-
150-
Apple Search Ads intelligence.
151-
152-
| Command | Description |
153-
| ------- | ----------- |
154-
| <a href="#command-apple-ads-keywords"><code>af&nbsp;apple&#8209;ads&nbsp;keywords</code></a> | List the paid keywords one or more apps run ads on, with impression share and organic rank. |
155-
| <a href="#command-apple-ads-advertisers"><code>af&nbsp;apple&#8209;ads&nbsp;advertisers</code></a> | List the apps advertising on a specific keyword, with each advertiser's impression share, organic rank, and how long they've been bidding. |
156145

157146
### Sdks
158147

159-
Look up canonical SDK IDs by name across the SDKs Appfigures tracks. The IDs are the values [`explorer query`](#command-explorer-query) accepts as SDK filters.
148+
Look up the SDKs we track.
160149

161150
| Command | Description |
162151
| ------- | ----------- |
163-
| <a href="#command-sdks-list"><code>af&nbsp;sdks&nbsp;list</code></a> | List every known SDK with its id. Use the id to filter apps by SDK in [`explorer query`](#command-explorer-query). |
152+
| <a href="#command-sdks-list"><code>af&nbsp;sdks&nbsp;list</code></a> | List every known SDK with its id, or search to find a specific one. |
164153

165154
### Docs
166155

@@ -224,7 +213,7 @@ Every command with its full argument and flag list. For the one-line overview, s
224213

225214
`af apps search <query> [flags]`
226215

227-
Find apps by name or publisher. Returns one row per unified app. Default returns Apple and Google listings; pass `--all-stores` to include other storefronts. To filter apps by estimate values (e.g. apps with >100k downloads last month) use [`explorer query`](#command-explorer-query). For estimates broken down by time, country, or storefront, use [`metrics query`](#command-metrics-query) with datasets estimates.sales or estimates.revenue.
216+
Find apps by name or publisher. Returns one row per unified app. Default returns Apple and Google listings; pass `--all-stores` to include other storefronts. To filter apps by estimate values (e.g. apps with >100k downloads last month) use [`explorer list-products`](#command-explorer-list-products). For estimates broken down by time, country, or storefront, use [`metrics query`](#command-metrics-query) with datasets estimates.sales or estimates.revenue.
228217

229218
**Options**
230219

@@ -270,17 +259,17 @@ Get an app's record: basic metadata (name, developer, etc) and, if the user trac
270259

271260
---
272261

273-
<a id="explorer-query"></a>
274-
<a id="command-explorer-query"></a>
275-
### af explorer query
262+
<a id="explorer-list-products"></a>
263+
<a id="command-explorer-list-products"></a>
264+
### af explorer list-products
276265

277-
`af explorer query [query] [flags]`
266+
`af explorer list-products [flags]`
278267

279268
Read catalog fields for one app or many. Fields referenced by `query` or `sort` come back automatically; pass `--extra-fields` for more. Use `["match","product_id",<id>]` for a single app, or combine filters for population queries (e.g. iOS apps using Firebase with $1M+ US revenue). The 120+ fields span ranks, ratings, download and revenue estimates, SDKs, demographics, and more; query grammar and field list in [`docs get catalog_playbook`](#command-docs-get).
280269

281270
**Options**
282271

283-
- `[query]` array. Explorer query in JSON array format to select matching catalog Products. Missing values and `[]` match every Product across every storefront. The full field list and query syntax are documented in [`docs get catalog_playbook`](#command-docs-get).
272+
- `--query` array. Explorer query in JSON array format to select matching catalog Products. Missing values and `[]` match every Product across every storefront. The full field list and query syntax are documented in [`docs get catalog_playbook`](#command-docs-get).
284273
- `--extra-fields` string[]. Additional fields to include. The full field list is documented in [`docs get catalog_playbook`](#command-docs-get).
285274
- `--sort` string. Explorer field name. The full field list is documented in [`docs get catalog_playbook`](#command-docs-get).
286275
- `--order` string, default `desc`. Sort direction.
@@ -290,36 +279,37 @@ Read catalog fields for one app or many. Fields referenced by `query` or `sort`
290279

291280
---
292281

293-
<a id="explorer-aggregate"></a>
294-
<a id="command-explorer-aggregate"></a>
295-
### af explorer aggregate
282+
<a id="explorer-aggregate-products"></a>
283+
<a id="command-explorer-aggregate-products"></a>
284+
### af explorer aggregate-products
296285

297-
`af explorer aggregate <fields> [flags]`
286+
`af explorer aggregate-products <fields> [flags]`
298287

299-
Aggregate across the 3M-app catalog: counts, averages, min/max, and histograms over any set of matching apps. Uses the same bespoke JSON query grammar as [`explorer query`](#command-explorer-query); returns aggregates, not app records. For market sizing, benchmarking, and segment analysis.
288+
Aggregate across the full catalog of millions of products across Apple, Google Play, Amazon, and other major stores: counts, averages, min/max, and histograms over any set of matching products. Uses the same query grammar as [`explorer list-products`](#command-explorer-list-products); returns aggregates, not product records. For market sizing, benchmarking, and segment analysis.
300289

301290
**Options**
302291

303292
- `--query` array. Explorer query in JSON array format to select matching catalog Products. Missing values and `[]` match every Product across every storefront. The full field list and query syntax are documented in [`docs get catalog_playbook`](#command-docs-get).
304293
- `<fields>` required string[]. Field+aggregation pairs (e.g. `all_rating/stats`, `storefronts/terms`). Aggregations: `stats`, `terms`, `histogram`, `date_histogram`, `cardinality`. The full field list is documented in [`docs get catalog_playbook`](#command-docs-get).
305294
- `--allow-unscoped-nested` boolean, default `false`. Escape hatch for intentionally broad queries. Bypasses the default block on unscoped nested predicates that usually inflate results.
306295
- `--terms-count` integer, default `20`. Maximum buckets returned for each `terms` aggregation. Other aggregation types ignore it.
296+
- `--date-histogram-interval` string. Bucket granularity for each `date_histogram` aggregation. Other aggregation types ignore it.
307297

308298
---
309299

310-
<a id="explorer-fields"></a>
311-
<a id="command-explorer-fields"></a>
312-
### af explorer fields
300+
<a id="explorer-describe-fields"></a>
301+
<a id="command-explorer-describe-fields"></a>
302+
### af explorer describe-fields
313303

314-
`af explorer fields [flags]`
304+
`af explorer describe-fields [flags]`
315305

316-
List the catalog fields and the current user's access level for each. Same field set [`explorer query`](#command-explorer-query) and [`explorer aggregate`](#command-explorer-aggregate) accept. Pass `--q` to search the catalog by keyword.
306+
List the catalog fields and the current user's access level for each. Same field set [`explorer list-products`](#command-explorer-list-products) and [`explorer aggregate-products`](#command-explorer-aggregate-products) accept. Pass `--q` to search the catalog by keyword.
317307

318308
**Options**
319309

320310
- `--count` integer, default `50`. Number of results to return
321311
- `--page` integer, default `1`. Page number.
322-
- `--q` string. Fuzzy string match on `path`, `title`, `description`, `type`.
312+
- `--q` string. Filter by `path`, `title`, `description`, `type`.
323313

324314
---
325315

@@ -403,7 +393,7 @@ List every store category with its ID. Numeric category IDs required by [`store
403393

404394
- `--count` integer, default `50`. Number of results to return
405395
- `--page` integer, default `1`. Page number.
406-
- `--q` string. Fuzzy string match on `name`.
396+
- `--q` string. Filter by `name`.
407397
- `--sort-by` string. Sort order. Default: relevance when `q` is set, otherwise list order.
408398
- `--id` integer[]. Only return these category IDs.
409399
- `--parent-id` integer. Only include subcategories of this parent category (drill-down by id).
@@ -499,6 +489,8 @@ Aggregate review counts for one or more apps, bucketed by dimension. Returns one
499489
- `--filter-apps-by-type` string[]. Narrow the account's tracked apps to products of these types.
500490
- `--start` string. Start date (YYYY-MM-DD)
501491
- `--end` string. End date (YYYY-MM-DD, defaults to today)
492+
- `--by` string[]. Limit the response to these dimensions; omit to return all.
493+
- `--top` integer, default `20`. Maximum values returned per dimension; the rest are summed under `__other__`.
502494

503495
---
504496

@@ -530,7 +522,7 @@ List tracked keywords with their opaque IDs.
530522

531523
- `--count` integer, default `10`. Number of results to return
532524
- `--page` integer, default `1`. Page number.
533-
- `--q` string. Fuzzy string match on `keyword_term`.
525+
- `--q` string. Filter by `keyword_term`.
534526
- `--sort-by` string. Sort order. Default: relevance when `q` is set, otherwise list order.
535527
- `--include-relationships` boolean, default `false`. Include per-(product, country) tracking detail and sync state on each row. Off by default; adds a nested block per tracked (product, country) pair.
536528

@@ -554,95 +546,19 @@ Check the organic keywords one or more apps rank for, with position, popularity,
554546

555547
---
556548

557-
<a id="keywords-results"></a>
558-
<a id="command-keywords-results"></a>
559-
### af keywords results
560-
561-
`af keywords results <keyword-name> [flags]`
562-
563-
List the apps ranking for a specific keyword in organic search, plus the keyword's own popularity and competitiveness scores.
564-
565-
**Options**
566-
567-
- `<keyword-name>` required string. Keyword to look up.
568-
- `--country` required string. ISO country code (e.g. US, JP, GB)
569-
- `--storefront` required string. App store platform (e.g. apple:ios, google_play, amazon_appstore, steam, windows10, apple:mac, apple:tv, apple:imessage, or another supported storefront).
570-
- `--device-type` string. Device type
571-
- `--count` integer, default `10`. Number of results to return
572-
- `--page` integer, default `1`. Page number.
573-
574-
---
575-
576-
<a id="keywords-related"></a>
577-
<a id="command-keywords-related"></a>
578-
### af keywords related
579-
580-
`af keywords related <keyword-name> [flags]`
581-
582-
Find keywords related to a seed term for ASO research. Useful for finding alternatives with a similar audience that are more popular or less competitive.
583-
584-
**Options**
585-
586-
- `<keyword-name>` required string. Seed keyword to find related terms for.
587-
- `--country` string. ISO country code (e.g. US, JP, GB)
588-
- `--storefront` string. App store platform (e.g. apple:ios, google_play, amazon_appstore, steam, windows10, apple:mac, apple:tv, apple:imessage, or another supported storefront).
589-
- `--device-type` string. Device type
590-
- `--count` integer, default `10`. Number of results to return
591-
- `--page` integer, default `1`. Page number.
592-
593-
---
594-
595-
<a id="apple-ads-keywords"></a>
596-
<a id="command-apple-ads-keywords"></a>
597-
### af apple-ads keywords
598-
599-
`af apple-ads keywords <product-ids> [flags]`
600-
601-
List the paid keywords one or more apps run ads on, with impression share and organic rank.
602-
603-
**Options**
604-
605-
- `<product-ids>` required integer[]. Product identifiers (numeric, one storefront each).
606-
- `--days` integer, default `180`. Lookback period in days. Common values: 7, 14, 30, 90, 180, 365.
607-
- `--country` string. ISO country code (e.g. US, JP, GB)
608-
- `--device-type` string. Device type
609-
- `--count` integer, default `10`. Number of results to return (min 10).
610-
- `--page` integer, default `1`. Page number.
611-
612-
---
613-
614-
<a id="apple-ads-advertisers"></a>
615-
<a id="command-apple-ads-advertisers"></a>
616-
### af apple-ads advertisers
617-
618-
`af apple-ads advertisers <keyword-name> [flags]`
619-
620-
List the apps advertising on a specific keyword, with each advertiser's impression share, organic rank, and how long they've been bidding.
621-
622-
**Options**
623-
624-
- `<keyword-name>` required string. Keyword to look up advertisers for
625-
- `--days` integer, default `180`. Lookback period in days. Common values: 7, 14, 30, 90, 180, 365.
626-
- `--country` string. ISO country code (e.g. US, JP, GB)
627-
- `--device-type` string. Device type
628-
- `--count` integer, default `10`. Number of results to return
629-
- `--page` integer, default `1`. Page number.
630-
631-
---
632-
633549
<a id="sdks-list"></a>
634550
<a id="command-sdks-list"></a>
635551
### af sdks list
636552

637553
`af sdks list [flags]`
638554

639-
List every known SDK with its id. Use the id to filter apps by SDK in [`explorer query`](#command-explorer-query).
555+
List every known SDK with its id, or search to find a specific one.
640556

641557
**Options**
642558

643559
- `--count` integer, default `50`. Number of results to return
644560
- `--page` integer, default `1`. Page number.
645-
- `--q` string. Fuzzy string match on `name`, `description`, `tags`.
561+
- `--q` string. Filter by `name`, `description`, `tags`.
646562
- `--sort-by` string. Sort order. Default: relevance when `q` is set, otherwise list order.
647563
- `--id` string[]. Only return these SDK ids.
648564
- `--include-inactive` boolean, default `false`. Include inactive SDKs. Rare; most callers want active only.

dist/af.js

Lines changed: 72 additions & 72 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@appfigures/cli",
3-
"version": "1.0.0-beta.7",
3+
"version": "1.0.0-beta.8",
44
"description": "Appfigures CLI — query app metrics, reviews, and store data from your terminal",
55
"type": "module",
66
"bin": {

0 commit comments

Comments
 (0)