Skip to main content

View charges and earnings

App charge data covers what merchants pay for your apps, including subscription, usage, and one-time charges, and what you earn from those charges in your payouts.

Start with what you need:


  • To view Payouts in your organization settings, you need to be a user on the organization with the View financials permission.

  • To use the Partner Dashboard, you need a Partner account. To view a charge's details there, you also need to be a user on the organization with the View financials permission.

  • To use the GraphQL Admin API, your app must be able to make authenticated requests to the API.


You can view charges by payout, app, or store. Start from a payout to see what you were paid for, or from an app or store to find a specific merchant's charge.

Anchor to View the charges in a payoutView the charges in a payout

  1. In the Dev Dashboard, click Organization settings.
  2. Click Payouts.
  3. In Past payouts, click the payout that you want to check. Past payouts lists your most recent payouts, so if you don't see it, then click View all.

The payout lists its transactions. Each row shows the date, the app or theme, the charge type, the store, and the amount. To show only app or only theme transactions, click the Apps or Themes tab.

In each row, a linked charge type opens that charge's details, and a linked app or store name opens its page.

Anchor to View the charges for an appView the charges for an app

  1. Open App distribution on your Partner Dashboard.

  2. Click the name of the app with the charges that you want to check.

  3. Open the app's history:

    • On the Overview page, scroll to Latest app history. To see more than the latest events, click View all app history.
    • Or, in the Partner Dashboard sidebar, click Insights > App history.
  4. In the Event Details column for the app charge that you want to check, click Open payments.

The charge's details open.

Anchor to View the charges for a storeView the charges for a store

  1. Open App distribution on your Partner Dashboard.
  2. In the search bar, enter the name of the store with the app charges that you want to check.
  3. In the search results, select the store.
  4. Next to the app charge that you want to check, click the link in the Details column.

The charge's details open.

For totals rather than individual charges, use the Dev Dashboard and your organization settings:

To seeGo to
One store's totals across your apps and themesIn Stores, click the store. If you have the View financials permission, then its Earnings card shows Total app earnings, Total theme earnings, and Recurring revenue share.
One app's earnings and history on one storeOn your app's Overview, click the install count on the Installs card, and then click the store. Its app history page shows App earnings, which is gross, and the store's Activity. Refer to View one store's app history.
The transactions in a payoutPayouts in your organization settings. Refer to View the charges in a payout.

Anchor to Review charge detailsReview charge details

Each charge has an app charge overview page in the Partner Dashboard. It shows:

  • Merchant information, including a link to the store where the app is installed

  • The name of the app that the merchant was charged for, including a link to the app

  • The status of the app charge or subscription

  • The list of merchant payment transactions that are associated with the charge

    Clicking the arrow (â–¼) next to a transaction displays the following details:

    • An itemized list of the Shopify revenue share fee, processing fee, and your net profit as the app's developer

    • A link to the Partner payout that includes the app charge. Pending payouts don't have a payout link.

The details page for a subscription to a Basic plan. The page includes the app subscription ID, a clickable link to the app and the store on which the app is installed, payment invoice details, and the option to issue a refund
Note

If a charge's details and its payout disagree, then the payout is correct.

Anchor to Subscription charge detailsSubscription charge details

Subscription charges also show the following details:

  • A description of the charge, such as $15 every 30 days for an app subscription charge.

  • The date on which the charge was created.

  • The charge's status, which can be one of the following:

    Charge statuses
    StatusDescription
    PendingThe merchant hasn't yet approved or declined the charge.
    Activated

    The charge is currently active.

    For some payments, such as wire transfers, Shopify marks the charge as active when the payment is in flight.

    DeclinedThe merchant declined the charge.
    CanceledThe merchant or the developer canceled the subscription.
    Frozen

    The subscription is on hold due to a store subscription non-payment. The charge reactivates after the subscription payments resume.

    If a payment doesn't go through, then Shopify retries the charge. Only shut off a merchant's app access after Shopify freezes the charge.

    ExpiredThe merchant didn't accept the charge within two days.

From a single payout, you can export your earnings data, your Shopify fees invoice, and a payout statement. You can also export earnings data for several payouts at once.

Anchor to Export data for one payoutExport data for one payout

  1. In the Dev Dashboard, click Organization settings.

  2. Click Payouts.

  3. In Past payouts, click the payout that you want to export data for.

  4. Click Export, and then select Earnings CSV, Shopify fees invoice, or Payout statement.

    Referral payouts offer Referral commission invoice instead of Shopify fees invoice. Payouts that aren't sales or referral payouts offer only Earnings CSV.

Anchor to Export data for multiple payoutsExport data for multiple payouts

  1. In the Dev Dashboard, click Organization settings.
  2. Click Payouts.
  3. In Past payouts, click View all.
  4. Click Export.
  5. Select the payouts that you want to export: All payouts, Last 6 months, Last 12 months, or Last year.
  6. Click Export.

The export is emailed to you.


Anchor to Query charges with the GraphQL Admin APIQuery charges with the GraphQL Admin API

Use the following billing resources on the GraphQL Admin API to read charge data from your app.

Data by GraphQL Admin API resource
DataResourceLearn how
Single app purchaseAppPurchaseOneTimeExample
Multiple app purchasescurrentAppInstallationExample
Single app subscriptionAppSubscriptionExample
Multiple app subscriptionscurrentAppInstallationExample
App usage records for a single subscriptionAppSubscriptionExample
App usage records for multiple subscriptionscurrentAppInstallationExample
App usage record by IDAppUsageRecordExample

You can query a single purchase or multiple purchases.

Query a single purchase with the AppPurchaseOneTime object. Pass the app purchase ID as an argument. You can retrieve this ID from the appPurchaseOneTimeCreate response when you create the purchase, or by querying multiple purchases.

The following is an example:

POST https://{shop}.myshopify.com/admin/api/{api_version}/graphql.json

GraphQL query

query {
node(id: "gid://shopify/AppPurchaseOneTime/5308422") {
... on AppPurchaseOneTime {
price {
amount
currencyCode
}
createdAt
id
name
status
test
}
}
}

JSON response

{
"data": {
"node": {
"price": {
"amount": "100.0",
"currencyCode": "USD"
},
"createdAt": "2023-09-01T19:17:09Z",
"id": "gid://shopify/AppPurchaseOneTime/5308422",
"name": "Super Duper Expensive action",
"status": "ACTIVE",
"test": true
}
},
...
}

Anchor to Multiple app purchasesMultiple app purchases

Query multiple purchases using currentAppInstallation. Specify the number of purchases to return by passing first or last as an argument.

The following is an example:

POST https://{shop}.myshopify.com/admin/api/{api_version}/graphql.json

GraphQL query

query {
currentAppInstallation {
oneTimePurchases(first: 2) {
edges {
node {
...on AppPurchaseOneTime {
price {
amount
currencyCode
}
createdAt
id
name
status
test
}
}
}
}
}
}

JSON response

{
"data": {
"currentAppInstallation": {
"oneTimePurchases": {
"edges": [
{
"node": {
"price": {
"amount": "100.0",
"currencyCode": "USD"
},
"createdAt": "2023-08-30T19:17:09Z",
"id": "gid://shopify/AppPurchaseOneTime/5308422",
"name": "Super Duper Expensive action",
"status": "ACTIVE",
"test": true
}
},
{
"node": {
"price": {
"amount": "100.0",
"currencyCode": "USD"
},
"createdAt": "2023-09-01T18:22:00Z",
"id": "gid://shopify/AppPurchaseOneTime/5701638",
"name": "Another Super Duper Expensive action",
"status": "EXPIRED",
"test": true
}
}
]
}
}
},
...
}

You can query a single subscription or multiple subscriptions.

Anchor to Single app subscriptionSingle app subscription

Query a single subscription using the AppSubscription object. Pass the subscription ID as an argument.

The subscription ID is returned when you create a subscription. The AppSubscription object can also return the app subscriptions that are associated with the installation.

The following is an example:

POST https://{shop}.myshopify.com/admin/api/{api_version}/graphql.json

GraphQL query

query {
node(id: "gid://shopify/AppSubscription/4019585080") {
...on AppSubscription {
createdAt
currentPeriodEnd
id
name
status
test
lineItems {
plan {
pricingDetails {
...on AppRecurringPricing {
interval
price {
amount
currencyCode
}
}
...on AppUsagePricing {
interval
terms
cappedAmount {
amount
currencyCode
}
balanceUsed {
amount
currencyCode
}
}
}
}
}
}
}
}

JSON response

{
"data": {
"node": {
"createdAt": "2023-09-01T15:50:50Z",
"currentPeriodEnd": null,
"id": "gid://shopify/AppSubscription/4019585080",
"name": "Super Duper Capped Pricing Plan",
"status": "CANCELLED",
"test": true,
"lineItems": [
{
"plan": {
"pricingDetails": {
"interval": "EVERY_30_DAYS",
"terms": "$1 for 100 emails",
"cappedAmount": {
"amount": "20.0",
"currencyCode": "USD"
},
"balanceUsed": {
"amount": "0.0",
"currencyCode": "USD"
}
}
}
}
]
}
},
...
}

Anchor to Multiple app subscriptionsMultiple app subscriptions

Query multiple subscriptions using currentAppInstallation. Specify the number of subscriptions to return by passing first or last as an argument.

The following is an example:

POST https://{shop}.myshopify.com/admin/api/{api_version}/graphql.json

GraphQL query

query {
currentAppInstallation {
allSubscriptions(first: 2) {
edges {
node {
lineItems {
plan {
pricingDetails {
__typename
... on AppRecurringPricing {
price {
amount
currencyCode
}
}
... on AppUsagePricing {
balanceUsed {
amount
currencyCode
}
cappedAmount {
amount
currencyCode
}
}
}
}
}
createdAt
id
name
status
test
}
}
}
}
}

JSON response

{
"data": {
"currentAppInstallation": {
"allSubscriptions": {
"edges": [
{
"node": {
"lineItems": [
{
"plan": {
"pricingDetails": {
"__typename": "AppRecurringPricing",
"price": {
"amount": "4.99",
"currencyCode": "USD"
}
}
}
},
{
"plan": {
"pricingDetails": {
"__typename": "AppUsagePricing",
"balanceUsed": {
"amount": "0.0",
"currencyCode": "USD"
},
"cappedAmount": {
"amount": "100.0",
"currencyCode": "USD"
}
}
}
}
],
"createdAt": "2023-08-30T17:00:16Z",
"id": "gid://shopify/AppSubscription/2816132",
"name": "Gift Basket Plan",
"status": "EXPIRED",
"test": true
}
},
{
"node": {
"lineItems": [
{
"plan": {
"pricingDetails": {
"__typename": "AppRecurringPricing",
"price": {
"amount": "4.99",
"currencyCode": "USD"
}
}
}
},
{
"plan": {
"pricingDetails": {
"__typename": "AppUsagePricing",
"balanceUsed": {
"amount": "0.0",
"currencyCode": "USD"
},
"cappedAmount": {
"amount": "100.0",
"currencyCode": "USD"
}
}
}
}
],
"createdAt": "2023-09-01T19:42:43Z",
"id": "gid://shopify/AppSubscription/2962896",
"name": "Gift Basket Plan",
"status": "EXPIRED",
"test": true
}
}
]
}
}
},
...
}

Query an app usage record for a single subscription or records for multiple subscriptions. You can also query a specific app usage record by its ID.

Anchor to App usage records for a single subscriptionApp usage records for a single subscription

Query the app usage record for a single subscription using the AppSubscription object. Pass the subscription ID as an argument. You can specify the number of records to return by passing first or last as an argument.

The subscription ID is returned when you create a subscription. The AppSubscription object can also return the app subscriptions that are associated with the installation.

The following is an example:

POST https://{shop}.myshopify.com/admin/api/{api_version}/graphql.json

GraphQL query

query {
node(id: "gid://shopify/AppSubscription/4019585080") {
...on AppSubscription {
lineItems {
usageRecords(first: 5) {
edges {
node {
id
description
createdAt
price {
amount
currencyCode
}
}
}
}
}
}
}
}

JSON response

{
"data": {
"node": {
"lineItems": [
{
"usageRecords": {
"edges": [
{
"node": {
"id": "gid://shopify/AppUsageRecord/14518231",
"description": "Super Mega Plan 1000 emails",
"createdAt": "2019-05-30T16:03:31Z",
"price": {
"amount": "1.0",
"currencyCode": "USD"
}
}
}
]
}
}
]
}
},
...
}

Anchor to App usage records for multiple subscriptionsApp usage records for multiple subscriptions

Query the app usage records for multiple subscriptions using currentAppInstallation. You can get the usageRecords from the lineItems field of allSubscriptions. Specify the number of records to return by passing first or last as an argument.

POST https://{shop}.myshopify.com/admin/api/{api_version}/graphql.json

GraphQL query

query {
currentAppInstallation {
allSubscriptions(first: 2) {
edges {
node {
id
status
lineItems {
id
usageRecords(first: 5) {
edges {
node {
id
description
createdAt
price {
amount
currencyCode
}
}
}
}
}
}
}
}
}
}

JSON response

{
"data": {
"currentAppInstallation": {
"allSubscriptions": {
"edges": [
{
"node": {
"id": "gid://shopify/AppSubscription/2816132",
"status": "EXPIRED",
"lineItems": [
{
"id": "gid://shopify/AppSubscriptionLineItem/2816132?v=1&index=0",
"usageRecords": {
"edges": []
}
},
{
"id": "gid://shopify/AppSubscriptionLineItem/2816132?v=1&index=1",
"usageRecords": {
"edges": []
}
}
]
}
},
{
"node": {
"id": "gid://shopify/AppSubscription/2962896",
"status": "EXPIRED",
"lineItems": [
{
"id": "gid://shopify/AppSubscriptionLineItem/2962896?v=1&index=0",
"usageRecords": {
"edges": []
}
},
{
"id": "gid://shopify/AppSubscriptionLineItem/2962896?v=1&index=1",
"usageRecords": {
"edges": []
}
}
]
}
}
]
}
}
},
...
}

Anchor to App usage record by IDApp usage record by ID

Query a specific app usage record using the AppUsageRecord object. Pass the app usage record ID as an argument.

POST https://{shop}.myshopify.com/admin/api/{api_version}/graphql.json

GraphQL query

query {
node(id: "gid://shopify/AppUsageRecord/14518231") {
...on AppUsageRecord {
createdAt
description
id
price {
amount
currencyCode
}
}
}
}

JSON response

{
"data": {
"node": {
"createdAt": "2023-09-01T16:03:31Z",
"description": "Super Mega Plan 1000 emails",
"id": "gid://shopify/AppUsageRecord/14518231",
"price": {
"amount": "1.0",
"currencyCode": "USD"
}
}
},
...
}

Was this page helpful?