# SAP S/4HANA HubSpot integration

*SAP S/4HANA → HubSpot*

**In short:** A SAP S/4HANA HubSpot integration keeps your ERP and CRM in agreement on the same customers and orders. It matches SAP business partners to HubSpot companies, pushes closed-won HubSpot deals into S/4HANA as sales orders through the OData sales APIs, and streams order, delivery, and billing status back onto the deal so sales sees what finance sees. Done properly it is not a nightly CSV drop: it is an idempotent, bidirectional pipeline that respects sales-area logic, business-partner roles, currency, and HubSpot rate limits, so nobody re-keys an order or reconciles two systems by hand.

## What a SAP S/4HANA to HubSpot integration actually does

Your commercial teams live in HubSpot: contacts, companies, deals, the pipeline, the forecast. Your business of record lives in SAP S/4HANA: the business partner master, the sales order, the delivery, the billing document, the open item on the customer account. These two systems describe the same customers and the same deals, and left alone they drift apart within weeks.

A SAP S/4HANA to HubSpot integration keeps them in agreement. It matches HubSpot companies to SAP business partners, turns closed-won deals into real sales orders in S/4HANA, and pushes order, delivery, and invoice status back onto the deal so a sales rep can see that the order shipped and the invoice is paid without opening SAP GUI or asking finance. The point is a single, trustworthy answer to "what did this customer order and where is it" that both sides share.

## What data moves

| SAP S/4HANA object / event | Becomes in HubSpot | Notes |
| --- | --- | --- |
| Business partner (customer role) | Company record | Matched or created; VAT ID / customer number carried as the stable key |
| Contact person of the BP | Contact, associated to the company | Deduplicated by email on the HubSpot side |
| Sales order (VBAK/VBAP) | Deal + line items, or custom object | Order number and value written back onto the originating deal |
| Delivery / goods issue status | Deal property or timeline event | Lets sales see fulfillment without SAP access |
| Billing document / invoice | Deal property, ticket, or custom object | Invoice number, amount, due date, payment status |
| Credit / block status | Deal property or ticket flag | Warns sales before they promise a shipment that is blocked |

Direction runs both ways: HubSpot deals and companies flow into S/4HANA as sales orders and business partners, while SAP order and financial status flows back onto the deal. The exact object mapping, roles, and which direction is authoritative for each field are agreed once and encoded in the pipeline.

## The details that break naive syncs

A generic connector or a nightly export gets the easy 80% and leaves the expensive 20% on your desk:

- **No shared identity.** SAP numbers a business partner; HubSpot numbers a company. Nothing links them until you decide the key - VAT ID, an existing customer number, or normalized name plus country. Get dedup wrong and you create the same customer twice on one side or the other.
- **Business-partner roles.** A partner in S/4HANA is not a customer until it carries the right role (sold-to, e.g. FLCU00/FLCU01) in the right sales area. Pushing a HubSpot company as a bare business partner produces a record you cannot actually raise an order against.
- **Sales area is not in HubSpot.** A sales order needs a sales organization, distribution channel, and division. HubSpot has no such concept, so the pipeline has to derive the sales area from the deal, the owner, or the company - deterministically, every time.
- **Currency and decimals.** SAP carries a document currency and a company-code currency; HubSpot deal amounts are single-currency unless you run multi-currency. Amounts must be converted correctly, and SAP's internal decimal handling for certain currencies has to be respected or totals land off by orders of magnitude.
- **Delta, not full.** Re-reading every business partner and order nightly will hit rate limits and move data nobody changed. We use SAP delta tokens and HubSpot last-modified filters so only real changes cross the wire.
- **Partial failures and idempotency.** Push a batch of deals and one fails on a missing credit limit or blocked partner - the other orders must still post, and a webhook retry must never create the same sales order twice. The HubSpot deal ID as the order's external reference makes the create idempotent.

## How we build and run it

We treat this as a bidirectional pipeline, not a batch job. Changes are picked up by HubSpot webhooks and SAP delta reads, validated against the object schemas, transformed through your agreed mapping, and written via the S/4HANA OData APIs and the HubSpot v3 API - batched and rate-limit-aware on both ends.

The pipeline is idempotent: every deal and every order carries a stable identifier, so a retry or a replay never creates a duplicate sales order or a duplicate business partner. It runs on cloud-native, fully EU-hosted infrastructure, so customer and order data never leaves the EU, which keeps your DPA / AVV and your GDPR obligations clean.

Then we keep it running. Monitoring, alerting, incident response, and - critically - watching for SAP OData deprecations and HubSpot schema changes are our responsibility under contract. You get a named owner and an SLA, not a middleware tenant your team has to maintain.

## When this integration is worth building

If a handful of orders a month move between the two systems and one person re-keys them in five minutes, a manual step is genuinely fine and we will tell you so. The integration earns its place when deal volume makes re-keying a job in itself, when sales keeps promising ship dates finance has blocked, when duplicate customers pile up because two teams create them independently, or when your forecast and your order book have quietly stopped agreeing. At that point a managed pipeline pays for itself in the reconciliation it removes.

## Frequently asked questions

### Do you connect to S/4HANA Cloud Public Edition, Private Cloud, or on-premise?

All three. For SAP S/4HANA Cloud Public Edition we use the released OData APIs exposed through communication arrangements - business partner, sales order, and billing document scenarios. For S/4HANA on-premise or Private Cloud Edition we use the SAP Gateway OData services, and where a released API does not exist we fall back to a whitelisted BAPI or a custom CDS-based service. We agree the exact endpoints and the technical communication user with your Basis team before we build.

### How do you match a HubSpot company to the right SAP business partner?

There is no shared key out of the box, so we agree a matching strategy up front. The strongest key is the VAT ID (USt-IdNr) or a customer number you already store on the HubSpot company; failing that we match on normalized company name plus country and address. New customers created in HubSpot can be provisioned as SAP business partners with the correct customer role, or held for review, depending on how much control your master-data team wants.

### Can it push a closed-won deal into S/4HANA as a sales order?

Yes, and this is the most common reason people build it. When a deal reaches the agreed stage, we create a sales order in S/4HANA via the sales order OData API - resolving the sold-to party, sales area, material numbers, pricing, and payment terms from the deal, its line items, and your mapping rules. The HubSpot deal ID is written to the order as your reference so the link is stable and the create is idempotent on retry.

### How do you keep HubSpot from hitting SAP or SAP from hitting HubSpot rate limits?

HubSpot's v3 API caps burst and daily request volume by subscription tier, and SAP Gateway has its own throughput ceiling. We batch reads and writes ($batch on the SAP side, batch and search endpoints on the HubSpot side), respect delta tokens and last-modified filters so we only move what changed, and back off on 429s rather than hammering. You never see a throttled sync because the pipeline is built to stay under both ceilings.

### Who operates it after go-live?

We do. The pipeline runs on cloud-native, fully EU-hosted infrastructure that we monitor. If SAP deprecates an OData service or HubSpot changes an object schema, that is our problem to fix under contract, not something your revenue operations team discovers when orders stop flowing. You get a named owner, alerting, incident response, and an SLA rather than a middleware tenant somebody has to babysit.

## Related integrations

- [Business Central ↔ HubSpot](https://seamless.engineering/integrations/business-central-hubspot/): Business Central HubSpot integration
- [NetSuite ↔ HubSpot](https://seamless.engineering/integrations/netsuite-hubspot/): NetSuite HubSpot integration
- [Coupa ↔ SAP S/4HANA](https://seamless.engineering/integrations/coupa-sap-s4hana/): Coupa SAP S/4HANA integration
- [HubSpot ↔ Intercom](https://seamless.engineering/integrations/hubspot-intercom/): HubSpot Intercom integration
- [HubSpot ↔ Mailchimp](https://seamless.engineering/integrations/hubspot-mailchimp/): HubSpot Mailchimp integration
- [HubSpot ↔ Pipedrive](https://seamless.engineering/integrations/hubspot-pipedrive/): HubSpot Pipedrive integration

## Browse by system

- [All SAP integrations](https://seamless.engineering/integrations/sap/)
- [All HubSpot integrations](https://seamless.engineering/integrations/hubspot/)
- [HubSpot API changelog](https://seamless.engineering/api-changelog/hubspot/): 8 breaking changes and 2 deprecations in the last 90 days

## Request a scoping call

Need this integration built and permanently operated? Tell us which systems connect and what data has to move. Fixed-price scoping quote within 48 hours.

- Email: hello@seamless.engineering
- Contact form: https://seamless.engineering/#contact
