Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Batch credit card transactions (recurring contributions) #1916

Open
Tracked by #5895
alanna opened this issue Apr 9, 2019 · 27 comments
Open
Tracked by #5895

Batch credit card transactions (recurring contributions) #1916

alanna opened this issue Apr 9, 2019 · 27 comments
Labels
api Issues that require some work on the API (https://github.com/opencollective/opencollective-api) complexity → complex feature ocf

Comments

@alanna
Copy link
Contributor

alanna commented Apr 9, 2019

User story

As a backer, I want my various contributions to different Collectives to be paid with a single credit card transaction each month, to save on transaction fees, simplify record keeping, and prevent credit card security being flagged by too many transactions from the same company at once.

Best solution for this problem

Batch transactions the way Patreon does.

Currently, transaction fees are very high when you do a large number of small donations and charge each separately, putting individual backers off from supporting as many projects. We also get user support complaints because some banks will flag a credit card with multiple small transactions in a short time period to one vendor. Some users are having to unblock their card each month after their Open Collective transactions are processed.

MVP

There probably isn't a cheap and easy solution to this one. We'd have to invest in overhauling how financial transactions are processed. Unless Stripe offers some kind of off the shelf solution to this issue?

We offer bulk payments for sponsors to transfer a large amount to us in one go, and then allocate it to Collectives in the system, but smaller sponsors who want to give a small amount to a large number of projects find the bulk transaction process too cumbersome to be worth it to them.

Metrics

Larger numbers of small backers supporting lots of different Collectives.

Documentation

No documentation would be required, because this is how users expect it to work already.

@Betree Betree added api Issues that require some work on the API (https://github.com/opencollective/opencollective-api) complexity → complex feature labels Apr 9, 2019
@Betree
Copy link
Member

Betree commented Apr 9, 2019

Yes 💯

Stripe charges a fixed fee of $0.30 per transaction. On my personal account, I have something like 10 subscriptions to open-source collective projects. So in my case, the stripe commission would go from $3.00 to $0.30 (10x less).

We can get more data from DB if we want to estimate how much will be saved per month but I already think that we should go for this one as soon as possible.

Related docs:

@Betree
Copy link
Member

Betree commented Apr 10, 2019

The data:

  • We have 380 cases where the same user have multiple subscriptions to collectives of the same host
  • It represents a total of 1159 subscriptions.
  • Batching these transactions means making 380 calls to Stripe instead of 1159
  • Stripe charges $0.30 per transaction

So:

$0.30 * (1159 - 380) = $233.70

Conclusion

This feature would saves $233.70 each month in Stripe fees.

SQL query:

select count(number_of_subscriptions), sum(number_of_subscriptions) from (
	select count(o.id) as number_of_subscriptions from "Orders" o
	inner join "PaymentMethods" pm on o."PaymentMethodId" = pm.id
	inner join "Collectives" c on c.id = o."CollectiveId"
	inner join "Collectives" host on c."HostCollectiveId" = host.id
	where o.status = 'ACTIVE'
	and pm.service = 'stripe'
	group by o."FromCollectiveId", host.id
	having count(o.id) > 1
	order by number_of_subscriptions desc
) as number_of_subscriptions
count sum
380 1159

Copy link
Contributor

I'd love to do this.

@alanna alanna added the priority label Jul 3, 2019
@alanna alanna added important Should be considered for prioritisation as soon as possible and removed priority labels Jul 9, 2019
@stale stale bot added the stale label Oct 7, 2019
@Betree Betree changed the title Batch credit card transactions Batch credit card transactions (recurring contributions) Feb 3, 2020
@stale stale bot removed the stale label Feb 3, 2020
@stale stale bot added the stale label May 3, 2020
@alanna
Copy link
Contributor Author

alanna commented May 3, 2020

I still think this is a good idea and worthwhile. @Betree do you have an idea of how complicated of a project it would be? Could it be a bounty?

@stale stale bot removed the stale label May 3, 2020
@Betree
Copy link
Member

Betree commented May 4, 2020

It's a complex project, not sure how long it will take without proper specs but for a rough guess I'd say 2-5 days of work. It's too complex and sensitive for a bounty.

I agree that having that would be super nice.

@stale stale bot added the stale label Aug 2, 2020
Copy link
Contributor

bumping this up - we should do it eventually

@stale stale bot removed the stale label Aug 12, 2020
@opencollective opencollective deleted a comment from stale bot Aug 28, 2020
@opencollective opencollective deleted a comment from stale bot Aug 28, 2020
@opencollective opencollective deleted a comment from stale bot Sep 4, 2020
@znarf
Copy link
Member

znarf commented Sep 4, 2020

Updated numbers with a slightly different query (grouping by PaymentMethod.id).

SELECT "Collectives"."HostCollectiveId", COUNT(*), "PaymentMethods".*
FROM "Orders", "PaymentMethods", "Collectives"
WHERE "Orders"."status" = 'ACTIVE'
AND "Orders"."PaymentMethodId" =  "PaymentMethods"."id"
AND "Orders"."CollectiveId" = "Collectives"."id"
AND "Orders"."interval" = 'month'
AND "PaymentMethods"."type" = 'creditcard'
GROUP BY "Collectives"."HostCollectiveId",  "PaymentMethods"."id"
  • 9091 ACTIVE monthly recurring contributions
  • 8971 ACTIVE monthly recurring contributions backed by a credit card
  • 7203 total credit card transactions if batching
  • 6551 non-batchable transactions
  • 652 batches of more than 1 transaction
  • Up to 38 transactions batched together. Cases between 10 and 20 are common.
  • In the end, we would save 1768 credit card operations
  • Resulting in 530 dollars saved in payment processor fees monthly (cost of 0.30$ / transaction)

The main technical challenges are:

  • Adding some state for Payments in the database (necessary for Payment Intents requiring confirmation)
  • Splitting Payment Processor Fees on success
  • Implement partial refunds

Copy link
Contributor

I think we need to look both at the cost saving and at how many times we are hitting the same credit card in a day. For people with multiple subscriptions this is painful and it results in multiple emails, bank warnings, etc.

Potentially batching will result in less credit card errors as well as in cost savings for the collectives.

@stale
Copy link

stale bot commented Dec 6, 2020

This issue has been automatically marked as stale because it has not had recent activity. We haven't had the time to address it yet, but we want to keep it open. This message is just a reminder for us to help triage issues.

@stale stale bot added the stale label Dec 6, 2020
@alanna
Copy link
Contributor Author

alanna commented Dec 6, 2020

I think we should do this

@stale stale bot removed the stale label Dec 6, 2020
Copy link
Contributor

me too!

@alanna
Copy link
Contributor Author

alanna commented Feb 8, 2021

Can this please be prioritised? We set up a bunch of contributions from Protozoa to open source project we use recently, and it's extremely painful to have to manually go download one receipt for every single transaction each month and upload it to our accounting software.

I'm seriously considering cancelling our contributions because it's not worth the time it takes just to be able to give $5/mo to several open source projects. I wouldn't be surprised if other companies who need to account for every charge to their credit card this way feel the same and some have probably cancelled already.

@Betree @kewitz @znarf what's it going to take to get this done?

Copy link
Contributor

I want to have this solved as well - it is painful and it is more expensive for collectives as well, since the fixed part of the fee is charged multiple times instead of once. let's discuss for Q2

@alanna
Copy link
Contributor Author

alanna commented Feb 9, 2021

This issue has had the important tag for a year and a half already... I think all issues tagged important should be considered every quarter, and if they aren't prioritised we should either schedule when they are going to be done or declare them as not actually important (otherwise the important label loses any power).

@znarf
Copy link
Member

znarf commented Feb 9, 2021

We set up a bunch of contributions from Protozoa to open source project we use recently, and it's extremely painful to have to manually go download one receipt for every single transaction each month and upload it to our accounting software.

You may use a prepaid budget or a fund. To create a prepaid budget, just donate the desired amount to this tier: https://opencollective.com/opensource/contribute/prepaid-budget-15445/checkout

@alanna
Copy link
Contributor Author

alanna commented Feb 9, 2021

The Collectives are not all under OSC, so a prepaid budget won't work, right?

@znarf
Copy link
Member

znarf commented Feb 10, 2021

@alanna I don't know, you wrote it was Open Source projects so I was guessing a majority of them would be on the same host, OSC.

@znarf
Copy link
Member

znarf commented Mar 1, 2021

Removing important to see clearer in our priorities, it's just too complex for now.

@znarf znarf removed the important Should be considered for prioritisation as soon as possible label Mar 1, 2021
@Betree
Copy link
Member

Betree commented Mar 2, 2021

Just a note to say that batching won't be possible with PayPal recurring. Given the growth that we've seen with PayPal, we can expect that it will represent a large part of the contributions in the future, which could limit the potential benefits of implementing this issue.

@patcon
Copy link

patcon commented Mar 2, 2021

Interesting. Given that this pain is felt by administrators of high-volume donors, am I understanding correctly that admins could mitigate this paypal deficiency (with proper advice) by just opting to convert donations into another payment method? So in practice, it seems like this would mean:

  1. at platform level, less fees avoided than might be hoped, but
  2. at individual level (for high-volume donors), fully minimizing their pain

Which is to say the "limit to potential benefits" would only apply to (1) and not (2)

@alanna
Copy link
Contributor Author

alanna commented Mar 2, 2021

Will users be able to change payout methods of existing contributions from credit card to paypal once paypal recurring is live?

@Betree

This comment has been minimized.

@Betree
Copy link
Member

Betree commented Apr 20, 2021

Edit on my previous message: yes, users will be able to change their existing contributions from CC to PayPal once we release the feature publicly (that's only a matter of days now).

I've created #4206 to make an alternative proposal to this issue based on previous discussions. It's something that could work regardless of the payment method.

@BenJam
Copy link
Contributor

BenJam commented Sep 1, 2022

just leaning in to say that we will need this as a recondition to some of the measures in #5895

@darkdragon-001
Copy link

If I see it correctly, complexity is the main reason blocking this for so long. Therefore, I suggest splitting this up (divide and conquer 😉 ):

  1. Massively decrease payment processing fees by bundling orders #6025 mainly just allowing multiple transactions to the same host via single payment
  2. User flow to batch contributions under a single payment method #4206 adding manual UI
  3. The rest of automatic detection specified in this issue

I think all steps are small enough to start tackling soon, while each of them will already bring improvements on its own.

@alanna alanna added the ocf label Feb 16, 2023
@nicolo-ribaudo
Copy link

I discovered today that my bank charges me 0.50 EUR extra for each payment not in EUR -- batching them would let me save a couple euros per month :)

@darkdragon-001
Copy link

With the numbers in #1916 (comment) this feature would have saved already more than $20000 in payment processing fees if it was implemented when the issue was reported.

Could we please get work on this or any of the alternatives linked in this thread prioritized? Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
api Issues that require some work on the API (https://github.com/opencollective/opencollective-api) complexity → complex feature ocf
Projects
None yet
Development

No branches or pull requests

8 participants