ml-connector
Sage 100PayPal

Sage 100 and PayPal integration

Sage 100 runs your financial close and GL. PayPal processes your customer payments. Connecting the two keeps your accounts receivable and cash up to date. PayPal captures and refunds flow into Sage 100 as customer receipts, automatically matched to invoices and posted into your GL, so your cash reconciliation starts complete instead of requiring manual matching and re-entry.

How Sage 100 works

Sage 100 is an on-premises ERP system covering accounts receivable, accounts payable, general ledger, inventory, and purchasing. It exposes AR and GL data through SOAP web services (eBusiness Web Services) for read operations on customers and sales orders, but full AP, GL, and PO access requires a local Windows agent wrapping the COM layer (BOI). Sage 100 has no webhooks or event stream, so data is read via polling on DateLastUpdated and DateCreated fields. Every call requires a username and password, company code, and the user must be individually enabled for Web Services in the Sage 100 administration console. Company codes are three-character identifiers and GL accounts use a multi-segment format that varies by customer configuration.

How PayPal works

PayPal exposes orders, captures, refunds, transactions, invoices, subscriptions, and payouts through the REST API with OAuth 2.0 client credentials authentication. Bearer tokens are cached for approximately eight hours and scopes are pre-configured in the Developer Dashboard. PayPal can push transaction events via webhooks using RSA-SHA256 signature verification, with built-in retries up to 25 times over three days. ml-connector can also poll the transaction search API, which is limited to a 31-day window and returns a maximum of 500 results per page. PayPal has no native GL account objects or vendor registry, so transactions are reconciled via transaction search and refunds must be issued against captures, not orders directly.

What moves between them

PayPal captures, refunds, and disputed transactions flow into Sage 100. After each capture, ml-connector reads the transaction from PayPal and posts a cash receipt in Sage 100's AR module, matched to the customer invoice by external order ID or payer email. Refunds are posted as AR credits. All cash activity is simultaneously posted to the GL against the configured AR cash account. Transactions are polled on a schedule (typically once per hour) to match your cash management cycle.

How ml-connector handles it

ml-connector stores the PayPal OAuth credentials securely and refreshes the bearer token on each request session to stay within the eight-hour window. On the Sage 100 side, it uses the local Windows agent protocol to connect to the customer's on-premises server and posts cash receipts via the BOI COM layer, including the Sage company code and customer invoice number. Because Sage 100 has no idempotency keys, ml-connector deduplicates using PayPal's transaction ID stored in a custom field on each receipt, preventing duplicate posting if a network retry occurs. PayPal transactions include customer email and order ID, which ml-connector uses to find the matching Sage 100 customer and open invoice. If matching fails, the transaction is flagged in the audit log for manual review. The 31-day window on PayPal transaction search means the integration runs on a regular schedule rather than backfilling - for historical reconciliation, the first sync must complete within 31 days of go-live. Every record carries full audit trail and can be replayed if a downstream GL posting fails.

A real-world example

A mid-sized software company bills customers via PayPal for cloud subscriptions and professional services. Before the integration, the accounting team exported PayPal transaction reports weekly and manually matched them to outstanding Sage 100 invoices, then entered the cash receipts line by line. Month-end AR reconciliation required chasing aged invoices and matching them against payment records from multiple exports. With Sage 100 and PayPal connected, each capture posts automatically to the matching invoice within an hour of receipt, and refunds flow in as credits. AR aging is current by end of business, and the time spent on manual matching is eliminated.

What you can do

  • Post PayPal captures and refunds into Sage 100 AR as customer cash receipts, automatically matched to invoices.
  • Post all cash activity to the general ledger against the configured AR cash account.
  • Handle PayPal OAuth 2.0 token refresh and Sage 100 local agent authentication transparently.
  • Deduplicate transactions using PayPal transaction ID to prevent duplicate GL postings on retry.
  • Read PayPal transactions on a schedule with full audit trail and error replay if GL posting fails.

Questions

How does ml-connector match PayPal transactions to Sage 100 invoices?
ml-connector uses the customer email from the PayPal transaction to find the matching Sage 100 customer, then searches for an open invoice in that customer's AR account by amount and date. If an exact match is not found, the transaction is flagged in the audit log for manual assignment. Custom fields on the Sage 100 receipt store the PayPal transaction ID and capture ID for future reference and deduplication.
Does the integration support PayPal webhooks or polling?
ml-connector can operate in polling mode via PayPal's transaction search API, scheduled to run once per hour or per your cash management cycle. Webhook push is not yet implemented due to the 31-day transaction search window and the need to match transactions to Sage 100 invoices, which requires a scheduled lookup in the on-premises system.
What happens when Sage 100 is on-premises and PayPal is cloud?
ml-connector connects to Sage 100 via the local Windows agent on the customer's server, which provides access to the COM layer and GL posting. The agent establishes a secure tunnel to ml-connector, so Sage 100 does not require a public IP or inbound firewall rule. PayPal is cloud-only, so no special setup is needed on that side beyond OAuth credentials.

Related integrations

Connect Sage 100 and PayPal

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

Get started