ml-connector
Sage 100Stripe

Sage 100 and Stripe integration

Sage 100 runs accounts receivable and general ledger on-premises. Stripe processes online payments and manages customer billing. Connecting the two lets you send Sage 100 invoices to Stripe for payment collection and route Stripe payments back into Sage 100 cash receipts so AR stays current. Customers can pay online, payment events flow back automatically, and your finance team sees the cash applied without re-entry.

How Sage 100 works

Sage 100 runs on-premises and exposes customers, sales orders, AR invoices, GL accounts, and AP data through SOAP (eBusiness Web Services) or a local BOI COM layer wrapped by a Windows agent on the customer server. Sage 100 has no cloud API or remote REST interface, and authentication uses username and password passed per SOAP call or Windows service account for the BOI agent. There are no webhooks or push events, so data is read by polling on the DateLastUpdated and DateCreated fields. SOAP covers only sales orders and customers; full AP, GL, PO, and vendor access requires the local agent. The company code (a three-character identifier) is required for every call, and users must be individually enabled for Web Services in the Sage 100 admin.

How Stripe works

Stripe is a cloud payments platform accessed via REST API at https://api.stripe.com/v1, authenticated with an API key (sk_live_ for production, sk_test_ for sandbox) sent via HTTP Basic Auth. Stripe exposes customers, invoices, charges, payment intents, subscriptions, products, prices, and payouts through standard REST endpoints. Webhook events are delivered via HTTPS POST to a registered endpoint with Stripe-Signature verification (HMAC-SHA256), and Stripe guarantees at-least-once delivery with a five-minute replay window and retry for up to three days. Updates use POST requests rather than PUT or PATCH, and prices are immutable after creation. Stripe has no vendors, POs, GL accounts, or employees of its own.

What moves between them

AR customers and open invoices flow from Sage 100 into Stripe. Sage 100 invoice detail becomes a Stripe invoice with line items and due dates so customers can pay online. When a Stripe charge or payment intent succeeds, the event flows back to Sage 100 as a cash receipt matched to the original AR invoice, and the invoice is marked as paid. Payment disputes and refunds also generate Stripe events that feed back into Sage 100 for dispute tracking and credit memo creation. The sync runs on a daily cadence for invoice polling and real-time for payment events via webhooks.

How ml-connector handles it

ml-connector polls Sage 100 on a daily schedule using DateLastUpdated to fetch new and changed AR customers and invoices, translating the SOAP response into Stripe customer and invoice objects via POST to the Stripe REST API. Each Sage 100 AR invoice is created as a Stripe invoice with the AR_Invoice ID embedded in the description or metadata so payment events can be routed back. Stripe webhooks are registered at ml-connector's endpoint to listen for charge.succeeded, payment_intent.succeeded, and invoice.payment_succeeded events. When one arrives, ml-connector verifies the Stripe-Signature header using the webhook signing key, fetches the full payment detail from Stripe to ensure the most current state, and then posts a cash receipt into Sage 100 with the matched invoice reference and amount. Failed cash receipts retry with exponential backoff, and a full audit trail tracks every record synced. The local Sage 100 BOI agent must be running on the customer server and configured with an API key or mTLS certificate for secure agent-to-connector communication.

A real-world example

A mid-sized distributor runs Sage 100 for AR and GL on-premises and wants to let customers pay invoices online without manual follow-up. Before the integration, finance called customers to collect payment over the phone and then re-entered the amounts in Sage 100. With Sage 100 and Stripe connected, each Sage 100 AR invoice automatically appears in Stripe as a payment-enabled invoice, customers pay online with a credit card, the payment event webhooks back to Sage 100, and the cash receipt posts automatically. AR aging drops because customers can pay anytime, and the finance team spends no time on manual entry or reconciliation.

What you can do

  • Sync Sage 100 AR customers and open invoices to Stripe for online payment collection.
  • Route Stripe successful payments back into Sage 100 cash receipts matched to the original invoice.
  • Create Stripe invoices with line items and due dates derived from Sage 100 AR invoice detail.
  • Verify Stripe webhook signatures and retry failed cash receipts with exponential backoff.
  • Maintain a full audit trail of every AR customer and payment synced between the two systems.

Questions

How does the integration handle Sage 100 being on-premises while Stripe is cloud-based?
ml-connector runs alongside the Sage 100 BOI agent on the customer server or accesses SOAP via the local Windows service. It polls Sage 100 on a schedule to fetch new invoices and customers, translates the SOAP response to Stripe REST API calls, and registers a webhook endpoint with Stripe to receive payment events in real-time. This bridges the on-premises SOAP transport to Stripe's cloud REST interface.
What happens when a customer pays a Stripe invoice?
Stripe sends a charge.succeeded or payment_intent.succeeded webhook event to ml-connector. ml-connector verifies the webhook signature, fetches the full payment detail from Stripe, and posts a cash receipt into Sage 100 AR with the matched invoice reference and amount. The invoice in Sage 100 is marked as paid, and the payment is recorded in the GL.
How are Sage 100 AR invoices matched to Stripe payments?
Each Sage 100 AR invoice is created in Stripe with the Sage 100 invoice ID (AR_Invoice reference) embedded in the invoice description or custom metadata. When a Stripe payment succeeds, ml-connector uses that embedded reference to find and update the matching Sage 100 invoice, ensuring the cash receipt is applied to the correct AR record.

Related integrations

Connect Sage 100 and Stripe

Free to use. Add your credentials, ping your real systems, and see if we fit.

Get started