In 2025 the cleanest “DIY, no external app” path is: pull from HubSpot with the v3 CRM Search API filtered by hs_lastmodifieddate (store a last-run timestamp and page through results), then push back using the Imports API so contacts are upserted by email without needing a vid (https://developers.hubspot.com/docs/api-reference/search/guide )
For inbound to HubSpot, batch a CSV from SQL and let the Imports API map Email as the unique ID; it will create or update in one job and handle associations if you include IDs in columns (https://developers.hubspot.com/docs/api-reference/crm-imports-v3/guide )
On the SQL side, land HubSpot exports into a staging table, then merge into your “source of truth” table by email and hs_object_id. For the reverse flow, generate only changed rows since last sync to keep jobs fast and within limits. One quick check: is your SQL Server on-prem or Azure? That affects how you schedule and secure the jobs. Where native connectors stop short, Stacksync fills the gap with real-time, bidirectional sync so your workflows and reports stay trustworthy.

