muups
Integrations

Pull the invoices. See the cash. Skip the spreadsheet.

Three integrations ship today, each with a full setup walkthrough and scoped, read-only permissions. Eleven on the roadmap, ranked by customer demand. No black-box connectors, no surprise scopes.

Available now

CSV / Excel

Available now

The path of least resistance — drop a sheet, get sequences.

How it works. Drag-and-drop ingestion for .csv, .xlsx and .xls exports from any ERP that can produce one. We accept QuickBooks, Stripe, Pennylane, Sage and most accounting tool exports out of the box.

  • Dedupes on your external_ref so re-uploading is safe.
  • Validates the row shape; invalid rows surface for review before commit.
  • Auto-detects the columns we need (debtor, amount, currency, due date) across common ERP schemas.
  • Currency-aware: USD, EUR, GBP and ten others handled natively.
Cadence
On upload
Latency
Seconds
Residency
EU (Frankfurt)
Retry
Per-row review
We read
  • Invoice rows from the file you upload
  • Customer name + email per row
  • Amount, currency, due date, optional reference
We never touch
  • Anything in your accounting tool that isn't in the file
  • Bank or card data
  • Customer PII beyond the invoice contact
Set it up
  1. 1Settings → Sources → Add CSV/Excel.
  2. 2Drop your .csv or .xlsx. The first 10 rows render for a preview.
  3. 3Map columns once — debtor, amount, currency, due date. Saved per source.
  4. 4Commit. Validated rows land in your inbox, ready for sequencing.

Requires · No external connection. The file is uploaded over TLS and processed in our EU region.

Stripe

Stripe

Available now

Pull overdue invoices automatically, stop sequences the moment a customer pays.

How it works. Standard Stripe Connect. muups asks for the read scope that lets us list open + overdue invoices and listen for the invoice.paid event — nothing else.

  • One-click OAuth from Settings; we never see your secret key.
  • Daily sync imports every Stripe invoice with status open and a past due_date.
  • When Stripe fires invoice.paid for a connected account, muups flips the muups invoice to recovered and stops the active sequence within seconds.
  • Refunds + disputes flow through to the corresponding muups invoice too.
Cadence
Webhooks + nightly
Latency
≤ 5 s · paid events
Residency
EU (Frankfurt)
Retry
Stripe retries 3 days
We read
  • Open + overdue invoices on the connected account
  • invoice.paid · invoice.payment_failed · charge.refunded · charge.dispute.created events
  • Customer name + email associated with each invoice
We never touch
  • Stripe payouts permission (can't move money)
  • Customer card / PII beyond invoice contact
  • Other Stripe products: Treasury, Issuing, Capital, Atlas — none requested
Set it up
  1. 1Settings → Sources → Connect Stripe.
  2. 2Stripe's OAuth flow opens in a new tab; choose the account to connect.
  3. 3Confirm the read-only scope set. Stripe returns you to muups with the connection live.
  4. 4Within ~30s the first sync runs — overdue invoices land in your inbox, ready for sequencing.

Requires · Stripe account on the Standard Connect platform. Both test and live modes supported.

P

Plaid bank

Available now

Match incoming wires + ACH to invoices — without manual reconciliation.

How it works. Plaid in production mode, read-only. We get incoming transactions and match them against your open invoices by amount, currency, reference and date.

  • OAuth via Plaid Link — the modal handles the bank's auth; we never see your banking credentials.
  • Daily sync pulls new transactions; the matcher returns a confidence score per candidate.
  • Confirmed matches flip the invoice to recovered and stop the active sequence; ambiguous ones surface for one-click confirm.
  • Disconnect from Settings and the encrypted access token is deleted on the spot.
Cadence
Sync API · ≥ 1×/6h
Latency
≤ 6 h · institution-dep.
Residency
EU (Frankfurt)
Retry
Exp. backoff · 24 h
We read
  • Transactions on the linked account (incoming credits matter; outgoing ignored)
  • Account balance for sanity-checking
  • Account holder name (used as a match signal only)
We never touch
  • Banking credentials (handled by Plaid Link inside the bank's UI)
  • Any payments / transfers initiation surface — we can't move money
  • Account history older than the muups install date
Set it up
  1. 1Settings → Sources → Connect bank.
  2. 2Plaid Link opens; choose your bank and authenticate inside the bank's flow.
  3. 3Plaid returns a read-only access token; we encrypt it with AES-256-GCM before it touches our DB.
  4. 4Daily sync starts immediately. First matches usually appear within 24h of activity.

Requires · A bank account that Plaid supports for transaction reads. US + several EU markets live today.

How matching works

Three signals, one confidence score.

Every incoming credit (Stripe charge or matched bank transfer) is scored against your open invoices. We surface high-confidence matches as auto-resolved and ask you to confirm the ambiguous ones.

Reference
+50 pts

The single strongest signal. If the transaction memo contains your invoice ref (INV-2418 or external_ref equivalent), the match is treated as exact.

Amount + currency
+35 pts

Exact amount in the invoice currency wins big. Partial matches (e.g. payment plan instalments) score lower and are flagged for review.

Name + date proximity
+15 pts

Originator name fuzzy-matched against the debtor; transaction date within ±10 days of due date adds confidence. Both are tie-breakers, never primary.

Score ≥ 75
Auto-resolved

Invoice flips to paid, sequence stops, ledger logged.

Score 45–74
Confirm in one click

Surfaced in the inbox; you approve or override the match.

Score < 45
Stays unmatched

Logged in transactions; nothing changes until you tell us.

Failure modes

When something breaks, here's what you'll see.

Three failures we've actually hit — and what muups does without hiding behind a generic "we'll be in touch."

SStripe

Webhook miss — transient downtime or signing mismatch.

What muups does

Nightly backstop sync catches anything the webhook lost.

Blast radius

Max 24 h delay on a payment flip · sequence pauses on detection.

PPlaid

Bank requires re-auth (ITEM_LOGIN_REQUIRED).

What muups does

Banner in Settings prompts a one-click Plaid re-link.

Blast radius

Bank matches pause · Stripe + sequences continue.

PPlaid

Institution downtime · Plaid degraded mode.

What muups does

Exponential backoff retry · status surfaced in Settings.

Blast radius

Match latency stretches past 6 h · no sequence interruption.

Coming soon

Ranked by what customers actually ask for.

"On deck" = engineering committed, next two on the list. "Soon" = spec drafted, integration design in progress. "Backlog" = customer interest noted; build when demand crosses threshold.

  • QuickBooks
    QuickBooksOn deck
    Pull AR, reconcile on payment.
  • Xero
    XeroOn deck
    Sync invoices and payment status.
  • N
    NetSuiteSoon
    Mid-market ERP, invoice + cash app.
  • HubSpot
    HubSpotSoon
    Pull invoices linked to deals.
  • S
    SalesforceSoon
    Sync AR off opportunity stage.
  • Sage
    SageSoon
    Sage 50 / 200 exports + sync.
  • F
    FreshBooksBacklog
    Lightweight invoicing, native pull.
  • Zoho
    Zoho BooksBacklog
    Zoho One-friendly invoice sync.
  • G
    GoCardlessBacklog
    Direct-debit + invoice events.
  • PayPal
    PayPalBacklog
    Match PayPal payouts to invoices.
  • C
    ChargebeeBacklog
    Subscription-billing AR feed.
Don't see your stack?

We pick the next batch based on actual customer demand. Tell us yours and we'll bump it up the queue.

Request an integration
Integration FAQ

The honest small print.

Quick reads, no slippery wording. If yours isn't covered below, we're one email away.

Talk
Reach a real person
Reply within one business day.
Because Plaid handles the bank's OAuth, not us. You go through the bank's own login flow inside the Plaid modal; we receive a read-only access token afterwards — never your username, password, MFA code or anything that could be used to log into your bank.
No. Both Stripe and Plaid are connected in read-only modes that we deliberately request. Stripe scope is invoice/event reads; Plaid is transactions reads. There is no Stripe payouts permission, no ACH/wire initiation surface anywhere in the muups codebase.
The encrypted access token is deleted from our database on the spot. Stripe's side is invalidated via the standard deauthorisation flow; Plaid's via item/remove. Associated transaction records follow the retention window published in our Privacy Policy.
Yes — that's the recommended setup. Stripe catches anything paid via Stripe; Plaid catches the rest (wires, ACH from outside Stripe, customer ACH from their portal). Most teams use both.
Engineering committed. We've scoped the OAuth flows, identified the read endpoints we need, and planned the dedup logic against their invoice IDs. The two of them are next in the build queue after we finish the founding-partner cohort onboarding. We share specific timing with the founding partners cohort before announcing publicly.
Yes. There's no row cap on a single upload; we've ingested ten-thousand-row sheets without trouble. Just make sure your external_ref column is populated — that's what we dedup on, so re-uploading is safe.