ml-connector
PlexAsana

Plex and Asana integration

Plex runs your manufacturing operations and financials. Asana organizes your team's work and projects. Connecting the two brings purchase order status and part tracking into your project team's daily workflow, and pushes completion data back into Plex for receipt reconciliation. ml-connector bridges Plex's REST and SOAP APIs with Asana's webhook-driven event system, handling authentication, polling, and the audit trail for every record that moves between them.

How Plex works

Plex Adaptive ERP exposes suppliers, purchase orders, purchase order releases, invoices, customers, sales orders, parts, inventory, GL accounts, and payments through REST APIs at cloud.plex.com/api (OAuth 2.0 bearer token) and legacy SOAP XML Web Services with Basic auth plus a company code (PCN) for multi-tenant routing. Plex offers no native webhooks, so pull-based integration requires polling REST endpoints with modified_date and created_date filters on a 5-15 minute cadence, or scheduled SFTP flat-file extracts for bulk historical loads. The developer portal requires authentication to access the full OpenAPI specification, and role-based permissions enforced at the Plex user level mean the integration identity must carry the correct role or API calls return 403 or empty result sets.

How Asana works

Asana exposes tasks, projects, portfolios, users, teams, workspaces, goals, custom fields, and webhooks through REST APIs at app.asana.com/api/1.0 with Bearer token authentication (Personal Access Token or OAuth 2.0). Asana publishes events via webhooks with at-most-once delivery guaranteed within 10 minutes, auto-deleting registrations after 24 hours of failed delivery or 24 hours of missed heartbeats. Users are read-only via REST and managed instead through SCIM or Asana admin. No native finance objects exist in Asana, so purchase order codes, GL accounts, and financial metadata are carried in customer-defined custom fields. Workspace and portfolio-level webhooks require filters; task-level webhooks are optional.

What moves between them

Plex purchase orders and parts flow into Asana on a 10-minute polling cycle, creating or updating tasks and projects with financial metadata mapped to Asana custom fields. Each Plex part becomes an Asana project with GL account codes stored in custom fields for cost allocation. When an Asana task is marked complete, ml-connector posts the completion back to Plex as an inventory receipt against the original purchase order, closing the loop. Supplier and GL account reference data flow both directions to keep custom field definitions and team assignments aligned.

How ml-connector handles it

ml-connector polls Plex REST endpoints every 10 minutes filtered by modified_date, storing both Plex OAuth 2.0 and Asana Bearer token credentials encrypted. For Plex SOAP DataSources, it maintains per-datasource state (last polled timestamp) to avoid re-processing historic rows. It maps Plex GL accounts to Asana custom field keys, creating the custom field schema on first contact if missing. Each Plex purchase order title becomes an Asana task; Plex part descriptions become Asana project names. When Asana webhook events signal task completion, ml-connector batches them and posts inventory receipts to Plex's REST API with the purchase order release ID and part number. Retries use exponential backoff against Plex rate limits (HTTP 429) and Asana's 10-minute webhook guarantee. Every record carries source IDs (Plex ID, Asana task ID) so re-runs detect duplicates. Failed Plex SOAP calls are instrumented with the datasource name and procedure semantics tested per customer configuration, since SOAP endpoints are not guaranteed idempotent.

A real-world example

A mid-sized aerospace supplier manufactures parts for OEMs under long-term contracts and uses Plex to manage production, inventory, and financial accounting across three plants. The procurement team uses Asana to track inbound purchase orders from suppliers and work alongside production engineers to log part receipts and quality checks. Before the integration, the procurement team managed two separate systems: they checked Plex daily for new PO releases and manually created Asana tasks to track expedites and receipts, then re-entered completion data back into Plex by hand to close the loop. With Plex and Asana connected, each new purchase order appears as an Asana task in the procurement team's workflow within 10 minutes, complete with GL account codes for cost allocation. When the production team marks receipt complete in Asana, the receipt posts back to Plex automatically, reconciling inventory counts and cost postings to the GL without manual re-keying.

What you can do

  • Sync Plex purchase orders and parts into Asana tasks and projects on a 10-minute polling cycle.
  • Map Plex GL accounts and cost centers to Asana custom fields for financial tracking and cost allocation.
  • Push task completions from Asana back to Plex as inventory receipts against purchase order releases.
  • Authenticate Plex with OAuth 2.0 (REST) and Basic auth with company code (SOAP), and Asana with Bearer token.
  • Detect and skip duplicate syncs using Plex and Asana ID pairs, with retry and full audit trail on every record.

Questions

How does ml-connector handle Plex's lack of native webhooks?
Plex offers only polling, so ml-connector polls the Plex REST API every 10 minutes filtering by modified_date to detect new and changed purchase orders and parts. For bulk historical loads or Plex SOAP DataSources, it can also schedule flat-file SFTP extracts. Each polling cycle tracks the last sync timestamp per entity type to avoid re-processing old records.
Where do purchase order costs and GL account codes live in Asana?
Asana has no native finance objects, so ml-connector stores Plex GL account codes and cost center mappings in Asana custom fields, created and maintained per customer configuration. Custom field keys are derived from Plex GL account names, allowing the procurement team to see cost allocations directly in Asana task details.
What happens when a task is marked complete in Asana?
ml-connector receives the completion event via Asana webhook and batches it with other completions from the same polling cycle. It then posts an inventory receipt to Plex's REST API, linking the receipt to the original purchase order release and part number. If the Plex POST fails, the record is retried with exponential backoff until success or manual intervention.

Related integrations

Connect Plex and Asana

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

Get started