StoreScope Analytics

Connect an AI assistant to StoreScope Analytics

StoreScope Analytics is a remote MCP server. An AI assistant that supports remote MCP servers (custom connectors) reaches the 38 tools below, on the data of one workspace you choose.

Before you start

Create an account (an e-mail address and a password; it costs nothing today), create a workspace, and connect your stores on the Connections page.

Connect with OAuth (Claude, ChatGPT and other MCP clients)

  1. Add a custom connector (remote MCP server) in your AI client and paste this URL:
    https://storescope.devino.ca/mcp
  2. The client finds the sign-in on its own (OAuth 2.1 with PKCE; the server describes itself at https://storescope.devino.ca/.well-known/oauth-protected-resource, and client registration is open). Sign in to your StoreScope Analytics account in the window it opens.
  3. Pick the workspace the assistant may use. One connection reaches one workspace.
  4. Approve. The approval page shows your account and the workspace. Reading is the default; making changes is a separate box, unticked unless you tick it.
  5. To disconnect, open the MCP & API page and press Disconnect. The assistant's next call fails.

Or use a workspace key

  • For clients that send a header instead of signing in: create a key on the MCP & API page (read, or read and write; it is shown once) and send it as Authorization: Bearer sws_… to https://storescope.devino.ca/mcp.
  • The same tools over REST: POST https://storescope.devino.ca/api/tools/<tool name> with the tool's arguments as a JSON body and the same header. The API reference lists every tool's arguments.
  • Revoking the key on the MCP & API page stops it at once.

Writes: preview first, then confirm

  • A review reply runs as a preview first. The answer shows what would change and carries a confirm_token. Nothing reaches the store.
  • To apply it, repeat the same call with apply: true and confirmToken. The token is single use, valid 10 minutes, and bound to you, the AI client, the tool and those exact arguments; changed arguments are refused and need a new preview.
  • rank_keywords_set is the exception: it edits this workspace's own keyword list, never a store, and saves on the first call.
  • Write tools are listed only for a connection that was allowed to make changes (the "make changes" box at sign-in, or a read-and-write key). A read-only connection never sees them.
  • The token proves that a preview of exactly those arguments ran. It is not a person's approval: your AI client decides whether to ask you before it calls a write tool.

A store you have not connected

Every tool is listed whether or not its store is connected. A tool whose store this workspace has not connected answers that the store must be connected first, and reads or changes nothing.

More guides

  • Connect your stores: one guide per connection, with the key or role to create in each console and the errors the check can show.
  • API reference: the REST endpoint, its OpenAPI document and every tool's arguments.
  • Error codes: every refusal the MCP server and the API can answer, and what to do.

Tools (38)

34 read, 4 write. The same names and wording your AI client lists.

ToolWhat it doesKind
data_freshnessData freshness
Per-adapter last sync status/time/rows, latest fact date per store, apps with no data, stale (>3d over the store's own lag) warnings, and the count of pending Apple analytics report requests.
read
fleet_overviewOverview of every app
Every app x store for the last N days: downloads/installs/acquisitions totals, impressions -> page_views -> downloads funnel where the store provides it, conversion, rating average and review count, plus a one-line…
read
app_funnelApp funnel
Daily impressions/page_views/downloads time series for one app on one store plus a grouped funnel with conversion computed per group.
read
compare_periodsCompare periods
Current vs previous period for one metric, broken down per group (defaults: group by store when store is omitted, by source_type when it is given).
read
listing_change_impactListing change impact
For each listing change (listing_changes audit rows and detected listing_versions snapshot diffs), the 14d-before vs 14d-after impressions / page_views / downloads / conversion.
read
listing_historyListing history
The listing_versions snapshot chain for an app/store (optionally one locale) with field-level diffs between consecutive snapshots, plus the listing_changes audit rows (what this MCP planned or applied, in which mode).
read
reviews_digestReviews digest
Review counts by rating, average, unanswered count, top recurring words and two-word phrases (simple stopword tokenizer), and the 10 most recent low-rating (<=3) reviews.
read
reviews_unansweredReviews awaiting a developer reply
Lists the archived reviews that have NO developer response yet, newest first, with the ids the *_review_reply tools take (apple_review_reply / play_review_reply / ms_review_reply).
read
reviews_inboxReviews inbox, per app
Every app's reviews in one place: per app, a per-store summary (count, average rating, unanswered, unanswered <= 3 stars, newest review date) and the newest reviews, unanswered low ratings first, each with the reply…
read
developer_channelsDeveloper channels (GitHub, npm, PyPI)
Where developers find each app: GitHub traffic on its PUBLIC SDK repos (views, unique visitors, clones per day, stars/forks, and the top REFERRERS and paths that sent the visits) plus npm and PyPI downloads of every…
read
search_performanceWeb search performance (Search Console, Bing)
Per app and engine (gsc = Google Search Console, bing = Bing Webmaster Tools): clicks, impressions, CTR and impression-weighted average position on the app's PUBLIC WEBSITE over `days`, anchored on that engine's own…
read
web_trafficWebsite traffic (Google Analytics 4)
Per app: sessions, engaged sessions (and the engagement rate), new users, page views and key events on the app's PUBLIC WEBSITE from Google Analytics 4, summed over `days` anchored on that app's own newest GA4 day, the…
read
product_usageProduct usage (PostHog)
Per app: what people do IN the app, from PostHog: events, pageviews and sessions summed over `days` anchored on that app's own newest PostHog day, the same sums for the window before, active users of the latest day and…
read
app_stabilityApp stability (Sentry)
Per app: Sentry errors and release-health sessions summed over `days` anchored on that app's own newest Sentry day, the window before, the crash-free session rate computed from the session sums (never an average of…
read
top_moversTop movers
Workspace-wide biggest ups and downs across app x store x metric: last N days vs the N days before, each series anchored on its own latest date.
read
app_healthApp health
Sessions, crashes (+ computed crashes per 1k sessions with its basis), purchases (count only) and pre-orders per app x store over the last N days, from Apple's App Sessions / App Crashes / App Store Purchases /…
read
listing_proposalsListing proposals (data-guided)
THE optimization tool: deterministic, rule-based, evidence-backed changes to an app's store text and images, derived only from warehouse data.
read
aso_auditASO audit (every app)
Workspace-wide triage over listing_proposals: one row per app x store x locale with its high/medium/low proposal counts, its downloads in the window, and the top 3 proposals as one-liners.
read
revenue_overviewRevenue overview
Money for the last N days from the stores' own sales reports (warehouse only): proceeds, paid units, free units and refunds per app | store | country | currency.
read
subscription_metricsSubscription metrics
Apple auto-renewable subscriptions per app (warehouse only): active_subscriptions and active_free_trials as the LATEST daily snapshot (as_of; a stock summed over countries and plans, never over days), plus…
read
warehouse_schemaWarehouse schema
DDL of every warehouse table plus the raw-metric -> canonical-family map and the known store ids.
read
sql_querySQL query (read-only)
Escape hatch: run ONE read-only SELECT/WITH statement over the warehouse on a readonly connection (PRAGMA query_only).
read
apple_reviews_recentApple: recent App Store reviews (warehouse)
Reads the most recent App Store reviews for an app from the warehouse (populated by the apple sync).
read
apple_report_statusApple: analytics report pipeline status
Shows the app's analyticsReportRequests (including the stopped_due_to_inactivity flag — Apple stops an ONGOING request that is never downloaded), the report ids for the four ASO reports, and the latest DAILY/WEEKLY…
read
play_reviews_recentPlay: recent reviews
Most recent Google Play reviews for an app from the warehouse (synced from the bucket's reviews/ exports).
read
play_store_performancePlay: store listing performance
Store-listing visitors, acquisitions and conversion rate by month × traffic source (and by territory) from the warehouse.
read
ms_analyticsMicrosoft Store analytics (warehouse)
Acquisitions and installs by day for an app from the warehouse, plus the legacy funnel totals and data freshness.
read
ms_reviews_recentMicrosoft Store recent reviews
Most recent Microsoft Store reviews for an app from the warehouse (synced from the Partner Center reviews endpoint).
read
registry_statusPublic-registry listing + download proxies
Per app: whether the official MCP Registry lists it (and under which server name@version), plus the latest public download/usage proxies — npm, PyPI, Docker Hub, Smithery — from the warehouse.
read
rank_checkLive keyword-rank check (calls the storefronts now)
LIVE one-off check: queries Apple (iTunes Search), Google Play (search page) and the Microsoft Store search endpoint RIGHT NOW and returns this app's 1-based position per keyword x country x store, plus the top-5…
read
store_searchLive storefront search (top results for a keyword, as the public store paints them)
LIVE: runs one keyword through the PUBLIC Apple App Store (iTunes Search) and/or Google Play search for one country and returns the top results IN ORDER with rank, app_id (Apple trackId / Play package), name, developer,…
read
store_app_lookupPublic listing facts for ONE app (competitor listing audit)
LIVE: reads one app's PUBLIC product listing — Apple via the iTunes Lookup API (app id or bundle id), Google Play via the product page — for one country and returns name, developer, rating, ratings_count, price,…
read
rank_historyKeyword-rank history from the warehouse
Warehouse-only (no network): tracked keyword positions over the last N days per store leg x keyword x country, with latest / best / worst / change.
read
rank_keywords_getRead the tracked keyword sets
The keyword sets the ranks adapter tracks, per app (the Keywords page).
read
apple_review_replyApple: reply to an App Store review (gated)
Posts (or replaces) the developer response under one App Store review.
write
play_review_replyPlay: reply to a Google Play review (gated)
Posts (or edits) the developer reply under one Google Play review.
write
ms_review_replyMicrosoft Store review response (gated write)
Posts the developer response under one Microsoft Store review through the Partner Center 'respond to reviews' API.
write
rank_keywords_setReplace one app's tracked keyword set
Replaces (not merges) the keywords and countries tracked for one app and saves the set.
write

Why a number can differ from your store console

  • Dates are store days. Every date is the day the store reported it, never moved into your time zone. Apple's App Analytics days are UTC, Apple's Sales and Trends days (proceeds, units) are Pacific Time, and Google Play's financial reports are UTC. A console set to another time zone splits the same events across different days.
  • Downloads means first-time acquisitions. Apple first-time downloads, Google Play store listing acquisitions and Microsoft acquisitions. Redownloads, Play's total installs and device install counters are separate metrics, never added in.
  • Each store has its own delay. Apple sends analytics a day or two later; Google Play publishes its statistics as monthly files several days behind. Each series is compared on its own newest day, so a store that is still catching up shows as behind, not as a drop to zero.
  • Small counts can be adjusted by the store. Apple adds privacy noise to small App Analytics counts, so a day with a handful of downloads can read differently from a total you add up yourself.
  • Conversion uses each store's own definition. Apple: downloads divided by unique impressions. Google Play: downloads divided by store listing visitors. Every answer names its basis.
  • Every number says how far to trust it: exact, privacy_noised, lagged, legacy_untrusted or proxy (keyword ranks and package downloads are proxies, not installs).