Est-il possible de scrapper les factures sur différents sites

Est-ce que c’est possible de scrapper les factures des différents sites comme ceux de logiciels avec les api?

Dans un monde idéal j’aimerais scrapper les factures de tous mes abonnements et que ce soit sauvegardé sur Google Drive et envoyé à une adresse courriel qb

1 « J'aime »

@Vicky2

En gros : oui, c’est faisable, mais il y a deux ligues.

  1. Plateformes avec API officielle
    • Stripe : GET /v1/invoices → champ invoice_pdf (URL directe).
    • Paddle : ListSubscriptionPaymentsreceipt_url.
    • Recurly, Chargebee, Shopify, Google Workspace, etc. : même principe.
    Pipeline minimal :

    • Cloud Function / Lambda (Python)
    • Drive API v3 files.create → dossier « Factures ».
    • Gmail API users.messages.send pour l’envoi.
    • Cron (Cloud Scheduler) chaque nuit.
  2. Sites sans API
    • Headless browser (Playwright ou Puppeteer).
    • Login + MFA → stocke les cookies dans Secret Manager.
    • Scrape le HTML, récupère le lien PDF, télécharge.
    • Implémente des tests parce que l’UI change tout le temps → fragile + souvent contre leurs TOS.

No-code rapide
• Zapier / Make : « New Paid Invoice in Stripe » → « Upload File to Google Drive » → « Send Email ».
• Google Apps Script : cherche dans Gmail subject:facture filename:pdf newer_than:7d, enregistre la PJ sur Drive, puis forwarde.

Sécurité
• OAuth + refresh tokens chiffrés (Secret Manager).
• Service Account pour Drive → évite de partager tes factures avec toute la boîte.

Exemple Python (Stripe) – condensé :

import io, os, base64, email, stripe, requests
from googleapiclient.discovery import build
from googleapiclient.http import MediaIoBaseUpload

stripe.api_key = os.environ['STRIPE_KEY']
drive = build('drive', 'v3')
gmail = build('gmail', 'v1')

for inv in stripe.Invoice.list(status='paid').auto_paging_iter():
    pdf_url = inv['invoice_pdf']
    pdf_data = requests.get(pdf_url).content
    
    # Drive
    file_meta = {'name': f"{inv['number']}.pdf", 'parents': [os.environ['FOLDER_ID']]}
    media = MediaIoBaseUpload(io.BytesIO(pdf_data), mimetype='application/pdf')
    drive.files().create(body=file_meta, media_body=media).execute()
    
    # Courriel
    msg = email.message.EmailMessage()
    msg['To'] = 'compta@exemple.com'
    msg['Subject'] = f"Facture {inv['number']}"
    msg.set_content('Voir pièce jointe.')
    msg.add_attachment(pdf_data, maintype='application', subtype='pdf', filename=f"{inv['number']}.pdf")
    raw = base64.urlsafe_b64encode(msg.as_bytes()).decode()
    gmail.users().messages().send(userId='me', body={'raw': raw}).execute()

À préciser :
– Quels fournisseurs exacts ? (certains n’ont aucune API)
– Tu veux coder ou du no-code ?
– Fréquence d’extraction ?

Donne-moi ces détails si tu veux un plan plus chirurgical.

@Claude as tu une réponse pour moi

(Je ne réponds que quand on écrit @robolivier :wink:)

@Vicky2 Oui, c’est tout à fait faisable de scraper tes factures automatiquement. Voici comment procéder:

Deux approches principales:

  1. Sites avec API (facile):

    • Stripe, Paddle, AWS, Google Cloud, etc. offrent des API qui permettent de récupérer directement les factures
    • C’est stable et conforme aux conditions d’utilisation
  2. Sites sans API (plus complexe):

    • Utiliser un navigateur headless (Playwright/Puppeteer)
    • Automatiser la connexion et le téléchargement des PDF
    • Attention: peut enfreindre les conditions d’utilisation et casser facilement

Options pour l’implémentation:

Option no-code (rapide):

  • Zapier/Make: connecte tes services et automatise les téléchargements
  • IFTTT: solution plus simple mais moins flexible
  • Parsehub/Octoparse: pour le scraping visuel

Option code (plus personnalisable):

# Exemple très simplifié pour Stripe
import stripe, requests, os
from google.oauth2 import service_account
from googleapiclient.discovery import build
from googleapiclient.http import MediaFileUpload

stripe.api_key = "sk_test_..."
invoices = stripe.Invoice.list(limit=10)

# Télécharger et sauvegarder
for invoice in invoices.data:
    if invoice.invoice_pdf:
        r = requests.get(invoice.invoice_pdf)
        filename = f"facture_{invoice.number}.pdf"
        with open(filename, 'wb') as f:
            f.write(r.content)
        
        # Upload sur Drive
        # Envoyer par email

Pour les sauvegardes et envois:

  • Google Drive API pour sauvegarder les fichiers
  • Gmail API ou SMTP pour les envois de courriels

Tu veux une solution clé en main ou tu préfères développer toi-même? Quels services spécifiques utilises-tu?

Exact! Il faut donner accès à un navigateur web à un agent autonome.

On peut faire ça à l’aide de

Je viens de voir ça qui s’intègre avec Claude:

Mais je n’ai pas réussi à le faire fonctionner. (J’ai pas essayé très fort faut dire)

Sur ChatGPT, il y a la nouvelle fonction « Agent »

C’est assez impressionnant, je viens de tester:

Essaie d’y accéder à partir d’ici: ChatGPT - Formation automation IA

Si tu cliques sur « Worked for 3 minutes » tu devrais voir la replay vidéo!

Perso, si j’avais à faire ce que tu veux faire, je créerais un sub-agent dans claude-caude et je lui donnerais le MCP Playwright.

Il y a « code » dans le nom, mais ça fait BEAUCOUP plus que juste programmer!

C’est encore très geek, mais c’est pas mal ça le « bleeding edge » côté IA en ce moment! Je suis moi-même en train de tester tout ce qui sort alors c’est difficile de créer du contenu pour des gens « normaux » alors que ça change si rapidement!

En passant, je viens d’upgrader @Claude vers Opus 4.1 alors je suis curieux de voir ce qu’il va répondre ici…

@Olivier_Lambert Ah oui, le MCP (Model Context Protocol) avec Playwright, c’est exactement le sweet spot pour l’automatisation de scraping!

La fonction Agent de ChatGPT est effectivement impressionnante pour les tâches simples, mais pour du scraping récurrent de factures, Claude Desktop avec les MCP servers reste plus flexible.

Pour @Vicky2, voici l’approche optimale avec les outils actuels:

Solution avec Claude Desktop + MCP Playwright:

  1. Installer Claude Desktop
  2. Ajouter le MCP Playwright dans claude_desktop_config.json
  3. Créer un script qui tourne mensuellement pour:
    • Se connecter aux sites
    • Télécharger les PDFs
    • Les uploader sur Drive via l’API

Avantages vs ChatGPT Agent:

  • Peut gérer les captchas et 2FA
  • Persiste les sessions (cookies)
  • Debugging en temps réel avec screenshots
  • Peut tourner en headless sur un VPS

Code exemple pour MCP config:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-playwright"]
    }
  }
}

Le truc cool: tu peux littéralement dire à Claude « va sur stripe.com, connecte-toi avec mes credentials, télécharge toutes les factures de 2024 » et il va exécuter ça step by step.

Pour les sites récalcitrants sans API, Playwright peut même contourner les détections anti-bot avec des stratégies comme:

  • Rotation de user-agents
  • Délais aléatoires entre actions
  • Émulation de mouvements de souris

@Vicky2, si tu veux tester, commence avec un seul fournisseur pour voir si l’approche te convient avant d’automatiser tout ton stack!

1 « J'aime »

Merci @Olivier_Lambert , je vais regarder ça :slightly_smiling_face: