{
  "slug": "hightouch",
  "url": "https://apps.sectorgrowth.com/integrations/hightouch/",
  "name": "Hightouch",
  "vendor": "Hightouch",
  "aliases": [
    "Hightouch reverse ETL",
    "Hightouch Composable CDP",
    "Hightouch sync"
  ],
  "website": "https://hightouch.com/",
  "category": {
    "slug": "data-and-sync-platforms",
    "name": "Data and sync platforms",
    "url": "https://apps.sectorgrowth.com/categories/data-and-sync-platforms/"
  },
  "summary": "Hightouch reads modelled warehouse tables and writes only the changed rows into HubSpot. What its app covers, where it breaks, and when a build fits.",
  "answer": "Yes. Hightouch publishes its own app in the HubSpot App Marketplace as of September 2026, and it is the right route when a warehouse already holds modelled tables that each map to a HubSpot object on a schedule. It stops being enough when records need branching rules, a write back into an operational system, or a reaction in seconds rather than on the next run.",
  "nativeApp": {
    "status": "vendor-built",
    "name": "Hightouch",
    "developer": "Hightouch",
    "verifiedAt": "2026-09-25"
  },
  "api": {
    "style": "rest",
    "auth": "oauth2",
    "webhooks": "no",
    "changedSince": "partial",
    "sandbox": "unknown",
    "rateLimit": "110 requests every 10 seconds per HubSpot account, HubSpot's limit for a marketplace app",
    "docsUrl": "https://hightouch.com/docs/destinations/hubspot"
  },
  "objects": [
    {
      "source": "Account model",
      "hubspot": "company",
      "direction": "to_hubspot",
      "key": "Warehouse account key in a unique custom HubSpot property",
      "notes": "Domain is shared by some accounts and changes when a business rebrands."
    },
    {
      "source": "Person model",
      "hubspot": "contact",
      "direction": "to_hubspot",
      "key": "Email, which HubSpot already holds unique",
      "notes": "HubSpot refuses a second contact with an email already in use."
    },
    {
      "source": "Subscription or order model",
      "hubspot": "deal",
      "direction": "to_hubspot",
      "key": "Source order identifier in a unique custom HubSpot property",
      "notes": "Associated to its company in the same sync, after the company sync."
    },
    {
      "source": "Usage or health metric model",
      "hubspot": "company",
      "direction": "to_hubspot",
      "key": "Warehouse account key, written to numeric company properties",
      "notes": "Properties rather than an object, so workflows and lists can read them."
    },
    {
      "source": "Product event model",
      "hubspot": "engagement",
      "direction": "to_hubspot",
      "key": "A unique event key per row in the model",
      "notes": "Custom behavioural events, which need OAuth with enterprise scopes."
    },
    {
      "source": "Audience model",
      "hubspot": "contact",
      "direction": "to_hubspot",
      "key": "Email or HubSpot contact ID",
      "notes": "Kept as contact list membership, with add and remove modes."
    }
  ],
  "approaches": [
    {
      "kind": "native",
      "fit": "recommended",
      "why": "The Hightouch app upserts warehouse models into HubSpot objects, events and lists, sends only what changed since the last run, and leaves no service to host. It fits a warehouse that already holds keyed models."
    },
    {
      "kind": "custom",
      "fit": "possible",
      "why": "A keyed service earns its cost when a record's route depends on rules, when the sync must also write back into an operational system, or when a change has to land in seconds."
    },
    {
      "kind": "ipaas",
      "fit": "avoid",
      "why": "An automation platform starts from a single trigger, such as a form or a new row. A warehouse model has neither, so every run would need its own logic for what changed and what disappeared."
    }
  ],
  "effort": {
    "discoveryHours": [
      4,
      8
    ],
    "buildHours": [
      15,
      30
    ],
    "buildBand": "15 to 30 hours",
    "typicalElapsed": "1 to 2 weeks"
  },
  "pattern": "polling-watermark",
  "faqs": [
    {
      "q": "Does Hightouch publish its own HubSpot App Marketplace listing?",
      "a": "Yes. The listing is published by Hightouch itself, so it is a vendor-built app rather than one HubSpot maintains. You connect it with OAuth from inside Hightouch, ideally as a Super Admin, and choose OAuth with enterprise scopes if you plan to send custom behavioural events or write sensitive properties. The Hightouch subscription belongs to your business, not to us."
    },
    {
      "q": "How often can a Hightouch sync update HubSpot?",
      "a": "As often as every minute on a cron schedule, or on an interval, on set days and times, or when a dbt Cloud or Fivetran job finishes. The Free and Self-serve plans are limited to hourly runs. In practice the warehouse sets the pace: a model rebuilt nightly gives HubSpot nightly data, however often the sync itself runs."
    },
    {
      "q": "How does Hightouch know which warehouse rows changed?",
      "a": "It compares each run's query results with a stored snapshot of the previous run, matched on the model's primary key, and sends only the rows that were added or changed. A warehouse keeps no change log for an arbitrary query, which is why it compares results instead. A duplicate or missing primary key breaks that comparison, so we test the key first."
    },
    {
      "q": "What happens to HubSpot records when rows leave a Hightouch model?",
      "a": "Whatever the sync's delete behaviour says. In upsert mode the choices are do nothing, clear the mapped fields, archive the record, or, for contacts only, a permanent GDPR delete. Update mode allows only the first two, and insert mode has none. We leave delete behaviour at do nothing, flag rows that leave the model for review, and use archive only where the client wants it. An archived record stays restorable for 90 days, and a GDPR delete is final."
    },
    {
      "q": "Can Hightouch write HubSpot association labels?",
      "a": "Yes, on Professional and Enterprise accounts, once the labels exist in HubSpot. The model column carries an object holding the associated record's value and its label, or an array of them for several labels. The associated object's own sync has to run first, so the record the label points at already exists when the association is written."
    },
    {
      "q": "Can Hightouch read from Microsoft Fabric as well as Snowflake?",
      "a": "Yes. Hightouch lists Microsoft Fabric as a source, connected through a Microsoft Entra service principal, alongside Snowflake, BigQuery, Databricks, Redshift and PostgreSQL. Fabric is also one of the sources its Lightning engine supports, which keeps the change snapshot inside your own warehouse. Where the lakehouse must also write back to an operational system, notebooks usually fit better."
    },
    {
      "q": "How much work is a Hightouch to HubSpot setup?",
      "a": "Usually 4 to 8 hours of discovery and 15 to 30 hours to build, where the warehouse models already exist. The hours go on unique match properties, field types and dropdown values, the order the syncs run in, and a validation run in a HubSpot sandbox portal. Modelling the warehouse data itself is separate work, and often the larger part."
    }
  ],
  "sections": [
    {
      "depth": 2,
      "text": "Why teams connect Hightouch to HubSpot",
      "anchor": "#why-teams-connect-hightouch-to-hubspot",
      "url": "https://apps.sectorgrowth.com/integrations/hightouch/#why-teams-connect-hightouch-to-hubspot"
    },
    {
      "depth": 2,
      "text": "What syncs",
      "anchor": "#what-syncs",
      "url": "https://apps.sectorgrowth.com/integrations/hightouch/#what-syncs"
    },
    {
      "depth": 2,
      "text": "Architecture",
      "anchor": "#architecture",
      "url": "https://apps.sectorgrowth.com/integrations/hightouch/#architecture"
    },
    {
      "depth": 2,
      "text": "Three ways to connect",
      "anchor": "#three-ways-to-connect",
      "url": "https://apps.sectorgrowth.com/integrations/hightouch/#three-ways-to-connect"
    },
    {
      "depth": 2,
      "text": "What breaks and how we prevent it",
      "anchor": "#what-breaks-and-how-we-prevent-it",
      "url": "https://apps.sectorgrowth.com/integrations/hightouch/#what-breaks-and-how-we-prevent-it"
    },
    {
      "depth": 3,
      "text": "Two syncs sharing one request budget",
      "anchor": "#two-syncs-sharing-one-request-budget",
      "url": "https://apps.sectorgrowth.com/integrations/hightouch/#two-syncs-sharing-one-request-budget"
    },
    {
      "depth": 3,
      "text": "One invalid row fails its batch",
      "anchor": "#one-invalid-row-fails-its-batch",
      "url": "https://apps.sectorgrowth.com/integrations/hightouch/#one-invalid-row-fails-its-batch"
    },
    {
      "depth": 3,
      "text": "Dropdown values that miss by case",
      "anchor": "#dropdown-values-that-miss-by-case",
      "url": "https://apps.sectorgrowth.com/integrations/hightouch/#dropdown-values-that-miss-by-case"
    },
    {
      "depth": 3,
      "text": "A snapshot that expired",
      "anchor": "#a-snapshot-that-expired",
      "url": "https://apps.sectorgrowth.com/integrations/hightouch/#a-snapshot-that-expired"
    },
    {
      "depth": 3,
      "text": "Associations configured on both objects",
      "anchor": "#associations-configured-on-both-objects",
      "url": "https://apps.sectorgrowth.com/integrations/hightouch/#associations-configured-on-both-objects"
    },
    {
      "depth": 2,
      "text": "Our approach",
      "anchor": "#our-approach",
      "url": "https://apps.sectorgrowth.com/integrations/hightouch/#our-approach"
    }
  ],
  "caseStudies": [],
  "guides": [
    "https://apps.sectorgrowth.com/guides/reverse-etl-warehouse-to-hubspot/",
    "https://apps.sectorgrowth.com/guides/choose-a-hubspot-integration-approach/"
  ],
  "builtBySectorGrowth": false,
  "status": "published",
  "verifiedAt": "2026-09-25",
  "updatedAt": "2026-09-25",
  "authors": [
    {
      "name": "Prash",
      "role": "Lead of Technical Integrations and AI Solutions"
    }
  ],
  "sources": [
    {
      "title": "HubSpot | Hightouch Docs",
      "url": "https://hightouch.com/docs/destinations/hubspot"
    },
    {
      "title": "Change data capture (CDC) | Hightouch Docs",
      "url": "https://hightouch.com/docs/syncs/cdc"
    },
    {
      "title": "Lightning sync engine | Hightouch Docs",
      "url": "https://hightouch.com/docs/syncs/lightning-sync-engine"
    },
    {
      "title": "Schedule syncs in the UI | Hightouch Docs",
      "url": "https://hightouch.com/docs/syncs/schedule-sync-ui"
    },
    {
      "title": "Self-serve pricing | Hightouch Docs",
      "url": "https://hightouch.com/docs/pricing/ss-pricing"
    },
    {
      "title": "Microsoft Fabric | Hightouch Docs",
      "url": "https://hightouch.com/docs/sources/fabric"
    },
    {
      "title": "Pricing | Hightouch",
      "url": "https://hightouch.com/pricing"
    },
    {
      "title": "About Hightouch | Hightouch",
      "url": "https://hightouch.com/about"
    },
    {
      "title": "Restore deleted records",
      "url": "https://knowledge.hubspot.com/records/restore-deleted-records"
    },
    {
      "title": "API usage guidelines and limits - HubSpot docs",
      "url": "https://developers.hubspot.com/docs/developer-tooling/platform/usage-guidelines"
    }
  ]
}