Native app, HubSpot Data Sync, Skyvia, or custom: how to choose a HubSpot integration approach

Five questions, asked in a fixed order, decide whether a HubSpot integration is a native app, Data Sync, a managed sync or custom middleware.

  • Comparison

There are five ways to move data between another system and HubSpot, and they differ by more than an order of magnitude in what they take to build. Both wrong answers are expensive. A custom service where a packaged sync would have held is something we then maintain forever. A packaged sync carrying rules it cannot express fails quietly, at night, and somebody finds out from a report three weeks later.

So we ask five questions in a fixed order and stop at the first yes. The rule under all of them: pick the lightest tool that will not break in twelve months.

Five questions, asked in order

Each question is cheaper to answer than the one after it. Asking them out of order is how a team ends up scoping middleware for a problem the marketplace had already solved.

1. Is it in the HubSpot App Marketplace, and does the app cover your objects and your direction?

Two checks, not one. A listing existing is the easy half. The half that decides it is whether the app carries the objects you need, in the direction you need them, on a mapping you can live with.

Native apps are strongest on the standard objects: contacts, companies, deals, products. They are weakest where a business keeps its real record in a custom object, and where HubSpot has to write back into the source. If the app covers you, install it and stop. That is 8 to 24 hours of setup, mapping review and workflow wiring, and the vendor carries the maintenance from then on.

The QuickBooks Online page is the honest shape of this answer. The HubSpot app is the right starting point, and it stops being enough at a specific, nameable point rather than a vague one.

2. Do you need field mapping control, two way sync or scheduling the native app lacks, on a supported app?

Then HubSpot Data Sync, provided the source is one of the products it supports. Data Sync gives you field level mapping and two way behaviour without anyone writing a service, which is why it sits second rather than last.

Its ceiling has the same shape as the native app’s: supported applications only, and standard objects. The moment a custom object is in the picture, Data Sync is out and the question moves on. Setup lands in the same 8 to 24 hour band, usually at the top of it, because field level mapping is a decision per field.

3. Is the source a SQL database, or a system with a connector on a managed sync platform, with modest volume and simple rules?

Then a managed sync, which for us usually means Skyvia. This is the answer teams skip past, and it is right far more often than its reputation suggests.

It fits when the data is already structured, the mapping is stable, and a schedule is fast enough. It handles custom objects, which is where it beats Data Sync outright. What it cannot do is express a business rule with a condition in it, or react in seconds. Budget 15 to 30 hours to set up, and plan for somebody to watch the chain, which is the part that gets left out of the estimate.

4. Is this low volume, event driven glue, with no custom objects?

Then an automation platform such as Make or Zapier, with monitoring on it.

The honest boundary here is price and reliability, not capability. A handful of events a day is cheap and perfectly sound. A few thousand is a bill that grows with your record count rather than with the value it delivers, and a scenario that fails at three in the morning tells nobody unless somebody built the alert. We have inherited plenty of these. They are a reasonable answer for a handful of events and a poor one for a pipeline.

5. Do you have custom objects, high volume, business rules, an API with no webhooks, or a gated system?

Then it is custom middleware, and the earlier questions were never going to save you. The triggers, in full: custom objects, 10,000 or more records a day, business rules that decide something at runtime, an API with no webhooks or no reliable changed since filter, or a system that is on premise or gated behind a partner.

Only one of those is about volume. The rest are about shape. An API that cannot tell you what changed forces you to build the thing that remembers, which means a watermark, a checkpoint and a replay path. A system unreachable from the internet forces an agent inside the network. A rule like “a paid invoice closes the deal, unless a rep has already moved it” has to live somewhere, and a mapping sheet is not somewhere.

The five routes side by side

ApproachLatencyCustom objectsVolumeBackfillMaintenanceEffort in hours
Native appMinutes to an hourRarelyWhat the app was built forA first sync, often with limited historyThe vendor carries it8 to 24
HubSpot Data SyncMinutesNoModerate, per the supported appFull initial sync, then deltasHubSpot carries it8 to 24
Managed syncHourly, by planYesTens of thousands a nightA dated run you control and can repeatWe watch the chain15 to 30
Automation platformSeconds to minutesPartlyA handful of events a dayNot a backfill toolWhoever built the scenario8 to 24 per scenario
Custom middlewareSeconds, or the poll intervalYesNo ceiling we have reachedA keyed batch run, repeatableWe run it, or we hand it over40 to 60 one way, 70 to 150 two way, 300 to 450 enterprise

Effort is hours of our time to build, never a price. Custom carries three bands because it covers three genuinely different shapes of work: a light one way feed of three objects or fewer, a standard two way sync with custom objects and watermarks, and an enterprise build spanning several systems. Loading the history is a separate job from keeping two systems in step, and it comes first. See migration or integration.

When we say no to a custom build

A manufacturer running a point of sale system on a SQL Server inside their own network asked for an integration, and everything about the request pointed at custom. The database is unreachable from the internet. There is no marketplace listing. The schema runs to more than 724 base tables, over twenty of them involved in a single transaction. Their reseller offered to build a REST API, scoped at roughly four weeks of development.

We said no to all of it. The schema survey found 263 pre-built views that already flatten the joins, eight of which carried everything the CRM needed. The volume is a nightly chain rather than a stream. The mapping is stable. So the answer was a managed sync reading those views through an agent inside the client’s network, with nothing of ours in the data path.

That build backfilled 20,004 orders reaching back to July 2020 along with 38,559 order lines, across 86 mapped fields and five objects, on eight jobs that run in a fixed order every weekday evening. The only code anyone wrote is the scheduler that chains those jobs, because a parent record has to land before the records that point at it. The full account is here, alongside the NCR CounterPoint page.

The tell was that nothing in the requirement needed a decision made at runtime.

When custom is the only honest answer

Two engagements show the other side, and neither is really about volume.

A publisher keeps books, subscriptions and pricing in Naviga and runs its sales desk in HubSpot. Discovery tested every endpoint against live responses rather than documentation, and three answers settled the design. There are no webhooks for that scope. Customer records return a create date and no modification date, so a polling job has no changed since call to make. Subscription reads are per customer with no date filter at all.

Nothing packaged can be built on that. What we built discovers changed customers by walking identifiers forward from a saved checkpoint and comparing payload hashes, caps each order run at a 24 hour window so an outage cannot become an unbounded batch, and queues associations that fail to resolve for a repair pass a quarter past the hour. Seven flows, each with its own lock, checkpoint and run record. The middleware is here.

A senior living operator records every enquiry, tour and move in Yardi Voyager. The senior housing interface is SOAP, and it is a fixed contract: no webhooks, no changed since push, and no operation that sets a prospect’s status. Email cannot be the identity key, because family members share an address. The source also carries fields that must never reach a marketing system, so the mapping was built outward from an exclusion list rather than from the schema.

That became a lakehouse inside the operator’s own tenant, holding about 72,000 contacts and 45,000 deals and reconciling 133 properties on every run, with four safety gates between a staged change and a write. The architecture is here.

Both were unavoidable for the same reason. The source could not say what changed, so we had to build the memory. That is the cost people do not price in when they compare a packaged tool against a service, and it is why question five is the one that actually decides.

Frequently asked questions

Is the native HubSpot app always the cheapest option?

It is almost always the cheapest to start and the cheapest to keep, because the vendor maintains it. It stops being cheapest when its mapping forces manual work every week, or when a workflow has to fire on a field the app does not carry. Add up that manual work over a year before deciding the app is enough.

Can a managed sync on Skyvia handle HubSpot custom objects?

Yes, and that is the main thing it does that HubSpot Data Sync cannot. We have run five objects including custom ones on a single nightly chain, keyed on the source system’s own identifiers. The limit is not the object type, it is conditional logic: a rule that decides something at runtime belongs in a service, not in a mapping.

How many records a day before a managed sync stops being enough?

Volume alone rarely settles it. We have run tens of thousands of rows a night on a packaged tool without trouble, and we have built custom middleware for a few hundred records a day. Latency, custom objects and business rules decide it sooner than record counts do. Above roughly 10,000 records a day, look hard at both.

Who maintains a custom HubSpot integration after it goes live?

Either we do, or your team does, and that is a decision made at scoping rather than after launch. We have handed a live sync over completely, including the server, the repository and the tokens, and we have kept others under watch for years. What is not acceptable is a service with no named owner, whoever wrote it.

Can we start with a packaged sync and move to a custom build later?

Yes, and it is often the right sequence. The work that carries over is the object model, the match keys and the field mapping, which is most of the thinking. Key every object on the source system’s own identifier from the first run, held in a custom HubSpot property, and a later migration to a service becomes a swap rather than a reload.

Partnerships and accreditations

  • HubSpot Elite Solutions Partner
  • HubSpot Custom Integration Accreditation
  • HubSpot CRM Data Migration Accreditation
  • HubSpot Solutions Architecture Design Accreditation

HubSpot accreditations

  • HubSpot Onboarding Accreditation
  • HubSpot Academy Accreditations

Industry specializations

  • HubSpot Healthcare Industry Specialist
  • HubSpot Financial Services Industry Specialist
  • HubSpot Manufacturing Industry Specialist
  • HubSpot Quote to Cash Capability

Partnerships

  • Google Partner
  • Anthropic Solutions Partner

Want a second opinion on the approach?

Send the systems, the direction and the record volume. We reply with a scope and an effort band within one business day.

Press Enter or comma to add another system.

Add more detail (optional)

Optional. A sentence or two about the workflow is enough.

We use these answers to scope the work and for nothing else. Privacy policy.

Prefer to talk it through first? Book a technical scoping call

Talk to the people who build these

  • Nijat
  • Sean
  • Prash

Book a scoping call