# 收入与 Apple Ads 接口 > https://storelift.net/zh/docs/api/growth/ 每款应用已连接的数据来源:收入、订阅事件、App Store 转化漏斗、价格和优惠代码、一次改动前后的对比,以及 Apple Ads 的广告系列、关键词、搜索词和命令。权限范围为 revenue:read 和 ads:read。 基础 URL `https://storelift.net/v1` · 身份验证、额度和通用参数:https://storelift.net/zh/docs/api/ ## GET /apps/{appId}/revenue Revenue and downloads for one app from the sources the user connected: App Store Connect daily units per country, Google Play daily installs, and RevenueCat MRR, 28-day revenue, active subscriptions and trials with the MRR movement breakdown. connected=false means no source is connected; measured=false means the sources hold no rows for this app. Nothing here is estimated. 权限范围: `revenue:read` · 额度: 1 · 套餐: Pro - `appId` (path, string, 必填) — app id from list_apps - `days` (query, integer) — how many days of daily series to return, 1–365 (default 90) ```sh curl "https://storelift.net/v1/apps/sbx-lumen/revenue" \ -H "Authorization: Bearer $STORELIFT_API_KEY" ``` ## GET /apps/{appId}/subscriptions Subscription event counts for one app from the RevenueCat / Adapty webhook: per day and per country — trial starts, trial conversions, paid starts, renewals, cancellations, refunds, billing issues and revenue — plus monthly cohorts (users, payers). Counts are events, not users. connected=false means no webhook is connected. 权限范围: `revenue:read` · 额度: 1 · 套餐: Pro - `appId` (path, string, 必填) — app id from list_apps - `days` (query, integer) — window in days, 1–365 (default 90) ```sh curl "https://storelift.net/v1/apps/sbx-lumen/subscriptions" \ -H "Authorization: Bearer $STORELIFT_API_KEY" ``` ## GET /apps/{appId}/funnel The App Store conversion funnel for one app from App Store Connect analytics: impressions → product page views → downloads, today's point plus the day-by-day history, with the traffic-source and custom-product-page breakdowns when Apple provides them. Google Play has no equivalent here. connected=false means App Store Connect is not connected. 权限范围: `revenue:read` · 额度: 1 · 套餐: Pro - `appId` (path, string, 必填) — app id from list_apps - `days` (query, integer) — history window in days, 1–365 (default 90) ```sh curl "https://storelift.net/v1/apps/sbx-lumen/funnel" \ -H "Authorization: Bearer $STORELIFT_API_KEY" ``` ## GET /apps/{appId}/campaigns Apple Ads campaigns that promote one app (matched by the app's App Store id, not by name): spend, impressions, taps, installs, budget and serving status per campaign over the last 28 days, the totals, and the top keywords and search terms by spend. Spend is in the account's own currency (`currency`). connected=false means Apple Ads is not connected. 权限范围: `ads:read` · 额度: 1 · 套餐: Pro - `appId` (path, string, 必填) — app id from list_apps ```sh curl "https://storelift.net/v1/apps/sbx-lumen/campaigns" \ -H "Authorization: Bearer $STORELIFT_API_KEY" ``` ## GET /apps/{appId}/ads-keywords Every Apple Ads keyword bought for one app across its campaigns (last 28 days), by spend: bid, match type, ad group, spend, impressions, taps, installs, tap-through rate, conversion rate, cost per tap and cost per install, with the app's organic rank for the same word in the country next to it (tracked:false when the word is not tracked). Pass campaign to narrow to one campaign. connected=false means Apple Ads is not connected. 权限范围: `ads:read` · 额度: 1 · 套餐: Pro - `appId` (path, string, 必填) — app id from list_apps - `country` (query, string) — country code for the organic rank column (defaults to the app's first country) - `campaign` (query, string) — campaign id to narrow to one campaign ```sh curl "https://storelift.net/v1/apps/sbx-lumen/ads-keywords?country=us" \ -H "Authorization: Bearer $STORELIFT_API_KEY" ``` ## GET /apps/{appId}/ads-search-terms The searches people actually typed that triggered the app's Apple Ads (last 28 days), by spend: the search term, the keyword and match type that caught it, spend, taps, installs, cost per tap and per install, and the app's organic rank for that search in the country side by side — the list of searches to add as keywords, to add as negatives, or to stop paying for because the app already ranks there. Terms Apple hides for low volume are summed under hidden. connected=false means Apple Ads is not connected. 权限范围: `ads:read` · 额度: 1 · 套餐: Pro - `appId` (path, string, 必填) — app id from list_apps - `country` (query, string) — country code for the organic rank column (defaults to the app's first country) - `campaign` (query, string) — campaign id to narrow to one campaign ```sh curl "https://storelift.net/v1/apps/sbx-lumen/ads-search-terms?country=us" \ -H "Authorization: Bearer $STORELIFT_API_KEY" ``` ## GET /apps/{appId}/ads-commands Apple Ads commands for one app's campaigns — from the dashboard, from automation rules and from confirm_action — newest first, each with its status: queued, applying, applied, failed or unknown (the write was interrupted and may or may not have reached Apple — check Apple Ads before sending it again), when it finished, the error if any, and the undo it carries. Pass id for a single command. 权限范围: `ads:read` · 额度: 1 · 套餐: Pro - `appId` (path, string, 必填) — app id from list_apps - `id` (query, string) — command id, as returned in the list, for one command ```sh curl "https://storelift.net/v1/apps/sbx-lumen/ads-commands" \ -H "Authorization: Bearer $STORELIFT_API_KEY" ``` ## GET /apps/{appId}/search-popularity Apple's own search popularity, from the Apple Ads account connected to this workspace: the most searched terms in the country for the app's category (weekly, Apple's order), each with rank in the category and popularity 1-100 (in category and country-wide) and 1-5 (the Apple Ads scale), plus every tracked keyword marked inTopTerms true or false. Pass terms to check more words. connected=false means Apple Ads is not connected. 权限范围: `ads:read` · 额度: 1 · 套餐: Pro - `appId` (path, string, 必填) — app id from list_apps - `country` (query, string) — country code, e.g. tr, us (defaults to the app's first country) - `terms` (query, string) — extra terms to look up, comma-separated, up to 50 - `limit` (query, number) — top terms to return, up to 200 (default 50) ```sh curl "https://storelift.net/v1/apps/sbx-lumen/search-popularity?country=us" \ -H "Authorization: Bearer $STORELIFT_API_KEY" ``` ## GET /apps/{appId}/pricing Product prices and offer codes for one app from the RevenueCat or Adapty webhook, over the last 365 days: per product and country, the price in force now (currency, local price, since when) and every fixed-price period with its trial starts, new paid subscriptions, trial conversions and revenue, plus each offer code with its first and last day and redemptions. A price change shows up as a new period, so before/after is read period by period. connected=false means neither webhook is connected. 权限范围: `revenue:read` · 额度: 1 · 套餐: Pro - `appId` (path, string, 必填) — app id from list_apps - `country` (query, string) — two-letter country code to narrow to one storefront - `product` (query, string) — store product id to narrow to one product ```sh curl "https://storelift.net/v1/apps/sbx-lumen/pricing?country=us" \ -H "Authorization: Bearer $STORELIFT_API_KEY" ``` ## GET /apps/{appId}/country-prices Country prices for one of the app's products, read from App Store Connect / Google Play (Pro): per country the local price, its USD value and index (US = 100), whether it is still Apple's (or Google's) automatic price, the median of rivals that localize their prices (multiplier against Apple's automatic price, with how many rivals) and the difference in percent, plus a suggested price rounded to an attractive price point with its reason (rival median or income band). Rivals are the app's manual iOS rivals; a country needs at least 3 of them to be compared. summary counts countries priced above and below rivals and still on the automatic price. state is not_connected, pending (the first read is not done yet), permission (the key's role can't read prices), no_products or ok. products lists the other products; pass product to switch. 权限范围: `revenue:read` · 额度: 1 · 套餐: Pro - `appId` (path, string, 必填) — app id from list_apps - `country` (query, string) — two-letter country code to return one row - `product` (query, string) — product id or SKU (defaults to the first product) ```sh curl "https://storelift.net/v1/apps/sbx-lumen/country-prices?country=us" \ -H "Authorization: Bearer $STORELIFT_API_KEY" ``` ## GET /apps/{appId}/change-impact What a change did: for one change day (a new version, screenshots, subtitle, keyword field, a campaign start — defaults to the latest change on the listing timeline) compares the same number of days before and after, side by side: keyword ranks (up/down/entered/dropped and the biggest moves), the App Store funnel (impressions, page views, downloads per day and the conversion rates), downloads from the sales report, and subscription revenue and trial/paid starts per day, each with the change in percent. The change day itself is left out of both windows. complete=false means the after window is still running. recentChanges lists the last change days to pick another one. 权限范围: `revenue:read` · 额度: 1 · 套餐: Pro - `appId` (path, string, 必填) — app id from list_apps - `country` (query, string) — country code for ranks and the listing timeline (defaults to the app's first country) - `day` (query, string) — change day YYYY-MM-DD (defaults to the latest change) - `window` (query, integer) — days on each side, 3–30 (default 7) ```sh curl "https://storelift.net/v1/apps/sbx-lumen/change-impact?country=us" \ -H "Authorization: Bearer $STORELIFT_API_KEY" ```