Faits :
A.
A.a. Coopérative A._ (ci-après: A._) a pour mission d'alléger les tâches comptables et administratives de ses membres. Cette entreprise se charge d'adresser leurs factures aux clients, d'encaisser auprès de ceux-ci les montants dus et de les reverser aux commerçantes concernées. A cette fin, elle a développé un système de compte de dépôt offrant les fonctionnalités d'un compte courant; la commerçante octroie à ses fournisseurs l'autorisation de débiter directement son compte et habilite A._ à verser l'argent encaissé directement auxdits fournisseurs.
La société anonyme Z._ SA est une grossiste fournissant les commerçantes suisses.
A.b. La commerçante X._ SA, sise dans le canton de Zurich (ci-après: la commerçante zurichoise), détenait un compte de dépôt auprès de A._ et avait octroyé une autorisation de débit direct à Z._ SA.
Le 4 novembre 2015, la commerçante zurichoise a reconnu devoir à cette fournisseuse 464'370 fr. 10 au titre de factures impayées entre les mois d'août et d'octobre 2015.
Le 6 novembre 2015, la grossiste a résilié avec effet immédiat le contrat qui la liait à la commerçante zurichoise et a exigé la restitution des marchandises livrées en vertu de l'<ref-law> et de ses conditions générales, dont il ressortait que les produits livrés restaient sa propriété jusqu'au paiement complet du prix.
Le 9 novembre 2015, la commerçante zurichoise a restitué à Z._ SA des marchandises d'une valeur de 76'087 fr. 70.
A.c. La commerçante zurichoise a été déclarée en faillite le 24 novembre 2015.
A.d. Le 31 décembre 2015, Z._ SA a établi une "note de crédit" de 76'087 fr. 70 en faveur de la commerçante zurichoise, note qu'elle a transmise à A._ simultanément avec des factures concernant des commerçantes tierces qui lui avaient également octroyé une autorisation de débit direct (sur le processus de facturation globale et de recouvrement, cf. au surplus consid. 4.1 infra).
A ce moment-là, le solde du compte-dépôt de la commerçante zurichoise était négatif. A._ lui avait avancé de l'argent pour honorer des factures alors que le compte n'était pas suffisamment provisionné. Les factures de Z._ SA étaient cependant restées en souffrance.
A réception de la communication de Z._ SA, A._ a débité les comptes des commerçantes tierces concernées pour lui reverser l'argent encaissé, mais a retenu 76'087 fr. 70 qu'elle a inscrit au crédit du compte-dépôt de la commerçante zurichoise, diminuant d'autant son solde négatif (et par là même, la dette de la commerçante zurichoise envers A._ elle-même).
Constatant le 6 janvier 2016 la déduction pratiquée par A._, Z._ SA a protesté tant par téléphone que par courrier électronique du 7 janvier 2016. Le 20 janvier 2016, elle a mis A._ en demeure de lui payer 76'087 fr. 70, sans succès.
A.e. Le 10 mai 2016, A._ a reversé 76'087 fr. 70 à la masse en faillite de la commerçante zurichoise.
Z._ SA a produit dans cette faillite une créance de 464'370 fr. 10, en expliquant que le montant de 76'087 fr. 70 avait été retenu à tort par A._ et qu'il serait déduit de la créance produite dès restitution. La créance a été admise à hauteur du montant produit dans l'état de collocation du 12 juillet 2016. Le dividende pour les créances colloquées en 3e classe était estimé à 3 %.
A._ a également produit des créances admises pour un montant supérieur à un million de francs.
Le 1er septembre 2016, la masse en faillite de la commerçante zurichoise a cédé à A._ ses prétentions révocatoires à l'encontre de Z._ SA à hauteur de 76'087 fr. 70, en relation avec la marchandise récupérée.
B.
B.a. Z._ SA a saisi la justice genevoise d'une requête de conciliation le 21 novembre 2016, puis d'une demande visant à obtenir de A._ le paiement de 76'087 fr. 70 plus intérêts.
Dans sa réponse du 29 septembre 2017, A._ a conclu au rejet de la demande. Elle a notamment fait valoir qu'en raison de l'<ref-law>, elle avait dû reverser le montant litigieux à l'office des faillites, la commerçante zurichoise étant en faillite à réception de la note de crédit; partant, elle n'était plus enrichie. Elle a par ailleurs opposé en compensation la créance de même montant que lui avait cédée la masse en faillite de la commerçante zurichoise.
Par jugement du 28 août 2018, le Tribunal de première instance a entièrement admis les conclusions de la demande.
B.b. Statuant le 21 mai 2019 sur appel de A._, la Cour de justice genevoise a confirmé cette décision, dont les traits utiles à la discussion seront évoqués ci-dessous.
C.
A._ a saisi le Tribunal fédéral d'un recours en matière civile concluant au rejet intégral de la demande intentée par Z._ SA.
L'autorité précédente s'est référée à son arrêt.
L'intimée Z._ SA a conclu au rejet du recours.
La recourante a répliqué, suscitant une duplique de la partie adverse.

Considérant en droit :
1.
Les conditions de recevabilité du recours en matière civile sont réalisées sur le principe, notamment celles afférentes au délai (<ref-law>) et à la valeur litigieuse minimale de 30'000 fr. (<ref-law>). Demeure réservée, à ce stade, la recevabilité des griefs en particulier.
2.
2.1. Le recours en matière civile peut être formé pour violation du droit fédéral (<ref-law>). Le Tribunal fédéral applique le droit d'office (<ref-law>). Eu égard, toutefois, à l'exigence de motivation contenue à l'art. 42 al. 1 et 2 LTF, sous peine d'irrecevabilité (<ref-law>), le Tribunal fédéral n'examine d'ordinaire que les griefs invoqués, sauf en cas d'erreurs juridiques manifestes (<ref-ruling> consid. 2.6 p. 413; <ref-ruling> consid. 2 p. 116; <ref-ruling> consid. 1.4 p. 400).
2.2. Le Tribunal fédéral statue sur la base des faits établis par l'autorité précédente (<ref-law>). Il ne peut rectifier ou compléter les constatations de l'autorité précédente que si elles sont manifestement inexactes ou découlent d'une violation du droit au sens de l'<ref-law> (<ref-law>). "Manifestement inexactes" signifie ici "arbitraires" (ATF <ref-ruling> consid. 2 p. 117; <ref-ruling> consid. 1.5). La critique de l'état de fait retenu est soumise au strict principe d'allégation énoncé à l'<ref-law> (<ref-ruling> consid. 2.3 p. 266 et les références). La partie qui entend attaquer les faits constatés par l'autorité précédente doit expliquer clairement et de manière circonstanciée en quoi ces conditions seraient réalisées (<ref-ruling> consid. 1.3.1 p. 18 et les références).
3.
Les griefs de A._ s'articulent autour de deux thèmes: d'une part, l'autorité précédente aurait violé l'<ref-law> en retenant à tort un enrichissement illégitime donnant lieu à restitution; d'autre part, elle aurait écarté à mauvais escient son exception de compensation.
Ces questions seront examinées successivement.
4.
4.1. Les deux décisions cantonales ont rapporté les explications données par Z._ SA et A._ concernant le système d'encaissement des factures via A._.
Il en ressort que la grossiste adressait à A._ un fichier regroupant toutes les factures des commerçantes auxquelles elle avait livré des marchandises. Si les comptes des commerçantes étaient suffisamment provisionnés, A._ reversait l'argent à Z._ SA. Lorsque le fichier comportait une note de crédit en sus des factures, le compte de la commerçante bénéficiaire était automatiquement crédité et le montant de la grossiste était diminué d'autant. A._ a précisé que l'exécution des débits directs se faisait de manière automatique et sous forme d'un seul paiement. Aucune relation n'était faite entre les factures impayées d'une commerçante envers un certain fournisseur et une note de crédit émise par ce même fournisseur en faveur de cette même commerçante. La note de crédit était uniquement mise en relation avec les factures contenues dans le même fichier.
L'opération litigieuse a inspiré les commentaires suivants:
- pour l'ancien responsable des finances de Z._ SA (M._), cette situation était inhabituelle. Il n'était jamais arrivé à Z._ SA d'envoyer une note de crédit en faveur d' une commerçante débitrice. Dans ce cas particulier, A._ aurait dû selon lui porter la note de crédit [+ 76'087 fr. 70] en déduction des dettes que la commerçante zurichoise avait envers Z._ SA, plutôt que de suivre la procédure habituelle pour les notes de crédit;
- Le directeur de A._ (N._) a expliqué que la commerçante zurichoise leur devait de l'argent: A._ avait octroyé une ligne de crédit et avait avancé cet argent " pour payer d'autres factures [...] que les dernières factures de Z._ SA". Le montant de la note de crédit avait été imputé sur la dette de la commerçante zurichoise envers A._, plutôt que sur la dette de la commerçante envers Z._ SA (factures impayées); cela tenait au fait que, dans leur esprit, une facture non payée le serait peut-être quelques jours plus tard si le compte était ensuite approvisionné. A._ avait reversé cette somme à la masse en faillite de la commerçante sur les conseils de son avocat.
4.2. A la lumière de ces explications, le Tribunal de première instance, puis la Cour de justice genevoise ont effectué en substance l'analyse juridique suivante:
- La "note de crédit" établie par la grossiste Z._ SA était une pièce comptable réduisant la dette de la commerçante zurichoise envers la prénommée pour un retour de marchandise intervenu avant la faillite. Elle ne représentait pas un actif de la commerçante. En produisant cette "note de crédit" à A._, la fournisseuse avait en réalité annulé la facture relative à la marchandise récupérée. Il importait peu de savoir si Z._ SA était en droit de récupérer la marchandise et d'émettre une telle "note de crédit", cette question concernant uniquement les relations entre la fournisseuse et la commerçante.
- A réception de cette "note de crédit", A._ avait prélevé 76'087 fr. 70 sur les comptes d'autres commerçantes qui devaient également de l'argent à Z._ SA. Au lieu de reverser cette somme à Z._ SA en exécution des factures produites, A._ l'avait utilisée pour réduire le découvert du compte de la commerçante zurichoise, réduisant de ce fait la dette de celle-ci envers A._. En réalité, A._ aurait simplement dû réduire de 76'087 fr. 70 le poste des factures impayées que Z._ SA avait produites à l'encontre de la commerçante zurichoise.
- Par ce procédé, A._ s'était enrichie puisqu'elle avait récupéré une partie de sa propre créance envers la commerçante zurichoise; elle l'avait fait aux dépens de Z._ SA, laquelle n'avait pas été entièrement rémunérée pour la marchandise vendue à des commerçantes tierces, alors que les comptes courants de celles-ci avaient été débités du montant des factures produites. Le rapport de causalité entre l'enrichissement et l'appauvrissement était établi. L'enrichissement était en outre dépourvu de cause légitime. L'autorisation de débit octroyée par la commerçante zurichoise permettait à A._ de débiter son "compte courant", mais pas de prélever le montant de la note de crédit sur d'autres montants dus à Z._ SA par des commerçantes tierces. A._ et Z._ SA n'étaient pas liées par une relation de compte courant. Il ne pouvait y avoir de compensation ex iure tertii. Le processus de recouvrement automatique mis en place n'y changeait rien. En maintenant volontairement et en connaissance de cause une situation erronée générée par son processus automatique, A._ avait agi sans cause légitime. Toutes les conditions de l'<ref-law> étaient ainsi réalisées.
4.3. La recourante dénonce un établissement lacunaire et arbitraire des faits pertinents pour la question de l'enrichissement illégitime. L'autorité précédente aurait décrit de façon incomplète le mécanisme de paiement global unique et automatisé, tel qu'il ressort en particulier des explications de ses deux collaborateurs N._ et O._.
En réalité, la Cour de justice n'a pas ignoré ces explications qui sont également retranscrites en détail dans le premier jugement. Elle est toutefois arrivée à la conclusion que ledit processus était inadapté à ce cas particulier et que A._ avait traduit de façon erronée les éléments ressortant de la communication de Z._ SA. C'est en réalité cette conclusion juridique - convergeant avec l'analyse du collaborateur de Z._ SA - qui heurte la recourante.
Or, cette dernière ne conteste pas l'absence de lien contractuel avec Z._ SA, et en particulier l'inexistence d'une relation de compte courant. Elle ne discute pas davantage le fait que des factures de Z._ SA envers la commerçante zurichoise étaient demeurées impayées, respectivement que le compte courant de ladite commerçante présentait un découvert représentant une dette de A._ pour des avances de paiement, dette qui n'était pas liée au remboursement des factures en souffrance de Z._ SA, de l'aveu même du directeur de A._.
Sur la base de ces éléments indiscutés, et plus généralement de l'état de fait qui lie la cour de céans, l'analyse juridique de la Cour de justice ne souffre aucune critique. La recourante persiste à vouloir s'abriter derrière le processus global et automatisé mis en place, dont les juges genevois ont expliqué à bon escient qu'il aurait nécessité un correctif dans le cas particulier. Elle conteste vainement l'appauvrissement de Z._ SA en arguant du fait que celle-ci a récupéré - soit-disant indûment - de la marchandise, en faisant fi du fait qu'elle eût dû encaisser 76'087 fr. 70 supplémentaires pour des marchandises livrées à d'autres commerçantes. Dans un litige de nature triangulaire, l'autorité précédente a distingué à juste titre la question de l'enrichissement illégitime de A._ aux dépens de Z._ SA, de celle des prétentions révocatoires que la commerçante zurichoise (resp. sa masse en faillite) pouvait avoir à l'encontre de Z._ SA.
4.4. La recourante objecte qu'elle n'était plus enrichie "lors de la répétition", de sorte qu'il n'y aurait pas matière à restitution selon l'<ref-law>. Le moment déterminant à cet égard serait la demande en justice; en se plaçant à un moment antérieur, l'autorité précédente aurait méconnu la jurisprudence fédérale.
L'<ref-law> énonce qu'il n'y a pas lieu à restitution dans la mesure où celui qui a reçu indûment établit qu'il n'est plus enrichi lors de la répétition; à moins cependant qu'il ne se soit dessaisi de mauvaise foi de ce qu'il a reçu ou qu'il n'ait dû savoir, en se dessaisissant, qu'il pouvait être tenu à restituer.
Dans une affaire publiée, la cour de céans a constaté que la restitution avait été demandée en requérant l'ouverture d'une poursuite et s'est ainsi fondée sur la date de notification du commandement de payer (<ref-ruling> consid. 4 p. 41). Dans une autre cause dont la recourante se prévaut, le moment du dépôt de la demande a fait foi (<ref-ruling> consid. 7d p. 142). Cela étant, au détour d'un arrêt non publié, il a été précisé que le moment topique est celui où l'appauvri fait valoir la restitution ( geltend machen), soit au plus tard le jour de l'ouverture de l'action (arrêt 4C.154/1991 du 10 septembre 1991 consid. 3b/aa). Certains auteurs ont également souligné que la loi ne vise pas nécessairement une demande de répétition judiciaire, de sorte qu'une demande de répétition émise de façon "privée" par l'appauvri peut suffire (BECKER, Berner Kommentar, 1941, n° 3 ad <ref-law>, suivi par ENGEL, Traité des obligations en droit suisse, 2e éd. 1997, p. 598 s.). Il faut en outre garder à l'esprit que cette disposition vise à protéger l'enrichi qui se dessaisit de bonne foi. Or, celle-ci tombe à compter du moment où l'enrichi devait compter avec une restitution, en faisant preuve de l'attention commandée par les circonstances (arrêts 4A_600/2014 du 12 mars 2015 consid. 4.2.2; 4C.162/2003 du 8 septembre 2003 consid. 2.1). Dès lors, point n'est besoin d'une action en répétition pour que l'enrichi perde sa bonne foi (OSER/SCHÖNENBERGER, Zürcher Kommentar, 2e éd. 1929, n° 9 ad <ref-law>).
En l'occurrence, Z._ SA a contesté d'emblée (le 7 janvier 2016) la déduction opérée par A._ sur le remboursement des factures concernant des commerçantes tierces; le 20 janvier 2016, elle l'a mise en demeure de lui verser 76'087 fr. 70, ce que l'intéressée a refusé par courrier du 12 février 2016. C'est postérieurement à ces éléments, soit le 10 mai 2016, que A._ a effectué un versement de même montant en mains de l'office des faillites. Elle a plaidé avoir agi en considération de l'<ref-law>, sur les conseils de son avocat.
L'autorité précédente a jugé que A._ ne pouvait se prévaloir de cette disposition. A lire son recours, force est d'admettre qu'elle ne démontre pas en quoi elle aurait été légalement tenue de verser 76'087 fr. 70 à l'office des faillites, persistant simplement à soutenir en dépit des explications précitées qu'elle détenait un actif de la commerçante faillie. Par ailleurs, elle n'a pas établi avoir agi à la demande de l'office des faillites et ne prétend pas avoir cherché à se renseigner auprès de celui-ci, ni à éclaircir la situation auprès de l'intimée qui avait d'emblée contesté l'opération effectuée en exigeant restitution. Dans un tel contexte, la recourante ne saurait se prévaloir de l'<ref-law>. Au moment de reverser la somme à l'office, elle aurait pu et dû réaliser qu'elle devait compter avec une restitution.
Subsiste ainsi la question de la compensation.
4.5.
4.5.1. La recourante a opposé en compensation une créance de même montant obtenue par cession de la masse en faillite de la commerçante zurichoise. Elle a fait état d'une prétention révocatoire (<ref-law>) liée au retour de marchandise effectué juste avant la faillite.
L'autorité précédente a exclu l'application de la disposition précitée pour plusieurs motifs. Tout d'abord, l'intéressée n'avait pas allégué ni établi que la commerçante faillie aurait été surendettée au sens de l'<ref-law> au moment où elle avait restitué la marchandise à Z._ SA. Ensuite, la condition subjective de la mauvaise foi du tiers bénéficiaire n'était pas réalisée. Enfin, l'action révocatoire visait au premier chef à permettre la restitution des biens encore en possession du tiers; si tel n'était plus le cas, l'obligation de restitution se transformait en une obligation de réparer en argent. En l'occurrence, il n'avait pas été allégué ni établi que la restitution des marchandises eût été impossible; le jugement aurait dû le cas échéant ordonner la restitution de la marchandise concernée. Or, la compensation ne pouvait pas porter sur des créances de nature différente.
4.5.2. Confrontée à une argumentation à plusieurs facettes, la recourante se contente d'objecter que le surendettement était réalisé, suggérant que l'acte incriminé pourrait le cas échéant être traité comme une donation au sens de l'<ref-law>.
Ce faisant, elle laisse intacts d'autres pans du raisonnement de la Cour de justice, à savoir d'une part que la mauvaise foi du tiers bénéficiaire n'est pas démontrée, d'autre part que les créances censées devoir être compensées ne sont pas de même nature. Or, le premier élément suffit à déjouer l'application de l'<ref-law>, dont la recourante s'était prévalue. L'état de fait ne permet pas davantage d'envisager l'application de l'<ref-law> (non invoqué par la recourante), lequel exige que l'intention de porter préjudice aux créanciers ou de favoriser certains créanciers soit reconnaissable pour l'autre partie. Quant aux considérations sur l'obligation principale de restituer en nature les objets détenus, elles prévalent pour toutes les variantes de l'action paulienne (cf. <ref-law>; arrêt 5A_313/2012 du 5 février 2013 consid. 7.1.2). L'absence de grief sur ce point précis exclut dès lors toute entrée en matière.
On ignore quelles circonstances ont conduit l'office des faillites à accepter le versement de 76'087 fr. 70 moyennant cession d'éventuelles prétentions révocatoires, et à admettre une créance de 464'370 fr. 10 à l'état de collocation en faveur de Z._ SA (avec la réserve émise par cette dernière). Elles n'intéressent cependant pas le présent litige, sur le sort duquel elles n'influent pas.
5.
En définitive, le recours doit être rejeté dans la mesure où il est recevable.
En conséquence, la recourante supportera les frais de la présente procédure et versera à l'intimée une indemnité pour ses frais d'avocat (art. 66 al. 1 et art. 68 al. 1 et 2 LTF).

Par ces motifs, le Tribunal fédéral prononce :
1.
Le recours est rejeté dans la mesure où il est recevable.
2.
Un émolument judiciaire de 4'000 fr. est mis à la charge de la recourante.
3.
La recourante versera à l'intimée une indemnité de 5'000 fr. à titre de dépens.
4.
Le présent arrêt est communiqué aux parties et à la Cour de justice du canton de Genève.
Lausanne, le 31 juillet 2020
Au nom de la Ire Cour de droit civil
du Tribunal fédéral suisse
La présidente : Kiss
La greffière : Monti