ml-connector
SYSPROGoogle BigQuery

SYSPRO and Google BigQuery integration

SYSPRO runs manufacturing finance and distribution. Google BigQuery is your cloud data warehouse. Connecting them moves your financial records automatically from SYSPRO into BigQuery for analysis, reporting, and archival without manual exports. Invoice detail, purchase orders, GL postings, and supplier information flow on a schedule you control, giving your analytics and BI teams fresh data without ETL overhead. BigQuery's partitioning and clustering keep queries fast even as years of SYSPRO history accumulates.

How SYSPRO works

SYSPRO exposes invoices, purchase orders, GL accounts, cost centers, suppliers, and inventory through three API channels: e.net Business Objects (REST/SOAP, read-write), OData (REST GET read-only), and a Workflow Service (limited REST/SOAP). Authentication uses either a session token obtained by logging in through the e.net Logon method, or HTTP Basic Auth with auto-generated SQL operator credentials for OData. The server URL is customer-specific (no shared SaaS base). SYSPRO has no outbound webhooks, so all data is pulled by polling OData tables with timestamp filters on PostDate or InvoiceDate. Recommended polling interval is 5-15 minutes for financial data.

How Google BigQuery works

Google BigQuery is a serverless REST-based data warehouse. It accepts structured rows via the tabledata.insertAll JSON endpoint and streams them into customer-defined tables partitioned by date. Authentication is OAuth 2.0 Service Account with JWT Bearer flow - a service account private key signs a JWT exchanged at the Google OAuth endpoint for a 1-hour access token. BigQuery has no outbound webhooks and is pull-only on reads; change detection relies on querying timestamp columns or the _PARTITIONTIME pseudo-column. Access tokens refresh hourly. The service account requires bigquery.dataEditor and bigquery.jobUser roles for read-write access, and all calls target the Google BigQuery REST API base URL.

What moves between them

The main flow is SYSPRO into Google BigQuery. Invoices, PO headers and details, GL postings, supplier master records, and item inventory data are polled from SYSPRO via OData at intervals you set (typically 5-15 minutes for transactional data), then loaded into BigQuery as append-only tables partitioned by ingestion date. Each record carries the original SYSPRO timestamp and a unique identifier so BigQuery can detect and skip duplicates on replay. BigQuery never writes back to SYSPRO, making this a read-mostly integration ideal for analytics and audit trails.

How ml-connector handles it

ml-connector stores the SYSPRO session token and BigQuery service account credentials encrypted and uses them on every poll and load cycle. It polls SYSPRO's OData layer with REST GET requests filtered by timestamp (PostDate, InvoiceDate, etc.) to fetch only new or modified records since the last run. The session token is refreshed on 401 or timeout. Fetched records are transformed into JSON and posted to BigQuery's tabledata.insertAll endpoint, which deduplicates by insertId (derived from the SYSPRO record ID) so replay is safe. BigQuery partitions incoming rows by date for query performance. On the SYSPRO side, because OData is read-only, no write operations are attempted; for SYSPRO to source GL entries or invoice detail that may require e.net Business Objects reads, the integration uses the appropriate SYSPRO layer for each entity. BigQuery's 1-hour token expiry is tracked and refreshed before requests. Every SYSPRO row and its BigQuery insert is logged for audit and replay on failure.

A real-world example

A mid-sized discrete manufacturer runs SYSPRO for AP, AR, and manufacturing cost accounting across three plants. Their finance team needs to close the books monthly, but invoice detail and GL posting detail sit locked in SYSPRO with no easy export to their BI tools. Auditors ask for drill-down on sampled invoices and require a 3-year history. With SYSPRO connected to BigQuery, every invoice and GL posting flows automatically into BigQuery tables partitioned by month. The BI tool (Looker or Data Studio) queries BigQuery directly, audit requests run SQL on the full history without re-exporting, and month-end close includes pre-validated GL trial balances. The manual invoice export step disappears.

What you can do

  • Poll SYSPRO invoices, PO headers, and PO line items via OData and load them into BigQuery datasets partitioned by ingestion date.
  • Sync SYSPRO GL postings and GL master account records into BigQuery for trial balance and GL audit reporting.
  • Replicate SYSPRO supplier master and customer master records so BigQuery reports have current vendor and customer names.
  • Manage session-token and HTTP Basic Auth for SYSPRO alongside OAuth 2.0 Service Account for BigQuery, with automatic token refresh on expiry.
  • Poll on a schedule you control with change detection via SYSPRO timestamp filters, deduplication in BigQuery by insertId, and a full audit trail on every record.

Questions

Which direction does data flow between SYSPRO and Google BigQuery?
The flow is SYSPRO into BigQuery only. Invoices, POs, GL entries, and master data are polled from SYSPRO and inserted into BigQuery tables. BigQuery never writes back to SYSPRO, making this a read-mostly integration ideal for analytics, archival, and audit trails without risking SYSPRO transactional data.
How does the integration handle SYSPRO's customer-specific server URL and lack of webhooks?
ml-connector accepts the full SYSPRO instance URL (http://{server}:{port}) per customer, since SYSPRO publishes no shared SaaS base. Because SYSPRO has no outbound webhooks, polling is the only option - the integration polls SYSPRO's OData layer on a schedule you set (typically 5-15 minutes for financial data) with timestamp filters on PostDate or InvoiceDate to fetch only new or changed records.
What happens if a SYSPRO session token expires or a BigQuery token refresh fails?
ml-connector tracks both session-token expiry and OAuth 2.0 access-token expiry (1 hour for BigQuery). On 401 from SYSPRO, it re-authenticates with the stored credentials; on BigQuery token expiry, it refreshes at the Google OAuth endpoint before the next insert. Every failed load is logged and can be replayed once credentials or network are restored.

Related integrations

Connect SYSPRO and Google BigQuery

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

Get started