-
Notifications
You must be signed in to change notification settings - Fork 38
Flush money via PayPal MassPay #1219
Comments
SELECT sum(p.balance)
FROM participants p
WHERE exists (select 1 from email_addresses e where e.participant_id = p.id)
OR exists (select 1 from elsewhere e where e.email like '%@%' and e.participant = p.username);
sum
----------
63171.28 |
Probably worth individually contacting the top 100 or so folks. Could we clear out half the money that way?
|
|
On the other hand a lot of that is probably also included in #1219 (comment), so makes sense to first do the general blast via PayPal and then follow up with targeted based on state of play at that point. |
We have multiple email addresses for some people, for others we have none.
|
Well, code and data. Will (cross?)post code publicly as it develops. |
Per inspection, nobody has more than five addresses on file. Tooling:
|
SELECT p.balance
, (select count(*) from elsewhere e where e.email like '%@%' and e.participant = p.username) as n
, p.username
, p.email_address as address_1
, (select e.email from elsewhere e where e.email like '%@%' and e.participant = p.username limit 1) as address_2
, (select e.email from elsewhere e where e.email like '%@%' and e.participant = p.username offset 1 limit 1) as address_3
, (select e.email from elsewhere e where e.email like '%@%' and e.participant = p.username offset 2 limit 1) as address_4
, (select e.email from elsewhere e where e.email like '%@%' and e.participant = p.username offset 3 limit 1) as address_5
INTO tmp
FROM participants p
WHERE balance > 0
ORDER BY n desc, balance desc; |
Fits in a batch. 👍 |
|
Per old logs, currency type is |
#!/usr/bin/env python3
import csv
from collections import OrderedDict
from decimal import Decimal as D
payouts = csv.reader(open('payouts.csv'))
masspay = csv.writer(open('masspay.csv', 'w+'))
headers = next(payouts)
blacklist = set(open('blacklist.csv').read().splitlines())
total = D('0.00')
for row in payouts:
balance = row[0]
addresses = list(OrderedDict.fromkeys(row[3:]))
for address in addresses:
if not address or address in blacklist:
continue
masspay.writerow([address, balance, 'usd'])
total += D(balance)
break
print(total) |
Will give that time to clear (trip fraud?) and write up a blog post! |
💃 |
This evening, I hand-delivered $420 in cash to someone who is friends with someone who had money escrowed with us. 💃 |
What about fees on PayPal don't we have to downcharge or somesuch? |
Prepping a chart for the blog post.
alter table tmp add column bucket int default 0;
update tmp set bucket=0 where balance >= 0 and balance < 10;
update tmp set bucket=1 where balance >= 10 and balance < 100;
update tmp set bucket=2 where balance >= 100 and balance < 1000;
update tmp set bucket=3 where balance >= 1000;
alter table tmp add column has_email bool default false;
update tmp
set has_email=true
where coalesce(address_1, address_2, address_3, address_4, address_5) is not null
;
select count(balance) n, sum(balance) s from tmp group by bucket order by bucket desc;
select count(balance) n, sum(balance) s from tmp where has_email group by bucket order by bucket desc;
|
|
|
Submitted to https://gratipay.news/: https://gratipay.news/paypal-push-aeb2e985d537 cc: @Changaco |
I've confirmed that I have access to the {paypal,support}@gratipay.com email addresses. |
Hmm ... actually ... maybe we should manually pursue the n=13 that are > $1000 first? And then do a masspay for the long tail? |
Yeah let's do that: #1225. |
Ftr PayPal makes it pretty easy to connect a second email address to an existing account. I just did that for |
https://github.com/gratipay/logs/commit/c02f9d5790db84c9d04d72ca9e8434b3bd921fc3
|
I've gone through accounts with no email down to $100 and have manually located an email address (mostly by harvesting GitHub and reaching out on Twitter). I have started a transfer of another $20,000 from New Alliance to PayPal (leaving about $23,000 remaining in New Alliance). Once that clears I will process another MassPay. Perhaps I will locate emails for accounts down to $69 to cover the third quartile by volume ... I am going to manually pay out a few based on representations I made on Twitter that these would go out today/tomorrow. |
https://github.com/gratipay/logs/commit/8afd2aaa92792ea8c75e53f0d2f00f3bf392df4f Done down to $69. 👍
|
Made those few individual payouts as well. |
Okay! Got another MassPay ready ... |
MassPay № 2 is still "Processing," making me kinda nervous ... |
Yoi! Called PayPal, stuck on (silent) hold a loooong time (long enough to read the captions on all of the Bergeron's Christmas cards). Sounds like they're stumped! The dude was like, "the resolution specialist's manager is going to give you an email"—like, this was super weird for him. 😂 🤞 |
https://github.com/gratipay/logs/commit/ca14c79d1cf2b5aa8b39366248377c9f510353a9
|
With #1226 we have another batch of masspays to submit! 💃
|
Fee caps updated in https://github.com/gratipay/logs/commit/2767fc6419cf849d09b16fc01bfcb9012bd41271 ... |
Lines up ...
|
Sent! |
Hopefully this one doesn't take as long to post! 😆 |
Posted! 💃 Fixed a bug in https://github.com/gratipay/logs/commit/b4ae65b5e6f3edc5fc7342deff5f51ac9a55b640 that overstated disbursed as 98% when it's still 97.7%.
Can we get to 98% over the next month or two!?!? 🤞 |
https://github.com/gratipay/logs/commit/de5d6c33c7a3bba5c2fa0bd56f17e31d010ec311
|
Single ready payout handled manually in https://github.com/gratipay/logs/commit/f96489d5cbb268660173170c429102d94ae8da77. 👍
Okay! Now we wait ... |
Third MassPay: https://www.paypal.com/activity/masspay/MPA-SHFNU2CLL6GFE Consolidated links in issue description. |
MassPays
Reticketing from #1205 (comment):
The text was updated successfully, but these errors were encountered: