FrancodesystemsFran<code>systems
PaymentsCustom integration

Holded PayPal integration

PayPal payments booked in Holded with correct VAT, fees and multi-currency.

HoldedHolded
PayPal

Implementation time · 4-6 días laborables

Diagnosis

The problem

PayPal is still a relevant channel in many Spanish SMEs: ecommerce with buyers who prefer PayPal for trust, professional services with international clients who only pay via PayPal, freelancers who have billed EU and UK clients since before Stripe. But its output to Holded is nonexistent: a PayPal dashboard with payments, someone exports a quarterly CSV, someone else cleans it, fees booked wrong, VAT by country lost. The official PayPal to Holded extension is limited and does not handle multi-currency or intra-community VAT properly.

Proposal

The solution

Every PayPal payment received generates a Holded invoice with the matching customer, VAT by buyer country and the correct series. PayPal fees are booked as an expense by category. Payments in other currencies (USD, GBP) are recorded with their EUR equivalent at PayPal's own rate. Supports one-off payments, PayPal recurring subscriptions, full and partial refunds, disputes and chargebacks. For sellers with an active PayPal Business account, it is the foundation of their Spanish tax accounting.

Scope

What we automate

  • PaymentReceived to Holded invoice with correct customer, VAT and series
  • PayPal Subscriptions to Holded recurring invoice
  • Full or partial refund to Holded credit note with the exact amount
  • PayPal fees (percentage plus fixed) to a categorized expense entry
  • Multi-currency with EUR equivalent at PayPal's rate on the payment date
  • Disputes and chargebacks to pending credit notes with traceability
  • Multi-account PayPal (several companies in the group) to separate series
  • Identification of intra-community B2B from the buyer's data
Who uses it

Real use cases

These are the profiles that most ask us for the HoldedPayPal integration and what they get in the end.

Case 01

International SaaS collecting USD and EUR via PayPal

Before: USD to EUR at the bank's rate created mismatches with the actual collection.

After: PayPal's daily rate respected. Bank and Holded match to the cent.

Case 02

Freelancer with UK and USA clients

Before: Payments with variable fees never booked as an expense.

After: Fees categorized as an expense. Real net profit visible.

Case 03

Ecommerce with PayPal as a second channel after card

Before: Reconciling PayPal vs Stripe vs bank was a quarterly hell.

After: PayPal and Stripe payments both in Holded automatically. Reconciliation closed in hours.

Before / After

What changes exactly

Without the integration

  • Quarterly PayPal CSV opened by hand
  • Multi-currency with EUR/USD/GBP mismatches
  • PayPal fees never categorized as an expense
  • Partial refunds badly reflected

With the integration

  • PayPal to Holded in near real-time via webhooks
  • Multi-currency with a precise PayPal rate
  • Fees as categorized entries
  • Partial credit notes with the exact amount
Architecture

How we build it

PayPal REST API plus webhooks (PAYMENT.CAPTURE.COMPLETED, BILLING.SUBSCRIPTION.PAYMENT.COMPLETED, CUSTOMER.DISPUTE.CREATED) with signature verification. A persistent, idempotent queue using PayPal's event.id. Calls to Holded to create invoices with the correct tax matrix by buyer country. Fees are categorized by type (cross-border, currency conversion, chargeback) and posted to their accounting account.

flow.ts
webhook paypal.event
queue.enqueue(jobId)
worker.handle() // idempotent
holded.api.call() // retries with backoff
log.emit({ status: 'ok' })
FAQ

Frequently asked questions

PayPal Business or personal?

Business is mandatory for API integration. If your account is personal and you bill professional services, it is best to migrate to Business first (free, same number).

And chargebacks?

When a dispute comes in, we generate a pending credit note in Holded. If you win the case, it is voided. If you lose, it is confirmed. Full traceability for your defense.

PayPal Subscriptions?

Supported. Each renewal generates a Holded recurring invoice with the series you define. Cancellations are propagated to the customer's status.

And cross-border fees (international shipping)?

Categorized separately as an expense. Cross-border fee, currency conversion fee, chargeback fee, each in its own accounting account.

Intra-community VAT with PayPal?

PayPal gives you the buyer's data. If they have a validatable intra-community tax ID, we apply 0% B2B. If not, the VAT of the buyer's country for B2C.

How long does it take?

Between 4 and 6 business days. Setups with heavy multi-currency or multiple accounts can rise to 7 or 8.

Shall we talk about your PayPal integration?

A 30-minute call, no strings. You leave with scope and a price.