Question

I am using the Stripe.net library to make calls against the Stripe API.

I would like to get a total count of subscribers for various Plans but I am not sure if this is possible with the current API and/or the Stripe.NET Library at all.

Can anyone provide any insight as to whether or not this is possible?

Was it helpful?

Solution 2

There's no direct call for this, but it's easy enough to accomplish.

The "List all customers" API call (StripeCustomerService's List() method in Stripe.Net) returns the full JSON object for each customer, including their subscription and plan information. You can easily iterate through that and build your list of subscriber counts.

Note that if you have a lot of users, you'll have to retrieve the customer list in chunks. The API call is capped at 100 records (with a default of 10) and accepts an offset. For easy traversal of the list, the count property in Stripe's JSON response is the total number of customer records.

So for a basic outline, your strategy would be:

  1. Request 100 records via List()
  2. Calculate the number of additional requests required
  3. Process the initial 100 records
  4. Request 100 records via List(), offset by 100 * iteration
  5. Process the current 100 records
  6. Repeat 4 & 5 until records are exhausted

OTHER TIPS

I found that this works: (sorry, this is PHP)

$subscriptions = \Stripe\Subscription::all(array('limit' => 1, 'plan' => 'plan-name-here', 'status' => 'trialing|active|past_due|unpaid|all', 'include[]' => 'total_count'));
echo $subscriptions->total_count;

I understand that you're implementing this for .NET, but here's a sample Ruby implementation:

limit = 100
last_customer = nil

while limit == 100 do 
  customers = Stripe::Customer.list(limit: limit, starting_after: last_customer)

    # Do stuff to with customers
    # the list is in customers.data

    # save the last customer to know the offset
    last_customer = customers.data.last.id 
  end
end

If you're using Stripe.net package, you can use StripeSubscriptionService to get list of subscriptions for a plan. So you don't need to iterate through all customers.

var planService = new StripePlanService();
var planItems = planService.List(new StripeListOptions()
{
  Limit = 10 // maximum plans to be returned
});

foreach(var planItem in planItems)
{
  var subscriptionService = new StripeSubscriptionService();
  var stripeSubscriptions = subscriptionService.List(new StripeSubscriptionListOptions
  {
    PlanId = planItem.Id
  });

  // Do your calculation here
}

They have a better documentation for .NET in their site now. You can find the complete information here https://stripe.com/docs/api/dotnet

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top