Skip to main content

View charges and earnings

You can view data on charges and transactions using the following mechanisms:


Anchor to App charge data in the Partner DashboardApp charge data in the Partner Dashboard

You can view the following data by page in the Partner Dashboard:

Data by page in the Partner Dashboard
PageData
App charge overview
  • Recurring app subscription charges
  • Usage-based app subscription charges
  • One-time app charges
StoreApp charges for a specific store
PayoutsApp charges for a specific payout
App historyApp charge details

Anchor to App charge overview pageApp charge overview page

Note

In the event of a discrepancy between the overview page and the Payouts page, the information on the Payouts page should be considered the accurate reference.

The app charge overview page provides the most comprehensive information regarding charges and earnings. The page provides the following details:

  • 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. The payout link isn't applicable to pending payouts.

    The app charge overview page listing details for a subscription to a Basic plan. The overview 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

    The overview page includes additional charge details for subscription charges.

Anchor to Subscription charge detailsSubscription charge details

You can view the following additional details for subscription charges:

  • 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.
    Canceled

    The merchant or the developer canceled the subscription

    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.

    FrozenThe subscription is on hold due to a store subscription non-payment. The charge reactivates after the subscription payments resume.
    ExpiredThe merchant didn't accept the charge within two non-business days.

Anchor to Transaction data through the GraphQL Admin APITransaction data through the GraphQL Admin API

You can use the following billing resources on the GraphQL Admin API to view transaction data:

Data by GraphQL Admin API resource
Transaction dataResourceLearn how
Single app purchaseAppPurchaseOneTimeExample
Multiple app purchasescurrentAppInstallationExample
Single app subscriptioncurrentAppInstallationExample
Multiple app subscriptionAppSubscriptionExample
App usage records for a single subscriptionAppSubscriptionExample
App usage records for multiple subscriptionscurrentAppInstallationExample
App usage recordcurrentAppInstallationExample

You can view your app's revenue and retrieve data on transactions using the following mechanisms:

  • To use the Partner Dashboard, you require a Partner account.

  • To view the Partner Dashboard's app charge overview and Payouts pages, store owners and staff require the View financials permission.

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

Anchor to Viewing app charges in the Partner DashboardViewing app charges in the Partner Dashboard

The following procedures explain how to view app charges and data from the Partner Dashboard:

Anchor to App charge overview pageApp charge overview page

  1. From the Partner Dashboard, click Apps

    .
  2. Select the app that you want to view charges for.
  3. On the Overview page, scroll to Latest app history.
  4. Optional: Select View all app history and navigate through the pages.
  5. In the Event Details column, click Open payments.
  6. To view transaction details, next to a transaction click the inverted caret (â–¼).

  1. From the Partner Dashboard, click Apps

    .
  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.

  1. From the Partner Dashboard, click Apps

    .
  2. In the sidebar, click Payouts.
  3. On the Payouts page, click the payout with the app charges that you want to check.
  4. Next to the app charge that you want to check, click the link in the Type column.
  5. For details, next to a transaction click the inverted caret.

  1. From the Partner Dashboard, click Apps

    .
  2. Click the name of the app with the charges that you want to check.
  3. In the sidebar, click Insights > App history.
  4. In the table next to the app charge that you want to check, in the Event Details column, click Open payments.
  5. For details, next to a transaction click the inverted caret.

Anchor to Querying billing data with the GraphQL Admin APIQuerying billing data with the GraphQL Admin API

Use the following examples to familiarize yourself with billing data in the GraphQL Admin API. The currency code must be one of the supported currencies.

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 Payouts page.

The following is an example:

POST https://{shop}.myshopify.com/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/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/api/{api_version}/graphql.json

GraphQL query

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

JSON response

{
"data": {
"node": {
"billingInterval": "EVERY_30_DAYS",
"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": {
"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/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/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 record for a single subscription 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/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/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?