{
  "slug": "sage-100",
  "url": "https://apps.sectorgrowth.com/integrations/sage-100/",
  "name": "Sage 100",
  "vendor": "Sage",
  "aliases": [
    "Sage 100cloud",
    "MAS 90",
    "MAS 200",
    "Sage 100 Premium"
  ],
  "website": "https://help-sage100.na.sage.com/2026/index.htm",
  "category": {
    "slug": "erp-and-accounting",
    "name": "ERP and accounting",
    "url": "https://apps.sectorgrowth.com/categories/erp-and-accounting/"
  },
  "summary": "Sage 100 runs on a Windows server, and its documentation offers no REST API. How its data still reaches HubSpot, what can write back, and the hours.",
  "answer": "Not from HubSpot or Sage. Commercient lists Sage 100 SYNC, Data Lake, AI, MCP by Commercient in the HubSpot App Marketplace as of September 2026, and it is a third-party listing. The route we recommend is a custom integration built around a small agent beside Sage 100 that reads changed rows through ODBC or SQL, at 70 to 150 build hours; writing orders back goes through the Business Object Interface and adds a phase.",
  "nativeApp": {
    "status": "third-party",
    "name": "Sage 100 SYNC, Data Lake, AI, MCP by Commercient",
    "developer": "Commercient",
    "verifiedAt": "2026-09-28"
  },
  "api": {
    "style": "sql",
    "auth": "sql",
    "webhooks": "unknown",
    "changedSince": "partial",
    "sandbox": "yes",
    "docsUrl": "https://help-sage100.na.sage.com/2026/FLOR/Content/HomePage/Welcome.htm"
  },
  "objects": [
    {
      "source": "AR_Customer",
      "hubspot": "company",
      "direction": "to_hubspot",
      "key": "AR division number plus customer number",
      "notes": "The customer number alone can repeat across divisions, so both travel together."
    },
    {
      "source": "AR_CustomerContact",
      "hubspot": "contact",
      "direction": "to_hubspot",
      "key": "Division, customer number and contact code, with email as the readable match"
    },
    {
      "source": "SO_SalesOrderHeader",
      "hubspot": "deal",
      "direction": "to_hubspot",
      "key": "Sales order number",
      "notes": "Order lines carry no update stamp, so they are re-read whenever the header changes."
    },
    {
      "source": "AR_InvoiceHistoryHeader",
      "hubspot": "custom",
      "direction": "to_hubspot",
      "key": "Invoice number plus header sequence number"
    },
    {
      "source": "CI_Item",
      "hubspot": "product",
      "direction": "to_hubspot",
      "key": "Item code"
    }
  ],
  "approaches": [
    {
      "kind": "custom",
      "fit": "recommended",
      "why": "A custom integration runs a small agent beside Sage 100 that reads changed rows through ODBC or SQL, keys every record on Sage 100's composite keys, and is the only route that can write back through the Business Object Interface."
    },
    {
      "kind": "skyvia",
      "fit": "possible",
      "why": "Skyvia's agent connects to on-premises SQL Server databases and to ODBC sources, so managed sync on Skyvia can copy customers, orders and invoices into HubSpot on a schedule. It writes nothing back, and the composite keys have to be built into its mapping."
    },
    {
      "kind": "native",
      "fit": "possible",
      "why": "Commercient publishes the Sage 100 listing as a third-party sync, and its developer keeps the mapping and the support. It can serve a routine account and order copy where nobody on your side wants to run anything."
    }
  ],
  "connectionMethods": [
    "sql",
    "ipaas"
  ],
  "effort": {
    "discoveryHours": [
      10,
      20
    ],
    "buildHours": [
      70,
      150
    ],
    "buildBand": "70 to 150 hours",
    "typicalElapsed": "4 to 8 weeks"
  },
  "pattern": "polling-watermark",
  "faqs": [
    {
      "q": "Is there a Sage 100 app in the HubSpot App Marketplace?",
      "a": "A third-party one. As of September 2026 Commercient lists Sage 100 SYNC, Data Lake, AI, MCP by Commercient, with about 30 installs in the marketplace's own count, beside a separate app for Sage 100 France. Neither HubSpot nor Sage publishes a Sage 100 app, and this page covers the North American product in Sage's Sage 100 help."
    },
    {
      "q": "Can HubSpot read Sage 100 data without an API?",
      "a": "Yes, through its tables. On the ProvideX editions the Sage 100 ODBC driver, registered as the SOTAMAS90 data source, reads each data file as a table, which is also how Crystal Reports reads Sage 100. On the SQL Server edition the data sits in a SQL Server database. Either way a small agent inside your network reads it and sends changed rows out."
    },
    {
      "q": "How does a Sage 100 integration write an order back?",
      "a": "Through the Business Object Interface, which comes with every Sage 100 activation and gives a program Sage 100's own business objects over COM. The agent logs on as a Sage 100 user and enters the order through SO_SalesOrder_bus. Sage supports the interface only for developers certified on its course, and it does not debug programs its own developers did not write."
    },
    {
      "q": "How fresh is Sage 100 data in HubSpot?",
      "a": "As fresh as the agent's schedule, because the agent polls: Sage 100's documentation describes no event it could subscribe to. Each run reads rows whose last update date and time are past the table's watermark, so a run moves only what changed and can be frequent. We agree the interval in discovery against the load the server can take in working hours."
    },
    {
      "q": "What happens to a Sage 100 integration at the yearly upgrade?",
      "a": "It needs a planned step. Sage 100 2026 installs to a new location beside the old version and runs 64-bit only, and Sage supports only the current version and the two before it. The agent's data source and paths must move with the upgrade, so we repoint it against a copied company, rerun a full read and compare counts before production switches."
    },
    {
      "q": "How does a Sage 100 sync notice a deleted sales order?",
      "a": "Not from update stamps, which cannot show a row that has gone. Sage 100 keeps sales order history only when its Retain Sales Orders/Quote History option is on, and keeps deleted orders only when that is set as well. We check both in discovery, and we reconcile open order numbers nightly so a deal whose order disappeared is closed."
    },
    {
      "q": "What does a Sage 100 and HubSpot integration take in hours?",
      "a": "Expect 10 to 20 hours of discovery and 70 to 150 hours of build for five tables with watermarks, replay and reconciliation, including the agent. Discovery covers the edition, where the server runs, which divisions exist and whether history is retained. A write back through the Business Object Interface is scoped as its own phase."
    }
  ],
  "sections": [
    {
      "depth": 2,
      "text": "Why teams connect Sage 100 to HubSpot",
      "anchor": "#why-teams-connect-sage-100-to-hubspot",
      "url": "https://apps.sectorgrowth.com/integrations/sage-100/#why-teams-connect-sage-100-to-hubspot"
    },
    {
      "depth": 2,
      "text": "What syncs",
      "anchor": "#what-syncs",
      "url": "https://apps.sectorgrowth.com/integrations/sage-100/#what-syncs"
    },
    {
      "depth": 2,
      "text": "Architecture",
      "anchor": "#architecture",
      "url": "https://apps.sectorgrowth.com/integrations/sage-100/#architecture"
    },
    {
      "depth": 2,
      "text": "Three ways to connect",
      "anchor": "#three-ways-to-connect",
      "url": "https://apps.sectorgrowth.com/integrations/sage-100/#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/sage-100/#what-breaks-and-how-we-prevent-it"
    },
    {
      "depth": 3,
      "text": "Composite keys read as one column",
      "anchor": "#composite-keys-read-as-one-column",
      "url": "https://apps.sectorgrowth.com/integrations/sage-100/#composite-keys-read-as-one-column"
    },
    {
      "depth": 3,
      "text": "Order lines with no update stamp",
      "anchor": "#order-lines-with-no-update-stamp",
      "url": "https://apps.sectorgrowth.com/integrations/sage-100/#order-lines-with-no-update-stamp"
    },
    {
      "depth": 3,
      "text": "Deleted orders that leave no row",
      "anchor": "#deleted-orders-that-leave-no-row",
      "url": "https://apps.sectorgrowth.com/integrations/sage-100/#deleted-orders-that-leave-no-row"
    },
    {
      "depth": 3,
      "text": "The yearly parallel upgrade",
      "anchor": "#the-yearly-parallel-upgrade",
      "url": "https://apps.sectorgrowth.com/integrations/sage-100/#the-yearly-parallel-upgrade"
    },
    {
      "depth": 2,
      "text": "Our approach",
      "anchor": "#our-approach",
      "url": "https://apps.sectorgrowth.com/integrations/sage-100/#our-approach"
    }
  ],
  "caseStudies": [],
  "guides": [
    "https://apps.sectorgrowth.com/guides/choose-a-hubspot-integration-approach/"
  ],
  "status": "published",
  "verifiedAt": "2026-09-28",
  "updatedAt": "2026-09-28",
  "authors": [
    {
      "name": "Prash",
      "role": "Lead of Technical Integrations and AI Solutions"
    }
  ],
  "sources": [
    {
      "title": "Installation Overview",
      "url": "https://help-sage100.na.sage.com/InstallGuide/2026/Content/InstallGuide/Intro.htm"
    },
    {
      "title": "Installing Sage 100 Standard",
      "url": "https://help-sage100.na.sage.com/InstallGuide/2026/Content/InstallGuide/Install_Standard.htm"
    },
    {
      "title": "Sage 100 Supported Versions",
      "url": "https://us-kb.sage.com/portal/app/portlets/results/viewsolution.jsp?solutionid=223924250031477&hypermediatext=null"
    },
    {
      "title": "Sage 100 File Layouts and Object Reference",
      "url": "https://help-sage100.na.sage.com/2026/FLOR/Content/HomePage/Welcome.htm"
    },
    {
      "title": "AR_Customer",
      "url": "https://help-sage100.na.sage.com/2026/FLOR/Content/File_Layouts/Accounts_Receivable/AR_Customer.htm"
    },
    {
      "title": "AR_CustomerContact",
      "url": "https://help-sage100.na.sage.com/2026/FLOR/Content/File_Layouts/Accounts_Receivable/AR_CustomerContact.htm"
    },
    {
      "title": "SO_SalesOrderHeader",
      "url": "https://help-sage100.na.sage.com/2026/FLOR/Content/File_Layouts/Sales_Order/SO_SalesOrderHeader.htm"
    },
    {
      "title": "SO_SalesOrderDetail",
      "url": "https://help-sage100.na.sage.com/2026/FLOR/Content/File_Layouts/Sales_Order/SO_SalesOrderDetail.htm"
    },
    {
      "title": "AR_InvoiceHistoryHeader",
      "url": "https://help-sage100.na.sage.com/2026/FLOR/Content/File_Layouts/Accounts_Receivable/AR_InvoiceHistoryHeader.htm"
    },
    {
      "title": "SY_Session",
      "url": "https://help-sage100.na.sage.com/2026/FLOR/Content/Object_Reference/BaseSystem/SY_Session.htm"
    },
    {
      "title": "Business Objects Interface FAQs",
      "url": "https://help-sage100.na.sage.com/2026/Subsystems/FAQs/FAQs/Business_Objects_Interface_FAQs.htm"
    },
    {
      "title": "Crystal Reports FAQs",
      "url": "https://help-sage100.na.sage.com/2026/Subsystems/FAQs/FAQs/faqs_crystal_reports.htm"
    },
    {
      "title": "Configuring the Client/Server ODBC Driver",
      "url": "https://help-sage100.na.sage.com/InstallGuide/2026/Content/InstallGuide/Config_ODBC_Driver.htm"
    },
    {
      "title": "Export data using internal applications or external ODBC compliant programs",
      "url": "https://us-kb.sage.com/portal/app/portlets/results/viewsolution.jsp?solutionid=222924450019946&hypermediatext=null"
    },
    {
      "title": "Create an Import Job",
      "url": "https://help-sage100.na.sage.com/2026/Subsystems/VI/VIProced/Create_an_Import_Job.htm"
    },
    {
      "title": "Retain or Create Sales Order/Quote History",
      "url": "https://help-sage100.na.sage.com/2026/Subsystems/SO/SOUtilProced/RETAIN_OR_CREATE_SALES_ORDER_QUOTE_HISTORY.htm"
    },
    {
      "title": "Copy a Company",
      "url": "https://help-sage100.na.sage.com/2026/Subsystems/LM/LMMainProced/COPY_A_COMPANY.htm"
    },
    {
      "title": "Agent Connections",
      "url": "https://docs.skyvia.com/connections/agent-connections.html"
    }
  ]
}