FrancodesystemsFran<code>systems
CRMCustom integration

Holded Salesforce integration

Salesforce and Holded with enterprise-grade mapping for Spanish invoicing.

HoldedHolded
Salesforce

Implementation time · 12-20 días laborables

Diagnosis

The problem

Salesforce is powerful for global sales, but its native invoicing (Salesforce CPQ plus Billing) does not fit the Spanish tax reality: it handles intra-community VAT poorly, its numbering series do not match the AEAT requirements, and B2G electronic invoicing is still immature. Holded does solve this. The existing bridges are fragile, managed packages like MuleSoft cost a fortune and require a full-time consultant, and nightly ETLs leave your admin team screaming about discrepancies every morning. For a company with 50 to 200 deals a month and an international parent group, this is a serious gap.

Proposal

The solution

For teams that use Salesforce as their global CRM and need Holded as the local invoicing engine in Spain. Two-way sync of accounts, contacts, opportunities and products. Closed Won Opportunities trigger a quote or invoice in Holded with the correct Spanish tax matrix. Payment status flows back to Salesforce as custom fields, and the Pricebook catalog stays as the single source of truth.

Scope

What we automate

  • Salesforce Account or Contact to Holded contact with validated tax ID and VIES check
  • Closed Won Opportunity to Holded quote or invoice with the correct Spanish series
  • Pricebook or Product2 synced with the Holded catalog as the single source of truth
  • OpportunityLineItem (with discount, quantity and price) to invoice lines
  • Payment status (issued, paid, overdue) to custom fields on the Opportunity and Account
  • Multi-currency with conversion to EUR at the exchange rate on the payment date
  • Billable Cases (Service Cloud) to lines on the customer's recurring invoice
  • Separate sandbox for tests without touching the production Holded
Who uses it

Real use cases

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

Case 01

Company based in Spain with a global parent on Salesforce

Before: The parent group reports in Salesforce CPQ, but AEAT invoicing lived in Excel.

After: Salesforce stays the single source of pipeline; Holded receives the invoice with the correct Spanish series and tax model.

Case 02

B2B SaaS with multi-currency

Before: Invoices in USD were generated with the wrong daily exchange rate, creating gaps against the actual payment.

After: Exchange rate locked at the Closed Won date. Zero gaps against the Stripe or bank collection.

Case 03

Team with billable Salesforce Service Cloud

Before: Billable extra hours logged in Cases never reached Holded.

After: Cases tagged as billable become lines on the customer's recurring invoice with full detail.

Before / After

What changes exactly

Without the integration

  • Salesforce CPQ plus Billing does not fit the AEAT
  • MuleSoft or a nightly ETL with daily discrepancies
  • Multi-currency with exchange rate gaps
  • Billable Cases that never reach the ERP

With the integration

  • Holded receives correct Spanish series from Salesforce
  • Real-time sync, no nightly ETL
  • Exchange rate locked at the Closed Won date
  • Billable Cases propagated automatically
Architecture

How we build it

Salesforce Platform Events or Outbound Messages feed a Node middleware service with persistence (Postgres) for idempotency and retries. The Holded REST API receives quotes and invoices with their correct Spanish series. Custom fields in Salesforce are updated via the REST API. If you need native UI inside Salesforce (a 'Generate invoice' button, a status panel), we build it separately as a Lightning Web Component. Everything is versioned and everything is reversible.

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

Frequently asked questions

Do we have to install a Managed Package in Salesforce?

It is not mandatory. We work through Platform Events, Outbound Messages and the standard REST API. If you want native UI inside Salesforce (a Lightning Component, an action button), we build it separately and without locking you into a proprietary package.

Does it work with an existing Salesforce CPQ?

Yes. If you already use CPQ for complex quoting, we leave it as is and hook into the quote sync or the order. The final invoice is generated in Holded with the Spanish series.

A sandbox for testing?

Essential. We set up a Salesforce sandbox connected to a Holded staging environment to validate before production. No enterprise client goes to production without this phase.

How is multi-currency handled?

Each Opportunity stores its currency, and when it moves to Closed Won we lock the exchange rate at that moment. Holded receives the invoice in the sale currency with its EUR equivalent recorded.

Does it support Salesforce Service Cloud?

Yes. Cases marked as billable (custom field or tag) generate lines on the customer's recurring invoices. This is common in companies with premium support plans.

And B2G or Verifactu electronic invoicing?

Holded already supports Verifactu and Spanish B2G formats. We make sure the invoice reaches Holded with every tax field it needs so that its export is compliant.

Shall we talk about your Salesforce integration?

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