ml-connector
PlexTaxJar

Plex and TaxJar integration

Plex handles manufacturing operations and order fulfillment. TaxJar handles sales tax calculation and state reporting. Connecting them keeps tax liabilities accurate and filings current. Sales orders completed in Plex flow to TaxJar for real-time tax calculation, and once tax is calculated and captured, the transaction is reported to TaxJar for nexus tracking and automatic state tax returns. Manual tax spreadsheets and late compliance filings are eliminated.

How Plex works

Plex is a cloud-native ERP and MES platform by Rockwell Automation that serves discrete manufacturers. It exposes customers, sales orders, invoices, and inventory through REST JSON APIs at https://cloud.plex.com/api, authenticated with OAuth 2.0 client credentials. Plex also supports legacy SOAP Web Services for authenticated access and scheduled SFTP flat-file DataSources extracts for bulk historical loads. Plex does not offer native webhooks, so integrations must poll the REST API on a configurable interval filtering by modified_date or created_date. Role-based permissions are enforced, so the integration user must have the correct Plex role assigned or API calls will return 403.

How TaxJar works

TaxJar is a cloud-based sales tax compliance platform acquired by Stripe that calculates real-time tax rates and automates transaction reporting to state tax authorities. It exposes tax calculations, transaction reporting, nexus tracking, and address validation through REST JSON APIs at https://api.taxjar.com/v2/, authenticated with a static API token sent in the Authorization header. TaxJar does not support OAuth 2.0. Sandbox APIs are available on Professional plans and higher. TaxJar also does not publish webhooks or push events, so integrations poll for data or POST transactions after fulfillment. Idempotent transaction submission uses a fallback pattern: if POST returns 422 (already exists), fall back to PUT; if PUT returns 404, fall back to POST.

What moves between them

Sales orders and line items flow from Plex to TaxJar. After an order is confirmed in Plex and ready for shipment, ml-connector reads the order header, customer, and line items, calls TaxJar's tax calculation endpoint with the shipping address and item amounts, and receives the calculated sales tax broken down by jurisdiction. The order with tax is then posted to TaxJar's transaction endpoint to record the sale for nexus and reporting. If the transaction already exists in TaxJar (detected by a 422 response), ml-connector updates it via PUT. Tax data is read-only in Plex, so there is no return flow from TaxJar back to the ERP.

How ml-connector handles it

ml-connector polls Plex daily or weekly for new or updated sales orders filtered by created_date and modified_date, using the OAuth 2.0 bearer token to authenticate each REST call. For each order, it extracts the ship-to address, line items with amounts, and customer record. It then calls TaxJar's /taxes endpoint with the order detail to calculate real-time sales tax by jurisdiction. Before posting, ml-connector validates the ship-to address using TaxJar's address validation endpoint to ensure correct nexus determination. It then POSTs the completed order and calculated tax to TaxJar's /transactions/orders endpoint. If TaxJar returns 422 (transaction already posted), ml-connector falls back to PUT to update it instead. TaxJar token and rate data are stored encrypted. Plex role permissions are validated on each poll cycle, and exponential backoff is applied on HTTP 429 rate-limit responses. Every transaction carries a full audit trail and can be replayed if a downstream tax calculation or reporting call fails.

A real-world example

A mid-sized manufacturer in the automotive supply chain builds and ships assemblies across ten states from a single Plex instance. Before the integration, the finance team exported order listings from Plex weekly, manually looked up applicable sales tax rates by destination state and local jurisdiction, and re-entered tax amounts into spreadsheets before submitting sales tax returns to each state each quarter. Because Plex had no tax calculation built in and tax rates change frequently, they often reconciled late returns against notices and penalties. With Plex and TaxJar connected, every order completed in Plex automatically triggers a real-time sales tax calculation and flows directly into TaxJar for nexus tracking and state filing. The team receives a single annual filing checklist from TaxJar instead of managing ten separate state deadlines, and quarterly reconciliation is reduced to verifying totals already compiled by the system.

What you can do

  • Read completed sales orders from Plex and automatically calculate sales tax using TaxJar's real-time tax rates and jurisdiction rules.
  • Validate shipping addresses in TaxJar before tax calculation to ensure correct nexus determination and tax applicability.
  • Report transactions to TaxJar after tax is calculated so nexus and filing liability are tracked for all 50 states and territories.
  • Authenticate Plex with OAuth 2.0 and TaxJar with static API tokens, managing both credential types encrypted at rest.
  • Poll Plex on a weekly schedule with idempotent transaction handling and automatic retries on rate limits, maintaining a full audit trail.

Questions

Does sales tax calculated in TaxJar write back into Plex invoices?
No. Tax calculation and reporting flows one way: from Plex into TaxJar. TaxJar returns the calculated tax amounts and the transaction is recorded in TaxJar for state filing, but Plex invoices remain the source of truth for order amounts. Your finance team can view the calculated tax in TaxJar or export a reconciliation report.
How does the integration handle address validation when a ship-to address is incomplete or invalid?
Before submitting a sales order to TaxJar's tax calculation endpoint, ml-connector calls TaxJar's address validation endpoint. If the address cannot be validated, ml-connector flags the order for manual review and does not post incomplete tax data. A notification is sent so the shipping address can be corrected in Plex before retry.
Which sales orders should be synced to TaxJar - all orders, or only taxable sales?
All completed sales orders should flow to TaxJar so nexus and filing liability are tracked accurately. TaxJar's exemption management handles non-taxable sales (resale certificates, government entities, etc.) via customer-level or order-level exemption codes. Set the exemption_type on the customer record in TaxJar and ml-connector will apply it during transaction posting.

Related integrations

Connect Plex and TaxJar

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

Get started